From 92afad5981d84cec20359551209c50a5f6755cb9 Mon Sep 17 00:00:00 2001 From: Fatih Degirmenci Date: Fri, 31 Aug 2018 10:52:00 +0200 Subject: Rename functest-prepare role to prepare-tests This change renames functest prepare-tole to prepare tests and makes other adjustments to the role to move common test preparation steps to its own script so we can prepare for Functest and Yardstick at one go. Similar things are required to be prepared for running Functest and Yardstick such as - installed packages - external network creation - creation of run-functest.sh and run-yardstick scripts from templates - preparation of environment variables This change will fail verification until the changes below is submitted. https://gerrit.opnfv.org/gerrit/#/c/61645/ Change-Id: Id1020d3e61abd3f087863c06a132c5021339d655 Signed-off-by: Fatih Degirmenci --- xci/playbooks/prepare-functest.yml | 23 ------ xci/playbooks/prepare-tests.yml | 23 ++++++ .../roles/prepare-functest/defaults/main.yml | 14 ---- .../roles/prepare-functest/tasks/main.yml | 53 ------------- .../roles/prepare-functest/templates/env.j2 | 7 -- .../prepare-functest/templates/run-functest.sh.j2 | 91 ---------------------- xci/playbooks/roles/prepare-functest/vars/main.yml | 17 ---- .../roles/prepare-tests/defaults/main.yml | 14 ++++ xci/playbooks/roles/prepare-tests/tasks/main.yml | 59 ++++++++++++++ xci/playbooks/roles/prepare-tests/templates/env.j2 | 7 ++ .../prepare-tests/templates/prepare-tests.sh.j2 | 46 +++++++++++ .../prepare-tests/templates/run-functest.sh.j2 | 52 +++++++++++++ xci/playbooks/roles/prepare-tests/vars/main.yml | 17 ++++ 13 files changed, 218 insertions(+), 205 deletions(-) delete mode 100644 xci/playbooks/prepare-functest.yml create mode 100644 xci/playbooks/prepare-tests.yml delete mode 100644 xci/playbooks/roles/prepare-functest/defaults/main.yml delete mode 100644 xci/playbooks/roles/prepare-functest/tasks/main.yml delete mode 100644 xci/playbooks/roles/prepare-functest/templates/env.j2 delete mode 100644 xci/playbooks/roles/prepare-functest/templates/run-functest.sh.j2 delete mode 100644 xci/playbooks/roles/prepare-functest/vars/main.yml create mode 100644 xci/playbooks/roles/prepare-tests/defaults/main.yml create mode 100644 xci/playbooks/roles/prepare-tests/tasks/main.yml create mode 100644 xci/playbooks/roles/prepare-tests/templates/env.j2 create mode 100644 xci/playbooks/roles/prepare-tests/templates/prepare-tests.sh.j2 create mode 100644 xci/playbooks/roles/prepare-tests/templates/run-functest.sh.j2 create mode 100644 xci/playbooks/roles/prepare-tests/vars/main.yml diff --git a/xci/playbooks/prepare-functest.yml b/xci/playbooks/prepare-functest.yml deleted file mode 100644 index a4cb664b..00000000 --- a/xci/playbooks/prepare-functest.yml +++ /dev/null @@ -1,23 +0,0 @@ ---- -# Copyright 2017, SUSE LINUX GmbH. -# -# 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: Prepare the environment for functest - hosts: opnfv - user: root - vars_files: - - ../var/opnfv.yml - - ../installer/osa/files/openstack_services.yml - roles: - - role: "prepare-functest" diff --git a/xci/playbooks/prepare-tests.yml b/xci/playbooks/prepare-tests.yml new file mode 100644 index 00000000..1a1935aa --- /dev/null +++ b/xci/playbooks/prepare-tests.yml @@ -0,0 +1,23 @@ +--- +# Copyright 2017, SUSE LINUX GmbH. +# +# 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: Prepare the environment for testing + hosts: opnfv + user: root + vars_files: + - ../var/opnfv.yml + - ../installer/osa/files/openstack_services.yml + roles: + - role: "prepare-tests" diff --git a/xci/playbooks/roles/prepare-functest/defaults/main.yml b/xci/playbooks/roles/prepare-functest/defaults/main.yml deleted file mode 100644 index a3638302..00000000 --- a/xci/playbooks/roles/prepare-functest/defaults/main.yml +++ /dev/null @@ -1,14 +0,0 @@ ---- -# Gateway parameters -gateway_ip: "10.10.10.1" -gateway_ip_mask: "10.10.10.1/24" -broadcast_ip: "10.10.10.255" -gateway_interface: "br-vlan" - -# Network parameters -external_network: "ext-net" - -# Subnet parameters -subnet_name: "ext-subnet" -allocation_pool: "start=10.10.10.5,end=10.10.10.254" -subnet_cidr: "10.10.10.0/24" diff --git a/xci/playbooks/roles/prepare-functest/tasks/main.yml b/xci/playbooks/roles/prepare-functest/tasks/main.yml deleted file mode 100644 index c29baca9..00000000 --- a/xci/playbooks/roles/prepare-functest/tasks/main.yml +++ /dev/null @@ -1,53 +0,0 @@ ---- -# SPDX-license-identifier: Apache-2.0 -############################################################################## -# Copyright (c) 2017 SUSE Linux GmbH -# All rights reserved. This program and the accompanying materials -# are made available under the terms of the Apache License, Version 2.0 -# which accompanies this distribution, and is available at -# http://www.apache.org/licenses/LICENSE-2.0 -############################################################################## - -- name: install functest required packages - package: - name: "{{ functest_required_packages[ansible_pkg_mgr] }}" - state: present - -# Docker is needed for functest -- name: Ensure Docker service is started and enabled - service: - name: docker - state: started - enabled: yes - -- name: install functest required pip packages - pip: - name: "{{ functest_required_pip }}" - state: present - extra_args: '-c https://raw.githubusercontent.com/openstack/requirements/{{ requirements_git_install_branch }}/upper-constraints.txt' - -- name: create public network gateway for functest - block: - - name: check if the gateway was already set - shell: "ip a | grep {{ gateway_ip }}" - register: gateway_ip_result - ignore_errors: True - changed_when: False - - - name: add public network gateway - command: "ip addr add {{ gateway_ip_mask }} brd {{ broadcast_ip }} dev {{ gateway_interface }}" - changed_when: False - when: gateway_ip_result|failed - when: deploy_scenario is match("os-.*") - -- name: prepare environment file for functest - template: - src: env.j2 - dest: /root/env - mode: 0755 - -- name: prepare the script to create networks and run functest - template: - src: run-functest.sh.j2 - dest: /root/run-functest.sh - mode: 0755 diff --git a/xci/playbooks/roles/prepare-functest/templates/env.j2 b/xci/playbooks/roles/prepare-functest/templates/env.j2 deleted file mode 100644 index d9a3bf32..00000000 --- a/xci/playbooks/roles/prepare-functest/templates/env.j2 +++ /dev/null @@ -1,7 +0,0 @@ -INSTALLER_IP=192.168.122.2 -TEST_DB_URL=http://testresults.opnfv.org/test/api/v1/results -ENERGY_RECORDER_API_URL=http://energy.opnfv.fr/resources -{# external network is only valid for OpenStack based scenarios #} -{% if 'os-' in deploy_scenario %} -EXTERNAL_NETWORK={{ external_network }} -{% endif %} diff --git a/xci/playbooks/roles/prepare-functest/templates/run-functest.sh.j2 b/xci/playbooks/roles/prepare-functest/templates/run-functest.sh.j2 deleted file mode 100644 index 5c6f0168..00000000 --- a/xci/playbooks/roles/prepare-functest/templates/run-functest.sh.j2 +++ /dev/null @@ -1,91 +0,0 @@ -#!/bin/bash - -# Variables that we need to pass from XCI to functest -XCI_ENV=(INSTALLER_TYPE XCI_FLAVOR OPENSTACK_OSA_VERSION CI_LOOP BUILD_TAG NODE_NAME FUNCTEST_MODE FUNCTEST_SUITE_NAME OPNFV_FUNCTEST_HEALTHCHECK_DOCKER_IMAGE_DIGEST) - -# Create directory to store functest logs -mkdir -p ~/results/ - -# Extract variables from xci.env file -if [[ -e /root/xci.env ]]; then - for x in ${XCI_ENV[@]}; do - grep "^${x}=" /root/xci.env >> /root/env - done - # Parse the XCI's DEPLOY_SCENARIO and XCI_FLAVOR variables and - # set the functest container's DEPLOY_SCENARIO variable in the - # following format -. But the XCI's mini flavor - # is converted into noha. - DEPLOY_SCENARIO=`grep -Po '(?<=DEPLOY_SCENARIO=).*' /root/xci.env` - XCI_FLAVOR=`grep -Po '(?<=XCI_FLAVOR=).*' /root/xci.env` - XCI_FLAVOR=${XCI_FLAVOR/mini/noha} - echo "DEPLOY_SCENARIO=$DEPLOY_SCENARIO-$XCI_FLAVOR" >> /root/env -fi - -# Dump the env file -echo "------------------------------------------------------" -echo "------------- functest environment file --------------" -cat /root/env -echo "------------------------------------------------------" - -# we need to ensure the necessary environment variables are sourced -source /root/env - -{% if 'os-' in deploy_scenario %} -{# stuff needed for OpenStack based scenarios #} -source /root/openrc - -openstack --insecure network create --external \ - --provider-physical-network flat \ - --provider-network-type flat {{ external_network }} - -openstack --insecure subnet create --network {{ external_network }} \ - --allocation-pool {{ allocation_pool }} \ - --subnet-range {{ subnet_cidr }} --gateway {{ gateway_ip }} \ - --no-dhcp {{ subnet_name }} - -# the needed images differ between the suites so avoid downloading unnecessary images -echo "Downloading the images needed for functest-$FUNCTEST_SUITE_NAME" -mkdir ~/images && cd ~/images -if [[ "$FUNCTEST_SUITE_NAME" =~ "healthcheck" ]]; then - wget -q http://download.cirros-cloud.net/0.4.0/cirros-0.4.0-x86_64-disk.img -elif [[ "$FUNCTEST_SUITE_NAME" =~ "smoke" ]]; then - wget -q http://download.cirros-cloud.net/0.4.0/cirros-0.4.0-x86_64-disk.img \ - http://testresults.opnfv.org/functest/shaker-image.qcow2 \ - https://cloud-images.ubuntu.com/releases/14.04/release/ubuntu-14.04-server-cloudimg-amd64-disk1.img -else - echo "Unsupported test suite for functest" - exit 1 -fi -echo "------------------------------------------------------" -ls -al . && cd ~ -echo "------------------------------------------------------" - -# docker image to use will be different for healthcheck and smoke test -DOCKER_IMAGE_NAME="ollivier/functest-${FUNCTEST_SUITE_NAME}" - -sudo docker run --env-file env \ - -v $(pwd)/openrc:/home/opnfv/functest/conf/env_file \ - -v $(pwd)/images:/home/opnfv/functest/images \ - -v $(pwd)/results:/home/opnfv/functest/results \ - ${DOCKER_IMAGE_NAME} -{% else %} -{# stuff needed for Kubernetes based scenarios #} -# Create k8s.creds file for functest -KUBE_MASTER_URL=$(grep -r server ~/.kube/config | awk '{print $2}') -KUBE_MASTER_IP=$(echo $KUBE_MASTER_URL | awk -F "[:/]" '{print $4}') -cat << EOF > ~/k8s.creds -KUBERNETES_PROVIDER=local -KUBE_MASTER_URL=$KUBE_MASTER_URL -KUBE_MASTER_IP=$KUBE_MASTER_IP -EOF - -# docker image to use will be different for healthcheck and smoke test -DOCKER_IMAGE_NAME="opnfv/functest-kubernetes-${FUNCTEST_SUITE_NAME}" - -sudo docker run --env-file env \ - -v $(pwd)/k8s.creds:/home/opnfv/functest/conf/env_file \ - -v $(pwd)/.kube/config:/root/.kube/config \ - -v $(pwd)/results:/home/opnfv/functest/results \ - $DOCKER_IMAGE_NAME -{% endif %} - diff --git a/xci/playbooks/roles/prepare-functest/vars/main.yml b/xci/playbooks/roles/prepare-functest/vars/main.yml deleted file mode 100644 index f076c033..00000000 --- a/xci/playbooks/roles/prepare-functest/vars/main.yml +++ /dev/null @@ -1,17 +0,0 @@ ---- -functest_required_packages: - apt: - - docker.io - - wget - - xz-utils - zypper: - - docker - - wget - - xz - yum: - - docker - - wget - - xz - -functest_required_pip: - - docker-py diff --git a/xci/playbooks/roles/prepare-tests/defaults/main.yml b/xci/playbooks/roles/prepare-tests/defaults/main.yml new file mode 100644 index 00000000..a3638302 --- /dev/null +++ b/xci/playbooks/roles/prepare-tests/defaults/main.yml @@ -0,0 +1,14 @@ +--- +# Gateway parameters +gateway_ip: "10.10.10.1" +gateway_ip_mask: "10.10.10.1/24" +broadcast_ip: "10.10.10.255" +gateway_interface: "br-vlan" + +# Network parameters +external_network: "ext-net" + +# Subnet parameters +subnet_name: "ext-subnet" +allocation_pool: "start=10.10.10.5,end=10.10.10.254" +subnet_cidr: "10.10.10.0/24" diff --git a/xci/playbooks/roles/prepare-tests/tasks/main.yml b/xci/playbooks/roles/prepare-tests/tasks/main.yml new file mode 100644 index 00000000..b75965df --- /dev/null +++ b/xci/playbooks/roles/prepare-tests/tasks/main.yml @@ -0,0 +1,59 @@ +--- +# SPDX-license-identifier: Apache-2.0 +############################################################################## +# Copyright (c) 2017 SUSE Linux GmbH +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Apache License, Version 2.0 +# which accompanies this distribution, and is available at +# http://www.apache.org/licenses/LICENSE-2.0 +############################################################################## + +- name: install required packages + package: + name: "{{ required_packages[ansible_pkg_mgr] }}" + state: present + +# Docker is needed for test frameworks +- name: Ensure Docker service is started and enabled + service: + name: docker + state: started + enabled: yes + +- name: install required pip packages + pip: + name: "{{ required_pip }}" + state: present + extra_args: '-c https://raw.githubusercontent.com/openstack/requirements/{{ requirements_git_install_branch }}/upper-constraints.txt' + +- name: create public network gateway for testing + block: + - name: check if the gateway was already set + shell: "ip a | grep {{ gateway_ip }}" + register: gateway_ip_result + ignore_errors: True + changed_when: False + + - name: add public network gateway + command: "ip addr add {{ gateway_ip_mask }} brd {{ broadcast_ip }} dev {{ gateway_interface }}" + changed_when: False + when: gateway_ip_result|failed + when: deploy_scenario is match("os-.*") + +- name: prepare environment file for tests + template: + src: env.j2 + dest: /root/env + mode: 0755 + +- name: create the script to prepare for testing + template: + src: prepare-tests.sh.j2 + dest: /root/prepare-tests.sh + mode: 0755 + +- name: create the script to run functest + template: + src: run-functest.sh.j2 + dest: /root/run-functest.sh + mode: 0755 diff --git a/xci/playbooks/roles/prepare-tests/templates/env.j2 b/xci/playbooks/roles/prepare-tests/templates/env.j2 new file mode 100644 index 00000000..d9a3bf32 --- /dev/null +++ b/xci/playbooks/roles/prepare-tests/templates/env.j2 @@ -0,0 +1,7 @@ +INSTALLER_IP=192.168.122.2 +TEST_DB_URL=http://testresults.opnfv.org/test/api/v1/results +ENERGY_RECORDER_API_URL=http://energy.opnfv.fr/resources +{# external network is only valid for OpenStack based scenarios #} +{% if 'os-' in deploy_scenario %} +EXTERNAL_NETWORK={{ external_network }} +{% endif %} diff --git a/xci/playbooks/roles/prepare-tests/templates/prepare-tests.sh.j2 b/xci/playbooks/roles/prepare-tests/templates/prepare-tests.sh.j2 new file mode 100644 index 00000000..afc1cbbe --- /dev/null +++ b/xci/playbooks/roles/prepare-tests/templates/prepare-tests.sh.j2 @@ -0,0 +1,46 @@ +#!/bin/bash + +# Variables that we need to pass from XCI to testing +XCI_ENV=(INSTALLER_TYPE XCI_FLAVOR OPENSTACK_OSA_VERSION CI_LOOP BUILD_TAG NODE_NAME FUNCTEST_MODE FUNCTEST_SUITE_NAME) + +# Extract variables from xci.env file +if [[ -e /root/xci.env ]]; then + for x in ${XCI_ENV[@]}; do + grep "^${x}=" /root/xci.env >> /root/env + done + # Parse the XCI's DEPLOY_SCENARIO and XCI_FLAVOR variables and + # set the functest container's DEPLOY_SCENARIO variable in the + # following format -. But the XCI's mini flavor + # is converted into noha. + DEPLOY_SCENARIO=`grep -Po '(?<=DEPLOY_SCENARIO=).*' /root/xci.env` + XCI_FLAVOR=`grep -Po '(?<=XCI_FLAVOR=).*' /root/xci.env` + XCI_FLAVOR=${XCI_FLAVOR/mini/noha} + echo "DEPLOY_SCENARIO=$DEPLOY_SCENARIO-$XCI_FLAVOR" >> /root/env +fi + +# we need to ensure the necessary environment variables are sourced +source /root/env + +{% if 'os-' in deploy_scenario %} +{# stuff needed for OpenStack based scenarios #} +source /root/openrc + +openstack --insecure network create --external \ + --provider-physical-network flat \ + --provider-network-type flat {{ external_network }} + +openstack --insecure subnet create --network {{ external_network }} \ + --allocation-pool {{ allocation_pool }} \ + --subnet-range {{ subnet_cidr }} --gateway {{ gateway_ip }} \ + --no-dhcp {{ subnet_name }} +{% else %} +{# stuff needed for Kubernetes based scenarios #} +# Create k8s.creds file for testing +KUBE_MASTER_URL=$(grep -r server ~/.kube/config | awk '{print $2}') +KUBE_MASTER_IP=$(echo $KUBE_MASTER_URL | awk -F "[:/]" '{print $4}') +cat << EOF > ~/k8s.creds +KUBERNETES_PROVIDER=local +KUBE_MASTER_URL=$KUBE_MASTER_URL +KUBE_MASTER_IP=$KUBE_MASTER_IP +EOF +{% endif %} diff --git a/xci/playbooks/roles/prepare-tests/templates/run-functest.sh.j2 b/xci/playbooks/roles/prepare-tests/templates/run-functest.sh.j2 new file mode 100644 index 00000000..acd19d19 --- /dev/null +++ b/xci/playbooks/roles/prepare-tests/templates/run-functest.sh.j2 @@ -0,0 +1,52 @@ +#!/bin/bash + +# Create directory to store functest logs +mkdir -p /root/functest-results/ + +# Dump the env file +echo "------------------------------------------------------" +echo "------------- functest environment file --------------" +cat /root/env +echo "------------------------------------------------------" + +# we need to ensure the necessary environment variables are sourced +source /root/env + +{% if 'os-' in deploy_scenario %} +{# stuff needed for OpenStack based scenarios #} +# the needed images differ between the suites so avoid downloading unnecessary images +echo "Downloading the images needed for functest-$FUNCTEST_SUITE_NAME" +mkdir ~/images && cd ~/images +if [[ "$FUNCTEST_SUITE_NAME" =~ "healthcheck" ]]; then + wget -q http://download.cirros-cloud.net/0.4.0/cirros-0.4.0-x86_64-disk.img +elif [[ "$FUNCTEST_SUITE_NAME" =~ "smoke" ]]; then + wget -q http://download.cirros-cloud.net/0.4.0/cirros-0.4.0-x86_64-disk.img \ + http://testresults.opnfv.org/functest/shaker-image.qcow2 \ + https://cloud-images.ubuntu.com/releases/14.04/release/ubuntu-14.04-server-cloudimg-amd64-disk1.img +else + echo "Unsupported test suite for functest" + exit 1 +fi +echo "------------------------------------------------------" +ls -al . && cd ~ +echo "------------------------------------------------------" + +# docker image to use will be different for healthcheck and smoke test +DOCKER_IMAGE_NAME="ollivier/functest-${FUNCTEST_SUITE_NAME}" + +sudo docker run --env-file env \ + -v $(pwd)/openrc:/home/opnfv/functest/conf/env_file \ + -v $(pwd)/images:/home/opnfv/functest/images \ + -v $(pwd)/functest-results:/home/opnfv/functest/results \ + ${DOCKER_IMAGE_NAME} +{% else %} +{# stuff needed for Kubernetes based scenarios #} +# docker image to use will be different for healthcheck and smoke test +DOCKER_IMAGE_NAME="opnfv/functest-kubernetes-${FUNCTEST_SUITE_NAME}" + +sudo docker run --env-file env \ + -v $(pwd)/k8s.creds:/home/opnfv/functest/conf/env_file \ + -v $(pwd)/.kube/config:/root/.kube/config \ + -v $(pwd)/functest-results:/home/opnfv/functest/results \ + $DOCKER_IMAGE_NAME +{% endif %} diff --git a/xci/playbooks/roles/prepare-tests/vars/main.yml b/xci/playbooks/roles/prepare-tests/vars/main.yml new file mode 100644 index 00000000..83638466 --- /dev/null +++ b/xci/playbooks/roles/prepare-tests/vars/main.yml @@ -0,0 +1,17 @@ +--- +required_packages: + apt: + - docker.io + - wget + - xz-utils + zypper: + - docker + - wget + - xz + yum: + - docker + - wget + - xz + +required_pip: + - docker-py -- cgit 1.2.3-korg