ansible: update dpdk, trex and samplevnf install 53/39653/9
authorRoss Brattain <ross.b.brattain@intel.com>
Fri, 18 Aug 2017 20:36:02 +0000 (13:36 -0700)
committerRoss Brattain <ross.b.brattain@intel.com>
Thu, 24 Aug 2017 05:06:56 +0000 (22:06 -0700)
we now clone samplevnf from git repo
made install_samplevnf role that takes as parameter VNF name
added ubuntu_server_cloudimg_modify_samplevnfs playbook

Change-Id: I5724e3b844b3137542a5c293516893a5c80f5c61
Signed-off-by: Ross Brattain <ross.b.brattain@intel.com>
38 files changed:
ansible/build_yardstick_image.yml
ansible/install_dependencies.yml [moved from ansible/roles/install_prox/tasks/RedHat.yml with 75% similarity]
ansible/library/find_kernel.py [new file with mode: 0644]
ansible/post_build_yardstick_image.yml
ansible/roles/download_dpdk/tasks/main.yml
ansible/roles/download_prox/defaults/main.yml [deleted file]
ansible/roles/download_prox/tasks/main.yml [deleted file]
ansible/roles/download_samplevnfs/defaults/main.yml
ansible/roles/download_samplevnfs/tasks/main.yml
ansible/roles/download_trex/defaults/main.yml
ansible/roles/download_trex/tasks/main.yml
ansible/roles/enable_hugepages_on_boot/defaults/main.yml [new file with mode: 0644]
ansible/roles/enable_hugepages_on_boot/tasks/main.yml
ansible/roles/install_dependencies/tasks/Debian.yml
ansible/roles/install_dependencies/tasks/RedHat.yml
ansible/roles/install_dpdk/defaults/main.yml [new file with mode: 0644]
ansible/roles/install_dpdk/tasks/Debian.yml
ansible/roles/install_dpdk/tasks/RedHat.yml
ansible/roles/install_dpdk/tasks/main.yml
ansible/roles/install_dpdk/vars/main.yml
ansible/roles/install_prox/tasks/Debian.yml [deleted file]
ansible/roles/install_samplevnf/tasks/main.yml [new file with mode: 0644]
ansible/roles/install_samplevnf/vars/main.yml [moved from ansible/roles/install_prox/tasks/main.yml with 55% similarity]
ansible/roles/install_trex/defaults/main.yml
ansible/roles/install_trex/tasks/main.yml
ansible/roles/install_vnf_vACL/tasks/main.yml [deleted file]
ansible/roles/install_vnf_vACL/vars/main.yml [deleted file]
ansible/roles/install_vnf_vCGNAPT/tasks/main.yml [deleted file]
ansible/roles/install_vnf_vCGNAPT/vars/main.yml [deleted file]
ansible/roles/install_vnf_vFW/tasks/main.yml [deleted file]
ansible/roles/install_vnf_vFW/vars/main.yml [deleted file]
ansible/roles/install_vnf_vPE/tasks/main.yml [deleted file]
ansible/roles/install_vnf_vPE/vars/main.yml [deleted file]
ansible/roles/reset_resolv_conf/tasks/main.yml
ansible/ubuntu_server_baremetal_deploy_samplevnfs.yml [moved from ansible/ubuntu_server_cloudimg_modify_vpe.yml with 65% similarity]
ansible/ubuntu_server_cloudimg_modify_cgnapt.yml [deleted file]
ansible/ubuntu_server_cloudimg_modify_samplevnfs.yml [moved from ansible/ubuntu_server_cloudimg_modify_acl.yml with 61% similarity]
ansible/ubuntu_server_cloudimg_modify_vfw.yml [deleted file]

index 9a65d3a..025573b 100644 (file)
     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
 
 
     - 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:
         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 }}"
similarity index 75%
rename from ansible/roles/install_prox/tasks/RedHat.yml
rename to ansible/install_dependencies.yml
index 69fa83b..0014184 100644 (file)
 # 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 (file)
index 0000000..4623bce
--- /dev/null
@@ -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
+
+
+
+"""
index b0c4187..d1f2a73 100644 (file)
@@ -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
index 322f3cd..bcb5dde 100644 (file)
     var: dpdk_version
     verbosity: 2
 
+- file:
+    path: "{{ dpdk_dest }}"
+    state: directory
+
 - name: fetch dpdk
   get_url:
     url: "{{ dpdk_url }}"
     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 (file)
index 797db31..0000000
+++ /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 (file)
index 0614c74..0000000
+++ /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
index 44449af..5f565a4 100644 (file)
@@ -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"
index 005d57d..e9d4142 100644 (file)
 #    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 }}"
index dd2dd27..6e8fa70 100644 (file)
 # 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"
index 75a3169..baa964f 100644 (file)
   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 (file)
index 0000000..015e01b
--- /dev/null
@@ -0,0 +1,3 @@
+---
+num_hugepages: auto
+huge_pagesize_mb: 1024
\ No newline at end of file
index f258bb6..be4a328 100755 (executable)
     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 }}"
index ac83322..0047a5e 100755 (executable)
@@ -29,6 +29,7 @@
     - qemu-kvm
     - qemu-user-static
     - qemu-utils
+    - kpartx
     - libvirt0
     - python-libvirt
     - bridge-utils
index 4bb7c31..b725933 100644 (file)
@@ -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 (file)
index 0000000..fe21724
--- /dev/null
@@ -0,0 +1,2 @@
+---
+INSTALL_BIN_PATH: "/opt/nsb_bin"
\ No newline at end of file
index 486d40e..c77e4f9 100755 (executable)
@@ -17,3 +17,6 @@
   with_items:
     - libpcap-dev
 
+- name: Install kernel headers
+  action: "{{ ansible_pkg_mgr }} name=linux-headers-{{ dpdk_kernel }} state=present"
+
index af35c9b..2fb249e 100644 (file)
@@ -17,3 +17,5 @@
   with_items:
     - libpcap-devel
 
+- name: Install kernel headers
+  action: "{{ ansible_pkg_mgr }} name=kernel-headers-{{ dpdk_kernel }} state=present"
index fca0e33..cab093a 100644 (file)
 #  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 }}"
index 730215c..1cc4f15 100644 (file)
@@ -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 (executable)
index 00a31fc..0000000
+++ /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 (file)
index 0000000..d332c88
--- /dev/null
@@ -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
+
similarity index 55%
rename from ansible/roles/install_prox/tasks/main.yml
rename to ansible/roles/install_samplevnf/vars/main.yml
index 93025fc..6f2c44a 100644 (file)
 # 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
index 1b28763..a5555e3 100644 (file)
@@ -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"
index 4818a80..7ba1fc8 100644 (file)
 # 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 (file)
index ff2e769..0000000
+++ /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 (file)
index ee61bf1..0000000
+++ /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 (file)
index 9f8458f..0000000
+++ /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 (file)
index cca1a89..0000000
+++ /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 (file)
index cb3df3e..0000000
+++ /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 (file)
index 8a8a398..0000000
+++ /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 (file)
index 91d449a..0000000
+++ /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 (file)
index fe0a972..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
----
-vpe_build_dir: "{{ dpdk_path }}/examples/ip_pipeline"
\ No newline at end of file
index 50094f2..4e6de69 100644 (file)
@@ -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:
 # 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 (file)
index 3f2a179..0000000
+++ /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
-
     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 (file)
index f8cd3ec..0000000
+++ /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
-