From 3f55749cad3033219adfb47885b6269b207f1588 Mon Sep 17 00:00:00 2001 From: Vincenzo Riccobene Date: Thu, 24 Dec 2015 14:08:58 +0000 Subject: Complete all the code and files required to run ApexLake Inludes the last files required by ApexLake for a complete execution. JIRA: YARDSTICK-35 Change-Id: I4315b8081554c8fad98c8fa72f9e2796ecb9360b Signed-off-by: Vincenzo Riccobene --- yardstick/vTC/apexlake/MANIFEST.in | 7 + yardstick/vTC/apexlake/README.md | 116 ++++++++++++ yardstick/vTC/apexlake/apexlake.conf | 69 +++++++ .../apexlake/heat_templates/stress_workload.yaml | 112 ++++++++++++ yardstick/vTC/apexlake/heat_templates/vTC.yaml | 167 +++++++++++++++++ yardstick/vTC/apexlake/setup.py | 38 ++++ yardstick/vTC/apexlake/tests/data/common/conf.cfg | 43 +++++ .../tests/data/common/file_replacement.txt | 1 + .../VTC_base_single_vm_wait.tmp | 199 +++++++++++++++++++++ .../VTC_base_single_vm_wait_1.yaml | 199 +++++++++++++++++++++ .../VTC_base_single_vm_wait_1.yaml.json | 1 + .../VTC_base_single_vm_wait_2.yaml | 199 +++++++++++++++++++++ .../VTC_base_single_vm_wait_2.yaml.json | 1 + .../data/generated_templates/experiment_1.yaml | 199 +++++++++++++++++++++ .../generated_templates/experiment_1.yaml.json | 1 + .../data/generated_templates/experiment_2.yaml | 199 +++++++++++++++++++++ .../generated_templates/experiment_2.yaml.json | 1 + .../test_experiments/experiment_1/benchmark_1.csv | 3 + .../test_experiments/experiment_1/metadata.json | 1 + .../data/test_experiments/results_benchmark_1.csv | 5 + .../test_templates/VTC_base_single_vm_wait.tmp | 199 +++++++++++++++++++++ .../test_templates/VTC_base_single_vm_wait_1.yaml | 199 +++++++++++++++++++++ .../VTC_base_single_vm_wait_1.yaml.json | 1 + .../test_templates/VTC_base_single_vm_wait_2.yaml | 199 +++++++++++++++++++++ .../VTC_base_single_vm_wait_2.yaml.json | 1 + 25 files changed, 2160 insertions(+) create mode 100644 yardstick/vTC/apexlake/MANIFEST.in create mode 100644 yardstick/vTC/apexlake/README.md create mode 100644 yardstick/vTC/apexlake/apexlake.conf create mode 100644 yardstick/vTC/apexlake/heat_templates/stress_workload.yaml create mode 100644 yardstick/vTC/apexlake/heat_templates/vTC.yaml create mode 100644 yardstick/vTC/apexlake/setup.py create mode 100644 yardstick/vTC/apexlake/tests/data/common/conf.cfg create mode 100644 yardstick/vTC/apexlake/tests/data/common/file_replacement.txt create mode 100644 yardstick/vTC/apexlake/tests/data/generated_templates/VTC_base_single_vm_wait.tmp create mode 100644 yardstick/vTC/apexlake/tests/data/generated_templates/VTC_base_single_vm_wait_1.yaml create mode 100644 yardstick/vTC/apexlake/tests/data/generated_templates/VTC_base_single_vm_wait_1.yaml.json create mode 100644 yardstick/vTC/apexlake/tests/data/generated_templates/VTC_base_single_vm_wait_2.yaml create mode 100644 yardstick/vTC/apexlake/tests/data/generated_templates/VTC_base_single_vm_wait_2.yaml.json create mode 100644 yardstick/vTC/apexlake/tests/data/generated_templates/experiment_1.yaml create mode 100644 yardstick/vTC/apexlake/tests/data/generated_templates/experiment_1.yaml.json create mode 100644 yardstick/vTC/apexlake/tests/data/generated_templates/experiment_2.yaml create mode 100644 yardstick/vTC/apexlake/tests/data/generated_templates/experiment_2.yaml.json create mode 100644 yardstick/vTC/apexlake/tests/data/test_experiments/experiment_1/benchmark_1.csv create mode 100644 yardstick/vTC/apexlake/tests/data/test_experiments/experiment_1/metadata.json create mode 100644 yardstick/vTC/apexlake/tests/data/test_experiments/results_benchmark_1.csv create mode 100644 yardstick/vTC/apexlake/tests/data/test_templates/VTC_base_single_vm_wait.tmp create mode 100644 yardstick/vTC/apexlake/tests/data/test_templates/VTC_base_single_vm_wait_1.yaml create mode 100644 yardstick/vTC/apexlake/tests/data/test_templates/VTC_base_single_vm_wait_1.yaml.json create mode 100644 yardstick/vTC/apexlake/tests/data/test_templates/VTC_base_single_vm_wait_2.yaml create mode 100644 yardstick/vTC/apexlake/tests/data/test_templates/VTC_base_single_vm_wait_2.yaml.json (limited to 'yardstick/vTC') diff --git a/yardstick/vTC/apexlake/MANIFEST.in b/yardstick/vTC/apexlake/MANIFEST.in new file mode 100644 index 000000000..57649e597 --- /dev/null +++ b/yardstick/vTC/apexlake/MANIFEST.in @@ -0,0 +1,7 @@ +recursive-include bin *.py +recursive-include benchmarks *.py +recursive-include heat_templates * +recursive-include packet_generators * +recursive-include etc *.cfg *.json +include *.py +include README.md diff --git a/yardstick/vTC/apexlake/README.md b/yardstick/vTC/apexlake/README.md new file mode 100644 index 000000000..ca4f4ded6 --- /dev/null +++ b/yardstick/vTC/apexlake/README.md @@ -0,0 +1,116 @@ +Welcome to ApexLake's documentation! +==================================== +ApexLake is a framework that provides automatic execution of experiment and related data collection to help +the user validating the infrastructure from a Virtual Network Function perspective. + +Install framework and dependencies +---------------------------------- +Before to start the framework, a set of dependencies are required. +In the following a set of instructions to be executed on the Linux shell to install dependencies and configure the environment. + +1. Install dependencies + - # apt-get install python-dev + - # apt-get install python-pip + - # apt-get install python-mock + - # apt-get install tcpreplay + - # apt-get install libpcap-dev + +2. Install the framework on the system + - # python setup.py install + +3. Source OpenStack openrc file + - $ source openrc + +4. Create 2 Networks (and subnets) based on VLANs (provider:network_type = vlan) in Neutron + - $ neutron net-create apexlake_inbound_network --provider:network_type vlan --provider:physical_network physnet1 + - $ neutron subnet-create apexlake_inbound_network 192.168.0.0/24 --name apexlake_inbound_subnet + - $ neutron net-create apexlake_outbound_network --provider:network_type vlan --provider:physical_network physnet1 + - $ neutron subnet-create apexlake_outbound_network 192.168.1.0/24 --name apexlake_outbound_subnet + +5. Insert VLAN tags related to the networks have to ApexLake, either: + - into the "conf.cfg" configuration file, or + - through the Python API. + + +Install and configure DPDK Pktgen ++++++++++++++++++++++++++++++++++ +The execution of the framework is based on DPDK Pktgen. +If DPDK Pktgen has not been installed on the system by the user, it is necessary to download, compile and configure it. +The user can create a directory and download the dpdk packet generator source code: + - $ cd experimental_framework/libraries + - $ mkdir dpdk_pktgen + - $ git clone https://github.com/pktgen/Pktgen-DPDK.git + +For the installation and configuration of DPDK and DPDK Pktgen please follow the official DPDK Pktgen README file. +Once the installation is completed, it is necessary to load the DPDK kernel driver, as follow: + - # insmod uio + - # insmod DPDK_DIR/x86_64-native-linuxapp-gcc/kmod/igb_uio.ko + +It is required to properly set the configuration file according to the system on Pktgen runs on. +An example is provided in the following: + + - [PacketGen] + - packet_generator = dpdk_pktgen + - pktgen_directory = /home/user/apexlake/experimental_framework/libraries/dpdk_pktgen/dpdk/examples/pktgen/ + -- This is the directory where the packet generator is installed (if the user previously installed dpdk-pktgen, it is required to provide the director where it is installed). + - dpdk_directory = /home/user/apexlake/experimental_framework/libraries/Pktgen-DPDK/dpdk/ + -- This is the directory where DPDK is installed + - program_name = app/app/x86_64-native-linuxapp-gcc/pktgen + -- This is the name of the dpdk-pktgen program that starts the packet generator + - coremask = 1f + -- DPDK coremask (see DPDK-Pktgen readme) + - memory_channels = 3 + -- DPDK memory channels (see DPDK-Pktgen readme) + - name_if_1 = p1p1 + -- Name of the interface of the pktgen to be used to send traffic + - name_if_2 = p1p2 + -- Name of the interface of the pktgen to be used to receive traffic + - bus_slot_nic_1 = 01:00.0 + -- PCI bus address correspondent to the if_1 + - bus_slot_nic_2 = 01:00.1 + -- PCI bus address correspondent to the if_2 + + +To find the parameters related to names of the NICs and addresses of the PCI buses the user may find useful to run the DPDK tool nic_bind as follows: + + - $ DPDK_DIR/tools/dpdk_nic_bind.py --status + +which lists the NICs available on the system, show the available drivers and bus addresses for each interface. +Please make sure to select NICs which are DPDK compatible. + +Installation and configuration of smcroute +++++++++++++++++++++++++++++++++++++++++++ +The user is required to install smcroute which is used by the framework to support multicast communications. +In the following a list of commands to be ran to download and install smroute is provided. + + - $ cd ~ + - $ git clone https://github.com/troglobit/smcroute.git + - $ cd smcroute + - $ sed -i 's/aclocal-1.11/aclocal/g' ./autogen.sh + - $ sed -i 's/automake-1.11/automake/g' ./autogen.sh + - $ ./autogen.sh + - $ ./configure + - $ make + - $ sudo make install + - $ cd .. + +It is also required to create a configuration file using the following command: + + - $ SMCROUTE_NIC=(name of the nic) + +where name of the nic is the name used previously for the variable "name_if_2". +In the example it would be: + + - $ SMCROUTE_NIC=p1p2 + +Then create the smcroute configuration file /etc/smcroute.conf + + - $echo mgroup from $SMCROUTE_NIC group 224.192.16.1 > /etc/smcroute.conf + + +Experiment using SR-IOV configuration on the compute node ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +In order to enable SR-IOV interfaces on the physical NIC of the compute node, a compatible NIC is required. +NIC configuration depends on model and vendor. After proper configuration to support SR-IOV, a proper configuration of openstack is required. +For further information, please look at the following link: +https://wiki.openstack.org/wiki/SR-IOV-Passthrough-For-Networking diff --git a/yardstick/vTC/apexlake/apexlake.conf b/yardstick/vTC/apexlake/apexlake.conf new file mode 100644 index 000000000..56937d2ef --- /dev/null +++ b/yardstick/vTC/apexlake/apexlake.conf @@ -0,0 +1,69 @@ +[General] +## template_base is the name of the base template from which generate all the others +#template_base_name = vTC.yaml +## Benchmarks to be executed on the VNF under test (uncomment one of the following) +#benchmarks = instantiation_validation_benchmark.InstantiationValidationBenchmark +#benchmarks = instantiation_validation_noisy_neighbors_benchmark.InstantiationValidationNoisyNeighborsBenchmark +#benchmarks = rfc2544_throughput_benchmark.RFC2544ThroughputBenchmark +#benchmarks = multi_tenancy_throughput_benchmark.MultiTenancyThroughputBenchmark +## Number of iterations +#iterations = 1 +#debug = true + + +[OpenStack] +## ip_controller is the IP address of the OpenStack Controller +#ip_controller = 10.2.1.1 +## Heat URL is the URL for the Heat endpoint +#heat_url = http://IP_ADDRESS_CONTROLLER:8004/v1/TENANT_ID +## user is the OpenStack user name +#user = admin +## password is the OpenStack password +#password = password +## auth_uri is the authentication URI provided by keystone +#auth_uri = http://IP_ADDRESS_CONTROLLER:5000/v2.0 +## project is the name of the project on which create the VNF instances +#project = demo + + +[Experiment-VNF] +## List of all the variables and the values that will be tested by the framework +#VNIC_TYPE = @string "direct", "normal" +#VTC_FLAVOR = @string "m1.small" "m1.medium" "m1.large" + + +[InfluxDB] +influxdb_ip_address = 192.168.1.1 +influxdb_port = 8086 +influxdb_db_name = database + + +[PacketGen] +packet_generator = dpdk_pktgen +pktgen_directory = /root/programs/Pktgen-DPDK/dpdk/examples/pktgen/ +dpdk_directory = /root/programs/Pktgen-DPDK/dpdk/ +program_name = app/app/x86_64-native-linuxapp-gcc/pktgen +coremask = 1f +memory_channels = 3 +bus_slot_nic_1 = 01:00.0 +bus_slot_nic_2 = 01:00.1 +name_if_1 = p2p1 +name_if_2 = p2p2 + + +[Deployment-parameters] +#default_net = monitoring +#default_subnet = monitoring_subnet +#source_net = inbound_traffic_network +#source_subnet = inbound_traffic_subnet +#destination_net = destination_B_network +#destination_subnet = destination_B_subnet +#destination_subnet = destination_B_subnet +#key_name = destination_B_subnet + + +[Testcase-parameters] +#packet_size = 1280 +#throughput = 1 +#vlan_sender = 1000 +#vlan_receiver = 1001 \ No newline at end of file diff --git a/yardstick/vTC/apexlake/heat_templates/stress_workload.yaml b/yardstick/vTC/apexlake/heat_templates/stress_workload.yaml new file mode 100644 index 000000000..1a2f7dbb3 --- /dev/null +++ b/yardstick/vTC/apexlake/heat_templates/stress_workload.yaml @@ -0,0 +1,112 @@ +heat_template_version: 2014-10-16 +description: HOT template to create a DPI + +parameters: + nic_type: + type: string + default: normal + name: + type: string + default: cpu_stress + cores: + type: string + memory: + type: string + +resources: + internal_net: + type: OS::Neutron::Net + properties: + name: traffic_network + internal_subnet: + type: OS::Neutron::Subnet + properties: + network_id: { get_resource: internal_net } + cidr: 10.100.0.0/24 + + router: + properties: + admin_state_up: true + name: router + type: OS::Neutron::Router + + router_gateway: + properties: + network: external + router_id: { get_resource: router } + type: OS::Neutron::RouterGateway + + router_interface_0: + properties: + router_id: { get_resource: router } + subnet_id: { get_resource: internal_subnet } + type: OS::Neutron::RouterInterface + + vm1_port_1: + type: OS::Neutron::Port + properties: + network: { get_resource: internal_net } + binding:vnic_type: { get_param: nic_type } + fixed_ips: + - subnet: { get_resource: internal_subnet } + + flavor_1: + type: OS::Nova::Flavor + properties: + disk: 20 + ram: 4096 + vcpus: 4 + + vm1: + type: OS::Nova::Server + properties: + name: traffic_vm1 + key_name: test + image: ubuntu1404 + user_data: + str_replace: + template: | + #!/bin/sh + echo "Creating custom user..." + useradd clouduser -g admin -s /bin/bash -m + echo clouduser:secrete | chpasswd + echo "Enabling ssh password login..." + sed -i 's/PasswordAuthentication no/PasswordAuthentication yes/g' /etc/ssh/sshd_config + service ssh restart + sleep 1 + + ifconfig eth1 up + dhclient eth1 + + sed -i 's/localhost/localhost traffic_vm1/g' /etc/hosts + touch /etc/resolfconf/resolv.conf.d/tail + echo 'nameserver 8.8.8.8' > /etc/resolvconf/resolv.conf.d/tail + resolvconf -u + + # Installation of stress + apt-get install -y stress + + cd /home/clouduser + # Setup merlin + rm -rf merlin + mkdir merlin + cd merlin + wget http://10.2.1.65/~iolie/merlin/MerlinAgent-12-06-2015-TNovaVM-001.zip + apt-get install -y zip + unzip MerlinAgent-12-06-2015-TNovaVM-001.zip + ./updateConfiguration.py ./instrumentation.cfg tags source=tnova_vm + ./updateConfiguration.py ./instrumentation.cfg tags role=cpu_stress + nohup ./Agent.py ./instrumentation.cfg >log.out 2>&1 & + cd .. + + # workload setup + nohup stress -c #CORES --vm-bytes #MEMORY + + params: + $NAME: { get_param: name } + $CORES: { get_param: cores } + $MEMORY: { get_param: memory } + + flavor: { get_resource: flavor_1 } + networks: + - port: { get_resource: vm1_port_1 } diff --git a/yardstick/vTC/apexlake/heat_templates/vTC.yaml b/yardstick/vTC/apexlake/heat_templates/vTC.yaml new file mode 100644 index 000000000..e0163e872 --- /dev/null +++ b/yardstick/vTC/apexlake/heat_templates/vTC.yaml @@ -0,0 +1,167 @@ +heat_template_version: 2014-10-16 +description: HOT template to deploy a vitual Traffic Classifier + +parameters: + default_net: + type: string + default_subnet: + type: string + source_net: + type: string + source_subnet: + type: string + destination_net: + type: string + destination_subnet: + type: string + timeout: + type: number + description: Timeout for WaitCondition, depends on your image and environment + default: 2000 + +resources: + wait_condition: + type: OS::Heat::WaitCondition + properties: + handle: {get_resource: wait_handle} + count: 1 + timeout: {get_param: timeout} + + wait_handle: + type: OS::Heat::WaitConditionHandle + + ### DEFAULT NETWORK FOR MNGM + port_1: + type: OS::Neutron::Port + properties: + network: { get_param: default_net } + binding:vnic_type: normal + fixed_ips: + - subnet: { get_param: default_subnet } + + ### NETWORK FOR RECEIVING TRAFFIC + port_2: + type: OS::Neutron::Port + properties: + network: { get_param: source_net } + binding:vnic_type: #vnic_type + fixed_ips: + - subnet: { get_param: source_subnet } + + ### NETWORK FOR SENDING TRAFFIC + port_3: + type: OS::Neutron::Port + properties: + network: { get_param: destination_net } + binding:vnic_type: #vnic_type + fixed_ips: + - subnet: { get_param: destination_subnet } + + server: + type: OS::Nova::Server + properties: + name: vTC + #key_name: { get_param: key_name } + image: ubuntu1404 + user_data: + str_replace: + template: | + #!/bin/sh + # Creation of a user + echo "Creating custom user..." + useradd clouduser -g admin -s /bin/bash -m + echo clouduser:secrete | chpasswd + echo "Enabling ssh password login..." + sed -i 's/PasswordAuthentication no/PasswordAuthentication yes/g' /etc/ssh/sshd_config + service ssh restart + sleep 1 + + # wake up interfaces + ifconfig eth1 up + ifconfig eth2 up + dhclient eth1 + dhclient eth2 + + # Install vTC Dependencies + apt-get update + apt-get install -y git build-essential gcc libnuma-dev bison flex byacc libjson0-dev libcurl4-gnutls-dev jq dh-autoreconf libpcap-dev libpulse-dev libtool pkg-config + apt-get install -y byacc libtool libcurl4-openssl-dev + + sed -i 's/localhost/localhost vtc/g' /etc/hosts + cd /home/clouduser + + # Setup multicast + echo mgroup from eth1 group 224.192.16.1 > /etc/smcroute.conf + git clone https://github.com/troglobit/smcroute.git + cd smcroute + sed -i 's/aclocal-1.11/aclocal/g' ./autogen.sh + sed -i 's/automake-1.11/automake/g' ./autogen.sh + ./autogen.sh + ./configure + make + make install + cd .. + touch multicast.sh + echo "#!/bin/bash" > multicast.sh + echo "while [ true ]" >> multicast.sh + echo "do" >> multicast.sh + echo " smcroute -k" >> multicast.sh + echo " smcroute -d" >> multicast.sh + echo " sleep 50" >> multicast.sh + echo "done" >> multicast.sh + chmod +x multicast.sh + ./multicast.sh & + + rm resp.json + curl -X POST -u "mPkgwvJPsTFS8hYmHk:SDczcrK4cvnkMRWSEchB3ANcWbqFXqPx" https://bitbucket.org/site/oauth2/access_token -d grant_type=refresh_token -d refresh_token=38uFQuhEdPvCTbhc7k >> resp.json + access_token=`jq -r '.access_token' resp.json` + git clone https://x-token-auth:${access_token}@bitbucket.org/akiskourtis/vtc.git + cd vtc + git checkout -b stable + #Build nDPI library + cd nDPI + NDPI_DIR=$(pwd) + echo $NDPI_DIR + NDPI_INCLUDE=$(pwd)/src/include + echo $NDPI_INCLUDE + ./autogen.sh + ./configure + make + make install + + #Build PF_RING library + cd .. + cd PF_RING + make + #Build PF_RING examples, including the modified pfbridge, with nDPI integrated. + cd userland/examples/ + sed -i 's#EXTRA_LIBS =#EXTRA_LIBS='"${NDPI_DIR}"'/src/lib/.libs/libndpi.a -ljson-c#' ./Makefile + sed -i 's# -Ithird-party# -Ithird-party/ -I'"$NDPI_INCLUDE"' -I'"$NDPI_DIR"'#' ./Makefile + echo $NDPI_DIR + make + cd ../.. + cd .. + cd .. + + # To use PF_RING driver use the following + #sudo rmmod pf_ring + #insmod ./vtc/PF_RING/kernel/pf_ring.ko min_num_slots=16384 enable_debug=1 quick_mode=1 enable_tx_capture=0 + #./vtc/PF_RING/userland/examples/pfbridge -a eth1 -b eth2 & + sleep 5 + + # To use the Linux kernel driver use the following + cd /home/clouduser/ + sudo nohup ./vtc/nDPI/example/ndpiReader -i eth1 -a eth2 & + sleep 5 + + curl --data-ascii "{\"classification_rules\":[{\"RuleId\":\"1\",\"ToS\":\"16\"}]}" http://localhost:9999/classifier/classification_rules/224.192.16.1 & + wc_notify --data-binary '{"status": "SUCCESS"}' + params: + wc_notify: { get_attr: ['wait_handle', 'curl_cli'] } + #$IP_FAMILY: { get_param: ip_family } + flavor: #vtc_flavor + networks: + - port: { get_resource: port_1 } + - port: { get_resource: port_2 } + - port: { get_resource: port_3 } +outputs: diff --git a/yardstick/vTC/apexlake/setup.py b/yardstick/vTC/apexlake/setup.py new file mode 100644 index 000000000..e33b5bfc8 --- /dev/null +++ b/yardstick/vTC/apexlake/setup.py @@ -0,0 +1,38 @@ +""" +Experimental Framework +""" + +from distutils.core import setup + + +# TODO: Add instruction to compile the test_sniff + +setup(name='apexlake', + version='1.0', + description='Framework to automatically run experiments/benchmarks ' + 'with VMs within OpenStack environments', + author='Intel Research and Development Ireland Ltd', + author_email='vincenzo.m.riccobene@intel.com', + license='Apache 2.0', + url='www.intel.com', + packages=['experimental_framework', + 'experimental_framework.benchmarks', + 'experimental_framework.packet_generators', + 'experimental_framework.libraries', + 'experimental_framework.constants'], + include_package_data=True, + package_data={ + 'experimental_framework': [ + 'packet_generators/dpdk_pktgen/*.lua', + 'packet_generators/pcap_files/*.pcap', + 'packet_generators/pcap_files/*.sh', + 'libraries/packet_checker/*' + ] + }, + data_files=[ + ('/etc/apexlake/', ['apexlake.conf']), + ('/etc/apexlake/heat_templates/', + ['heat_templates/vTC.yaml']), + ('/etc/apexlake/heat_templates/', + ['heat_templates/stress_workload.yaml']) + ]) diff --git a/yardstick/vTC/apexlake/tests/data/common/conf.cfg b/yardstick/vTC/apexlake/tests/data/common/conf.cfg new file mode 100644 index 000000000..9266647e8 --- /dev/null +++ b/yardstick/vTC/apexlake/tests/data/common/conf.cfg @@ -0,0 +1,43 @@ +[General] +template_base_name = t_name +benchmarks = b_marks +iterations = 1 + +[OpenStack] +ip_controller = +heat_url = +user = +password = +auth_uri = +project = + + +[Experiment-VNF] +VNIC1_TYPE = @string "normal" "direct" @costs '0', '1' +VNIC2_TYPE = @string "normal", "direct" @costs '0', '1' +VCPU = @numeric "4" +RAM = @numeric "4096" + + +[PacketGen] +packet_generator = dpdk_pktgen +pktgen_directory = pktgen_dir +dpdk_directory = dpdk_dir +program_name = app/app/x86_64-native-linuxapp-gcc/pktgen +coremask = 1f +memory_channels = 3 +bus_slot_nic_1 = 01:00.0 +name_if_1 = enp1s0f0 +bus_slot_nic_2 = 01:00.1 +name_if_2 = enp1s0f2 + + +[Deployment-parameters] +param_1 = val_1 +param_2 = val_2 +param_3 = val_3 +param_4 = val_4 + + +[Testcase-parameters] +test_case_param = 1280 diff --git a/yardstick/vTC/apexlake/tests/data/common/file_replacement.txt b/yardstick/vTC/apexlake/tests/data/common/file_replacement.txt new file mode 100644 index 000000000..8122d9a91 --- /dev/null +++ b/yardstick/vTC/apexlake/tests/data/common/file_replacement.txt @@ -0,0 +1 @@ +Test for the replacement of strings into a file diff --git a/yardstick/vTC/apexlake/tests/data/generated_templates/VTC_base_single_vm_wait.tmp b/yardstick/vTC/apexlake/tests/data/generated_templates/VTC_base_single_vm_wait.tmp new file mode 100644 index 000000000..aa3959fc1 --- /dev/null +++ b/yardstick/vTC/apexlake/tests/data/generated_templates/VTC_base_single_vm_wait.tmp @@ -0,0 +1,199 @@ +heat_template_version: 2014-10-16 +description: HOT template to create a DPI + +parameters: + default_net: + type: string + default_subnet: + type: string + source_net: + type: string + source_subnet: + type: string + destination_net: + type: string + destination_subnet: + type: string + internal_net: + type: string + internal_subnet: + type: string + node: + type: string + default: compB + name: + type: string + default: vtc + ip_family: + type: string + timeout: + type: number + description: Timeout for WaitCondition, depends on your image and environment + default: 1000 + +resources: + wait_condition: + type: OS::Heat::WaitCondition + properties: + handle: {get_resource: wait_handle} + count: 1 + timeout: {get_param: timeout} + + wait_handle: + type: OS::Heat::WaitConditionHandle + + + ### DEFAULT NETWORK FOR MERLIN DATA + port_1: + type: OS::Neutron::Port + properties: + network: { get_param: default_net } + binding:vnic_type: normal + fixed_ips: + - subnet: { get_param: default_subnet } + + ### NETWORK FOR RECEIVING TRAFFIC + port_2: + type: OS::Neutron::Port + properties: + network: { get_param: source_net } + binding:vnic_type: #vnic_type + fixed_ips: + - subnet: { get_param: source_subnet } + + ### NETWORK FOR SENDING TRAFFIC + port_3: + type: OS::Neutron::Port + properties: + network: { get_param: destination_net } + binding:vnic_type: #vnic_type + fixed_ips: + - subnet: { get_param: destination_subnet } + + flavor: + type: OS::Nova::Flavor + properties: + disk: 20 + ram: #ram + vcpus: #vcpus + #extra_specs: { node: { get_param: node }, "hw:cpu_policy": "#core_pinning_enabled", "hw:cpu_threads_policy": "#core_pinning_mode", "hw:mem_page_size": "#hugepages" } + extra_specs: { node: { get_param: node } } + + server: + type: OS::Nova::Server + properties: + name: vTC + key_name: test + image: ubuntu1404 + user_data: + str_replace: + template: | + #!/bin/sh + + # Creation of a user + NAME=$name + echo "Creating custom user..." + useradd clouduser -g admin -s /bin/bash -m + echo clouduser:secrete | chpasswd + echo "Enabling ssh password login..." + sed -i 's/PasswordAuthentication no/PasswordAuthentication yes/g' /etc/ssh/sshd_config + service ssh restart + sleep 1 + + # wake up interfaces + ifconfig eth1 up + ifconfig eth2 up + dhclient eth1 + dhclient eth2 + + sed -i 's/localhost/localhost vtc/g' /etc/hosts + ip route del 0/0 + route add default gw 192.168.200.1 + + AA=$(netstat -ie | grep -B1 $IP_FAMILY | awk '{ print $1 }') + BB=$(echo $AA | awk '{ print $1 }') + + # Setup Instrumentation Agent + rm -rf cimmaron + mkdir cimmaron + cd cimmaron + apt-get install -y zip + wget http://10.2.1.65/~iolie/merlin/MerlinAgent-12-06-2015-TNovaVM-001.zip + unzip MerlinAgent-12-06-2015-TNovaVM-001.zip + ./updateConfiguration.py ./instrumentation.cfg tags source=tnova_vm + ./updateConfiguration.py ./instrumentation.cfg tags role="$NAME" + nohup ./Agent.py ./instrumentation.cfg >log.out 2>&1 & + cd .. + + # Setup for PF_RING and bridge between interfaces + apt-get update + apt-get install -y git build-essential gcc libnuma-dev flex byacc libjson0-dev dh-autoreconf libpcap-dev libpulse-dev libtool pkg-config + + # Setup multicast + echo smcroute -d mgroup from $BB group 224.192.16.1 > /etc/smcroute.conf + cd /home/clouduser/ + git clone https://github.com/troglobit/smcroute.git + cd smcroute + sed -i 's/aclocal-1.11/aclocal/g' ./autogen.sh + sed -i 's/automake-1.11/automake/g' ./autogen.sh + ./autogen.sh + ./configure + make + make install + cd .. + touch multicast.sh + echo "#!/bin/bash" > multicast.sh + echo "while [ true ]" >> multicast.sh + echo "do" >> multicast.sh + echo " smcroute -k" >> multicast.sh + echo " smcroute -d" >> multicast.sh + echo " sleep 50" >> multicast.sh + echo "done" >> multicast.sh + chmod +x multicast.sh + ./multicast.sh & + + # Setup for PF_RING and bridge between interfaces + # Akis Repository + #git clone https://akiskourtis:ptindpi@bitbucket.org/akiskourtis/vtc.git + #cd vtc + #git checkout stable + + # Intel Repository + git clone http://vincenzox.m.riccobene%40intel.com:vincenzo@134.191.243.6:8081/t-nova/vtc_master.git + cd vtc_master + + cd nDPI + NDPI_DIR=$(pwd) + echo $NDPI_DIR + NDPI_INCLUDE=$(pwd)/src/include + echo $NDPI_INCLUDE + ./autogen.sh + ./configure + make + make install + cd .. + cd PF_RING + make + cd userland/examples/ + sed -i 's/EXTRA_LIBS =/EXTRA_LIBS = '"${NDPI_DIR}"'/src/lib/.libs/libndpi.a -ljson-c/g' ./Makefile + sed -i 's/ -Ithird-party/ -Ithird-party -I'"$NDPI_INCLUDE"' -I'"$NDPI_DIR"'/g' ./Makefile + make + cd ../.. + cd .. + cd .. + #insmod ./vtc/PF_RING/kernel/pf_ring.ko min_num_slots=8192 enable_debug=1 quick_mode=1 enable_tx_capture=0 + #./vtc/PF_RING/userland/examples/pfbridge -a eth1 -b eth2 & + insmod ./vtc_master/PF_RING/kernel/pf_ring.ko min_num_slots=8192 enable_debug=1 quick_mode=1 enable_tx_capture=0 + ./vtc_master/PF_RING/userland/examples/pfbridge -a eth1 -b eth2 & + wc_notify --data-binary '{"status": "SUCCESS"}' + params: + wc_notify: { get_attr: ['wait_handle', 'curl_cli'] } + $name: { get_param: name } + $IP_FAMILY: { get_param: ip_family } + + flavor: { get_resource: flavor } + networks: + - port: { get_resource: port_1 } + - port: { get_resource: port_2 } + - port: { get_resource: port_3 } +outputs: \ No newline at end of file diff --git a/yardstick/vTC/apexlake/tests/data/generated_templates/VTC_base_single_vm_wait_1.yaml b/yardstick/vTC/apexlake/tests/data/generated_templates/VTC_base_single_vm_wait_1.yaml new file mode 100644 index 000000000..5788980b0 --- /dev/null +++ b/yardstick/vTC/apexlake/tests/data/generated_templates/VTC_base_single_vm_wait_1.yaml @@ -0,0 +1,199 @@ +heat_template_version: 2014-10-16 +description: HOT template to create a DPI + +parameters: + default_net: + type: string + default_subnet: + type: string + source_net: + type: string + source_subnet: + type: string + destination_net: + type: string + destination_subnet: + type: string + internal_net: + type: string + internal_subnet: + type: string + node: + type: string + default: compB + name: + type: string + default: vtc + ip_family: + type: string + timeout: + type: number + description: Timeout for WaitCondition, depends on your image and environment + default: 1000 + +resources: + wait_condition: + type: OS::Heat::WaitCondition + properties: + handle: {get_resource: wait_handle} + count: 1 + timeout: {get_param: timeout} + + wait_handle: + type: OS::Heat::WaitConditionHandle + + + ### DEFAULT NETWORK FOR MERLIN DATA + port_1: + type: OS::Neutron::Port + properties: + network: { get_param: default_net } + binding:vnic_type: normal + fixed_ips: + - subnet: { get_param: default_subnet } + + ### NETWORK FOR RECEIVING TRAFFIC + port_2: + type: OS::Neutron::Port + properties: + network: { get_param: source_net } + binding:vnic_type: normal + fixed_ips: + - subnet: { get_param: source_subnet } + + ### NETWORK FOR SENDING TRAFFIC + port_3: + type: OS::Neutron::Port + properties: + network: { get_param: destination_net } + binding:vnic_type: normal + fixed_ips: + - subnet: { get_param: destination_subnet } + + flavor: + type: OS::Nova::Flavor + properties: + disk: 20 + ram: 1024 + vcpus: 2 + #extra_specs: { node: { get_param: node }, "hw:cpu_policy": "#core_pinning_enabled", "hw:cpu_threads_policy": "#core_pinning_mode", "hw:mem_page_size": "#hugepages" } + extra_specs: { node: { get_param: node } } + + server: + type: OS::Nova::Server + properties: + name: vTC + key_name: test + image: ubuntu1404 + user_data: + str_replace: + template: | + #!/bin/sh + + # Creation of a user + NAME=$name + echo "Creating custom user..." + useradd clouduser -g admin -s /bin/bash -m + echo clouduser:secrete | chpasswd + echo "Enabling ssh password login..." + sed -i 's/PasswordAuthentication no/PasswordAuthentication yes/g' /etc/ssh/sshd_config + service ssh restart + sleep 1 + + # wake up interfaces + ifconfig eth1 up + ifconfig eth2 up + dhclient eth1 + dhclient eth2 + + sed -i 's/localhost/localhost vtc/g' /etc/hosts + ip route del 0/0 + route add default gw 192.168.200.1 + + AA=$(netstat -ie | grep -B1 $IP_FAMILY | awk '{ print $1 }') + BB=$(echo $AA | awk '{ print $1 }') + + # Setup Instrumentation Agent + rm -rf cimmaron + mkdir cimmaron + cd cimmaron + apt-get install -y zip + wget http://10.2.1.65/~iolie/merlin/MerlinAgent-12-06-2015-TNovaVM-001.zip + unzip MerlinAgent-12-06-2015-TNovaVM-001.zip + ./updateConfiguration.py ./instrumentation.cfg tags source=tnova_vm + ./updateConfiguration.py ./instrumentation.cfg tags role="$NAME" + nohup ./Agent.py ./instrumentation.cfg >log.out 2>&1 & + cd .. + + # Setup for PF_RING and bridge between interfaces + apt-get update + apt-get install -y git build-essential gcc libnuma-dev flex byacc libjson0-dev dh-autoreconf libpcap-dev libpulse-dev libtool pkg-config + + # Setup multicast + echo smcroute -d mgroup from $BB group 224.192.16.1 > /etc/smcroute.conf + cd /home/clouduser/ + git clone https://github.com/troglobit/smcroute.git + cd smcroute + sed -i 's/aclocal-1.11/aclocal/g' ./autogen.sh + sed -i 's/automake-1.11/automake/g' ./autogen.sh + ./autogen.sh + ./configure + make + make install + cd .. + touch multicast.sh + echo "#!/bin/bash" > multicast.sh + echo "while [ true ]" >> multicast.sh + echo "do" >> multicast.sh + echo " smcroute -k" >> multicast.sh + echo " smcroute -d" >> multicast.sh + echo " sleep 50" >> multicast.sh + echo "done" >> multicast.sh + chmod +x multicast.sh + ./multicast.sh & + + # Setup for PF_RING and bridge between interfaces + # Akis Repository + #git clone https://akiskourtis:ptindpi@bitbucket.org/akiskourtis/vtc.git + #cd vtc + #git checkout stable + + # Intel Repository + git clone http://vincenzox.m.riccobene%40intel.com:vincenzo@134.191.243.6:8081/t-nova/vtc_master.git + cd vtc_master + + cd nDPI + NDPI_DIR=$(pwd) + echo $NDPI_DIR + NDPI_INCLUDE=$(pwd)/src/include + echo $NDPI_INCLUDE + ./autogen.sh + ./configure + make + make install + cd .. + cd PF_RING + make + cd userland/examples/ + sed -i 's/EXTRA_LIBS =/EXTRA_LIBS = '"${NDPI_DIR}"'/src/lib/.libs/libndpi.a -ljson-c/g' ./Makefile + sed -i 's/ -Ithird-party/ -Ithird-party -I'"$NDPI_INCLUDE"' -I'"$NDPI_DIR"'/g' ./Makefile + make + cd ../.. + cd .. + cd .. + #insmod ./vtc/PF_RING/kernel/pf_ring.ko min_num_slots=8192 enable_debug=1 quick_mode=1 enable_tx_capture=0 + #./vtc/PF_RING/userland/examples/pfbridge -a eth1 -b eth2 & + insmod ./vtc_master/PF_RING/kernel/pf_ring.ko min_num_slots=8192 enable_debug=1 quick_mode=1 enable_tx_capture=0 + ./vtc_master/PF_RING/userland/examples/pfbridge -a eth1 -b eth2 & + wc_notify --data-binary '{"status": "SUCCESS"}' + params: + wc_notify: { get_attr: ['wait_handle', 'curl_cli'] } + $name: { get_param: name } + $IP_FAMILY: { get_param: ip_family } + + flavor: { get_resource: flavor } + networks: + - port: { get_resource: port_1 } + - port: { get_resource: port_2 } + - port: { get_resource: port_3 } +outputs: diff --git a/yardstick/vTC/apexlake/tests/data/generated_templates/VTC_base_single_vm_wait_1.yaml.json b/yardstick/vTC/apexlake/tests/data/generated_templates/VTC_base_single_vm_wait_1.yaml.json new file mode 100644 index 000000000..3af9a1cc7 --- /dev/null +++ b/yardstick/vTC/apexlake/tests/data/generated_templates/VTC_base_single_vm_wait_1.yaml.json @@ -0,0 +1 @@ +{"vnic_type": "normal", "ram": "1024", "vcpus": "2"} \ No newline at end of file diff --git a/yardstick/vTC/apexlake/tests/data/generated_templates/VTC_base_single_vm_wait_2.yaml b/yardstick/vTC/apexlake/tests/data/generated_templates/VTC_base_single_vm_wait_2.yaml new file mode 100644 index 000000000..44a81d081 --- /dev/null +++ b/yardstick/vTC/apexlake/tests/data/generated_templates/VTC_base_single_vm_wait_2.yaml @@ -0,0 +1,199 @@ +heat_template_version: 2014-10-16 +description: HOT template to create a DPI + +parameters: + default_net: + type: string + default_subnet: + type: string + source_net: + type: string + source_subnet: + type: string + destination_net: + type: string + destination_subnet: + type: string + internal_net: + type: string + internal_subnet: + type: string + node: + type: string + default: compB + name: + type: string + default: vtc + ip_family: + type: string + timeout: + type: number + description: Timeout for WaitCondition, depends on your image and environment + default: 1000 + +resources: + wait_condition: + type: OS::Heat::WaitCondition + properties: + handle: {get_resource: wait_handle} + count: 1 + timeout: {get_param: timeout} + + wait_handle: + type: OS::Heat::WaitConditionHandle + + + ### DEFAULT NETWORK FOR MERLIN DATA + port_1: + type: OS::Neutron::Port + properties: + network: { get_param: default_net } + binding:vnic_type: normal + fixed_ips: + - subnet: { get_param: default_subnet } + + ### NETWORK FOR RECEIVING TRAFFIC + port_2: + type: OS::Neutron::Port + properties: + network: { get_param: source_net } + binding:vnic_type: direct + fixed_ips: + - subnet: { get_param: source_subnet } + + ### NETWORK FOR SENDING TRAFFIC + port_3: + type: OS::Neutron::Port + properties: + network: { get_param: destination_net } + binding:vnic_type: direct + fixed_ips: + - subnet: { get_param: destination_subnet } + + flavor: + type: OS::Nova::Flavor + properties: + disk: 20 + ram: 1024 + vcpus: 2 + #extra_specs: { node: { get_param: node }, "hw:cpu_policy": "#core_pinning_enabled", "hw:cpu_threads_policy": "#core_pinning_mode", "hw:mem_page_size": "#hugepages" } + extra_specs: { node: { get_param: node } } + + server: + type: OS::Nova::Server + properties: + name: vTC + key_name: test + image: ubuntu1404 + user_data: + str_replace: + template: | + #!/bin/sh + + # Creation of a user + NAME=$name + echo "Creating custom user..." + useradd clouduser -g admin -s /bin/bash -m + echo clouduser:secrete | chpasswd + echo "Enabling ssh password login..." + sed -i 's/PasswordAuthentication no/PasswordAuthentication yes/g' /etc/ssh/sshd_config + service ssh restart + sleep 1 + + # wake up interfaces + ifconfig eth1 up + ifconfig eth2 up + dhclient eth1 + dhclient eth2 + + sed -i 's/localhost/localhost vtc/g' /etc/hosts + ip route del 0/0 + route add default gw 192.168.200.1 + + AA=$(netstat -ie | grep -B1 $IP_FAMILY | awk '{ print $1 }') + BB=$(echo $AA | awk '{ print $1 }') + + # Setup Instrumentation Agent + rm -rf cimmaron + mkdir cimmaron + cd cimmaron + apt-get install -y zip + wget http://10.2.1.65/~iolie/merlin/MerlinAgent-12-06-2015-TNovaVM-001.zip + unzip MerlinAgent-12-06-2015-TNovaVM-001.zip + ./updateConfiguration.py ./instrumentation.cfg tags source=tnova_vm + ./updateConfiguration.py ./instrumentation.cfg tags role="$NAME" + nohup ./Agent.py ./instrumentation.cfg >log.out 2>&1 & + cd .. + + # Setup for PF_RING and bridge between interfaces + apt-get update + apt-get install -y git build-essential gcc libnuma-dev flex byacc libjson0-dev dh-autoreconf libpcap-dev libpulse-dev libtool pkg-config + + # Setup multicast + echo smcroute -d mgroup from $BB group 224.192.16.1 > /etc/smcroute.conf + cd /home/clouduser/ + git clone https://github.com/troglobit/smcroute.git + cd smcroute + sed -i 's/aclocal-1.11/aclocal/g' ./autogen.sh + sed -i 's/automake-1.11/automake/g' ./autogen.sh + ./autogen.sh + ./configure + make + make install + cd .. + touch multicast.sh + echo "#!/bin/bash" > multicast.sh + echo "while [ true ]" >> multicast.sh + echo "do" >> multicast.sh + echo " smcroute -k" >> multicast.sh + echo " smcroute -d" >> multicast.sh + echo " sleep 50" >> multicast.sh + echo "done" >> multicast.sh + chmod +x multicast.sh + ./multicast.sh & + + # Setup for PF_RING and bridge between interfaces + # Akis Repository + #git clone https://akiskourtis:ptindpi@bitbucket.org/akiskourtis/vtc.git + #cd vtc + #git checkout stable + + # Intel Repository + git clone http://vincenzox.m.riccobene%40intel.com:vincenzo@134.191.243.6:8081/t-nova/vtc_master.git + cd vtc_master + + cd nDPI + NDPI_DIR=$(pwd) + echo $NDPI_DIR + NDPI_INCLUDE=$(pwd)/src/include + echo $NDPI_INCLUDE + ./autogen.sh + ./configure + make + make install + cd .. + cd PF_RING + make + cd userland/examples/ + sed -i 's/EXTRA_LIBS =/EXTRA_LIBS = '"${NDPI_DIR}"'/src/lib/.libs/libndpi.a -ljson-c/g' ./Makefile + sed -i 's/ -Ithird-party/ -Ithird-party -I'"$NDPI_INCLUDE"' -I'"$NDPI_DIR"'/g' ./Makefile + make + cd ../.. + cd .. + cd .. + #insmod ./vtc/PF_RING/kernel/pf_ring.ko min_num_slots=8192 enable_debug=1 quick_mode=1 enable_tx_capture=0 + #./vtc/PF_RING/userland/examples/pfbridge -a eth1 -b eth2 & + insmod ./vtc_master/PF_RING/kernel/pf_ring.ko min_num_slots=8192 enable_debug=1 quick_mode=1 enable_tx_capture=0 + ./vtc_master/PF_RING/userland/examples/pfbridge -a eth1 -b eth2 & + wc_notify --data-binary '{"status": "SUCCESS"}' + params: + wc_notify: { get_attr: ['wait_handle', 'curl_cli'] } + $name: { get_param: name } + $IP_FAMILY: { get_param: ip_family } + + flavor: { get_resource: flavor } + networks: + - port: { get_resource: port_1 } + - port: { get_resource: port_2 } + - port: { get_resource: port_3 } +outputs: diff --git a/yardstick/vTC/apexlake/tests/data/generated_templates/VTC_base_single_vm_wait_2.yaml.json b/yardstick/vTC/apexlake/tests/data/generated_templates/VTC_base_single_vm_wait_2.yaml.json new file mode 100644 index 000000000..9f246891d --- /dev/null +++ b/yardstick/vTC/apexlake/tests/data/generated_templates/VTC_base_single_vm_wait_2.yaml.json @@ -0,0 +1 @@ +{"vnic_type": "direct", "ram": "1024", "vcpus": "2"} \ No newline at end of file diff --git a/yardstick/vTC/apexlake/tests/data/generated_templates/experiment_1.yaml b/yardstick/vTC/apexlake/tests/data/generated_templates/experiment_1.yaml new file mode 100644 index 000000000..5788980b0 --- /dev/null +++ b/yardstick/vTC/apexlake/tests/data/generated_templates/experiment_1.yaml @@ -0,0 +1,199 @@ +heat_template_version: 2014-10-16 +description: HOT template to create a DPI + +parameters: + default_net: + type: string + default_subnet: + type: string + source_net: + type: string + source_subnet: + type: string + destination_net: + type: string + destination_subnet: + type: string + internal_net: + type: string + internal_subnet: + type: string + node: + type: string + default: compB + name: + type: string + default: vtc + ip_family: + type: string + timeout: + type: number + description: Timeout for WaitCondition, depends on your image and environment + default: 1000 + +resources: + wait_condition: + type: OS::Heat::WaitCondition + properties: + handle: {get_resource: wait_handle} + count: 1 + timeout: {get_param: timeout} + + wait_handle: + type: OS::Heat::WaitConditionHandle + + + ### DEFAULT NETWORK FOR MERLIN DATA + port_1: + type: OS::Neutron::Port + properties: + network: { get_param: default_net } + binding:vnic_type: normal + fixed_ips: + - subnet: { get_param: default_subnet } + + ### NETWORK FOR RECEIVING TRAFFIC + port_2: + type: OS::Neutron::Port + properties: + network: { get_param: source_net } + binding:vnic_type: normal + fixed_ips: + - subnet: { get_param: source_subnet } + + ### NETWORK FOR SENDING TRAFFIC + port_3: + type: OS::Neutron::Port + properties: + network: { get_param: destination_net } + binding:vnic_type: normal + fixed_ips: + - subnet: { get_param: destination_subnet } + + flavor: + type: OS::Nova::Flavor + properties: + disk: 20 + ram: 1024 + vcpus: 2 + #extra_specs: { node: { get_param: node }, "hw:cpu_policy": "#core_pinning_enabled", "hw:cpu_threads_policy": "#core_pinning_mode", "hw:mem_page_size": "#hugepages" } + extra_specs: { node: { get_param: node } } + + server: + type: OS::Nova::Server + properties: + name: vTC + key_name: test + image: ubuntu1404 + user_data: + str_replace: + template: | + #!/bin/sh + + # Creation of a user + NAME=$name + echo "Creating custom user..." + useradd clouduser -g admin -s /bin/bash -m + echo clouduser:secrete | chpasswd + echo "Enabling ssh password login..." + sed -i 's/PasswordAuthentication no/PasswordAuthentication yes/g' /etc/ssh/sshd_config + service ssh restart + sleep 1 + + # wake up interfaces + ifconfig eth1 up + ifconfig eth2 up + dhclient eth1 + dhclient eth2 + + sed -i 's/localhost/localhost vtc/g' /etc/hosts + ip route del 0/0 + route add default gw 192.168.200.1 + + AA=$(netstat -ie | grep -B1 $IP_FAMILY | awk '{ print $1 }') + BB=$(echo $AA | awk '{ print $1 }') + + # Setup Instrumentation Agent + rm -rf cimmaron + mkdir cimmaron + cd cimmaron + apt-get install -y zip + wget http://10.2.1.65/~iolie/merlin/MerlinAgent-12-06-2015-TNovaVM-001.zip + unzip MerlinAgent-12-06-2015-TNovaVM-001.zip + ./updateConfiguration.py ./instrumentation.cfg tags source=tnova_vm + ./updateConfiguration.py ./instrumentation.cfg tags role="$NAME" + nohup ./Agent.py ./instrumentation.cfg >log.out 2>&1 & + cd .. + + # Setup for PF_RING and bridge between interfaces + apt-get update + apt-get install -y git build-essential gcc libnuma-dev flex byacc libjson0-dev dh-autoreconf libpcap-dev libpulse-dev libtool pkg-config + + # Setup multicast + echo smcroute -d mgroup from $BB group 224.192.16.1 > /etc/smcroute.conf + cd /home/clouduser/ + git clone https://github.com/troglobit/smcroute.git + cd smcroute + sed -i 's/aclocal-1.11/aclocal/g' ./autogen.sh + sed -i 's/automake-1.11/automake/g' ./autogen.sh + ./autogen.sh + ./configure + make + make install + cd .. + touch multicast.sh + echo "#!/bin/bash" > multicast.sh + echo "while [ true ]" >> multicast.sh + echo "do" >> multicast.sh + echo " smcroute -k" >> multicast.sh + echo " smcroute -d" >> multicast.sh + echo " sleep 50" >> multicast.sh + echo "done" >> multicast.sh + chmod +x multicast.sh + ./multicast.sh & + + # Setup for PF_RING and bridge between interfaces + # Akis Repository + #git clone https://akiskourtis:ptindpi@bitbucket.org/akiskourtis/vtc.git + #cd vtc + #git checkout stable + + # Intel Repository + git clone http://vincenzox.m.riccobene%40intel.com:vincenzo@134.191.243.6:8081/t-nova/vtc_master.git + cd vtc_master + + cd nDPI + NDPI_DIR=$(pwd) + echo $NDPI_DIR + NDPI_INCLUDE=$(pwd)/src/include + echo $NDPI_INCLUDE + ./autogen.sh + ./configure + make + make install + cd .. + cd PF_RING + make + cd userland/examples/ + sed -i 's/EXTRA_LIBS =/EXTRA_LIBS = '"${NDPI_DIR}"'/src/lib/.libs/libndpi.a -ljson-c/g' ./Makefile + sed -i 's/ -Ithird-party/ -Ithird-party -I'"$NDPI_INCLUDE"' -I'"$NDPI_DIR"'/g' ./Makefile + make + cd ../.. + cd .. + cd .. + #insmod ./vtc/PF_RING/kernel/pf_ring.ko min_num_slots=8192 enable_debug=1 quick_mode=1 enable_tx_capture=0 + #./vtc/PF_RING/userland/examples/pfbridge -a eth1 -b eth2 & + insmod ./vtc_master/PF_RING/kernel/pf_ring.ko min_num_slots=8192 enable_debug=1 quick_mode=1 enable_tx_capture=0 + ./vtc_master/PF_RING/userland/examples/pfbridge -a eth1 -b eth2 & + wc_notify --data-binary '{"status": "SUCCESS"}' + params: + wc_notify: { get_attr: ['wait_handle', 'curl_cli'] } + $name: { get_param: name } + $IP_FAMILY: { get_param: ip_family } + + flavor: { get_resource: flavor } + networks: + - port: { get_resource: port_1 } + - port: { get_resource: port_2 } + - port: { get_resource: port_3 } +outputs: diff --git a/yardstick/vTC/apexlake/tests/data/generated_templates/experiment_1.yaml.json b/yardstick/vTC/apexlake/tests/data/generated_templates/experiment_1.yaml.json new file mode 100644 index 000000000..3af9a1cc7 --- /dev/null +++ b/yardstick/vTC/apexlake/tests/data/generated_templates/experiment_1.yaml.json @@ -0,0 +1 @@ +{"vnic_type": "normal", "ram": "1024", "vcpus": "2"} \ No newline at end of file diff --git a/yardstick/vTC/apexlake/tests/data/generated_templates/experiment_2.yaml b/yardstick/vTC/apexlake/tests/data/generated_templates/experiment_2.yaml new file mode 100644 index 000000000..44a81d081 --- /dev/null +++ b/yardstick/vTC/apexlake/tests/data/generated_templates/experiment_2.yaml @@ -0,0 +1,199 @@ +heat_template_version: 2014-10-16 +description: HOT template to create a DPI + +parameters: + default_net: + type: string + default_subnet: + type: string + source_net: + type: string + source_subnet: + type: string + destination_net: + type: string + destination_subnet: + type: string + internal_net: + type: string + internal_subnet: + type: string + node: + type: string + default: compB + name: + type: string + default: vtc + ip_family: + type: string + timeout: + type: number + description: Timeout for WaitCondition, depends on your image and environment + default: 1000 + +resources: + wait_condition: + type: OS::Heat::WaitCondition + properties: + handle: {get_resource: wait_handle} + count: 1 + timeout: {get_param: timeout} + + wait_handle: + type: OS::Heat::WaitConditionHandle + + + ### DEFAULT NETWORK FOR MERLIN DATA + port_1: + type: OS::Neutron::Port + properties: + network: { get_param: default_net } + binding:vnic_type: normal + fixed_ips: + - subnet: { get_param: default_subnet } + + ### NETWORK FOR RECEIVING TRAFFIC + port_2: + type: OS::Neutron::Port + properties: + network: { get_param: source_net } + binding:vnic_type: direct + fixed_ips: + - subnet: { get_param: source_subnet } + + ### NETWORK FOR SENDING TRAFFIC + port_3: + type: OS::Neutron::Port + properties: + network: { get_param: destination_net } + binding:vnic_type: direct + fixed_ips: + - subnet: { get_param: destination_subnet } + + flavor: + type: OS::Nova::Flavor + properties: + disk: 20 + ram: 1024 + vcpus: 2 + #extra_specs: { node: { get_param: node }, "hw:cpu_policy": "#core_pinning_enabled", "hw:cpu_threads_policy": "#core_pinning_mode", "hw:mem_page_size": "#hugepages" } + extra_specs: { node: { get_param: node } } + + server: + type: OS::Nova::Server + properties: + name: vTC + key_name: test + image: ubuntu1404 + user_data: + str_replace: + template: | + #!/bin/sh + + # Creation of a user + NAME=$name + echo "Creating custom user..." + useradd clouduser -g admin -s /bin/bash -m + echo clouduser:secrete | chpasswd + echo "Enabling ssh password login..." + sed -i 's/PasswordAuthentication no/PasswordAuthentication yes/g' /etc/ssh/sshd_config + service ssh restart + sleep 1 + + # wake up interfaces + ifconfig eth1 up + ifconfig eth2 up + dhclient eth1 + dhclient eth2 + + sed -i 's/localhost/localhost vtc/g' /etc/hosts + ip route del 0/0 + route add default gw 192.168.200.1 + + AA=$(netstat -ie | grep -B1 $IP_FAMILY | awk '{ print $1 }') + BB=$(echo $AA | awk '{ print $1 }') + + # Setup Instrumentation Agent + rm -rf cimmaron + mkdir cimmaron + cd cimmaron + apt-get install -y zip + wget http://10.2.1.65/~iolie/merlin/MerlinAgent-12-06-2015-TNovaVM-001.zip + unzip MerlinAgent-12-06-2015-TNovaVM-001.zip + ./updateConfiguration.py ./instrumentation.cfg tags source=tnova_vm + ./updateConfiguration.py ./instrumentation.cfg tags role="$NAME" + nohup ./Agent.py ./instrumentation.cfg >log.out 2>&1 & + cd .. + + # Setup for PF_RING and bridge between interfaces + apt-get update + apt-get install -y git build-essential gcc libnuma-dev flex byacc libjson0-dev dh-autoreconf libpcap-dev libpulse-dev libtool pkg-config + + # Setup multicast + echo smcroute -d mgroup from $BB group 224.192.16.1 > /etc/smcroute.conf + cd /home/clouduser/ + git clone https://github.com/troglobit/smcroute.git + cd smcroute + sed -i 's/aclocal-1.11/aclocal/g' ./autogen.sh + sed -i 's/automake-1.11/automake/g' ./autogen.sh + ./autogen.sh + ./configure + make + make install + cd .. + touch multicast.sh + echo "#!/bin/bash" > multicast.sh + echo "while [ true ]" >> multicast.sh + echo "do" >> multicast.sh + echo " smcroute -k" >> multicast.sh + echo " smcroute -d" >> multicast.sh + echo " sleep 50" >> multicast.sh + echo "done" >> multicast.sh + chmod +x multicast.sh + ./multicast.sh & + + # Setup for PF_RING and bridge between interfaces + # Akis Repository + #git clone https://akiskourtis:ptindpi@bitbucket.org/akiskourtis/vtc.git + #cd vtc + #git checkout stable + + # Intel Repository + git clone http://vincenzox.m.riccobene%40intel.com:vincenzo@134.191.243.6:8081/t-nova/vtc_master.git + cd vtc_master + + cd nDPI + NDPI_DIR=$(pwd) + echo $NDPI_DIR + NDPI_INCLUDE=$(pwd)/src/include + echo $NDPI_INCLUDE + ./autogen.sh + ./configure + make + make install + cd .. + cd PF_RING + make + cd userland/examples/ + sed -i 's/EXTRA_LIBS =/EXTRA_LIBS = '"${NDPI_DIR}"'/src/lib/.libs/libndpi.a -ljson-c/g' ./Makefile + sed -i 's/ -Ithird-party/ -Ithird-party -I'"$NDPI_INCLUDE"' -I'"$NDPI_DIR"'/g' ./Makefile + make + cd ../.. + cd .. + cd .. + #insmod ./vtc/PF_RING/kernel/pf_ring.ko min_num_slots=8192 enable_debug=1 quick_mode=1 enable_tx_capture=0 + #./vtc/PF_RING/userland/examples/pfbridge -a eth1 -b eth2 & + insmod ./vtc_master/PF_RING/kernel/pf_ring.ko min_num_slots=8192 enable_debug=1 quick_mode=1 enable_tx_capture=0 + ./vtc_master/PF_RING/userland/examples/pfbridge -a eth1 -b eth2 & + wc_notify --data-binary '{"status": "SUCCESS"}' + params: + wc_notify: { get_attr: ['wait_handle', 'curl_cli'] } + $name: { get_param: name } + $IP_FAMILY: { get_param: ip_family } + + flavor: { get_resource: flavor } + networks: + - port: { get_resource: port_1 } + - port: { get_resource: port_2 } + - port: { get_resource: port_3 } +outputs: diff --git a/yardstick/vTC/apexlake/tests/data/generated_templates/experiment_2.yaml.json b/yardstick/vTC/apexlake/tests/data/generated_templates/experiment_2.yaml.json new file mode 100644 index 000000000..9f246891d --- /dev/null +++ b/yardstick/vTC/apexlake/tests/data/generated_templates/experiment_2.yaml.json @@ -0,0 +1 @@ +{"vnic_type": "direct", "ram": "1024", "vcpus": "2"} \ No newline at end of file diff --git a/yardstick/vTC/apexlake/tests/data/test_experiments/experiment_1/benchmark_1.csv b/yardstick/vTC/apexlake/tests/data/test_experiments/experiment_1/benchmark_1.csv new file mode 100644 index 000000000..f5f2932d0 --- /dev/null +++ b/yardstick/vTC/apexlake/tests/data/test_experiments/experiment_1/benchmark_1.csv @@ -0,0 +1,3 @@ +conf_1;conf_3;conf_2;point_4;point_5;point_6;point_1;point_2;point_3 +conf_value_1;conf_value_3;conf_value_2;?;?;?;value_1;value_2;value_3 +conf_value_1;conf_value_3;conf_value_2;value_4;value_5;value_6;?;?;? diff --git a/yardstick/vTC/apexlake/tests/data/test_experiments/experiment_1/metadata.json b/yardstick/vTC/apexlake/tests/data/test_experiments/experiment_1/metadata.json new file mode 100644 index 000000000..ff4cebf41 --- /dev/null +++ b/yardstick/vTC/apexlake/tests/data/test_experiments/experiment_1/metadata.json @@ -0,0 +1 @@ +{"location": "tests/data/experiments/experiment_1/metadata.json", "item_2": "value_2", "item_3": "value_3", "item_1": "value_1"} \ No newline at end of file diff --git a/yardstick/vTC/apexlake/tests/data/test_experiments/results_benchmark_1.csv b/yardstick/vTC/apexlake/tests/data/test_experiments/results_benchmark_1.csv new file mode 100644 index 000000000..4662dd2be --- /dev/null +++ b/yardstick/vTC/apexlake/tests/data/test_experiments/results_benchmark_1.csv @@ -0,0 +1,5 @@ +conf_5;conf_4;conf_6;conf_1;conf_3;conf_2;point_12;point_10;point_11;point_4;point_5;point_6;point_8;point_9;point_7;point_1;point_2;point_3 +?;?;?;conf_value_1;conf_value_3;conf_value_2;?;?;?;?;?;?;?;?;?;value_1;value_2;value_3 +?;?;?;conf_value_1;conf_value_3;conf_value_2;?;?;?;value_4;value_5;value_6;?;?;?;?;?;? +conf_value_5;conf_value_4;conf_value_6;?;?;?;?;?;?;?;?;?;value_8;value_9;value_7;?;?;? +conf_value_5;conf_value_4;conf_value_6;?;?;?;value_12;value_10;value_11;?;?;?;?;?;?;?;?;? diff --git a/yardstick/vTC/apexlake/tests/data/test_templates/VTC_base_single_vm_wait.tmp b/yardstick/vTC/apexlake/tests/data/test_templates/VTC_base_single_vm_wait.tmp new file mode 100644 index 000000000..aa3959fc1 --- /dev/null +++ b/yardstick/vTC/apexlake/tests/data/test_templates/VTC_base_single_vm_wait.tmp @@ -0,0 +1,199 @@ +heat_template_version: 2014-10-16 +description: HOT template to create a DPI + +parameters: + default_net: + type: string + default_subnet: + type: string + source_net: + type: string + source_subnet: + type: string + destination_net: + type: string + destination_subnet: + type: string + internal_net: + type: string + internal_subnet: + type: string + node: + type: string + default: compB + name: + type: string + default: vtc + ip_family: + type: string + timeout: + type: number + description: Timeout for WaitCondition, depends on your image and environment + default: 1000 + +resources: + wait_condition: + type: OS::Heat::WaitCondition + properties: + handle: {get_resource: wait_handle} + count: 1 + timeout: {get_param: timeout} + + wait_handle: + type: OS::Heat::WaitConditionHandle + + + ### DEFAULT NETWORK FOR MERLIN DATA + port_1: + type: OS::Neutron::Port + properties: + network: { get_param: default_net } + binding:vnic_type: normal + fixed_ips: + - subnet: { get_param: default_subnet } + + ### NETWORK FOR RECEIVING TRAFFIC + port_2: + type: OS::Neutron::Port + properties: + network: { get_param: source_net } + binding:vnic_type: #vnic_type + fixed_ips: + - subnet: { get_param: source_subnet } + + ### NETWORK FOR SENDING TRAFFIC + port_3: + type: OS::Neutron::Port + properties: + network: { get_param: destination_net } + binding:vnic_type: #vnic_type + fixed_ips: + - subnet: { get_param: destination_subnet } + + flavor: + type: OS::Nova::Flavor + properties: + disk: 20 + ram: #ram + vcpus: #vcpus + #extra_specs: { node: { get_param: node }, "hw:cpu_policy": "#core_pinning_enabled", "hw:cpu_threads_policy": "#core_pinning_mode", "hw:mem_page_size": "#hugepages" } + extra_specs: { node: { get_param: node } } + + server: + type: OS::Nova::Server + properties: + name: vTC + key_name: test + image: ubuntu1404 + user_data: + str_replace: + template: | + #!/bin/sh + + # Creation of a user + NAME=$name + echo "Creating custom user..." + useradd clouduser -g admin -s /bin/bash -m + echo clouduser:secrete | chpasswd + echo "Enabling ssh password login..." + sed -i 's/PasswordAuthentication no/PasswordAuthentication yes/g' /etc/ssh/sshd_config + service ssh restart + sleep 1 + + # wake up interfaces + ifconfig eth1 up + ifconfig eth2 up + dhclient eth1 + dhclient eth2 + + sed -i 's/localhost/localhost vtc/g' /etc/hosts + ip route del 0/0 + route add default gw 192.168.200.1 + + AA=$(netstat -ie | grep -B1 $IP_FAMILY | awk '{ print $1 }') + BB=$(echo $AA | awk '{ print $1 }') + + # Setup Instrumentation Agent + rm -rf cimmaron + mkdir cimmaron + cd cimmaron + apt-get install -y zip + wget http://10.2.1.65/~iolie/merlin/MerlinAgent-12-06-2015-TNovaVM-001.zip + unzip MerlinAgent-12-06-2015-TNovaVM-001.zip + ./updateConfiguration.py ./instrumentation.cfg tags source=tnova_vm + ./updateConfiguration.py ./instrumentation.cfg tags role="$NAME" + nohup ./Agent.py ./instrumentation.cfg >log.out 2>&1 & + cd .. + + # Setup for PF_RING and bridge between interfaces + apt-get update + apt-get install -y git build-essential gcc libnuma-dev flex byacc libjson0-dev dh-autoreconf libpcap-dev libpulse-dev libtool pkg-config + + # Setup multicast + echo smcroute -d mgroup from $BB group 224.192.16.1 > /etc/smcroute.conf + cd /home/clouduser/ + git clone https://github.com/troglobit/smcroute.git + cd smcroute + sed -i 's/aclocal-1.11/aclocal/g' ./autogen.sh + sed -i 's/automake-1.11/automake/g' ./autogen.sh + ./autogen.sh + ./configure + make + make install + cd .. + touch multicast.sh + echo "#!/bin/bash" > multicast.sh + echo "while [ true ]" >> multicast.sh + echo "do" >> multicast.sh + echo " smcroute -k" >> multicast.sh + echo " smcroute -d" >> multicast.sh + echo " sleep 50" >> multicast.sh + echo "done" >> multicast.sh + chmod +x multicast.sh + ./multicast.sh & + + # Setup for PF_RING and bridge between interfaces + # Akis Repository + #git clone https://akiskourtis:ptindpi@bitbucket.org/akiskourtis/vtc.git + #cd vtc + #git checkout stable + + # Intel Repository + git clone http://vincenzox.m.riccobene%40intel.com:vincenzo@134.191.243.6:8081/t-nova/vtc_master.git + cd vtc_master + + cd nDPI + NDPI_DIR=$(pwd) + echo $NDPI_DIR + NDPI_INCLUDE=$(pwd)/src/include + echo $NDPI_INCLUDE + ./autogen.sh + ./configure + make + make install + cd .. + cd PF_RING + make + cd userland/examples/ + sed -i 's/EXTRA_LIBS =/EXTRA_LIBS = '"${NDPI_DIR}"'/src/lib/.libs/libndpi.a -ljson-c/g' ./Makefile + sed -i 's/ -Ithird-party/ -Ithird-party -I'"$NDPI_INCLUDE"' -I'"$NDPI_DIR"'/g' ./Makefile + make + cd ../.. + cd .. + cd .. + #insmod ./vtc/PF_RING/kernel/pf_ring.ko min_num_slots=8192 enable_debug=1 quick_mode=1 enable_tx_capture=0 + #./vtc/PF_RING/userland/examples/pfbridge -a eth1 -b eth2 & + insmod ./vtc_master/PF_RING/kernel/pf_ring.ko min_num_slots=8192 enable_debug=1 quick_mode=1 enable_tx_capture=0 + ./vtc_master/PF_RING/userland/examples/pfbridge -a eth1 -b eth2 & + wc_notify --data-binary '{"status": "SUCCESS"}' + params: + wc_notify: { get_attr: ['wait_handle', 'curl_cli'] } + $name: { get_param: name } + $IP_FAMILY: { get_param: ip_family } + + flavor: { get_resource: flavor } + networks: + - port: { get_resource: port_1 } + - port: { get_resource: port_2 } + - port: { get_resource: port_3 } +outputs: \ No newline at end of file diff --git a/yardstick/vTC/apexlake/tests/data/test_templates/VTC_base_single_vm_wait_1.yaml b/yardstick/vTC/apexlake/tests/data/test_templates/VTC_base_single_vm_wait_1.yaml new file mode 100644 index 000000000..5788980b0 --- /dev/null +++ b/yardstick/vTC/apexlake/tests/data/test_templates/VTC_base_single_vm_wait_1.yaml @@ -0,0 +1,199 @@ +heat_template_version: 2014-10-16 +description: HOT template to create a DPI + +parameters: + default_net: + type: string + default_subnet: + type: string + source_net: + type: string + source_subnet: + type: string + destination_net: + type: string + destination_subnet: + type: string + internal_net: + type: string + internal_subnet: + type: string + node: + type: string + default: compB + name: + type: string + default: vtc + ip_family: + type: string + timeout: + type: number + description: Timeout for WaitCondition, depends on your image and environment + default: 1000 + +resources: + wait_condition: + type: OS::Heat::WaitCondition + properties: + handle: {get_resource: wait_handle} + count: 1 + timeout: {get_param: timeout} + + wait_handle: + type: OS::Heat::WaitConditionHandle + + + ### DEFAULT NETWORK FOR MERLIN DATA + port_1: + type: OS::Neutron::Port + properties: + network: { get_param: default_net } + binding:vnic_type: normal + fixed_ips: + - subnet: { get_param: default_subnet } + + ### NETWORK FOR RECEIVING TRAFFIC + port_2: + type: OS::Neutron::Port + properties: + network: { get_param: source_net } + binding:vnic_type: normal + fixed_ips: + - subnet: { get_param: source_subnet } + + ### NETWORK FOR SENDING TRAFFIC + port_3: + type: OS::Neutron::Port + properties: + network: { get_param: destination_net } + binding:vnic_type: normal + fixed_ips: + - subnet: { get_param: destination_subnet } + + flavor: + type: OS::Nova::Flavor + properties: + disk: 20 + ram: 1024 + vcpus: 2 + #extra_specs: { node: { get_param: node }, "hw:cpu_policy": "#core_pinning_enabled", "hw:cpu_threads_policy": "#core_pinning_mode", "hw:mem_page_size": "#hugepages" } + extra_specs: { node: { get_param: node } } + + server: + type: OS::Nova::Server + properties: + name: vTC + key_name: test + image: ubuntu1404 + user_data: + str_replace: + template: | + #!/bin/sh + + # Creation of a user + NAME=$name + echo "Creating custom user..." + useradd clouduser -g admin -s /bin/bash -m + echo clouduser:secrete | chpasswd + echo "Enabling ssh password login..." + sed -i 's/PasswordAuthentication no/PasswordAuthentication yes/g' /etc/ssh/sshd_config + service ssh restart + sleep 1 + + # wake up interfaces + ifconfig eth1 up + ifconfig eth2 up + dhclient eth1 + dhclient eth2 + + sed -i 's/localhost/localhost vtc/g' /etc/hosts + ip route del 0/0 + route add default gw 192.168.200.1 + + AA=$(netstat -ie | grep -B1 $IP_FAMILY | awk '{ print $1 }') + BB=$(echo $AA | awk '{ print $1 }') + + # Setup Instrumentation Agent + rm -rf cimmaron + mkdir cimmaron + cd cimmaron + apt-get install -y zip + wget http://10.2.1.65/~iolie/merlin/MerlinAgent-12-06-2015-TNovaVM-001.zip + unzip MerlinAgent-12-06-2015-TNovaVM-001.zip + ./updateConfiguration.py ./instrumentation.cfg tags source=tnova_vm + ./updateConfiguration.py ./instrumentation.cfg tags role="$NAME" + nohup ./Agent.py ./instrumentation.cfg >log.out 2>&1 & + cd .. + + # Setup for PF_RING and bridge between interfaces + apt-get update + apt-get install -y git build-essential gcc libnuma-dev flex byacc libjson0-dev dh-autoreconf libpcap-dev libpulse-dev libtool pkg-config + + # Setup multicast + echo smcroute -d mgroup from $BB group 224.192.16.1 > /etc/smcroute.conf + cd /home/clouduser/ + git clone https://github.com/troglobit/smcroute.git + cd smcroute + sed -i 's/aclocal-1.11/aclocal/g' ./autogen.sh + sed -i 's/automake-1.11/automake/g' ./autogen.sh + ./autogen.sh + ./configure + make + make install + cd .. + touch multicast.sh + echo "#!/bin/bash" > multicast.sh + echo "while [ true ]" >> multicast.sh + echo "do" >> multicast.sh + echo " smcroute -k" >> multicast.sh + echo " smcroute -d" >> multicast.sh + echo " sleep 50" >> multicast.sh + echo "done" >> multicast.sh + chmod +x multicast.sh + ./multicast.sh & + + # Setup for PF_RING and bridge between interfaces + # Akis Repository + #git clone https://akiskourtis:ptindpi@bitbucket.org/akiskourtis/vtc.git + #cd vtc + #git checkout stable + + # Intel Repository + git clone http://vincenzox.m.riccobene%40intel.com:vincenzo@134.191.243.6:8081/t-nova/vtc_master.git + cd vtc_master + + cd nDPI + NDPI_DIR=$(pwd) + echo $NDPI_DIR + NDPI_INCLUDE=$(pwd)/src/include + echo $NDPI_INCLUDE + ./autogen.sh + ./configure + make + make install + cd .. + cd PF_RING + make + cd userland/examples/ + sed -i 's/EXTRA_LIBS =/EXTRA_LIBS = '"${NDPI_DIR}"'/src/lib/.libs/libndpi.a -ljson-c/g' ./Makefile + sed -i 's/ -Ithird-party/ -Ithird-party -I'"$NDPI_INCLUDE"' -I'"$NDPI_DIR"'/g' ./Makefile + make + cd ../.. + cd .. + cd .. + #insmod ./vtc/PF_RING/kernel/pf_ring.ko min_num_slots=8192 enable_debug=1 quick_mode=1 enable_tx_capture=0 + #./vtc/PF_RING/userland/examples/pfbridge -a eth1 -b eth2 & + insmod ./vtc_master/PF_RING/kernel/pf_ring.ko min_num_slots=8192 enable_debug=1 quick_mode=1 enable_tx_capture=0 + ./vtc_master/PF_RING/userland/examples/pfbridge -a eth1 -b eth2 & + wc_notify --data-binary '{"status": "SUCCESS"}' + params: + wc_notify: { get_attr: ['wait_handle', 'curl_cli'] } + $name: { get_param: name } + $IP_FAMILY: { get_param: ip_family } + + flavor: { get_resource: flavor } + networks: + - port: { get_resource: port_1 } + - port: { get_resource: port_2 } + - port: { get_resource: port_3 } +outputs: diff --git a/yardstick/vTC/apexlake/tests/data/test_templates/VTC_base_single_vm_wait_1.yaml.json b/yardstick/vTC/apexlake/tests/data/test_templates/VTC_base_single_vm_wait_1.yaml.json new file mode 100644 index 000000000..3af9a1cc7 --- /dev/null +++ b/yardstick/vTC/apexlake/tests/data/test_templates/VTC_base_single_vm_wait_1.yaml.json @@ -0,0 +1 @@ +{"vnic_type": "normal", "ram": "1024", "vcpus": "2"} \ No newline at end of file diff --git a/yardstick/vTC/apexlake/tests/data/test_templates/VTC_base_single_vm_wait_2.yaml b/yardstick/vTC/apexlake/tests/data/test_templates/VTC_base_single_vm_wait_2.yaml new file mode 100644 index 000000000..44a81d081 --- /dev/null +++ b/yardstick/vTC/apexlake/tests/data/test_templates/VTC_base_single_vm_wait_2.yaml @@ -0,0 +1,199 @@ +heat_template_version: 2014-10-16 +description: HOT template to create a DPI + +parameters: + default_net: + type: string + default_subnet: + type: string + source_net: + type: string + source_subnet: + type: string + destination_net: + type: string + destination_subnet: + type: string + internal_net: + type: string + internal_subnet: + type: string + node: + type: string + default: compB + name: + type: string + default: vtc + ip_family: + type: string + timeout: + type: number + description: Timeout for WaitCondition, depends on your image and environment + default: 1000 + +resources: + wait_condition: + type: OS::Heat::WaitCondition + properties: + handle: {get_resource: wait_handle} + count: 1 + timeout: {get_param: timeout} + + wait_handle: + type: OS::Heat::WaitConditionHandle + + + ### DEFAULT NETWORK FOR MERLIN DATA + port_1: + type: OS::Neutron::Port + properties: + network: { get_param: default_net } + binding:vnic_type: normal + fixed_ips: + - subnet: { get_param: default_subnet } + + ### NETWORK FOR RECEIVING TRAFFIC + port_2: + type: OS::Neutron::Port + properties: + network: { get_param: source_net } + binding:vnic_type: direct + fixed_ips: + - subnet: { get_param: source_subnet } + + ### NETWORK FOR SENDING TRAFFIC + port_3: + type: OS::Neutron::Port + properties: + network: { get_param: destination_net } + binding:vnic_type: direct + fixed_ips: + - subnet: { get_param: destination_subnet } + + flavor: + type: OS::Nova::Flavor + properties: + disk: 20 + ram: 1024 + vcpus: 2 + #extra_specs: { node: { get_param: node }, "hw:cpu_policy": "#core_pinning_enabled", "hw:cpu_threads_policy": "#core_pinning_mode", "hw:mem_page_size": "#hugepages" } + extra_specs: { node: { get_param: node } } + + server: + type: OS::Nova::Server + properties: + name: vTC + key_name: test + image: ubuntu1404 + user_data: + str_replace: + template: | + #!/bin/sh + + # Creation of a user + NAME=$name + echo "Creating custom user..." + useradd clouduser -g admin -s /bin/bash -m + echo clouduser:secrete | chpasswd + echo "Enabling ssh password login..." + sed -i 's/PasswordAuthentication no/PasswordAuthentication yes/g' /etc/ssh/sshd_config + service ssh restart + sleep 1 + + # wake up interfaces + ifconfig eth1 up + ifconfig eth2 up + dhclient eth1 + dhclient eth2 + + sed -i 's/localhost/localhost vtc/g' /etc/hosts + ip route del 0/0 + route add default gw 192.168.200.1 + + AA=$(netstat -ie | grep -B1 $IP_FAMILY | awk '{ print $1 }') + BB=$(echo $AA | awk '{ print $1 }') + + # Setup Instrumentation Agent + rm -rf cimmaron + mkdir cimmaron + cd cimmaron + apt-get install -y zip + wget http://10.2.1.65/~iolie/merlin/MerlinAgent-12-06-2015-TNovaVM-001.zip + unzip MerlinAgent-12-06-2015-TNovaVM-001.zip + ./updateConfiguration.py ./instrumentation.cfg tags source=tnova_vm + ./updateConfiguration.py ./instrumentation.cfg tags role="$NAME" + nohup ./Agent.py ./instrumentation.cfg >log.out 2>&1 & + cd .. + + # Setup for PF_RING and bridge between interfaces + apt-get update + apt-get install -y git build-essential gcc libnuma-dev flex byacc libjson0-dev dh-autoreconf libpcap-dev libpulse-dev libtool pkg-config + + # Setup multicast + echo smcroute -d mgroup from $BB group 224.192.16.1 > /etc/smcroute.conf + cd /home/clouduser/ + git clone https://github.com/troglobit/smcroute.git + cd smcroute + sed -i 's/aclocal-1.11/aclocal/g' ./autogen.sh + sed -i 's/automake-1.11/automake/g' ./autogen.sh + ./autogen.sh + ./configure + make + make install + cd .. + touch multicast.sh + echo "#!/bin/bash" > multicast.sh + echo "while [ true ]" >> multicast.sh + echo "do" >> multicast.sh + echo " smcroute -k" >> multicast.sh + echo " smcroute -d" >> multicast.sh + echo " sleep 50" >> multicast.sh + echo "done" >> multicast.sh + chmod +x multicast.sh + ./multicast.sh & + + # Setup for PF_RING and bridge between interfaces + # Akis Repository + #git clone https://akiskourtis:ptindpi@bitbucket.org/akiskourtis/vtc.git + #cd vtc + #git checkout stable + + # Intel Repository + git clone http://vincenzox.m.riccobene%40intel.com:vincenzo@134.191.243.6:8081/t-nova/vtc_master.git + cd vtc_master + + cd nDPI + NDPI_DIR=$(pwd) + echo $NDPI_DIR + NDPI_INCLUDE=$(pwd)/src/include + echo $NDPI_INCLUDE + ./autogen.sh + ./configure + make + make install + cd .. + cd PF_RING + make + cd userland/examples/ + sed -i 's/EXTRA_LIBS =/EXTRA_LIBS = '"${NDPI_DIR}"'/src/lib/.libs/libndpi.a -ljson-c/g' ./Makefile + sed -i 's/ -Ithird-party/ -Ithird-party -I'"$NDPI_INCLUDE"' -I'"$NDPI_DIR"'/g' ./Makefile + make + cd ../.. + cd .. + cd .. + #insmod ./vtc/PF_RING/kernel/pf_ring.ko min_num_slots=8192 enable_debug=1 quick_mode=1 enable_tx_capture=0 + #./vtc/PF_RING/userland/examples/pfbridge -a eth1 -b eth2 & + insmod ./vtc_master/PF_RING/kernel/pf_ring.ko min_num_slots=8192 enable_debug=1 quick_mode=1 enable_tx_capture=0 + ./vtc_master/PF_RING/userland/examples/pfbridge -a eth1 -b eth2 & + wc_notify --data-binary '{"status": "SUCCESS"}' + params: + wc_notify: { get_attr: ['wait_handle', 'curl_cli'] } + $name: { get_param: name } + $IP_FAMILY: { get_param: ip_family } + + flavor: { get_resource: flavor } + networks: + - port: { get_resource: port_1 } + - port: { get_resource: port_2 } + - port: { get_resource: port_3 } +outputs: diff --git a/yardstick/vTC/apexlake/tests/data/test_templates/VTC_base_single_vm_wait_2.yaml.json b/yardstick/vTC/apexlake/tests/data/test_templates/VTC_base_single_vm_wait_2.yaml.json new file mode 100644 index 000000000..9f246891d --- /dev/null +++ b/yardstick/vTC/apexlake/tests/data/test_templates/VTC_base_single_vm_wait_2.yaml.json @@ -0,0 +1 @@ +{"vnic_type": "direct", "ram": "1024", "vcpus": "2"} \ No newline at end of file -- cgit 1.2.3-korg