aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ansible/build_yardstick_image.yml5
-rw-r--r--ansible/nsb_setup.yml45
-rw-r--r--ansible/prepare_openstack.yml44
-rw-r--r--ansible/roles/create_image/tasks/main.yml23
-rw-r--r--ansible/roles/create_samplevnfs_image/tasks/main.yml24
-rwxr-xr-xansible/roles/enable_hugepages_on_boot/tasks/main.yml55
-rw-r--r--ansible/roles/enable_hugepages_on_boot/tasks/manual_modify_grub.yml17
-rw-r--r--ansible/roles/enable_hugepages_on_boot/vars/main.yml2
-rw-r--r--ansible/ubuntu_server_baremetal_deploy_samplevnfs.yml5
-rw-r--r--ansible/yardstick-install-inventory.ini18
-rwxr-xr-xdocs/testing/developer/devguide/devguide.rst2
-rw-r--r--docs/testing/user/userguide/12-nsb_installation.rst48
-rwxr-xr-xnsb_setup.sh47
-rw-r--r--test-requirements.txt2
-rw-r--r--tests/unit/network_services/vnf_generic/vnf/test_tg_ping.py8
-rw-r--r--yardstick/network_services/vnf_generic/vnf/tg_ping.py3
16 files changed, 249 insertions, 99 deletions
diff --git a/ansible/build_yardstick_image.yml b/ansible/build_yardstick_image.yml
index bc57bcd48..45ef94e98 100644
--- a/ansible/build_yardstick_image.yml
+++ b/ansible/build_yardstick_image.yml
@@ -12,7 +12,7 @@
# See the License for the specific language governing permissions and
# limitations under the License.
---
-- hosts: localhost
+- hosts: jumphost
vars:
boot_modes:
@@ -31,7 +31,8 @@
workspace: "{{ lookup('env', 'workspace')|default('/tmp/workspace/yardstick', true) }}"
raw_imgfile_basename: "yardstick-{{ release }}-server.raw"
environment:
- PATH: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/root/bin
+ - PATH: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/root/bin
+ - "{{ proxy_env }}"
tasks:
- group_by:
diff --git a/ansible/nsb_setup.yml b/ansible/nsb_setup.yml
index 90fba0b1e..bfe5d2349 100644
--- a/ansible/nsb_setup.yml
+++ b/ansible/nsb_setup.yml
@@ -12,37 +12,26 @@
# 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
+#- name: Prepare baremetal machine
+# include: ubuntu_server_baremetal_deploy_samplevnfs.yml
+# vars:
+# YARD_IMG_ARCH: amd64
+#
+#- name: Install jumphost dependencies and configure docker
+# hosts: jumphost
+# environment:
+# "{{ proxy_env }}"
+# roles:
+# - install_dependencies
+# - docker
-- include: clean_images.yml
+- name: "handle all openstack stuff when: openrc_file is defined"
+ include: prepare_openstack.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 }}"
- properties:
- hw_vif_multiqueue_enabled: true
- environment: "{{ openrc }}"
- when: openrc_file is defined
-
+- name: start yardstick container on jumphost
+ hosts: jumphost
+ tasks:
- name: Start yardstick container
docker_container:
name: yardstick
diff --git a/ansible/prepare_openstack.yml b/ansible/prepare_openstack.yml
new file mode 100644
index 000000000..8456c9e59
--- /dev/null
+++ b/ansible/prepare_openstack.yml
@@ -0,0 +1,44 @@
+# 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: convert openrc_file to openrc env dict
+ hosts: jumphost
+ vars_files:
+ - yardstick_config.yml
+ roles:
+ - convert_openrc
+
+###
+# Build yardstick image for openstack quest
+# check included file for other vars/env
+###
+- include: build_yardstick_image.yml
+ vars:
+ YARD_IMG_ARCH: amd64
+ release: xenial
+
+###
+# Delete old yardstick image and flavors
+# Upload new image
+###
+- name: cleanup old openstack images, upload new
+ hosts: jumphost
+ vars_files:
+ - yardstick_config.yml
+ environment:
+ "{{ openrc }}"
+ roles:
+ - clean_images
+ - clean_flavors
+ - create_samplevnfs_image
diff --git a/ansible/roles/create_image/tasks/main.yml b/ansible/roles/create_image/tasks/main.yml
new file mode 100644
index 000000000..f63489d2d
--- /dev/null
+++ b/ansible/roles/create_image/tasks/main.yml
@@ -0,0 +1,23 @@
+# 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: pre-clean openstack enviroment
+ hosts: yardstick
+ vars_files:
+ - yardstick_config.yml
+
+ roles:
+ - convert_openrc
+ - clean_images
+ - clean_flavors
diff --git a/ansible/roles/create_samplevnfs_image/tasks/main.yml b/ansible/roles/create_samplevnfs_image/tasks/main.yml
new file mode 100644
index 000000000..c83cccab5
--- /dev/null
+++ b/ansible/roles/create_samplevnfs_image/tasks/main.yml
@@ -0,0 +1,24 @@
+# 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: create yardstick-samplevnfs image
+ when: openrc_file is defined
+ os_image:
+ name: yardstick-samplevnfs
+ is_public: yes
+ disk_format: qcow2
+ container_format: bare
+ filename: "{{ raw_imgfile }}"
+ properties:
+ hw_vif_multiqueue_enabled: true
diff --git a/ansible/roles/enable_hugepages_on_boot/tasks/main.yml b/ansible/roles/enable_hugepages_on_boot/tasks/main.yml
index 29432d2e4..75526eb19 100755
--- a/ansible/roles/enable_hugepages_on_boot/tasks/main.yml
+++ b/ansible/roles/enable_hugepages_on_boot/tasks/main.yml
@@ -31,34 +31,37 @@
msg: "Hugepages already set by someone else"
when: is_mine_huge.stdout == "" and is_huge.stdout != ""
-- name: use 16 for auto num_hugepages and 1G size
- set_fact:
- num_hugepages: 8
- when: num_hugepages|default("auto") == "auto"
+- name: configure hugepages as idempotent block
+ block:
+ - name: use 8 for auto num_hugepages and 1G size
+ set_fact:
+ num_hugepages: 8
+ when: num_hugepages|default("auto") == "auto"
-- name: set hugepages in grub
- lineinfile:
- dest: /etc/default/grub
- regexp: '{{ hugepage_param_regex }}'
- line: '{{ hugepage_param }}'
- state: present
+ - name: set hugepages in grub
+ lineinfile:
+ dest: /etc/default/grub
+ regexp: '{{ hugepage_param_regex }}'
+ line: '{{ hugepage_param }}'
+ state: present
-- name: create hugetables mount
- file:
- path: "{{ hugetable_mount }}"
- state: directory
+ - name: create hugetables mount
+ file:
+ path: "{{ hugetable_mount }}"
+ state: directory
-- name: mount hugetlbfs
- mount:
- name: "{{ hugetable_mount }}"
- src: nodev
- fstype: hugetlbfs
- state: present
+ - name: mount hugetlbfs
+ mount:
+ name: "{{ hugetable_mount }}"
+ src: nodev
+ fstype: hugetlbfs
+ state: present
-- service:
- name: procps
- enabled: yes
+ - service:
+ name: procps
+ enabled: yes
-- include: manual_modify_grub.yml
- # only tested on Ubuntu, kernel line is probably different on other distros
- when: ansible_distribution == "Ubuntu"
+ - include: manual_modify_grub.yml
+ # only tested on Ubuntu, kernel line is probably different on other distros
+ when: ansible_distribution == "Ubuntu"
+ when: is_mine_huge.stdout == ""
diff --git a/ansible/roles/enable_hugepages_on_boot/tasks/manual_modify_grub.yml b/ansible/roles/enable_hugepages_on_boot/tasks/manual_modify_grub.yml
index cac10e80e..6fa0c1d25 100644
--- a/ansible/roles/enable_hugepages_on_boot/tasks/manual_modify_grub.yml
+++ b/ansible/roles/enable_hugepages_on_boot/tasks/manual_modify_grub.yml
@@ -20,16 +20,17 @@
recurse: yes
register: grub_files
+- name: check if hugepages are already enabled
+ command: "grep -o 'default_hugepagesz=' {{ item.path }}"
+ register: hugepage_enabled
+ ignore_errors: True
+ with_items: "{{ grub_files.files }}"
-- name: added hugepages to grub manually because we can't run update-grub in chroot
+- name: add hugepages to grub manually because we can't run update-grub in chroot
replace:
dest: "{{ item.path }}"
- # console= should end the line
- regexp: '(linux\s+/boot/vmlinuz.*console=\S+$)'
- # default_hugepagesz=1G hugepagesz=1G hugepages=8
+ regexp: '(linux\s+/boot/vmlinuz.*$)'
replace: '\1 default_hugepagesz={{ huge_pagesize_short[huge_pagesize_mb] }} hugepagesz={{ huge_pagesize_short[huge_pagesize_mb] }} hugepages={{ num_hugepages }}'
with_items: "{{ grub_files.files }}"
-
-
-
-
+ # we suppose consistent /boot/grub/grub.cfg files
+ when: hugepage_enabled['results'][0].stdout == ""
diff --git a/ansible/roles/enable_hugepages_on_boot/vars/main.yml b/ansible/roles/enable_hugepages_on_boot/vars/main.yml
index acdf02509..6fec347b2 100644
--- a/ansible/roles/enable_hugepages_on_boot/vars/main.yml
+++ b/ansible/roles/enable_hugepages_on_boot/vars/main.yml
@@ -12,7 +12,7 @@
# See the License for the specific language governing permissions and
# limitations under the License.
---
-hugepage_param_regex: '^GRUB_CMDLINE_LINUX="\$GRUB_CMDLINE_LINUX.*# added by hugepages role'
+hugepage_param_regex: '^GRUB_CMDLINE_LINUX="\$GRUB_CMDLINE_LINUX.*" # added by hugepages role'
hugepage_param: 'GRUB_CMDLINE_LINUX="$GRUB_CMDLINE_LINUX default_hugepagesz={{ huge_pagesize_short[huge_pagesize_mb] }} hugepagesz={{ huge_pagesize_short[huge_pagesize_mb] }} hugepages={{ num_hugepages }}" # added by hugepages role'
update_grub:
diff --git a/ansible/ubuntu_server_baremetal_deploy_samplevnfs.yml b/ansible/ubuntu_server_baremetal_deploy_samplevnfs.yml
index 42a7b2d08..479b45c92 100644
--- a/ansible/ubuntu_server_baremetal_deploy_samplevnfs.yml
+++ b/ansible/ubuntu_server_baremetal_deploy_samplevnfs.yml
@@ -12,10 +12,11 @@
# See the License for the specific language governing permissions and
# limitations under the License.
---
-- hosts: all
+- hosts: yardstick-standalone:jumphost
vars:
clone_dir: /tmp/yardstick-clone
-
+ environment:
+ "{{ proxy_env }}"
roles:
- add_custom_repos
diff --git a/ansible/yardstick-install-inventory.ini b/ansible/yardstick-install-inventory.ini
index e2647b033..e276076cc 100644
--- a/ansible/yardstick-install-inventory.ini
+++ b/ansible/yardstick-install-inventory.ini
@@ -1,4 +1,20 @@
# the group of systems on which to install yardstick
# by default just localhost
-[yardstick]
+[jumphost]
localhost ansible_connection=local
+
+# section below is only due backward compatibility.
+# it will be removed later
+[yardstick:children]
+jumphost
+
+[yardstick-standalone]
+# uncomment hosts below if you would to test yardstick-standalone/sriov scenarios
+#yardstick-standalone-node ansible_host=192.168.1.2
+#yardstick-standalone-node-2 ansible_host=192.168.1.2
+
+[all:vars]
+# incomment credentials below for yardstick-standalone
+#ansible_user=root
+#ansible_pass=root
+
diff --git a/docs/testing/developer/devguide/devguide.rst b/docs/testing/developer/devguide/devguide.rst
index 1d47e5605..dade49b75 100755
--- a/docs/testing/developer/devguide/devguide.rst
+++ b/docs/testing/developer/devguide/devguide.rst
@@ -361,7 +361,7 @@ Verify your patch locally before submitting
Once you finish a patch, you can submit it to Gerrit for code review. A
developer sends a new patch to Gerrit will trigger patch verify job on Jenkins
-CI. The yardstick patch verify job includes python flake8 check, unit test and
+CI. The yardstick patch verify job includes python pylint check, unit test and
code coverage test. Before you submit your patch, it is recommended to run the
patch verification in your local environment first.
diff --git a/docs/testing/user/userguide/12-nsb_installation.rst b/docs/testing/user/userguide/12-nsb_installation.rst
index 8cc26acd5..a584ca231 100644
--- a/docs/testing/user/userguide/12-nsb_installation.rst
+++ b/docs/testing/user/userguide/12-nsb_installation.rst
@@ -112,12 +112,52 @@ Download the source code and install Yardstick from it
# git checkout <tag or stable branch>
git checkout stable/euphrates
- # For Bare-Metal or Standalone Virtualization
- ./nsb_setup.sh
+Configure the network proxy, either using the environment variables or setting
+the global environment file:
- # For OpenStack
- ./nsb_setup.sh <path to admin-openrc.sh>
+.. code-block:: ini
+ cat /etc/environment
+ http_proxy='http://proxy.company.com:port'
+ https_proxy='http://proxy.company.com:port'
+.. code-block:: console
+ export http_proxy='http://proxy.company.com:port'
+ export https_proxy='http://proxy.company.com:port'
+
+The last step is to modify the Yardstick installation inventory, used by
+Ansible:
+
+.. code-block:: ini
+ cat ./ansible/yardstick-install-inventory.ini
+ [jumphost]
+ localhost ansible_connection=local
+
+ [yardstick-standalone]
+ yardstick-standalone-node ansible_host=192.168.1.2
+ yardstick-standalone-node-2 ansible_host=192.168.1.3
+
+ # section below is only due backward compatibility.
+ # it will be removed later
+ [yardstick:children]
+ jumphost
+
+ [all:vars]
+ ansible_user=root
+ ansible_pass=root
+
+
+To execute an installation for a Bare-Metal or a Standalone context:
+
+.. code-block:: console
+
+ ./nsb_setup.sh
+
+
+To execute an installation for an OpenStack context:
+
+.. code-block:: console
+
+ ./nsb_setup.sh <path to admin-openrc.sh>
Above command setup docker with latest yardstick code. To execute
diff --git a/nsb_setup.sh b/nsb_setup.sh
index 40293fef9..a983f4de7 100755
--- a/nsb_setup.sh
+++ b/nsb_setup.sh
@@ -13,37 +13,48 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-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
-
-pip install ansible==2.3.2 shade==1.17.0 docker-py==1.10.6
-
+# OPENRC handling has to be first due no_proxy
if [ $# -eq 1 ]; then
OPENRC=$(readlink -f -- "$1")
- extra_args="-e openrc_file=${OPENRC}"
+ extra_args="${extra_args} -e openrc_file=${OPENRC}"
source "${OPENRC}"
CONTROLLER_IP=$(echo ${OS_AUTH_URL} | sed -ne "s#http://\([0-9a-zA-Z.\-]*\):*[0-9]*/.*#\1#p")
- export no_proxy="localhost,127.0.0.1,${CONTROLLER_IP},$no_proxy"
fi
-if [ "$http_proxy" != "" ] || [ "$https_proxy" != "" ]; then
- extra_args="${extra_args} -e @/tmp/proxy.yml"
+env_http_proxy=$(sed -ne "s/^http_proxy=[\"\']\(.*\)[\"\']/\1/p" /etc/environment)
+if [[ -z ${http_proxy} ]] && [[ ! -z ${env_http_proxy} ]]; then
+ export http_proxy=${env_http_proxy}
+fi
+env_https_proxy=$(sed -ne "s/^https_proxy=[\"\']\(.*\)[\"\']/\1/p" /etc/environment)
+if [[ -z ${https_proxy} ]] && [[ ! -z ${env_https_proxy} ]]; then
+ export https_proxy=${env_https_proxy}
+fi
+
+# if http[s]_proxy is set (from env or /etc/environment) prepare proxy for ansible
+if [[ ! -z ${http_proxy} ]] || [[ ! -z ${https_proxy} ]]; then
+ export no_proxy="localhost,127.0.0.1,${CONTROLLER_IP},${no_proxy}"
+ extra_args="${extra_args} -e @/tmp/proxy.yml "
cat <<EOF > /tmp/proxy.yml
---
proxy_env:
- http_proxy: $http_proxy
- https_proxy: $https_proxy
- no_proxy: $no_proxy
+ http_proxy: ${http_proxy}
+ https_proxy: ${https_proxy}
+ no_proxy: ${no_proxy}
EOF
fi
+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
+
+pip install ansible==2.3.2 shade==1.17.0 docker-py==1.10.6
+
ANSIBLE_SCRIPTS="ansible"
cd ${ANSIBLE_SCRIPTS} &&\
diff --git a/test-requirements.txt b/test-requirements.txt
index 371af21b1..8c59e4595 100644
--- a/test-requirements.txt
+++ b/test-requirements.txt
@@ -4,9 +4,7 @@
coverage==4.3.4 # Apache 2.0; OSI Approved Apache Software License; http://www.apache.org/licenses/LICENSE-2.0; http://www.apache.org/licenses/LICENSE-2.0
fixtures==3.0.0 # OSI Approved BSD License; OSI Approved Apache Software License
-flake8==2.5.4 # MIT; OSI Approved MIT License
packaging==16.8.0 # BSD or Apache License, Version 2.0
-pep8==1.7.0 # Expat license; OSI Approved MIT License
pyflakes==1.0.0 # MIT; OSI Approved MIT License
pylint==1.8.1 # GPLv2
python-subunit==1.2.0 # OSI Approved Apache Software License; OSI Approved BSD License
diff --git a/tests/unit/network_services/vnf_generic/vnf/test_tg_ping.py b/tests/unit/network_services/vnf_generic/vnf/test_tg_ping.py
index c1b2d27eb..ab3570740 100644
--- a/tests/unit/network_services/vnf_generic/vnf/test_tg_ping.py
+++ b/tests/unit/network_services/vnf_generic/vnf/test_tg_ping.py
@@ -228,7 +228,7 @@ class TestPingTrafficGen(unittest.TestCase):
CMD_KWARGS = {
'target_ip': u'152.16.100.20',
'local_ip': u'152.16.100.19',
- 'local_if_name': u'xe0',
+ 'local_if_name': u'xe0_fake',
}
@mock.patch("yardstick.ssh.SSH")
@@ -270,7 +270,7 @@ class TestPingTrafficGen(unittest.TestCase):
mock_ssh(ssh, spec=VnfSshHelper, exec_result=(0, "success", ""))
ping_traffic_gen = PingTrafficGen('vnf1', self.VNFD_0)
ping_traffic_gen.setup_helper.ssh_helper = mock.MagicMock(
- **{"execute.return_value": (0, "success", "")})
+ **{"execute.return_value": (0, "xe0_fake", "")})
self.assertIsInstance(ping_traffic_gen.ssh_helper, mock.Mock)
self.assertEqual(ping_traffic_gen._result, {})
@@ -278,12 +278,12 @@ class TestPingTrafficGen(unittest.TestCase):
self.assertEqual(
ping_traffic_gen.vnfd_helper.interfaces[0]['virtual-interface']['local_iface_name'],
- 'success')
+ 'xe0_fake')
self.assertEqual(self.CMD_KWARGS, ping_traffic_gen.resource_helper.cmd_kwargs)
self.assertIsNotNone(ping_traffic_gen._result)
@mock.patch("yardstick.ssh.SSH")
- def test_listen_traffic(self, ssh):
+ def test_listen_traffic(self, *args):
ping_traffic_gen = PingTrafficGen('vnf1', self.VNFD_0)
self.assertIsNone(ping_traffic_gen.listen_traffic({}))
diff --git a/yardstick/network_services/vnf_generic/vnf/tg_ping.py b/yardstick/network_services/vnf_generic/vnf/tg_ping.py
index 30a917862..5238a5f02 100644
--- a/yardstick/network_services/vnf_generic/vnf/tg_ping.py
+++ b/yardstick/network_services/vnf_generic/vnf/tg_ping.py
@@ -126,11 +126,10 @@ class PingTrafficGen(SampleVNFTrafficGen):
"packets_received": 0,
"rtt": 0,
}
+ self.setup_helper.setup_vnf_environment()
intf = self.vnfd_helper.interfaces[0]["virtual-interface"]
self.resource_helper.cmd_kwargs = {
'target_ip': IPv4Interface(intf["dst_ip"]).ip.exploded,
'local_ip': IPv4Interface(intf["local_ip"]).ip.exploded,
'local_if_name': intf["local_iface_name"].split('/')[0],
}
-
- self.setup_helper.setup_vnf_environment()