diff options
50 files changed, 531 insertions, 465 deletions
diff --git a/ansible/build_yardstick_image.yml b/ansible/build_yardstick_image.yml index 9a65d3ae0..025573b4b 100644 --- a/ansible/build_yardstick_image.yml +++ b/ansible/build_yardstick_image.yml @@ -28,11 +28,9 @@ sha256sums_filename: "{{ sha256sums_path|basename }}" sha256sums_url: "{{ lookup('env', 'SHA256SUMS_URL')|default('https://' ~ host ~ '/' ~ sha256sums_path, true) }}" - mountdir: "{{ lookup('env', 'mountdir')|default('/mnt/yardstick', true) }}" workspace: "{{ lookup('env', 'workspace')|default('/tmp/workspace/yardstick', true) }}" imgfile: "{{ workspace }}/yardstick-image.img" raw_imgfile_basename: "yardstick-{{ release }}-server.raw" - raw_imgfile: "{{ workspace }}/{{ raw_imgfile_basename }}" environment: PATH: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/root/bin @@ -42,6 +40,12 @@ - package: name=parted state=present + - set_fact: + mountdir: "{{ lookup('env', 'mountdir')|default('/mnt/yardstick', true) }}" + + - set_fact: + raw_imgfile: "{{ workspace }}/{{ raw_imgfile_basename }}" + # cleanup non-lxd - name: unmount all old mount points mount: @@ -260,9 +264,16 @@ ansible_python_interpreter: /usr/bin/python3 # set this host variable here nameserver_ip: "{{ ansible_dns.nameservers[0] }}" + image_type: vm - name: include {{ img_modify_playbook }} include: "{{ img_modify_playbook }}" - name: run post build tasks include: post_build_yardstick_image.yml + +- hosts: localhost + + tasks: + - debug: + msg: "yardstick image = {{ raw_imgfile }}" diff --git a/ansible/roles/install_prox/tasks/RedHat.yml b/ansible/install_dependencies.yml index 69fa83b31..001418497 100644 --- a/ansible/roles/install_prox/tasks/RedHat.yml +++ b/ansible/install_dependencies.yml @@ -12,11 +12,9 @@ # See the License for the specific language governing permissions and # limitations under the License. --- -- name: Install PROX build dependencies - action: "{{ ansible_pkg_mgr }} name={{ item }} state=present" - with_items: - - pkgconfig - - lua-devel - - ncurses-devel - - libedit-devel +- name: install yardstick dependencies + hosts: all + + roles: + - install_dependencies diff --git a/ansible/library/find_kernel.py b/ansible/library/find_kernel.py new file mode 100644 index 000000000..4623bce89 --- /dev/null +++ b/ansible/library/find_kernel.py @@ -0,0 +1,93 @@ +#!/usr/bin/env python +# Copyright (c) 2017 Intel Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import os + +DOCUMENTATION = ''' +--- +module: find_kernel +short_description: Look for the system kernel on the filesystem +description: + - We need to find the kernel on non-booted systems, disk images, chroots, etc. + To do this we check /lib/modules and look for the kernel that matches the running + kernle, or failing that we look for the highest-numbered kernel +options: + kernel: starting kernel to check + module_dir: Override kernel module dir, default /lib/modules +''' + +LIB_MODULES = "/lib/modules" + + +def try_int(s, *args): + """Convert to integer if possible.""" + try: + return int(s) + except (TypeError, ValueError): + return args[0] if args else s + + +def convert_ints(fields, orig): + return tuple((try_int(f) for f in fields)), orig + + +def main(): + module = AnsibleModule( + argument_spec={ + 'kernel': {'required': True, 'type': 'str'}, + 'module_dir': {'required': False, 'type': 'str', 'default': LIB_MODULES}, + } + ) + params = module.params + kernel = params['kernel'] + module_dir = params['module_dir'] + + if os.path.isdir(os.path.join(module_dir, kernel)): + module.exit_json(changed=False, kernel=kernel) + + kernel_dirs = os.listdir(module_dir) + kernels = sorted((convert_ints(re.split('[-.]', k), k) for k in kernel_dirs), reverse=True) + try: + newest_kernel = kernels[0][-1] + except IndexError: + module.fail_json(msg="Unable to find kernels in {}".format(module_dir)) + + if os.path.isdir(os.path.join(module_dir, newest_kernel)): + module.exit_json(changed=False, kernel=newest_kernel) + else: + return kernel + + module.fail_json(msg="Unable to kernel other than {}".format(kernel)) + + +# <<INCLUDE_ANSIBLE_MODULE_COMMON>> +from ansible.module_utils.basic import * # noqa + +if __name__ == '__main__': + main() + +""" + +get kernel from uname, ansible_kernel +look for that kernel in /lib/modules +if that kernel doens't exist +sort lib/modules +use latest + +parse grub + + + +""" diff --git a/ansible/post_build_yardstick_image.yml b/ansible/post_build_yardstick_image.yml index b0c418721..d1f2a73a8 100644 --- a/ansible/post_build_yardstick_image.yml +++ b/ansible/post_build_yardstick_image.yml @@ -40,5 +40,3 @@ - name: kpartx -dv to delete all image partition device nodes command: kpartx -dv "{{ raw_imgfile }}" ignore_errors: true - - - command: losetup -d "{{ loop_device }}"
\ No newline at end of file diff --git a/ansible/roles/download_dpdk/tasks/main.yml b/ansible/roles/download_dpdk/tasks/main.yml index 322f3cd0c..bcb5dde1a 100644 --- a/ansible/roles/download_dpdk/tasks/main.yml +++ b/ansible/roles/download_dpdk/tasks/main.yml @@ -16,6 +16,10 @@ var: dpdk_version verbosity: 2 +- file: + path: "{{ dpdk_dest }}" + state: directory + - name: fetch dpdk get_url: url: "{{ dpdk_url }}" @@ -24,12 +28,17 @@ checksum: "{{ dpdk_sha256s[dpdk_version] }}" - unarchive: - src: "{{ clone_dest }}/{{ dpdk_file }}" - dest: "{{ clone_dest }}/" + src: "{{ dpdk_dest }}/{{ dpdk_file }}" + dest: "{{ dpdk_dest }}/" copy: no +- name: cleanup tar file to save space + file: + path: "{{ dpdk_dest }}/{{ dpdk_file }}" + state: absent + - set_fact: - dpdk_path: "{{ clone_dest }}/{{ dpdk_unarchive }}" + dpdk_path: "{{ dpdk_dest }}/{{ dpdk_unarchive }}" - set_fact: RTE_SDK: "{{ dpdk_path }}" diff --git a/ansible/roles/download_prox/defaults/main.yml b/ansible/roles/download_prox/defaults/main.yml deleted file mode 100644 index 797db3125..000000000 --- a/ansible/roles/download_prox/defaults/main.yml +++ /dev/null @@ -1,12 +0,0 @@ ---- -prox_version: v037 -prox_suffix: - v035: "zip" - v037: "tar.gz" -prox_url: "https://01.org/sites/default/files/downloads/intelr-data-plane-performance-demonstrators/dppd-prox-{{ prox_version }}.{{ prox_suffix[prox_version] }}" -prox_file: "{{ prox_url|basename }}" -prox_unarchive: "{{ prox_file|regex_replace('[.]zip$', '')|regex_replace('-prox-', '-PROX-') }}" -prox_dest: "{{ clone_dest }}/" -prox_sha256s: - v035: "sha256:f5d3f7c3855ca198d2babbc7045ed4373f0ddc13dc243fedbe23ed395ce65cc9" - v037: "sha256:a12d021fbc0f5ae55ab55a2bbf8f3b260705ce3e61866288f023ccabca010bca" diff --git a/ansible/roles/download_prox/tasks/main.yml b/ansible/roles/download_prox/tasks/main.yml deleted file mode 100644 index 0614c74fa..000000000 --- a/ansible/roles/download_prox/tasks/main.yml +++ /dev/null @@ -1,36 +0,0 @@ -# Copyright (c) 2017 Intel Corporation -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. ---- -- debug: - var: prox_version - verbosity: 2 - -- name: fetch prox - get_url: - url: "{{ prox_url }}" - dest: "{{ prox_dest }}" - validate_certs: False - checksum: "{{ prox_sha256s[prox_version] }}" - -- unarchive: - src: "{{ clone_dest }}/{{ prox_file }}" - dest: "{{ clone_dest }}/" - copy: no - -- debug: - var: prox_unarchive - verbosity: 2 - -- set_fact: - prox_path: "{{ clone_dest }}/{{ prox_unarchive }}"
\ No newline at end of file diff --git a/ansible/roles/download_samplevnfs/defaults/main.yml b/ansible/roles/download_samplevnfs/defaults/main.yml index 44449af6f..5f565a415 100644 --- a/ansible/roles/download_samplevnfs/defaults/main.yml +++ b/ansible/roles/download_samplevnfs/defaults/main.yml @@ -1,6 +1,4 @@ --- -samplevnf_version: "" -samplevnf_file: "{{ samplevnf_url|basename }}" -samplevnf_unarchive: "{{ samplevnf_file|regex_replace('[.]tar[.]gz$', '') }}" -samplevnf_dest: "{{ clone_dest }}/" -samplevnf_sha256: "sha256:36457cadfd23053c9ce1cf2e6f048cad6a5d04a7371d7a122e133dcbf007989e" +samplevnf_url: "https://git.opnfv.org/samplevnf" +samplevnf_dest: "{{ clone_dest }}/samplevnf" +samplevnf_version: "master" diff --git a/ansible/roles/download_samplevnfs/tasks/main.yml b/ansible/roles/download_samplevnfs/tasks/main.yml index 005d57dda..e9d4142c9 100644 --- a/ansible/roles/download_samplevnfs/tasks/main.yml +++ b/ansible/roles/download_samplevnfs/tasks/main.yml @@ -17,16 +17,13 @@ # verbosity: 2 - name: fetch samplevnf - get_url: - url: "{{ samplevnf_url }}" + git: + repo: "{{ samplevnf_url }}" dest: "{{ samplevnf_dest }}" - validate_certs: False - checksum: "{{ samplevnf_sha256 }}" - -- unarchive: - src: "{{ clone_dest }}/{{ samplevnf_file }}" - dest: "{{ clone_dest }}/" - copy: no + version: "{{ samplevnf_version }}" + accept_hostkey: yes + recursive: no + force: yes - set_fact: - samplevnf_path: "{{ clone_dest }}/{{ samplevnf_unarchive }}" + samplevnf_path: "{{ samplevnf_dest }}" diff --git a/ansible/roles/download_trex/defaults/main.yml b/ansible/roles/download_trex/defaults/main.yml index dd2dd27eb..6e8fa7020 100644 --- a/ansible/roles/download_trex/defaults/main.yml +++ b/ansible/roles/download_trex/defaults/main.yml @@ -12,9 +12,11 @@ # See the License for the specific language governing permissions and # limitations under the License. --- -trex_version: v2.20 +trex_version: v2.28 trex_url: "https://trex-tgn.cisco.com/trex/release/{{ trex_version }}.tar.gz" trex_file: "{{ trex_url|basename }}" trex_unarchive: "{{ trex_file|regex_replace('[.]tar.gz$', '') }}" trex_dest: "{{ clone_dest }}/" -trex_sha256: "sha256:eb5a069f758a36133a185c7e27af10834ca03d11441165403529fbd7844658fb" +trex_sha256s: + "v2.20": "sha256:eb5a069f758a36133a185c7e27af10834ca03d11441165403529fbd7844658fb" + "v2.28": "sha256:c3f08aabbd69dddb09843984d41acbe9ba1af6a6ef3380a7830f7c9e33134207" diff --git a/ansible/roles/download_trex/tasks/main.yml b/ansible/roles/download_trex/tasks/main.yml index 75a3169f0..baa964fd8 100644 --- a/ansible/roles/download_trex/tasks/main.yml +++ b/ansible/roles/download_trex/tasks/main.yml @@ -16,10 +16,16 @@ get_url: url: "{{ trex_url }}" dest: "{{ trex_dest }}" - checksum: "{{ trex_sha256 }}" + validate_certs: False + checksum: "{{ trex_sha256s[trex_version] }}" - name: unarchive Trex unarchive: - src: "{{ clone_dest }}/{{ trex_file }}" - dest: "{{ clone_dest }}/" + src: "{{ trex_dest }}/{{ trex_file }}" + dest: "{{ trex_dest }}/" copy: no + +- name: cleanup tar file to save space + file: + path: "{{ trex_dest }}/{{ trex_file }}" + state: absent diff --git a/ansible/roles/enable_hugepages_on_boot/defaults/main.yml b/ansible/roles/enable_hugepages_on_boot/defaults/main.yml new file mode 100644 index 000000000..015e01bab --- /dev/null +++ b/ansible/roles/enable_hugepages_on_boot/defaults/main.yml @@ -0,0 +1,3 @@ +--- +num_hugepages: auto +huge_pagesize_mb: 1024
\ No newline at end of file diff --git a/ansible/roles/enable_hugepages_on_boot/tasks/main.yml b/ansible/roles/enable_hugepages_on_boot/tasks/main.yml index f258bb684..be4a328a2 100755 --- a/ansible/roles/enable_hugepages_on_boot/tasks/main.yml +++ b/ansible/roles/enable_hugepages_on_boot/tasks/main.yml @@ -38,15 +38,11 @@ line: '{{ hugepage_param }}' state: present -- name: Update grub - command: "{{ update_grub[ansible_os_family] }}" - - name: create hugetables mount file: path: "{{ hugetable_mount }}" state: directory - - name: mount hugetlbfs mount: name: "{{ hugetable_mount }}" diff --git a/ansible/roles/install_dependencies/tasks/Debian.yml b/ansible/roles/install_dependencies/tasks/Debian.yml index ac8332287..0047a5e3b 100755 --- a/ansible/roles/install_dependencies/tasks/Debian.yml +++ b/ansible/roles/install_dependencies/tasks/Debian.yml @@ -29,6 +29,7 @@ - qemu-kvm - qemu-user-static - qemu-utils + - kpartx - libvirt0 - python-libvirt - bridge-utils diff --git a/ansible/roles/install_dependencies/tasks/RedHat.yml b/ansible/roles/install_dependencies/tasks/RedHat.yml index 4bb7c318e..b725933d0 100644 --- a/ansible/roles/install_dependencies/tasks/RedHat.yml +++ b/ansible/roles/install_dependencies/tasks/RedHat.yml @@ -46,6 +46,7 @@ - python-setuptools - libffi-devel - python-devel + - kpartx # don't install kernel-devel here it will trigger unwanted kernel upgrade # Mandatory Packages: # Don't use yum groups, they don't work, expand them manually diff --git a/ansible/roles/install_dpdk/defaults/main.yml b/ansible/roles/install_dpdk/defaults/main.yml new file mode 100644 index 000000000..fe2172401 --- /dev/null +++ b/ansible/roles/install_dpdk/defaults/main.yml @@ -0,0 +1,2 @@ +--- +INSTALL_BIN_PATH: "/opt/nsb_bin"
\ No newline at end of file diff --git a/ansible/roles/install_dpdk/tasks/Debian.yml b/ansible/roles/install_dpdk/tasks/Debian.yml index 486d40e11..c77e4f96a 100755 --- a/ansible/roles/install_dpdk/tasks/Debian.yml +++ b/ansible/roles/install_dpdk/tasks/Debian.yml @@ -17,3 +17,6 @@ with_items: - libpcap-dev +- name: Install kernel headers + action: "{{ ansible_pkg_mgr }} name=linux-headers-{{ dpdk_kernel }} state=present" + diff --git a/ansible/roles/install_dpdk/tasks/RedHat.yml b/ansible/roles/install_dpdk/tasks/RedHat.yml index af35c9b3e..2fb249eae 100644 --- a/ansible/roles/install_dpdk/tasks/RedHat.yml +++ b/ansible/roles/install_dpdk/tasks/RedHat.yml @@ -17,3 +17,5 @@ with_items: - libpcap-devel +- name: Install kernel headers + action: "{{ ansible_pkg_mgr }} name=kernel-headers-{{ dpdk_kernel }} state=present" diff --git a/ansible/roles/install_dpdk/tasks/main.yml b/ansible/roles/install_dpdk/tasks/main.yml index fca0e33af..cab093ad5 100644 --- a/ansible/roles/install_dpdk/tasks/main.yml +++ b/ansible/roles/install_dpdk/tasks/main.yml @@ -20,8 +20,22 @@ # with_fileglob: # - "{{ local_nsb_path }}/patches/dpdk_custom_patch/0*.patch" +- name: find kernel for image, (including chroot) + find_kernel: + kernel: "{{ ansible_kernel }}" + register: found_kernel + +# Do this before installing kernel headers +- name: Set dpdk_kernel to be the kernel we found + set_fact: + dpdk_kernel: "{{ found_kernel.kernel }}" + - include: "{{ ansible_os_family }}.yml" +- name: set RTE_KERNELDIR to point to found kernel + set_fact: + RTE_KERNELDIR: "/lib/modules/{{ dpdk_kernel }}/build" + - my_make: chdir: "{{ dpdk_path }}" target: config @@ -29,6 +43,8 @@ T: "{{ dpdk_make_arch }}" O: "{{ dpdk_make_arch }}" extra_args: "-j {{ ansible_processor_vcpus }}" + environment: + RTE_KERNELDIR: "{{ RTE_KERNELDIR }}" - name: enable RTE_PORT_STATS_COLLECT lineinfile: @@ -57,6 +73,8 @@ - my_make: chdir: "{{ dpdk_path }}/{{ dpdk_make_arch}}" extra_args: "-j {{ ansible_processor_vcpus }}" + environment: + RTE_KERNELDIR: "{{ RTE_KERNELDIR }}" - file: path: "{{ dpdk_module_dir}}" @@ -67,7 +85,8 @@ dest: "{{ dpdk_module_dir }}/igb_uio.ko" remote_src: yes -- command: depmod -a +- name: run depmod for dpdk_kernel + command: depmod "{{ dpdk_kernel }}" - file: path: "{{ INSTALL_BIN_PATH }}" diff --git a/ansible/roles/install_dpdk/vars/main.yml b/ansible/roles/install_dpdk/vars/main.yml index 730215c90..1cc4f1583 100644 --- a/ansible/roles/install_dpdk/vars/main.yml +++ b/ansible/roles/install_dpdk/vars/main.yml @@ -1,6 +1,6 @@ --- dpdk_make_arch: x86_64-native-linuxapp-gcc -dpdk_module_dir: "/lib/modules/{{ ansible_kernel }}/extra" +dpdk_module_dir: "/lib/modules/{{ dpdk_kernel }}/extra" hugetable_mount: /mnt/huge dpdk_devbind: "16.07": "{{ dpdk_path }}/tools/dpdk-devbind.py" diff --git a/ansible/roles/install_prox/tasks/Debian.yml b/ansible/roles/install_prox/tasks/Debian.yml deleted file mode 100755 index 00a31fc41..000000000 --- a/ansible/roles/install_prox/tasks/Debian.yml +++ /dev/null @@ -1,24 +0,0 @@ -# Copyright (c) 2017 Intel Corporation. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. ---- -- name: Install PROX build dependencies - action: "{{ ansible_pkg_mgr }} name={{ item }} state=present" - with_items: - - pkg-config - - liblua5.2-dev - - libncurses5 - - libncurses5-dev - - libncursesw5 - - libncursesw5-dev - - libedit-dev diff --git a/ansible/roles/install_samplevnf/tasks/main.yml b/ansible/roles/install_samplevnf/tasks/main.yml new file mode 100644 index 000000000..d332c88bc --- /dev/null +++ b/ansible/roles/install_samplevnf/tasks/main.yml @@ -0,0 +1,55 @@ +# Copyright (c) 2017 Intel Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +--- +- set_fact: + vnf_build_dir: "{{ samplevnf_path }}/VNFs/{{ vnf_build_dirs[vnf_name] }}" + +- set_fact: + vnf_app_name: "{{ vnf_app_names[vnf_name] }}" + +- name: Install extra build dependencies + action: "{{ ansible_pkg_mgr }} name={{ item }} state=present" + with_items: "{{ vnf_build_dependencies.get(vnf_name, {}).get(ansible_os_family, []) }}" + + +- name: set build env vars + set_fact: + build_env_vars: + RTE_SDK: "{{ RTE_SDK }}" + RTE_TARGET: "{{ RTE_TARGET }}" + VNF_CORE: "{{ samplevnf_path }}" + +- name: set soft CRC for PROX when building in VM + set_fact: + build_env_vars: "{{ build_env_vars|combine({'crc': 'soft'}) }}" + when: vnf_name == "PROX" and image_type is defined and image_type == "vm" + +- name: "make {{ vnf_name }} clean" + my_make: chdir="{{ vnf_build_dir }}" target=clean extra_args="-j {{ ansible_processor_vcpus }}" + environment: "{{ build_env_vars }}" + +- name: "make {{ vnf_name }}" + my_make: chdir="{{ vnf_build_dir }}" extra_args="-j {{ ansible_processor_vcpus }}" + environment: "{{ build_env_vars }}" + +#- command: cp "{{ vnf_build_dir }}/{{ vnf_name }}/build/ip_pipeline" "{{ INSTALL_BIN_PATH }}/vACL_vnf" + +- name: "Install {{ vnf_name }} VNF" + copy: + src: "{{ vnf_build_dir }}/build/{{ vnf_app_name }}" + dest: "{{ INSTALL_BIN_PATH }}/{{ vnf_app_name }}" + remote_src: True + # make executable + mode: 0755 + diff --git a/ansible/roles/install_prox/tasks/main.yml b/ansible/roles/install_samplevnf/vars/main.yml index 93025fcb4..6f2c44a84 100644 --- a/ansible/roles/install_prox/tasks/main.yml +++ b/ansible/roles/install_samplevnf/vars/main.yml @@ -12,19 +12,30 @@ # See the License for the specific language governing permissions and # limitations under the License. --- -- include: "{{ ansible_os_family }}.yml" - -- name: workaround, make trailing.sh executable - file: - path: "{{ prox_path }}/helper-scripts/trailing.sh" - state: touch - mode: 0755 - when: prox_version == "v035" - -- make: - chdir: "{{ prox_path }}" - environment: - RTE_SDK: "{{ RTE_SDK }}" - RTE_TARGET: "{{ RTE_TARGET }}" - - +vnf_build_dependencies: + PROX: + Debian: + - pkg-config + - liblua5.2-dev + - libncurses5 + - libncurses5-dev + - libncursesw5 + - libncursesw5-dev + - libedit-dev + RedHat: + - pkgconfig + - lua-devel + - ncurses-devel + - libedit-devel +vnf_build_dirs: + ACL: vACL + FW: vFW + CGNATP: vCGNAPT + UDP_Replay: UDP_Replay + PROX: DPPD-PROX +vnf_app_names: + ACL: vACL + FW: vFW + CGNATP: vCGNAPT + UDP_Replay: UDP_Replay + PROX: prox diff --git a/ansible/roles/install_trex/defaults/main.yml b/ansible/roles/install_trex/defaults/main.yml index 1b2876301..a5555e355 100644 --- a/ansible/roles/install_trex/defaults/main.yml +++ b/ansible/roles/install_trex/defaults/main.yml @@ -13,5 +13,6 @@ # limitations under the License. --- #TREX_DOWNLOAD: "https://trex-tgn.cisco.com/trex/release/v2.05.tar.gz" -TREX_VERSION: v2.20 +TREX_VERSION: v2.28 TREX_DOWNLOAD: "{{ nsb_mirror_url|ternary(nsb_mirror_url, 'https://trex-tgn.cisco.com/trex/release' }}/{{ TREX_VERSION }}.tar.gz" +INSTALL_BIN_PATH: "/opt/nsb_bin" diff --git a/ansible/roles/install_trex/tasks/main.yml b/ansible/roles/install_trex/tasks/main.yml index 4818a8087..7ba1fc833 100644 --- a/ansible/roles/install_trex/tasks/main.yml +++ b/ansible/roles/install_trex/tasks/main.yml @@ -12,17 +12,24 @@ # See the License for the specific language governing permissions and # limitations under the License. --- -- set_fact: - trex_file: "{{ trex_url|basename|regex_replace('[.]tar.gz', '') }}" - - file: path="{{ INSTALL_BIN_PATH }}/trex" state=absent - file: path="{{ INSTALL_BIN_PATH }}/trex" state=directory +- command: mv "{{ trex_dest }}/{{ trex_unarchive }}" "{{ INSTALL_BIN_PATH }}/trex/scripts" + +# Don't overwrite igb_uio.ko compiled from DPDK -- command: mv "{{ clone_dest }}/{{ trex_unarchive }}" "{{ INSTALL_BIN_PATH }}/trex/scripts" +- name: fix stl __init__.py for python module + file: + path: "{{ INSTALL_BIN_PATH }}/trex/scripts/automation/trex_control_plane/stl/__init__.py" + state: touch -- file: path="{{ INSTALL_BIN_PATH }}/trex/scripts/automation/trex_control_plane/stl/__init__.py" state=touch +- name: "symlink client to {{ INSTALL_BIN_PATH }}/trex_client" + file: + src: "{{ INSTALL_BIN_PATH }}/trex/scripts/automation/trex_control_plane" + dest: "{{ INSTALL_BIN_PATH }}/trex_client" + state: link # Don't use trex/scripts/dpdk_nic_bind.py use DPDK usertools/dpdk-devbind.py #- command: cp "{{ INSTALL_BIN_PATH }}/trex/scripts/dpdk_nic_bind.py" "{{ INSTALL_BIN_PATH }}" diff --git a/ansible/roles/install_vnf_vACL/tasks/main.yml b/ansible/roles/install_vnf_vACL/tasks/main.yml deleted file mode 100644 index ff2e769f0..000000000 --- a/ansible/roles/install_vnf_vACL/tasks/main.yml +++ /dev/null @@ -1,41 +0,0 @@ -# Copyright (c) 2017 Intel Corporation -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. ---- -- name: vACL_vnf make clean - my_make: chdir="{{ acl_build_dir }}" target=clean extra_args="-j {{ ansible_processor_vcpus }}" - environment: - RTE_SDK: "{{ RTE_SDK }}" - RTE_TARGET: "{{ RTE_TARGET }}" - VNF_CORE: "{{ samplevnf_path }}" - -- name: make vACL VNF - my_make: chdir="{{ acl_build_dir }}" extra_args="-j {{ ansible_processor_vcpus }}" - environment: - RTE_SDK: "{{ RTE_SDK }}" - RTE_TARGET: "{{ RTE_TARGET }}" - VNF_CORE: "{{ samplevnf_path }}" - -#- command: cp "{{ acl_build_dir }}/vACL/build/ip_pipeline" "{{ INSTALL_BIN_PATH }}/vACL_vnf" -- name: Install vACL VNF - copy: - src: "{{ acl_build_dir }}/build/vACL" - dest: "{{ INSTALL_BIN_PATH }}/vACL" - remote_src: True - # make executable - mode: 0755 - -#- command: cp "{{ acl_build_dir }}/vACL/config/full_tm_profile_10G.cfg" "{{ INSTALL_BIN_PATH }}/" -#- copy: -# src: "{{ acl_build_dir }}/vACL/config/full_tm_profile_10G.cfg" -# dest: "{{ INSTALL_BIN_PATH }}/" diff --git a/ansible/roles/install_vnf_vACL/vars/main.yml b/ansible/roles/install_vnf_vACL/vars/main.yml deleted file mode 100644 index ee61bf11c..000000000 --- a/ansible/roles/install_vnf_vACL/vars/main.yml +++ /dev/null @@ -1,2 +0,0 @@ ---- -acl_build_dir: "{{ samplevnf_path }}/VNFs/vACL"
\ No newline at end of file diff --git a/ansible/roles/install_vnf_vCGNAPT/tasks/main.yml b/ansible/roles/install_vnf_vCGNAPT/tasks/main.yml deleted file mode 100644 index 9f8458f6f..000000000 --- a/ansible/roles/install_vnf_vCGNAPT/tasks/main.yml +++ /dev/null @@ -1,41 +0,0 @@ -# Copyright (c) 2017 Intel Corporation -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. ---- -- name: vCGNAPT_vnf make clean - my_make: chdir="{{ acl_build_dir }}" target=clean extra_args="-j {{ ansible_processor_vcpus }}" - environment: - RTE_SDK: "{{ RTE_SDK }}" - RTE_TARGET: "{{ RTE_TARGET }}" - VNF_CORE: "{{ samplevnf_path }}" - -- name: make vCGNAPT VNF - my_make: chdir="{{ acl_build_dir }}" extra_args="-j {{ ansible_processor_vcpus }}" - environment: - RTE_SDK: "{{ RTE_SDK }}" - RTE_TARGET: "{{ RTE_TARGET }}" - VNF_CORE: "{{ samplevnf_path }}" - -#- command: cp "{{ acl_build_dir }}/vCGNAPT/build/ip_pipeline" "{{ INSTALL_BIN_PATH }}/vCGNAPT_vnf" -- name: Install vCGNAPT VNF - copy: - src: "{{ acl_build_dir }}/build/vCGNAPT" - dest: "{{ INSTALL_BIN_PATH }}/vCGNAPT" - remote_src: True - # make executable - mode: 0755 - -#- command: cp "{{ acl_build_dir }}/vCGNAPT/config/full_tm_profile_10G.cfg" "{{ INSTALL_BIN_PATH }}/" -#- copy: -# src: "{{ acl_build_dir }}/vCGNAPT/config/full_tm_profile_10G.cfg" -# dest: "{{ INSTALL_BIN_PATH }}/" diff --git a/ansible/roles/install_vnf_vCGNAPT/vars/main.yml b/ansible/roles/install_vnf_vCGNAPT/vars/main.yml deleted file mode 100644 index cca1a89a3..000000000 --- a/ansible/roles/install_vnf_vCGNAPT/vars/main.yml +++ /dev/null @@ -1,2 +0,0 @@ ---- -acl_build_dir: "{{ samplevnf_path }}/VNFs/vCGNAPT"
\ No newline at end of file diff --git a/ansible/roles/install_vnf_vFW/tasks/main.yml b/ansible/roles/install_vnf_vFW/tasks/main.yml deleted file mode 100644 index cb3df3ed4..000000000 --- a/ansible/roles/install_vnf_vFW/tasks/main.yml +++ /dev/null @@ -1,50 +0,0 @@ -# Copyright (c) 2017 Intel Corporation -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. ---- -- name: vFW_vnf make clean - my_make: chdir="{{ vfw_build_dir }}" target=clean extra_args="-j {{ ansible_processor_vcpus }}" - environment: - RTE_SDK: "{{ RTE_SDK }}" - RTE_TARGET: "{{ RTE_TARGET }}" - VNF_CORE: "{{ samplevnf_path }}" - -#- name: make vFW VNF -# my_make: chdir="{{ vfw_build_dir }}" extra_args="-j {{ ansible_processor_vcpus }}" -# environment: -# RTE_SDK: "{{ RTE_SDK }}" -# RTE_TARGET: "{{ RTE_TARGET }}" -# VNF_CORE: "{{ samplevnf_path }}" - -- name: make vFW VNF - command: make chdir="{{ vfw_build_dir }}" extra_args="-j {{ ansible_processor_vcpus }}" all - args: - chdir: "{{ vfw_build_dir }}" - environment: - RTE_SDK: "{{ RTE_SDK }}" - RTE_TARGET: "{{ RTE_TARGET }}" - VNF_CORE: "{{ samplevnf_path }}" - -#- command: cp "{{ vfw_build_dir }}/vFW/build/ip_pipeline" "{{ INSTALL_BIN_PATH }}/vFW_vnf" -- name: Install vFW VNF - copy: - src: "{{ vfw_build_dir }}/build/vFW" - dest: "{{ INSTALL_BIN_PATH }}/vFW" - remote_src: True - # make executable - mode: 0755 - -#- command: cp "{{ vfw_build_dir }}/vFW/config/full_tm_profile_10G.cfg" "{{ INSTALL_BIN_PATH }}/" -#- copy: -# src: "{{ vfw_build_dir }}/vFW/config/full_tm_profile_10G.cfg" -# dest: "{{ INSTALL_BIN_PATH }}/" diff --git a/ansible/roles/install_vnf_vFW/vars/main.yml b/ansible/roles/install_vnf_vFW/vars/main.yml deleted file mode 100644 index 8a8a39865..000000000 --- a/ansible/roles/install_vnf_vFW/vars/main.yml +++ /dev/null @@ -1,2 +0,0 @@ ---- -vfw_build_dir: "{{ samplevnf_path }}/VNFs/vFW"
\ No newline at end of file diff --git a/ansible/roles/install_vnf_vPE/tasks/main.yml b/ansible/roles/install_vnf_vPE/tasks/main.yml deleted file mode 100644 index 91d449a41..000000000 --- a/ansible/roles/install_vnf_vPE/tasks/main.yml +++ /dev/null @@ -1,37 +0,0 @@ -# Copyright (c) 2017 Intel Corporation -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. ---- -- name: vPE_vnf make clean - my_make: chdir="{{ vpe_build_dir }}" target=clean extra_args="-j {{ ansible_processor_vcpus }}" - environment: - RTE_SDK: "{{ RTE_SDK }}" - RTE_TARGET: "{{ RTE_TARGET }}" - -- name: make vPE VNF - my_make: chdir="{{ vpe_build_dir }}" extra_args="-j {{ ansible_processor_vcpus }}" - environment: - RTE_SDK: "{{ RTE_SDK }}" - RTE_TARGET: "{{ RTE_TARGET }}" - -#- command: cp "{{ vpe_build_dir }}/vPE/build/ip_pipeline" "{{ INSTALL_BIN_PATH }}/vPE_vnf" -- name: Install vPE_vnf - copy: - src: "{{ vpe_build_dir }}/build/ip_pipeline" - dest: "{{ INSTALL_BIN_PATH }}/vPE_vnf" - remote_src: True - -#- command: cp "{{ vpe_build_dir }}/vPE/config/full_tm_profile_10G.cfg" "{{ INSTALL_BIN_PATH }}/" -#- copy: -# src: "{{ vpe_build_dir }}/vPE/config/full_tm_profile_10G.cfg" -# dest: "{{ INSTALL_BIN_PATH }}/" diff --git a/ansible/roles/install_vnf_vPE/vars/main.yml b/ansible/roles/install_vnf_vPE/vars/main.yml deleted file mode 100644 index fe0a9727f..000000000 --- a/ansible/roles/install_vnf_vPE/vars/main.yml +++ /dev/null @@ -1,2 +0,0 @@ ---- -vpe_build_dir: "{{ dpdk_path }}/examples/ip_pipeline"
\ No newline at end of file diff --git a/ansible/roles/reset_resolv_conf/tasks/main.yml b/ansible/roles/reset_resolv_conf/tasks/main.yml index 50094f24f..4e6de695d 100644 --- a/ansible/roles/reset_resolv_conf/tasks/main.yml +++ b/ansible/roles/reset_resolv_conf/tasks/main.yml @@ -21,7 +21,7 @@ file: path: "{{ resolv_conf_stat.stat.lnk_source|dirname }}" state: directory - mode: 755 + mode: 0755 - name: Override resolv.conf link source with specific nameserver template: diff --git a/ansible/ubuntu_server_cloudimg_modify_vpe.yml b/ansible/ubuntu_server_baremetal_deploy_samplevnfs.yml index f55a30fb9..3a1fbd08f 100644 --- a/ansible/ubuntu_server_cloudimg_modify_vpe.yml +++ b/ansible/ubuntu_server_baremetal_deploy_samplevnfs.yml @@ -12,30 +12,32 @@ # See the License for the specific language governing permissions and # limitations under the License. --- -- hosts: chroot_image - connection: chroot +- hosts: all vars: clone_dir: /tmp/yardstick-clone - pre_tasks: - - debug: msg="chrooted in {{ inventory_hostname }}" roles: - - reset_resolv_conf - add_custom_repos - role: set_package_installer_proxy when: proxy_env is defined and proxy_env - # can update grub in chroot/docker -# - enable_hugepages_on_boot - - modify_cloud_config +# can't update grub in chroot/docker + - enable_hugepages_on_boot - install_image_dependencies - role: download_dpdk - dpdk_version: "16.07" +# dpdk_version: "17.02" - install_dpdk - # vPE is part of DPDK so we don't need to copy it - - install_vnf_vPE -# - copy_L4Replay -# - install_L4Replay -# - copy_trex -# - install_trex + - download_trex + - install_trex + - download_samplevnfs + - role: install_samplevnf + vnf_name: PROX + - role: install_samplevnf + vnf_name: UDP_Replay + - role: install_samplevnf + vnf_name: ACL + - role: install_samplevnf + vnf_name: FW + - role: install_samplevnf + vnf_name: CGNATP diff --git a/ansible/ubuntu_server_cloudimg_modify_cgnapt.yml b/ansible/ubuntu_server_cloudimg_modify_cgnapt.yml deleted file mode 100644 index 3f2a179bb..000000000 --- a/ansible/ubuntu_server_cloudimg_modify_cgnapt.yml +++ /dev/null @@ -1,41 +0,0 @@ -# Copyright (c) 2017 Intel Corporation. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. ---- -- hosts: chroot_image - connection: chroot - vars: - clone_dir: /tmp/yardstick-clone - - pre_tasks: - - debug: msg="chrooted in {{ inventory_hostname }}" - - roles: -# - reset_resolv_conf -# - add_custom_repos -# - role: set_package_installer_proxy -# when: proxy_env is defined and proxy_env - # can update grub in chroot/docker -# - enable_hugepages_on_boot -# - modify_cloud_config -# - install_image_dependencies -# - role: download_dpdk -# dpdk_version: "16.07" -# - install_dpdk -# - download_samplevnfs - - install_vnf_vCGNAPT -# - copy_L4Replay -# - install_L4Replay -# - copy_trex -# - install_trex - diff --git a/ansible/ubuntu_server_cloudimg_modify_acl.yml b/ansible/ubuntu_server_cloudimg_modify_samplevnfs.yml index 98542d7a3..2700b810f 100644 --- a/ansible/ubuntu_server_cloudimg_modify_acl.yml +++ b/ansible/ubuntu_server_cloudimg_modify_samplevnfs.yml @@ -18,24 +18,35 @@ clone_dir: /tmp/yardstick-clone pre_tasks: - - debug: msg="chrooted in {{ inventory_hostname }}" + - debug: + msg: "chrooted in {{ inventory_hostname }}" + - debug: + var: proxy_env + verbosity: 2 roles: - reset_resolv_conf - add_custom_repos - role: set_package_installer_proxy when: proxy_env is defined and proxy_env - # can update grub in chroot/docker -# - enable_hugepages_on_boot +# can't update grub in chroot/docker + - enable_hugepages_on_boot - modify_cloud_config - install_image_dependencies -# - role: download_dpdk -# dpdk_version: "16.07" -# - install_dpdk -# - download_samplevnfs -# - install_vnf_vACL -# - copy_L4Replay -# - install_L4Replay - - copy_trex + - role: download_dpdk +# dpdk_version: "17.02" + - install_dpdk + - download_trex - install_trex + - download_samplevnfs + - role: install_samplevnf + vnf_name: PROX + - role: install_samplevnf + vnf_name: UDP_Replay + - role: install_samplevnf + vnf_name: ACL + - role: install_samplevnf + vnf_name: FW + - role: install_samplevnf + vnf_name: CGNATP diff --git a/ansible/ubuntu_server_cloudimg_modify_vfw.yml b/ansible/ubuntu_server_cloudimg_modify_vfw.yml deleted file mode 100644 index f8cd3ecdc..000000000 --- a/ansible/ubuntu_server_cloudimg_modify_vfw.yml +++ /dev/null @@ -1,41 +0,0 @@ -# Copyright (c) 2017 Intel Corporation. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. ---- -- hosts: chroot_image - connection: chroot - vars: - clone_dir: /tmp/yardstick-clone - - pre_tasks: - - debug: msg="chrooted in {{ inventory_hostname }}" - - roles: -# - reset_resolv_conf -# - add_custom_repos -# - role: set_package_installer_proxy -# when: proxy_env is defined and proxy_env - # can update grub in chroot/docker -# - enable_hugepages_on_boot -# - modify_cloud_config -# - install_image_dependencies -# - role: download_dpdk -# dpdk_version: "16.07" -# - install_dpdk -# - download_samplevnfs - - install_vnf_vFW -# - copy_L4Replay -# - install_L4Replay -# - copy_trex -# - install_trex - diff --git a/samples/vnf_samples/nsut/acl/tc_heat_trex_external_rfc2544_ipv4_1rule_1flow_64B_packetsize.yaml b/samples/vnf_samples/nsut/acl/tc_heat_trex_external_rfc2544_ipv4_1rule_1flow_64B_packetsize.yaml index 5e8b03916..998a126dc 100644 --- a/samples/vnf_samples/nsut/acl/tc_heat_trex_external_rfc2544_ipv4_1rule_1flow_64B_packetsize.yaml +++ b/samples/vnf_samples/nsut/acl/tc_heat_trex_external_rfc2544_ipv4_1rule_1flow_64B_packetsize.yaml @@ -45,18 +45,15 @@ contexts: type: Node file: trex-baremetal.yml - name: yardstick - image: yardstick-acl - flavor: yardstick-flavor -# flavor: -# # name: yardstick-dpdk-flavor -# vcpus: 6 -# ram: 20480 -# disk: 4 -# extra_specs: -# hw:cpu_sockets: 1 -# hw:cpu_cores: 6 -# hw:cpu_threads: 1 -# # hw:mem_page_size: large + image: yardstick-samplevnfs + flavor: + vcpus: 10 + ram: 20480 + disk: 4 + extra_specs: + hw:cpu_sockets: 1 + hw:cpu_cores: 10 + hw:cpu_threads: 1 user: ubuntu placement_groups: pgrp1: @@ -68,11 +65,17 @@ contexts: networks: mgmt: cidr: '10.0.1.0/24' - external_network: "yardstick-public" xe0: cidr: '10.0.2.0/24' - vld_id: public + vld_id: public_1 + gateway_ip: 'null' + provider: true + physical_network: phystenant1 + port_security_enabled: False xe1: cidr: '10.0.3.0/24' - vld_id: private - + vld_id: private_1 + gateway_ip: 'null' + provider: true + physical_network: phystenant2 + port_security_enabled: False diff --git a/samples/vnf_samples/nsut/cgnapt/tc_heat_external_rfc2544_ipv4_1flow_64B_trex.yaml b/samples/vnf_samples/nsut/cgnapt/tc_heat_external_rfc2544_ipv4_1flow_64B_trex.yaml new file mode 100644 index 000000000..0ad7898a1 --- /dev/null +++ b/samples/vnf_samples/nsut/cgnapt/tc_heat_external_rfc2544_ipv4_1flow_64B_trex.yaml @@ -0,0 +1,80 @@ +# Copyright (c) 2016-2017 Intel Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +--- +schema: yardstick:task:0.1 +scenarios: +- type: NSPerf + traffic_profile: ../../traffic_profiles/ipv4_throughput_cgnapt.yaml + topology: cgnapt-vnf-topology.yaml + nodes: + tg__1: trafficgen_1.baremetal + vnf__1: vnf.yardstick + options: + framesize: + private: {64B: 100} + public: {64B: 100} + flow: + src_ip: [{'tg__1': 'xe0'}] + dst_ip: [{'tg__1': 'xe1'}] + count: 1 + traffic_type: 4 + rfc2544: + allowed_drop_rate: 0.0001 - 0.0001 + vnf__1: + vnf_config: {lb_config: 'SW', lb_count: 1, worker_config: '1C/1T', worker_threads: 1} + runner: + type: Iteration + iterations: 10 + interval: 35 +contexts: + # put node context first, so we don't HEAT deploy if node has errors + - name: baremetal + type: Node + file: trex-baremetal.yml + - name: yardstick + image: yardstick-samplevnfs + flavor: + vcpus: 10 + ram: 20480 + disk: 4 + extra_specs: + hw:cpu_sockets: 1 + hw:cpu_cores: 10 + hw:cpu_threads: 1 + user: ubuntu + placement_groups: + pgrp1: + policy: "availability" + servers: + vnf: + floating_ip: true + placement: "pgrp1" + networks: + mgmt: + cidr: '10.0.1.0/24' + xe0: + cidr: '10.0.2.0/24' + vld_id: public_1 + gateway_ip: 'null' + provider: true + physical_network: phystenant1 + port_security_enabled: False + xe1: + cidr: '10.0.3.0/24' + vld_id: private_1 + gateway_ip: 'null' + provider: true + physical_network: phystenant2 + port_security_enabled: False diff --git a/samples/vnf_samples/nsut/vfw/tc_heat_external_rfc2544_ipv4_1rule_1flow_64B_trex.yaml b/samples/vnf_samples/nsut/vfw/tc_heat_external_rfc2544_ipv4_1rule_1flow_64B_trex.yaml new file mode 100644 index 000000000..3e323d9c9 --- /dev/null +++ b/samples/vnf_samples/nsut/vfw/tc_heat_external_rfc2544_ipv4_1rule_1flow_64B_trex.yaml @@ -0,0 +1,81 @@ +# Copyright (c) 2016-2017 Intel Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +--- +schema: yardstick:task:0.1 +scenarios: +- type: NSPerf + traffic_profile: ../../traffic_profiles/ipv4_throughput.yaml + topology: vfw-tg-topology.yaml + nodes: + tg__1: trafficgen_1.baremetal + vnf__1: vnf.yardstick + options: + framesize: + private: {64B: 100} + public: {64B: 100} + flow: + src_ip: [{'tg__1': 'xe0'}] + dst_ip: [{'tg__1': 'xe1'}] + count: 1 + traffic_type: 4 + rfc2544: + allowed_drop_rate: 0.0001 - 0.0001 + vnf__1: + rules: acl_1rule.yaml + vnf_config: {lb_config: 'SW', lb_count: 1, worker_config: '1C/1T', worker_threads: 1} + runner: + type: Iteration + iterations: 10 + interval: 35 +contexts: + # put node context first, so we don't HEAT deploy if node has errors + - name: baremetal + type: Node + file: trex-baremetal.yml + - name: yardstick + image: yardstick-samplevnfs + flavor: + vcpus: 10 + ram: 20480 + disk: 4 + extra_specs: + hw:cpu_sockets: 1 + hw:cpu_cores: 10 + hw:cpu_threads: 1 + user: ubuntu + placement_groups: + pgrp1: + policy: "availability" + servers: + vnf: + floating_ip: true + placement: "pgrp1" + networks: + mgmt: + cidr: '10.0.1.0/24' + xe0: + cidr: '10.0.2.0/24' + vld_id: public_1 + gateway_ip: 'null' + provider: true + physical_network: phystenant1 + port_security_enabled: False + xe1: + cidr: '10.0.3.0/24' + vld_id: private_1 + gateway_ip: 'null' + provider: true + physical_network: phystenant2 + port_security_enabled: False diff --git a/tests/opnfv/test_cases/opnfv_yardstick_tc002.yaml b/tests/opnfv/test_cases/opnfv_yardstick_tc002.yaml index 58f5b783a..7f8c22943 100644 --- a/tests/opnfv/test_cases/opnfv_yardstick_tc002.yaml +++ b/tests/opnfv/test_cases/opnfv_yardstick_tc002.yaml @@ -18,13 +18,14 @@ description: > {% set provider = provider or none %} {% set physical_network = physical_network or 'physnet1' %} {% set segmentation_id = segmentation_id or none %} +{% set packetsize = packetsize or 100 %} scenarios: {% for i in range(2) %} - type: Ping options: - packetsize: 100 + packetsize: {{packetsize}} host: athena.demo target: ares.demo @@ -64,4 +65,4 @@ context: {% if segmentation_id %} segmentation_id: {{segmentation_id}} {% endif %} - {% endif %}
\ No newline at end of file + {% endif %} diff --git a/tests/unit/network_services/vnf_generic/vnf/test_tg_rfc2544_trex.py b/tests/unit/network_services/vnf_generic/vnf/test_tg_rfc2544_trex.py index 3dcb02f02..ad8c6494e 100644 --- a/tests/unit/network_services/vnf_generic/vnf/test_tg_rfc2544_trex.py +++ b/tests/unit/network_services/vnf_generic/vnf/test_tg_rfc2544_trex.py @@ -233,7 +233,7 @@ class TestTrexTrafficGenRFC(unittest.TestCase): def test_collect_kpi(self, ssh): mock_ssh(ssh) trex_traffic_gen = TrexTrafficGenRFC('vnf1', self.VNFD_0) - self.assertIsNone(trex_traffic_gen.collect_kpi()) + self.assertEqual(trex_traffic_gen.collect_kpi(), {}) @mock.patch(SSH_HELPER) def test_listen_traffic(self, ssh): diff --git a/yardstick/benchmark/contexts/heat.py b/yardstick/benchmark/contexts/heat.py index c8d53e324..e52c1076c 100644 --- a/yardstick/benchmark/contexts/heat.py +++ b/yardstick/benchmark/contexts/heat.py @@ -163,7 +163,8 @@ class HeatContext(Context): network.physical_network, network.provider, network.segmentation_id, - network.port_security_enabled) + network.port_security_enabled, + network.network_type) template.add_subnet(network.subnet_stack_name, network.stack_name, network.subnet_cidr, network.enable_dhcp, diff --git a/yardstick/benchmark/scenarios/compute/computecapacity.bash b/yardstick/benchmark/scenarios/compute/computecapacity.bash index 68741a94f..d49638fe3 100644 --- a/yardstick/benchmark/scenarios/compute/computecapacity.bash +++ b/yardstick/benchmark/scenarios/compute/computecapacity.bash @@ -27,12 +27,11 @@ run_capacity() # Number of logical cores THREAD=$(grep 'processor' /proc/cpuinfo | sort -u | wc -l) # Total memory size - MEMORY=$(grep 'MemTotal' /proc/meminfo | sort -u) - ME=$(echo $MEMORY | awk '/ /{printf "%s %s", $2, $3}') + MEMORY=$(grep 'MemTotal' /proc/meminfo | sort -u | awk '{print $2}') + # Cache size per CPU - CACHE=$(grep 'cache size' /proc/cpuinfo | sort -u) - CA=$(echo $CACHE | awk '/ /{printf "%s", $4}') - CACHES=$[$CA * $CPU] + CACHE=$(grep 'cache size' /proc/cpuinfo | sort -u | awk '{print $4}') + CACHES=$[$CACHE * $CPU] HT_Value=$[$HT_Para * $CORES] if [ $HT_Value -eq $THREAD ]; then HT_OPEN=1 @@ -48,8 +47,8 @@ output_json() \"Cpu_number\":\"$CPU\", \ \"Core_number\":\"$CORES\", \ \"Thread_number\":\"$THREAD\", \ - \"Memory_size\": \"$ME\", \ - \"Cache_size\": \"$CACHES KB\", \ + \"Memory_size\": \"$MEMORY\", \ + \"Cache_size\": \"$CACHES\", \ \"HT_Open\": \"$HT_OPEN\" \ }" } diff --git a/yardstick/benchmark/scenarios/networking/vnf_generic.py b/yardstick/benchmark/scenarios/networking/vnf_generic.py index aecc228bc..4510bcfba 100644 --- a/yardstick/benchmark/scenarios/networking/vnf_generic.py +++ b/yardstick/benchmark/scenarios/networking/vnf_generic.py @@ -523,7 +523,7 @@ printf "%s/driver:" $1 ; basename $(readlink -s $1/device/driver); } \ for vnf in self.vnfs: # Result example: # {"VNF1: { "tput" : [1000, 999] }, "VNF2": { "latency": 100 }} - LOG.debug("vnf") + LOG.debug("collect KPI for %s", vnf.name) result.update(self.collector.get_kpi(vnf)) def teardown(self): diff --git a/yardstick/benchmark/scenarios/storage/storagecapacity.bash b/yardstick/benchmark/scenarios/storage/storagecapacity.bash index f963782d8..96db6e1be 100644 --- a/yardstick/benchmark/scenarios/storage/storagecapacity.bash +++ b/yardstick/benchmark/scenarios/storage/storagecapacity.bash @@ -17,7 +17,7 @@ OUTPUT_FILE=/tmp/storagecapacity-out.log # run disk_size test run_disk_size() { - fdisk -l | grep '^Disk.*bytes$' | awk -F [:,\ ] '{print $2,$7}' > $OUTPUT_FILE + fdisk -l | grep '^Disk.*bytes' | awk -F [:,\ ] '{print $2,$7}' > $OUTPUT_FILE } # write the disk size to stdout in json format @@ -35,7 +35,7 @@ output_disk_size() run_block_size() { echo -n "" > $OUTPUT_FILE - blkdevices=`fdisk -l | grep '^Disk.*bytes$' | awk -F [:,\ ] '{print $2}'` + blkdevices=`fdisk -l | grep '^Disk.*bytes' | awk -F [:,\ ] '{print $2}'` blkdevices=($blkdevices) for bd in "${blkdevices[@]}";do blk_size=`blockdev --getbsz $bd` diff --git a/yardstick/network_services/nfvi/resource.py b/yardstick/network_services/nfvi/resource.py index 2fb4a8e8e..48bcd3118 100644 --- a/yardstick/network_services/nfvi/resource.py +++ b/yardstick/network_services/nfvi/resource.py @@ -27,7 +27,7 @@ from oslo_config import cfg from yardstick import ssh from yardstick.network_services.nfvi.collectd import AmqpConsumer -from yardstick.network_services.utils import provision_tool +from yardstick.network_services.utils import get_nsb_option LOG = logging.getLogger(__name__) @@ -196,10 +196,21 @@ class ResourceProfile(object): self._provide_config_file(bin_path, 'collectd.conf', kwargs) def _start_collectd(self, connection, bin_path): - LOG.debug("Starting collectd to collect NFVi stats") connection.execute('sudo pkill -9 collectd') - collectd = os.path.join(bin_path, "collectd.sh") - provision_tool(connection, collectd) + bin_path = get_nsb_option("bin_path") + collectd_path = os.path.join(bin_path, "collectd", "collectd") + exit_status = connection.execute("which %s > /dev/null 2>&1" % collectd_path)[0] + if exit_status != 0: + LOG.warning("%s is not present disabling", collectd_path) + # disable auto-provisioning because it requires Internet access + # collectd_installer = os.path.join(bin_path, "collectd.sh") + # provision_tool(connection, collectd) + # http_proxy = os.environ.get('http_proxy', '') + # https_proxy = os.environ.get('https_proxy', '') + # connection.execute("sudo %s '%s' '%s'" % ( + # collectd_installer, http_proxy, https_proxy)) + return + LOG.debug("Starting collectd to collect NFVi stats") self._prepare_collectd_conf(bin_path) # Reset amqp queue @@ -211,15 +222,8 @@ class ResourceProfile(object): connection.execute("sudo rabbitmqctl start_app") connection.execute("sudo service rabbitmq-server restart") - # Run collectd - - http_proxy = os.environ.get('http_proxy', '') - https_proxy = os.environ.get('https_proxy', '') - connection.execute("sudo %s '%s' '%s'" % - (collectd, http_proxy, https_proxy)) LOG.debug("Start collectd service.....") - connection.execute( - "sudo %s" % os.path.join(bin_path, "collectd", "collectd")) + connection.execute("sudo %s" % collectd_path) LOG.debug("Done") def initiate_systemagent(self, bin_path): diff --git a/yardstick/network_services/vnf_generic/vnf/tg_rfc2544_trex.py b/yardstick/network_services/vnf_generic/vnf/tg_rfc2544_trex.py index d94a9a6e6..15c9c0e1d 100644 --- a/yardstick/network_services/vnf_generic/vnf/tg_rfc2544_trex.py +++ b/yardstick/network_services/vnf_generic/vnf/tg_rfc2544_trex.py @@ -98,7 +98,7 @@ class TrexRfcResourceHelper(TrexResourceHelper): def collect_kpi(self): self.rfc2544_helper.iteration.value += 1 - super(TrexRfcResourceHelper, self).collect_kpi() + return super(TrexRfcResourceHelper, self).collect_kpi() class TrexTrafficGenRFC(TrexTrafficGen): diff --git a/yardstick/orchestrator/heat.py b/yardstick/orchestrator/heat.py index c21a47473..8c7b1e429 100644 --- a/yardstick/orchestrator/heat.py +++ b/yardstick/orchestrator/heat.py @@ -265,7 +265,7 @@ name (i.e. %s).\ self.resources[name]['properties']['mountpoint'] = mountpoint def add_network(self, name, physical_network='physnet1', provider=None, - segmentation_id=None, port_security_enabled=None): + segmentation_id=None, port_security_enabled=None, network_type=None): """add to the template a Neutron Net""" log.debug("adding Neutron::Net '%s'", name) if provider is None: @@ -280,12 +280,14 @@ name (i.e. %s).\ 'type': 'OS::Neutron::ProviderNet', 'properties': { 'name': name, - 'network_type': 'vlan', + 'network_type': 'flat' if network_type is None else network_type, 'physical_network': physical_network, }, } if segmentation_id: self.resources[name]['properties']['segmentation_id'] = segmentation_id + if network_type is None: + self.resources[name]['properties']['network_type'] = 'vlan' # if port security is not defined then don't add to template: # some deployments don't have port security plugin installed if port_security_enabled is not None: |