Tim Andersson has proposed merging ~andersson123/autopkgtest-cloud:create-test-instances-refactor into autopkgtest-cloud:master.
Requested reviews: Canonical's Ubuntu QA (canonical-ubuntu-qa) For more details, see: https://code.launchpad.net/~andersson123/autopkgtest-cloud/+git/autopkgtest-cloud/+merge/461125 -- Your team Canonical's Ubuntu QA is requested to review the proposed merge of ~andersson123/autopkgtest-cloud:create-test-instances-refactor into autopkgtest-cloud:master.
diff --git a/charms/focal/autopkgtest-cloud-worker/autopkgtest-cloud/tools/create-instances-common.sh b/charms/focal/autopkgtest-cloud-worker/autopkgtest-cloud/tools/create-instances-common.sh new file mode 100644 index 0000000..0eed9fa --- /dev/null +++ b/charms/focal/autopkgtest-cloud-worker/autopkgtest-cloud/tools/create-instances-common.sh @@ -0,0 +1,155 @@ +#!/bin/bash +# shellcheck disable=SC2154 + +# Common functions shared by scripts in this directory which create openstack instances + +make_and_load_key(){ + # $1 rc file + # $2 name prefix + key_id="${2}-key" + if openstack keypair show "${key_id}" &>/dev/null; then + openstack keypair delete "${key_id}" &> /dev/null + fi + if ! openstack keypair create --public-key ~/.ssh/id_rsa.pub "${key_id}" &> /dev/null; then + printf "keypair creation failed for %s, skipping" "${1}" + exit 1 + fi + # Not changing as it'll show but not be loaded I think - needs testing + while ! openstack keypair list | grep "${key_id}" &>/dev/null; do + ctr=$((ctr+1)) + if [ $ctr -gt 9 ]; then + printf "key not loading for %s, exiting" "${1}" + exit 1 + fi + done + printf "%s" "${key_id}" +} + +get_arch(){ + # $1 rc file + arch=$(echo "${1}" | awk -F[-.] '{print $2}') + if [ -z "$arch" ]; then + arch="arm64" + elif [[ "${arch}" == *"rc"* ]]; then + arch="arm64" + fi + if [[ "${OS_REGION_NAME}" == "prodstack5" ]]; then + arch="amd64" + elif [[ "${OS_REGION_NAME}" == "scalingstack-lgw01" ]]; then + arch="amd64" + fi + printf "%s" "${arch}" +} + +get_image(){ + # $1 release + # $2 arch + image=$(openstack image list | grep "${1}" | grep "${2}" | grep adt | cut -d' ' -f2) + printf "%s" "${image}" +} + +get_net(){ + # $1 network name + vals=$(openstack network show "${1}" --format=shell) + eval "${vals}" + printf "%s" "${id}" +} + +get_netid(){ + net="" + if [[ "${OS_USERNAME}" == *"stg"* ]]; then + if openstack network show net_stg-proposed-migration-environment &> /dev/null; then + net=$(get_net net_stg-proposed-migration-environment) + elif openstack network show net_prod-proposed-migration-environment &> /dev/null; then + net=$(get_net net_prod-proposed-migration-environment) + else + echo "Network finding failure, skipping ${FILE}..." + exit 1 + fi + elif [[ "${OS_USERNAME}" == *"prod"* ]]; then + net=$(get_net net_prod-proposed-migration) + fi + printf "%s" "${net}" +} + +wait_for_server_to_build(){ + # $1 server name + # $2 key + while :; do + vals=$(openstack server show "${1}" --format shell) + eval "${vals}" + if [[ "${status}" == "ACTIVE" ]]; then + break + elif [[ "${status}" == "ERROR" ]]; then + openstack keypair delete "${2}" + echo "Server building failed, see below..." + openstack server show "${1}" + exit 1 + fi + done +} + +wait_for_server_connectivity(){ + # $1 server_name + ip_address=$(openstack server show "${1}" --column addresses --format value | cut -d'=' -f2) + sleep 10 + while ! ssh -o ConnectTimeout=10 -o StrictHostKeyChecking=no ubuntu@"${ip_address}" : &>/dev/null; do + # echo "waiting for server to have connectivity..." + sleep 3 + done + printf "%s" "${ip_address}" +} + +create_server_and_wait_for_connectivity(){ + # $1 release + # $2 name_prefix + # $3 rc file + # $4 arch (default is amd64 unless specified in rc file or by CLA) + # shellcheck disable=SC1090 + if ! source "${3}"; then + printf "Sourcing file: %s failed, exiting...\n" "${3}" + exit 1 + fi + + key=$(make_and_load_key "${3}" "${2}") + server_name="${2}" + if openstack server show "${server_name}" &> /dev/null; then + openstack server delete "${server_name}" &> /dev/null + fi + arch=$(get_arch "${3}") + if [ $# -gt 3 ]; then + arch="${4}" + fi + img=$(get_image "${1}" "${arch}") + flavor="autopkgtest" + netid=$(get_netid) + openstack server create --key-name "${key}" --image "${img}" --flavor "${flavor}" --nic net-id="${netid}" -- "${server_name}" &> /dev/null + wait_for_server_to_build "${server_name}" "${key}" + ip=$(wait_for_server_connectivity "${server_name}") + printf "%s|%s|%s" "${server_name}" "${key}" "${ip}" +} + +show_server_details(){ + # $1 server details + name=$(printf "%s" "${1}" | cut -d'|' -f1) + key=$(printf "%s" "${1}" | cut -d'|' -f2) + ip=$(printf "%s" "${1}" | cut -d'|' -f3) + printf "%s\n%s\n%s\n" "${name}" "${key}" "${ip}" +} + +get_server_ip(){ + # $1 server details + printf "%s" "${1}" | cut -d'|' -f3 +} + +kill_server(){ + # $1 server details + # $2 file + # shellcheck disable=SC1090 + source "${2}" + printf "Killing server: \n%s" "$(show_server_details "${1}")" + server_name=$(printf "%s" "${1}" | cut -d'|' -f1) + key=$(printf "%s" "${1}" | cut -d'|' -f2) + openstack server delete "${server_name}" + openstack keypair delete "${key}" +} diff --git a/charms/focal/autopkgtest-cloud-worker/autopkgtest-cloud/tools/create-test-instances b/charms/focal/autopkgtest-cloud-worker/autopkgtest-cloud/tools/create-test-instances index 674dde3..42b57e1 100755 --- a/charms/focal/autopkgtest-cloud-worker/autopkgtest-cloud/tools/create-test-instances +++ b/charms/focal/autopkgtest-cloud-worker/autopkgtest-cloud/tools/create-test-instances @@ -1,17 +1,22 @@ -#!/bin/sh +#!/bin/bash # # Used to spin up multiple instances in a region to test instance creation # Should be followed by a connectivity (ssh) test +set -e # Architecture to test ARCH=$1 # Development release +RC_FILE=$2 DEVEL=$(distro-info --devel) -# IMAGE is the latest adt image for that arch and region -IMAGE=$(openstack image list --format csv -c Name --quote none | grep "adt/ubuntu-$DEVEL-$ARCH") -# NET_ID is the prop-proposed-migration network from `openstack network list` -NET_ID=$(openstack network list --format csv -c Name --quote none | grep proposed-migration) +SERVERNAME="creation-test" -for i in $(seq 1 2); do - openstack server create --image "${IMAGE}" --flavor autopkgtest --nic net-id="${NET_ID}" -- "creation-test-$ARCH-$i" +# shellcheck disable=SC1091 +source ./create-instances-common.sh + +for i in $(seq 1 10); do + printf "creating server %s\n" "${SERVERNAME}-${i}" + server_details=$(create_server_and_wait_for_connectivity "${DEVEL}" "${SERVERNAME}-${i}" "${RC_FILE}" "${ARCH}") + show_server_details "${server_details}" + kill_server "${server_details}" "${RC_FILE}" done
-- Mailing list: https://launchpad.net/~canonical-ubuntu-qa Post to : canonical-ubuntu-qa@lists.launchpad.net Unsubscribe : https://launchpad.net/~canonical-ubuntu-qa More help : https://help.launchpad.net/ListHelp