From 9d8e8de5891b2452c3dc8ade7613660f62bba0a7 Mon Sep 17 00:00:00 2001 From: stephane Date: Thu, 24 Mar 2016 14:50:20 -0700 Subject: [PATCH] Unify testing scripts We previously had four separate test scripts to control basic tests, tests where bifrost and its dependencies install into a virtual environment, tests where bifrost builds a deployment image, and tests where bifrost uses DHCP. This resulted in the scripts getting out of sync with one another as changes were made. In order to increase consistency in testing and improve maintainability, consolidate the three scripts into test-bifrost.sh, add symlinks where the other scripts were, and update the documentation. Change-Id: Ic005960d00a145fc7b28ed423fb8f92e41d7ef0b --- scripts/README.md | 15 ++- scripts/test-bifrost-build-images.sh | 61 +----------- scripts/test-bifrost-inventory-dhcp.sh | 68 +------------ scripts/test-bifrost-venv.sh | 80 +-------------- scripts/test-bifrost.sh | 131 ++++++++++++++++++++----- 5 files changed, 123 insertions(+), 232 deletions(-) mode change 100755 => 120000 scripts/test-bifrost-build-images.sh mode change 100755 => 120000 scripts/test-bifrost-inventory-dhcp.sh mode change 100755 => 120000 scripts/test-bifrost-venv.sh diff --git a/scripts/README.md b/scripts/README.md index 07d696d59..33e625b55 100644 --- a/scripts/README.md +++ b/scripts/README.md @@ -1,8 +1,15 @@ Scripts ======= -This directory contains several scripts used in the OpenStack CI environment -for CI testing of Bifrost, or CI testing that uses Bifrost to test other projects. +This directory contains several scripts used in the OpenStack CI +environment for CI testing of Bifrost, or CI testing that uses Bifrost +to test other projects. -These are generally not intended for use outside of the OpenStack CI environment (or similar). -However env-setup.sh script is often used to install initial dependencies. \ No newline at end of file +The env-setup.sh script is often used to install initial dependencies. +These are generally not intended for use outside of the OpenStack CI +environment (or similar). + +test-bifrost-build-image.sh, test-bifrost-venv.sh, and +test-bifrost-inventory-dhcp.sh are symlinks to test-bifrost.sh +intended to provide backwards compatibility now that all functionality +has been moved to test-bifrost.sh. diff --git a/scripts/test-bifrost-build-images.sh b/scripts/test-bifrost-build-images.sh deleted file mode 100755 index 922e7b06a..000000000 --- a/scripts/test-bifrost-build-images.sh +++ /dev/null @@ -1,60 +0,0 @@ -#!/bin/bash - -set -eux -set -o pipefail -export PYTHONUNBUFFERED=1 - -SCRIPT_HOME="$(cd "$(dirname "$0")" && pwd)" -BIFROST_HOME=$SCRIPT_HOME/.. -# Install Ansible -$SCRIPT_HOME/env-setup.sh - -# Source Ansible -# NOTE(TheJulia): Ansible stable-1.9 source method tosses an error deep -# under the hood which -x will detect, so for this step, we need to suspend -# and then re-enable the feature. -set +x -source /opt/stack/ansible/hacking/env-setup -set -x - -# Change working directory -cd $BIFROST_HOME/playbooks - -# Syntax check of dynamic inventory test path -ansible-playbook -vvvv -i inventory/localhost test-bifrost-create-vm.yaml --syntax-check --list-tasks -ansible-playbook -vvvv -i inventory/localhost test-bifrost-dynamic.yaml --syntax-check --list-tasks - -# Create the test VM -ansible-playbook -vvvv -i inventory/localhost test-bifrost-create-vm.yaml \ - -e test_vm_memory_size="4096" - -set +e - -# Set BIFROST_INVENTORY_SOURCE -export BIFROST_INVENTORY_SOURCE=/tmp/baremetal.csv - -# Execute the installation and VM startup test. -# NOTE(TheJulia): The variables defined on the command line are to -# drive the use of Cirros as the deployed operating system, and -# as such sets the test user to cirros, and writes a debian style -# interfaces file out to the configuration drive as cirros does -# not support the network_info.json format file placed in the -# configuration drive. -ansible-playbook -vvvv -i inventory/bifrost_inventory.py \ - test-bifrost-dynamic.yaml \ - -e testing_user=root \ - -e download_ipa=false \ - -e create_ipa_image=true \ - -e inspect_nodes=true \ - -e enable_inspector=true -EXITCODE=$? - -if [ $EXITCODE != 0 ]; then - echo "****************************" - echo "Test failed. See logs folder" - echo "****************************" -fi - -$SCRIPT_HOME/collect-test-info.sh - -exit $EXITCODE diff --git a/scripts/test-bifrost-build-images.sh b/scripts/test-bifrost-build-images.sh new file mode 120000 index 000000000..753b5dee0 --- /dev/null +++ b/scripts/test-bifrost-build-images.sh @@ -0,0 +1 @@ +test-bifrost.sh \ No newline at end of file diff --git a/scripts/test-bifrost-inventory-dhcp.sh b/scripts/test-bifrost-inventory-dhcp.sh deleted file mode 100755 index 2872b9fb9..000000000 --- a/scripts/test-bifrost-inventory-dhcp.sh +++ /dev/null @@ -1,67 +0,0 @@ -#!/bin/bash - -# Note(TheJulia): If there is a workspace variable, we want to utilize that as -# the preference of where to put logs -LOG_LOCATION="${WORKSPACE:-..}/logs" - -set -eux -set -o pipefail -export PYTHONUNBUFFERED=1 - -SCRIPT_HOME="$(cd "$(dirname "$0")" && pwd)" -BIFROST_HOME=$SCRIPT_HOME/.. -# Install Ansible -$SCRIPT_HOME/env-setup.sh - -# Source Ansible -# NOTE(TheJulia): Ansible stable-1.9 source method tosses an error deep -# under the hood which -x will detect, so for this step, we need to suspend -# and then re-enable the feature. -set +x -source /opt/stack/ansible/hacking/env-setup -set -x - -# Change working directory -cd $BIFROST_HOME/playbooks - -# Syntax check of dynamic inventory test path -ansible-playbook -vvvv -i inventory/localhost test-bifrost-create-vm.yaml --syntax-check --list-tasks -ansible-playbook -vvvv -i inventory/localhost test-bifrost-dynamic.yaml --syntax-check --list-tasks - -# Create the test VMS -ansible-playbook -vvvv -i inventory/localhost test-bifrost-create-vm.yaml -e test_vm_num_nodes="5" -e test_vm_memory_size="1024" - -# cut file -head -n -2 /tmp/baremetal.csv > /tmp/baremetal.csv.new && mv /tmp/baremetal.csv.new /tmp/baremetal.csv - -set +e - -# Set BIFROST_INVENTORY_SOURCE -export BIFROST_INVENTORY_SOURCE=/tmp/baremetal.csv - -# Execute the installation and VM startup test. -# NOTE(TheJulia): The variables defined on the command line are to -# drive the use of Cirros as the deployed operating system, and -# as such sets the test user to cirros, and writes a debian style -# interfaces file out to the configuration drive as cirros does -# not support the network_info.json format file placed in the -# configuration drive. -ansible-playbook -vvvv \ - -i inventory/bifrost_inventory.py \ - test-bifrost-dhcp.yaml \ - -e use_cirros=true \ - -e testing_user=cirros \ - -e inventory_dhcp=true \ - -e inventory_dhcp_static_ip=true \ - -e test_vm_num_nodes="5" -EXITCODE=$? - -if [ $EXITCODE != 0 ]; then - echo "****************************" - echo "Test failed. See logs folder" - echo "****************************" -fi - -$SCRIPT_HOME/collect-test-info.sh - -exit $EXITCODE diff --git a/scripts/test-bifrost-inventory-dhcp.sh b/scripts/test-bifrost-inventory-dhcp.sh new file mode 120000 index 000000000..753b5dee0 --- /dev/null +++ b/scripts/test-bifrost-inventory-dhcp.sh @@ -0,0 +1 @@ +test-bifrost.sh \ No newline at end of file diff --git a/scripts/test-bifrost-venv.sh b/scripts/test-bifrost-venv.sh deleted file mode 100755 index 1317dd69d..000000000 --- a/scripts/test-bifrost-venv.sh +++ /dev/null @@ -1,79 +0,0 @@ -#!/bin/bash - -set -eux -set -o pipefail -export PYTHONUNBUFFERED=1 - -SCRIPT_HOME="$(cd "$(dirname "$0")" && pwd)" -BIFROST_HOME=$SCRIPT_HOME/.. -export VENV=/opt/stack/bifrost -# Install Ansible -$SCRIPT_HOME/env-setup.sh - -# Source Ansible -# NOTE(TheJulia): Ansible stable-1.9 source method tosses an error deep -# under the hood which -x will detect, so for this step, we need to suspend -# and then re-enable the feature. -set +x +o nounset -source /opt/stack/bifrost/bin/activate -set -x -o nounset - -export PATH=${VENV}/bin:${PATH} -echo $(which pip) -echo $(which python) - - -# Change working directory -cd $BIFROST_HOME/playbooks -echo $(which ansible-playbook) - -# Syntax check of dynamic inventory test path -${VENV}/bin/ansible-playbook -vvvv \ - -i inventory/localhost \ - test-bifrost-create-vm.yaml \ - --syntax-check \ - --list-tasks \ - -e enable_venv=true -${VENV}/bin/ansible-playbook -vvvv \ - -i inventory/localhost \ - test-bifrost-dynamic.yaml \ - --syntax-check --list-tasks \ - -e testing_user=cirros \ - -e enable_venv=true - -# Create the test VM -${VENV}/bin/ansible-playbook -vvvv \ - -i inventory/localhost \ - test-bifrost-create-vm.yaml \ - -e enable_venv=true -set +e - -# Set BIFROST_INVENTORY_SOURCE -export BIFROST_INVENTORY_SOURCE=/tmp/baremetal.csv - -# Execute the installation and VM startup test. -# NOTE(TheJulia): The variables defined on the command line are to -# drive the use of Cirros as the deployed operating system, and -# as such sets the test user to cirros, and writes a debian style -# interfaces file out to the configuration drive as cirros does -# not support the network_info.json format file placed in the -# configuration drive. -${VENV}/bin/ansible-playbook -vvvv \ - -i inventory/bifrost_inventory.py \ - test-bifrost-dynamic.yaml \ - -e use_cirros=true \ - -e testing_user=cirros \ - -e write_interfaces_file=true \ - -e enable_inspector=true \ - -e enable_venv=true -EXITCODE=$? - -if [ $EXITCODE != 0 ]; then - echo "****************************" - echo "Test failed. See logs folder" - echo "****************************" -fi - -$SCRIPT_HOME/collect-test-info.sh - -exit $EXITCODE diff --git a/scripts/test-bifrost-venv.sh b/scripts/test-bifrost-venv.sh new file mode 120000 index 000000000..753b5dee0 --- /dev/null +++ b/scripts/test-bifrost-venv.sh @@ -0,0 +1 @@ +test-bifrost.sh \ No newline at end of file diff --git a/scripts/test-bifrost.sh b/scripts/test-bifrost.sh index 3b708faf7..26e72f14c 100755 --- a/scripts/test-bifrost.sh +++ b/scripts/test-bifrost.sh @@ -3,29 +3,115 @@ set -eux set -o pipefail export PYTHONUNBUFFERED=1 - SCRIPT_HOME="$(cd "$(dirname "$0")" && pwd)" BIFROST_HOME=$SCRIPT_HOME/.. -# Install Ansible -$SCRIPT_HOME/env-setup.sh +ENABLE_VENV="false" +USE_DHCP="false" +USE_VENV="false" +BUILD_IMAGE="false" + +# Set defaults for ansible command-line options to drive the different +# tests. + +# NOTE(TheJulia/cinerama): The variables defined on the command line +# for the default and DHCP tests are to drive the use of Cirros as the +# deployed operating system, and as such sets the test user to cirros, +# and writes a debian style interfaces file out to the configuration +# drive as cirros does not support the network_info.json format file +# placed in the configuration drive. The "build image" test does not +# use cirros. + +VM_MEMORY_SIZE="3072" +TEST_VM_NUM_NODES=1 +USE_CIRROS=true +TESTING_USER=cirros +TEST_PLAYBOOK="test-bifrost-dynamic.yaml" +USE_INSPECTOR=true +INSPECT_NODES=true +INVENTORY_DHCP=false +INVENTORY_DHCP_STATIC_IP=false +DOWNLOAD_IPA=true +CREATE_IPA_IMAGE=false +WRITE_INTERFACES_FILE=true + +# NOTE(cinerama): We could remove this if we change the CI job to use +# USE_DHCP, BUILD_IMAGE, etc. +SOURCE=$(basename ${BASH_SOURCE[0]}) +if [ $SOURCE = "test-bifrost-inventory-dhcp.sh" ]; then + USE_DHCP="true" +elif [ $SOURCE = "test-bifrost-venv.sh" ]; then + USE_VENV="true" +elif [ $SOURCE = "test-bifrost-create-vm.sh" ]; then + BUILD_IMAGE="true" +fi # Source Ansible # NOTE(TheJulia): Ansible stable-1.9 source method tosses an error deep # under the hood which -x will detect, so for this step, we need to suspend # and then re-enable the feature. -set +x -source /opt/stack/ansible/hacking/env-setup -set -x +set +x +o nounset +if [ ${USE_VENV} = "true" ]; then + export VENV=/opt/stack/bifrost + export PATH=${VENV}/bin:${PATH} + $SCRIPT_HOME/env-setup.sh + source /opt/stack/bifrost/bin/activate + ANSIBLE=${VENV}/bin/ansible-playbook + ENABLE_VENV="true" +else + $SCRIPT_HOME/env-setup.sh + source /opt/stack/ansible/hacking/env-setup + ANSIBLE=$(which ansible-playbook) +fi +set -x -o nounset + +# Adjust options for DHCP or create VM tests +if [ ${USE_DHCP} = "true" ]; then + VM_MEMORY_SIZE="1024" + ENABLE_INSPECTOR=false + INSPECT_NODES=false + TEST_PLAYBOOK="test-bifrost-dhcp.yaml" + TEST_VM_NUM_NODES=5 + INVENTORY_DHCP=true + INVENTORY_DHCP_STATIC_IP=true + WRITE_INTERFACES_FILE=false +elif [ ${BUILD_IMAGE} = "true" ]; then + USE_CIRROS=false + TESTING_USER=root + VM_MEMORY_SIZE="4096" + ENABLE_INSPECTOR=false + INSPECT_NODES=false + DOWNLOAD_IPA=false + CREATE_IPA_IMAGE=true +fi # Change working directory cd $BIFROST_HOME/playbooks # Syntax check of dynamic inventory test path -ansible-playbook -vvvv -i inventory/localhost test-bifrost-create-vm.yaml --syntax-check --list-tasks -ansible-playbook -vvvv -i inventory/localhost test-bifrost-dynamic.yaml --syntax-check --list-tasks -e testing_user=cirros +${ANSIBLE} -vvvv \ + -i inventory/localhost \ + test-bifrost-create-vm.yaml \ + --syntax-check \ + --list-tasks +${ANSIBLE} -vvvv \ + -i inventory/localhost \ + ${TEST_PLAYBOOK} \ + --syntax-check \ + --list-tasks \ + -e testing_user=${TESTING_USER} # Create the test VM -ansible-playbook -vvvv -i inventory/localhost test-bifrost-create-vm.yaml +${ANSIBLE} -vvvv \ + -i inventory/localhost \ + test-bifrost-create-vm.yaml \ + -e test_vm_num_nodes=${TEST_VM_NUM_NODES} \ + -e test_vm_memory_size=${VM_MEMORY_SIZE} \ + -e enable_venv=${ENABLE_VENV} + +if [ ${USE_DHCP} = "true" ]; then + # cut file to limit number of nodes to enroll for testing purposes + head -n -2 /tmp/baremetal.csv > /tmp/baremetal.csv.new && mv /tmp/baremetal.csv.new /tmp/baremetal.csv +fi set +e @@ -33,20 +119,21 @@ set +e export BIFROST_INVENTORY_SOURCE=/tmp/baremetal.csv # Execute the installation and VM startup test. -# NOTE(TheJulia): The variables defined on the command line are to -# drive the use of Cirros as the deployed operating system, and -# as such sets the test user to cirros, and writes a debian style -# interfaces file out to the configuration drive as cirros does -# not support the network_info.json format file placed in the -# configuration drive. -ansible-playbook -vvvv \ + +${ANSIBLE} -vvvv \ -i inventory/bifrost_inventory.py \ - test-bifrost-dynamic.yaml \ - -e use_cirros=true \ - -e testing_user=cirros \ - -e write_interfaces_file=true \ - -e enable_inspector=true \ - -e inspect_nodes=true + ${TEST_PLAYBOOK} \ + -e use_cirros=${USE_CIRROS} \ + -e testing_user=${TESTING_USER} \ + -e test_vm_num_nodes=${TEST_VM_NUM_NODES} \ + -e inventory_dhcp=${INVENTORY_DHCP} \ + -e inventory_dhcp_static_ip=${INVENTORY_DHCP_STATIC_IP} \ + -e enable_venv=${ENABLE_VENV} \ + -e enable_inspector=${USE_INSPECTOR} \ + -e inspect_nodes=${INSPECT_NODES} \ + -e download_ipa=${DOWNLOAD_IPA} \ + -e create_ipa_image=${CREATE_IPA_IMAGE} \ + -e write_interfaces_file=${WRITE_INTERFACES_FILE} EXITCODE=$? if [ $EXITCODE != 0 ]; then