Introduced ansible playbook to setup NSB. 99/40899/4
authorMaciej Skrocki <maciej.skrocki@intel.com>
Fri, 1 Sep 2017 22:33:53 +0000 (15:33 -0700)
committerRoss Brattain <ross.b.brattain@intel.com>
Tue, 5 Sep 2017 07:00:01 +0000 (00:00 -0700)
Change-Id: I5865cd50d5fde26e9e9fc265d4385372d668413f
Signed-off-by: Maciej Skrocki <maciej.skrocki@intel.com>
Signed-off-by: Ross Brattain <ross.b.brattain@intel.com>
19 files changed:
ansible/build_yardstick_image.yml
ansible/clean_images.yml
ansible/group_vars/all.yml
ansible/install_dependencies.yml
ansible/load_images.yml
ansible/nsb_setup.yml [new file with mode: 0644]
ansible/roles/docker/defaults/main.yml [new file with mode: 0644]
ansible/roles/docker/handlers/main.yml [new file with mode: 0644]
ansible/roles/docker/tasks/Debian.yml [new file with mode: 0644]
ansible/roles/docker/tasks/RedHat.yml [new file with mode: 0644]
ansible/roles/docker/tasks/main.yml [new file with mode: 0644]
ansible/roles/docker/templates/RedHat-repos.j2 [new file with mode: 0644]
ansible/roles/docker/templates/http-proxy-conf.j2 [new file with mode: 0644]
ansible/roles/docker/vars/main.yml [new file with mode: 0644]
ansible/roles/install_dependencies/tasks/Debian.yml
ansible/roles/install_image_dependencies/defaults/main.yml
ansible/ubuntu_server_baremetal_deploy_samplevnfs.yml
ansible/yardstick-install-inventory.ini [new file with mode: 0644]
nsb_setup.sh

index 025573b..8fbad53 100644 (file)
@@ -73,7 +73,6 @@
         state: absent
 
     # download-common
-
     - name: remove {{ workspace }}
       file:
         path: "{{ workspace }}"
         sha256url: "{{ sha256sums_url }}"
         dest: "{{ image_dest }}"
 
-#    - get_url:
-#        url: "{{ sha256sums_url }}"
-#        force: yes
-#        dest: "{{ workspace }}/{{ sha256sums_filename }}"
-
-    # must use wget to workaround ubuntu cloud SSL certs checking failures
-#    - command: "curl -sS -o {{ workspace }}/{{ sha256sums_filename }} {{ sha256sums_url }}"
-
-
-#    - command: cat "{{ workspace }}/{{ sha256sums_filename }}"
-#      register: sha256sum_file
-#
-#    - set_fact:
-#        image_sha256: "{{ sha256sum_file.stdout|regex_search('^([a-f0-9]+).*' ~ img ~ '$', '\\1', multiline=True) }}"
-
-#    - get_url:
-#        url: "{{ image_url }}"
-#        force: yes
-#        dest: "{{ workspace }}/{{ image_filename }}"
-#        checksum: "sha256:{{ image_sha256 }}"
-#        register: fetch_image_status
-#        timeout: 300
-#        retries: 2
-#        until: fetch_image_status|succeeded
-
-#    - name: "Fetch {{ image_url }}"
-#    - command: "curl -sS -o {{ workspace }}/{{ image_filename }} {{ image_url }}"
-#      register: fetch_image_status
-#      timeout: 300
-#      retries: 2
-#      until: fetch_image_status|succeeded
-
-#    - name: Verify sha256sum of downloaded image
-#    - command: "sha256sum -c --ignore-missing {{ workspace }}/{{ sha256sums_filename }}"
-
-#    - name: create loop devices
-#      command: "mknod -m 660 /dev/loop{{ item }} b 7 {{ item }}"
-#      args:
-#        creates: "/dev/loop{{ item }}"
-#      with_seq:
-#        -
-
-    # download non-lxd
-
     - name: convert image to raw
       command: "qemu-img convert {{ image_dest }} {{ raw_imgfile }}"
 
-
-    # setup non-lxd
-
-#     - shell: echo -e "d\\nn\\np\\n1\\n\\n\\nw" | parted -l "{{ raw_imgfile }}"
-#    - parted:
-#        device: "{{ raw_imgfile }}"
-#        number: 1
-#        state: present
-
     - name: create mknod devices in chroot
       command: "mknod -m 0660 /dev/loop{{ item }} b 7 {{ item }}"
       args:
       with_sequence: start=0 end=9
       tags: mknod_devices
 
-#    - command: losetup --show --partscan --find "{{ raw_imgfile }}"
-#      register: loop_device_res
-#
-#    - debug:
-#        var: loop_device_res
-#        verbosity: 2
-#
-#    - set_fact:
-#        loop_device: "{{ loop_device_res.stdout.strip() }}"
-#
-#    - wait_for:
-#        path: "{{ loop_device }}"
-#        state: present
-#
-#    - command: losetup
-#    - command: dmsetup ls
-
     - name: find first partition device
 #      command: kpartx -l "{{ loop_device }}"
       command: kpartx -l "{{ raw_imgfile }}"
 
     - name: use kpartx to create device nodes for the raw image loop device
       # operate on the loop device to avoid /dev namespace missing devices
-#      command: kpartx -avs "{{ loop_device }}"
       command: kpartx -avs "{{ raw_imgfile }}"
 
     - name: parted dump raw image
-#      command: parted "{{ loop_device }}" print
       command: parted "{{ raw_imgfile }}" print
       register: parted_res
 
         name: "{{ mountdir }}"
         # fstype is required
         fstype: "{{ image_fs_type }}"
-        #fstab: "{{ fake_fstab }}"
         state: mounted
 
     - name: mount chroot /proc
         src: none
         name: "{{ mountdir }}/proc"
         fstype: proc
-        #fstab: "{{ fake_fstab }}"
         state: mounted
 
     - name: if arm copy qemu-aarch64-static into chroot
         dest: "{{ mountdir }}/usr/bin"
       when: 'YARD_IMG_ARCH == "arm64"'
 
-
-    # setup lxd
-#    - file: "path={{ mountdir }} state=directory"
-#
-#    - unarchive:
-#        src: "{{ image_filename }}"
-#        dest: "{{ mountdir }}"
-#        remote_src: yes
-
-    # end setup lxd
-
-    # modify
-
     - name: create ubuntu policy-rc.d workaround
       copy:
         content: "{{ '#!/bin/sh\nexit 101\n' }}"
index a7a6c2a..f63489d 100644 (file)
@@ -18,5 +18,6 @@
     - yardstick_config.yml
 
   roles:
+    - convert_openrc
     - clean_images
     - clean_flavors
index 2690228..edd6564 100644 (file)
@@ -3,3 +3,4 @@ clone_dest: /opt/tempT
 release: xenial\r
 target_os: Ubuntu\r
 ubuntu_image_file: /tmp/workspace/yardstick/yardstick-trusty-server.raw\r
+proxy_env: {}
\ No newline at end of file
index 0014184..1c7d201 100644 (file)
@@ -17,4 +17,3 @@
 
   roles:
     - install_dependencies
-
index 7cf34ad..a4c130d 100644 (file)
@@ -59,8 +59,7 @@
 
 - include: build_yardstick_image.yml
 
-# TEMP
-#- include: image_uploaders/upload_yardstick_image.yml
+- include: image_uploaders/upload_yardstick_image.yml
 
 # upload cirros
 # upload vanilla ubuntu cloud_image
diff --git a/ansible/nsb_setup.yml b/ansible/nsb_setup.yml
new file mode 100644 (file)
index 0000000..e79ccab
--- /dev/null
@@ -0,0 +1,57 @@
+# 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.
+---
+- include: ubuntu_server_baremetal_deploy_samplevnfs.yml
+  vars:
+    YARD_IMG_ARCH: amd64
+
+- hosts: localhost
+  roles:
+    - install_dependencies
+    - docker
+
+- include: build_yardstick_image.yml
+  vars:
+    YARD_IMG_ARCH: amd64
+    release: xenial
+  when: openrc_file is defined
+
+- include: clean_images.yml
+  when: openrc_file is defined
+
+- hosts: localhost
+  post_tasks:
+    - os_image:
+        name: yardstick-samplevnfs
+        is_public: yes
+        disk_format: qcow2
+        container_format: bare
+        filename: "{{ raw_imgfile }}"
+      environment: "{{ openrc }}"
+      when: openrc_file is defined
+
+    - name: Start yardstick container
+      docker_container:
+        name: yardstick
+        image: opnfv/yardstick:latest
+        recreate: yes
+        state: started
+        restart_policy: always
+        network_mode: host
+        privileged: True
+        interactive: True
+        volumes:
+          - "{{ openrc_file|default('/dev/null') }}:/etc/yardstick/openstack.creds:ro"
+          - /var/run/docker.sock:/var/run/docker.sock
+          - /opt/:/opt
diff --git a/ansible/roles/docker/defaults/main.yml b/ansible/roles/docker/defaults/main.yml
new file mode 100644 (file)
index 0000000..e961969
--- /dev/null
@@ -0,0 +1,15 @@
+# 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.
+---
+ubuntu_docker_url: https://apt.dockerproject.org/repo
diff --git a/ansible/roles/docker/handlers/main.yml b/ansible/roles/docker/handlers/main.yml
new file mode 100644 (file)
index 0000000..5e65560
--- /dev/null
@@ -0,0 +1,20 @@
+# 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: systemd daemon reload
+   command: systemctl daemon-reload
+
+ - name: restart docker
+   service: name=docker state=restarted
+
diff --git a/ansible/roles/docker/tasks/Debian.yml b/ansible/roles/docker/tasks/Debian.yml
new file mode 100644 (file)
index 0000000..cf41287
--- /dev/null
@@ -0,0 +1,26 @@
+# 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: add Ubuntu docker repo
+    apt_repository: repo='deb [trusted=yes] {{ ubuntu_docker_url }} ubuntu-{{ ansible_distribution_release }} main' state=present
+
+  - name: ensure correct docker version
+    action: "{{ ansible_pkg_mgr }} name={{ item }} state=present force=yes"
+    with_items: "{{ docker_packages[ansible_os_family] }}"
+
+  - name: remove Ubuntu docker repo
+    apt_repository:
+      repo: 'deb [trusted=yes] {{ ubuntu_docker_url }} ubuntu-{{ ansible_distribution_release }} main'
+      state: absent
+      update_cache: no
diff --git a/ansible/roles/docker/tasks/RedHat.yml b/ansible/roles/docker/tasks/RedHat.yml
new file mode 100644 (file)
index 0000000..2261da3
--- /dev/null
@@ -0,0 +1,20 @@
+# 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: bootstrap docker project repos
+    template: "src={{ ansible_os_family }}-repos.j2 dest=/etc/yum.repos.d/docker.repo"
+
+  - name: ensure correct docker version
+    action: "{{ ansible_pkg_mgr }} name={{ item }} state=present"
+    with_items: "{{ docker_packages[ansible_os_family] }}"
diff --git a/ansible/roles/docker/tasks/main.yml b/ansible/roles/docker/tasks/main.yml
new file mode 100644 (file)
index 0000000..bbec371
--- /dev/null
@@ -0,0 +1,31 @@
+# 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 docker
+    include: "{{ ansible_os_family }}.yml"
+
+  - name: create docker service config dir
+    file: path=/etc/systemd/system/docker.service.d state=directory
+
+  - name: create docker proxy config
+    template: src=http-proxy-conf.j2 dest=/etc/systemd/system/docker.service.d/http-proxy.conf owner=root mode=0644
+    when: 'proxy_env is defined and "http_proxy" in proxy_env or "https_proxy" in proxy_env'
+    notify:
+     - systemd daemon reload
+     - restart docker
+
+  - name: start docker service
+    service: name=docker state=started enabled=yes
+
+  - meta: flush_handlers
diff --git a/ansible/roles/docker/templates/RedHat-repos.j2 b/ansible/roles/docker/templates/RedHat-repos.j2
new file mode 100644 (file)
index 0000000..6d36740
--- /dev/null
@@ -0,0 +1,7 @@
+[dockerrepo]
+name=Docker Repository
+# $releasever for RHEL 7 is '7Server' so we can't use $releasever
+baseurl={{ docker_project_url }}/repo/main/{{ ansible_distribution|lower|regex_replace('redhat', 'centos') }}/{{ ansible_distribution_major_version }}/
+enabled=1
+gpgcheck=1
+gpgkey={{ docker_project_url }}/gpg
diff --git a/ansible/roles/docker/templates/http-proxy-conf.j2 b/ansible/roles/docker/templates/http-proxy-conf.j2
new file mode 100644 (file)
index 0000000..854ddfe
--- /dev/null
@@ -0,0 +1,2 @@
+[Service]
+Environment={% if "http_proxy" in proxy_env %}"HTTP_PROXY={{ proxy_env.http_proxy }}" {% endif %}  {% if "https_proxy" in proxy_env %}  "HTTPS_PROXY={{ proxy_env.https_proxy }}" {% endif %}  {% if "http_proxy" in proxy_env or "https_proxy" in proxy_env %}  "NO_PROXY=localhost,127.0.0.0/8" {% endif %}
diff --git a/ansible/roles/docker/vars/main.yml b/ansible/roles/docker/vars/main.yml
new file mode 100644 (file)
index 0000000..8b50774
--- /dev/null
@@ -0,0 +1,20 @@
+# 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.
+---
+docker_project_url: https://yum.dockerproject.org
+docker_packages:
+  "RedHat":
+    - docker-engine-1.13.1
+  "Debian":
+    - docker-engine=1.13.1*
index 0047a5e..7a9911e 100755 (executable)
@@ -47,4 +47,3 @@
     - uwsgi-plugin-python
     - supervisor
     - python-setuptools
-
index b1695e2..1540806 100644 (file)
@@ -13,9 +13,7 @@ install_dependencies:
     - iproute2
     - linux-tools-common
     - linux-tools-generic
-    - lmbench
     - make
-    - netperf
     - patch
     - perl
     - rt-tests
diff --git a/ansible/yardstick-install-inventory.ini b/ansible/yardstick-install-inventory.ini
new file mode 100644 (file)
index 0000000..e2647b0
--- /dev/null
@@ -0,0 +1,4 @@
+# the group of systems on which to install yardstick
+# by default just localhost
+[yardstick]
+localhost  ansible_connection=local
index c11dc10..025b8f7 100755 (executable)
@@ -1,5 +1,5 @@
-#! /bin/bash
-# Copyright (c) 2016-2017 Intel Corporation
+#!/usr/bin/env bash
+# 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.
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-#
-# Change to yardstick directory ( <current-dir>/.. ), and export it as REPO_DIR
-#
-cd "$(dirname "${BASH_SOURCE[0]}")"
-export REPO_DIR=$PWD
-echo "------------------------------------------------------------------------------"
-echo " REPO_DIR exported as $REPO_DIR"
-echo "------------------------------------------------------------------------------"
-
-if [ "$(whoami)" != "root" ]; then
-    echo "Must be root to run $0"
-    exit 1;
-fi
-
-INSTALL_BIN_PATH="/opt/nsb_bin"
-TREX_VERSION="v2.28"
-TREX_DOWNLOAD="https://trex-tgn.cisco.com/trex/release/$TREX_VERSION.tar.gz"
-DPDK_DOWNLOAD="http://dpdk.org/browse/dpdk/snapshot/dpdk-16.07.zip"
-VIRTUAL_VENV="$INSTALL_BIN_PATH/yardstick_venv"
-
-#
-# Install libs needed for NSB
-#
-install_libs()
-{
-    echo "Install libs needed to build and run NSB Testing..."
-    apt-get update > /dev/null 2>&1
-    pkg=(git build-essential python-dev virtualenv python-virtualenv virtualenv linux-headers-$(uname -r) unzip  python-pip libpcap-dev cmake)
-    for i in "${pkg[@]}"; do
+apt-get update > /dev/null 2>&1
+pkg=(python-pip build-essential libssl-dev libffi-dev python3-dev python-dev)
+for i in "${pkg[@]}"; do
     dpkg-query -W --showformat='${Status}\n' "${i}"|grep "install ok installed"
     if [  "$?" -eq "1" ]; then
         apt-get -y install "${i}";
     fi
-    done
-    echo "Done"
-}
-
-install_yardstick()
-{
-    echo "Create install directory... $INSTALL_BIN_PATH"
-    mkdir -p $INSTALL_BIN_PATH
-    echo "Install yardstick dependencies and build Yardstick in venv..."
-    pushd .
-    rm -rf $VIRTUAL_VENV
-    echo $VIRTUAL_VENV
-    virtualenv $VIRTUAL_VENV
-    if [ ! -f "$INSTALL_BIN_PATH/yardstick_venv/bin/activate" ]; then
-         echo "Installation Error. Failed to create yardstick virtual env..."
-         exit 1
-    fi
-    source $VIRTUAL_VENV/bin/activate
-    bash ./install.sh
-    python setup.py install
-    popd
-
-    pushd .
-    echo "Copying yardstick sample conf & pod file to /etc/yardstick/nodes"
-    mkdir -p /etc/yardstick/nodes
-    cp "$REPO_DIR/etc/yardstick/yardstick.conf.sample" "/etc/yardstick/yardstick.conf"
-    cp "$REPO_DIR/etc/yardstick/nodes/pod.yaml.nsb.sample" "/etc/yardstick/nodes/"
-    popd
-}
-
-#
-# Install trex for TH setup
-#
-install_trex()
-{
-    TREX_DIR=$INSTALL_BIN_PATH/trex/scripts
-    if [ -d "$TREX_DIR" ]; then
-        echo "Trex $TREX_VERSION already installed."
-    else
-        echo "Build TRex and installing Trex TG in $INSTALL_BIN_PATH/trex"
-        rm -rf ${TREX_DOWNLOAD##*/}
-        if [ ! -e ${TREX_DOWNLOAD##*/} ] ; then
-            wget $TREX_DOWNLOAD
-        fi
-        tar zxvf ${TREX_DOWNLOAD##*/}
-        pushd .
-        rm -rf trex
-        mkdir -p trex
-        mv $TREX_VERSION trex/scripts
-        rm -rf $TREX_VERSION.tar.gz
-        cd trex/scripts/ko/src/
-        make
-        make install
-        ln -s $TREX_DIR/automation/trex_control_plane $INSTALL_BIN_PATH/trex_client
-        popd
-    fi
-    echo "Done."
-}
-
-install_dpdk()
-{
-    if [ -d "$INSTALL_BIN_PATH/dpdk-16.07" ]; then
-        echo "DPDK already installed make sure.. igb_uio is loaded."
-    else
-        echo "Build DPDK 16.07..."
-        pushd .
-        rm -rf ${DPDK_DOWNLOAD##*/}
-        rm -rf "$REPO_DIR/dpdk-16.07/"
-        if [ ! -e ${DPDK_DOWNLOAD##*/} ] ; then
-            wget ${DPDK_DOWNLOAD}
-        fi
-        unzip -o ${DPDK_DOWNLOAD##*/}
-
-        cd dpdk-16.07
-        make config T=x86_64-native-linuxapp-gcc O=x86_64-native-linuxapp-gcc
-        cd x86_64-native-linuxapp-gcc
-        echo "Enable Port Stats..."
-        sed -i -e 's/CONFIG_RTE_PORT_STATS_COLLECT=n/CONFIG_RTE_PORT_STATS_COLLECT=y/g' .config
-        sed -i -e 's/CONFIG_RTE_PORT_PCAP=n/CONFIG_RTE_PORT_PCAP=y/g' .config
-        sed -i -e 's/CONFIG_RTE_TABLE_STATS_COLLECT=n/CONFIG_RTE_TABLE_STATS_COLLECT=y/g' .config
-        sed -i -e 's/CONFIG_RTE_PIPELINE_STATS_COLLECT=n/CONFIG_RTE_PIPELINE_STATS_COLLECT=y/g' .config
-        make
-
-        echo "Load DPDK modules and setup hugepages"
-        modprobe uio
-        mkdir -p "/lib/modules/$(uname -r)/extra"
-        cp -r "kmod/igb_uio.ko" "/lib/modules/$(uname -r)/extra"
-        depmod -a
-        modprobe igb_uio
-        sh -c "echo 'uio\nigb_uio\n' > /etc/modules-load.d/nsb.conf"
-
-        HUGEPGSZ=$(cat < /proc/meminfo  | grep Hugepagesize | cut -d : -f 2 | tr -d ' ')
-        Pages=16
-        if [[ "$HUGEPGSZ" = "2048kB" ]] ; then
-            Pages=16384
-        fi
-        grep nr_hugepages /etc/sysctl.conf
-        if [[ "$?" -eq '1' ]] ; then
-            sh -c "echo 'vm.nr_hugepages=$Pages' >> /etc/sysctl.conf"
-        fi
-            echo "echo $Pages > /sys/kernel/mm/hugepages/hugepages-${HUGEPGSZ}/nr_hugepages" > .echo_tmp
-            echo "Reserving hugepages"
-            sudo sh .echo_tmp
-            rm -f .echo_tmp
-
-            service procps start
-            echo "Creating /mnt/huge and mounting as hugetlbfs"
-            sudo mkdir -p /mnt/huge
-
-            grep -s '/mnt/huge' /proc/mounts > /dev/null
-            if [ $? -ne 0 ] ; then
-                sudo mount -t hugetlbfs nodev /mnt/huge
-            fi
-            popd
-            mv "$REPO_DIR/dpdk-16.07" "$INSTALL_BIN_PATH"
-            rm dpdk-16.07.zip
-    fi
-    export RTE_SDK="$INSTALL_BIN_PATH/dpdk-16.07"
-    export RTE_TARGET=x86_64-native-linuxapp-gcc
-
-    if [ ! -f "$INSTALL_BIN_PATH/vPE_vnf" ]; then
-        pushd .
-        echo "Building vPE VNF..."
-        cd $INSTALL_BIN_PATH/dpdk-16.07/examples/ip_pipeline/
-        make clean
-        make
-        cp build/ip_pipeline $INSTALL_BIN_PATH/vPE_vnf
-        popd
-    fi
-    echo "Done"
-}
-
-
-push_nsb_binary()
-{
-    if [ ! -d "$INSTALL_BIN_PATH/trex/scripts" ]; then
-        cp -fr "$REPO_DIR/trex" "$INSTALL_BIN_PATH"
-    fi
-    rm -rf "$REPO_DIR/trex"
+done
 
-    if [ -d "$INSTALL_BIN_PATH/trex" ]; then
-        echo "Setup Environment variables for Test Harness...."
-        PYTHONPATH="$INSTALL_BIN_PATH/trex/scripts/automation/trex_control_plane:$INSTALL_BIN_PATH/trex/scripts/automation/trex_control_plane/stl"
-        PY_PATH=$(grep PYTHONPATH ~/.bash_profile)
-        if [ "$PY_PATH" = "" ] ; then
-            sh -c "echo export PYTHONPATH=$PYTHONPATH >> ~/.bash_profile" > /dev/null
-        else
-            echo "Your ~/.bash_profile already contains a PYTHONPATH definition."
-            echo "Make sure it contains $PYTHONPATH which is required to run TRex"
-        fi
-    fi
-    cp "$REPO_DIR/yardstick/network_services/nfvi/collectd.sh" "$INSTALL_BIN_PATH"
-    cp "$REPO_DIR/yardstick/network_services/nfvi/collectd.conf" "$INSTALL_BIN_PATH"
-    cp "$REPO_DIR/nsb_setup.sh" "$INSTALL_BIN_PATH"
-
-    # Get "dpdk-devbind.py" to find the ports for VNF to run
-    wget http://dpdk.org/browse/dpdk/plain/usertools/dpdk-devbind.py?h=v17.05 -O dpdk-devbind.py
-    chmod 777 dpdk-devbind.py
-    mv dpdk-devbind.py "$INSTALL_BIN_PATH"
-    ln "$INSTALL_BIN_PATH"/dpdk-devbind.py "$INSTALL_BIN_PATH"/dpdk_nic_bind.py
-    echo "Done"
-}
+pip install ansible shade docker
 
-check_installed_files()
-{
-    if [ ! -f "$INSTALL_BIN_PATH/yardstick_venv/bin/activate" ]; then
-        echo "Installation Error. Failed to create yardstick virtual env..."
-        exit 1
-    fi
+if [ $# -eq 1 ]; then
+    extra_args="-e openrc_file=$1"
+    OPENRC=$1
+    source "${OPENRC}"
+    CONTROLLER_IP=$(echo ${OS_AUTH_URL} | sed -ne "s/http:\/\/\(.*\):.*/\1/p")
+    export no_proxy="localhost,127.0.0.1,${CONTROLLER_IP},$no_proxy"
+fi
 
-    if [ ! -d "$INSTALL_BIN_PATH/dpdk-16.07" ]; then
-        echo "Installation Error. Failed to download and install dpdk-16.07..."
-        exit 1
-    fi
+if [ "$http_proxy" != "" ] || [ "$https_proxy" != "" ]; then
+    extra_args="${extra_args} -e @/tmp/proxy.yml"
 
-    if [ ! -d "$INSTALL_BIN_PATH/trex" ]; then
-        echo "Installation Error. Failed to download and configure Trex"
-        exit 1
-    fi
+    cat <<EOF > /tmp/proxy.yml
+---
+proxy_env:
+  http_proxy: $http_proxy
+  https_proxy: $https_proxy
+  no_proxy: $no_proxy
+EOF
+fi
 
-    if [ ! -f "$INSTALL_BIN_PATH/vPE_vnf" ]; then
-        echo "Installation Error. vPE VNF not present in install dir $INSTALL_BIN_PATH"
-        exit 1
-    fi
-}
+ANSIBLE_SCRIPTS="ansible"
 
-if [ "$1" == "dpdk" ]; then
-   install_libs
-   install_dpdk
-else
-   install_libs
-   install_yardstick
-   install_dpdk
-   install_trex
-   push_nsb_binary
-   check_installed_files
-clear
-echo "Installation completed..."
-echo "Virtual Environment : $INSTALL_BIN_PATH/yardstick_venv"
-echo "Please refer to Chapter 13 of the Yardstick User Guide for how to get started with VNF testing."
-fi
+cd ${ANSIBLE_SCRIPTS} &&\
+ansible-playbook \
+         -e img_modify_playbook='ubuntu_server_cloudimg_modify_samplevnfs.yml' \
+         -e YARD_IMG_ARCH='amd64' ${extra_args}\
+         -i yardstick-install-inventory.ini nsb_setup.yml