Bugfix:proxy env, ansible multinode support 57/47957/14
authorMalanik Jan <janx.malanik@intel.com>
Tue, 28 Nov 2017 16:22:17 +0000 (08:22 -0800)
committerMalanik Jan <janx.malanik@intel.com>
Thu, 14 Dec 2017 15:54:31 +0000 (07:54 -0800)
JIRA: YARDSTICK-893

- hosts and plays in ansible/nsb_setup.yml refactored
Fixed proxy configuration from env or /etc/environment in nsb_setup.sh
Fixed ansible parameter 'environment: "{{ proxy_env }}"' in:
 - roles for components download.
 - roles for components dependencies install.

Now, you can use ansible to modify all yardstick-standalone hosts at once.
1) Configure http[s]_proxy in
- /etc/environment
or
- env variables
2) Modify 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

  [all:vars]
  ansible_user=root
  ansible_pass=root

3) start:
./nsb_setup.sh # for baremetal/sriov
./nsb_setup.sh <path to admin-openrc.sh> #for openstack heat

Change-Id: I167db8bae8303210f21e8ae6f3870ef054bbedce
Signed-off-by: Malanik Jan <janx.malanik@intel.com>
ansible/build_yardstick_image.yml
ansible/nsb_setup.yml
ansible/prepare_openstack.yml [new file with mode: 0644]
ansible/roles/create_image/tasks/main.yml [new file with mode: 0644]
ansible/roles/create_samplevnfs_image/tasks/main.yml [new file with mode: 0644]
ansible/ubuntu_server_baremetal_deploy_samplevnfs.yml
ansible/yardstick-install-inventory.ini
docs/testing/user/userguide/12-nsb_installation.rst
nsb_setup.sh

index bc57bcd..45ef94e 100644 (file)
@@ -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:
index 90fba0b..bfe5d23 100644 (file)
 # 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 (file)
index 0000000..8456c9e
--- /dev/null
@@ -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 (file)
index 0000000..f63489d
--- /dev/null
@@ -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 (file)
index 0000000..c83ccca
--- /dev/null
@@ -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
index 42a7b2d..479b45c 100644 (file)
 # 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
index e2647b0..e276076 100644 (file)
@@ -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
+
index 8cc26ac..a584ca2 100644 (file)
@@ -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
 
index 40293fe..a983f4d 100755 (executable)
 # 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} &&\