diff options
author | Carsten Koester <ckoester@cisco.com> | 2016-05-08 01:46:13 -0400 |
---|---|---|
committer | Matej Klotton <mklotton@cisco.com> | 2016-05-16 11:48:45 +0000 |
commit | 51e6d6933d6b20b9e6c68ac156c71c2379d8a63c (patch) | |
tree | 6d720452758492e8678aa8ff19371603cf342f51 | |
parent | a175e259c6a83aea6df61eed607f8c57671c8ea0 (diff) |
Add VIRL host selection mechanism to bootstrap
Add a mechanism to the bootstrap script that allows it to select
one out of multiple candidate VIRL hosts. In addition, fix a few
cosmetic issues wrt. connecting to the VIRL host:
* Use consistent set of SSH options
* Consistently use constant instead of hardcoded key filename
* Use relative path names for start-/stop-testcase scripts
Change-Id: I0d2972f170de82dd5d98da88656f5f962fca2415
Signed-off-by: Carsten Koester <ckoester@cisco.com>
-rwxr-xr-x | bootstrap.sh | 64 |
1 files changed, 52 insertions, 12 deletions
diff --git a/bootstrap.sh b/bootstrap.sh index 3f29f9856e..d1ca2f4606 100755 --- a/bootstrap.sh +++ b/bootstrap.sh @@ -21,16 +21,22 @@ export DEBIAN_FRONTEND=noninteractive sudo apt-get -y update sudo apt-get -y install libpython2.7-dev python-virtualenv +VIRL_SERVERS=("10.30.51.28" "10.30.51.29" "10.30.51.30") +VIRL_SERVER="" + +VIRL_USERNAME=jenkins-in +VIRL_PKEY=priv_key +VIRL_SERVER_STATUS_FILE="status" +VIRL_SERVER_EXPECTED_STATUS="PRODUCTION" + +SSH_OPTIONS="-i ${VIRL_PKEY} -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o BatchMode=yes -o LogLevel=error" + function ssh_do() { echo echo "### " ssh $@ - ssh -i priv_key -o StrictHostKeyChecking=no $@ + ssh ${SSH_OPTIONS} $@ } -VIRL_SERVER=10.30.51.28 -VIRL_USERNAME=jenkins-in -VIRL_PKEY=priv_key - rm -f ${VIRL_PKEY} cat > ${VIRL_PKEY} <<EOF -----BEGIN RSA PRIVATE KEY----- @@ -61,7 +67,41 @@ cWsudXjMki8734WSpMBqBp/J8wG3C9ZS6IpQD+U7UXA+roB7Qr+j4TqtWfM+87Rh maOpG56uAyR0w5Z9BhwzA3VakibVk9KwDgZ29WtKFzuATLFnOtCS46E= -----END RSA PRIVATE KEY----- EOF -chmod 600 priv_key +chmod 600 ${VIRL_PKEY} + +# +# Pick a random host from the array of VIRL servers, and attempt +# to reach it and verify it's status. +# +# The server must be reachable, and have a "status" file with +# the content "PRODUCTION", to be selected. +# +# If the server is not reachable, or does not have the correct +# status, remove it from the array and start again. +# +# Abort if there are no more servers left in the array. +# +while [[ ! "$VIRL_SERVER" ]] +do + num_hosts=${#VIRL_SERVERS[@]} + if [ $num_hosts == 0 ] + then + echo "No more VIRL candidate hosts available, failing." + exit 127 + fi + element=$[ $RANDOM % $num_hosts ] + virl_server_candidate=${VIRL_SERVERS[$element]} + virl_server_status=$(ssh ${SSH_OPTIONS} ${VIRL_USERNAME}@${virl_server_candidate} cat $VIRL_SERVER_STATUS_FILE 2>&1) + echo VIRL HOST $virl_server_candidate status is \"$virl_server_status\" + if [ "$virl_server_status" == "$VIRL_SERVER_EXPECTED_STATUS" ] + then + # Candidate is in good status. Select this server. + VIRL_SERVER="$virl_server_candidate" + else + # Candidate is in bad status. Remove from array. + VIRL_SERVERS=("${VIRL_SERVERS[@]:0:$element}" "${VIRL_SERVERS[@]:$[$element+1]}") + fi +done # Temporarily download VPP packages from nexus.fd.io @@ -94,7 +134,7 @@ echo "Updated file names: " ${VPP_DEBS_FULL[@]} cat ${VIRL_PKEY} # Copy the files to VIRL host -scp -i ${VIRL_PKEY} -o StrictHostKeyChecking=no *.deb \ +scp ${SSH_OPTIONS} *.deb \ ${VIRL_USERNAME}@${VIRL_SERVER}:${VIRL_DIR_LOC}/ result=$? @@ -108,13 +148,13 @@ fi echo "Starting simulation on VIRL server" function stop_virl_simulation { - ssh -i priv_key -o StrictHostKeyChecking=no ${VIRL_USERNAME}@${VIRL_SERVER}\ - "/home/jenkins-in/testcase-infra/bin/stop-testcase ${VIRL_SID}" + ssh ${SSH_OPTIONS} ${VIRL_USERNAME}@${VIRL_SERVER}\ + "stop-testcase ${VIRL_SID}" } -VIRL_SID=$(ssh -i priv_key -o StrictHostKeyChecking=no \ +VIRL_SID=$(ssh ${SSH_OPTIONS} \ ${VIRL_USERNAME}@${VIRL_SERVER} \ - "/home/jenkins-in/testcase-infra/bin/start-testcase -c double-ring-nested ${VPP_DEBS_FULL[@]}") + "start-testcase -c double-ring-nested ${VPP_DEBS_FULL[@]}") retval=$? if [ "$?" -ne "0" ]; then echo "VIRL simulation start failed" @@ -133,7 +173,7 @@ echo ${VIRL_SID} ssh_do ${VIRL_USERNAME}@${VIRL_SERVER} cat /scratch/${VIRL_SID}/topology.yaml # Download the topology file from virl session -scp -i ${VIRL_PKEY} -o StrictHostKeyChecking=no \ +scp ${SSH_OPTIONS} \ ${VIRL_USERNAME}@${VIRL_SERVER}:/scratch/${VIRL_SID}/topology.yaml \ topologies/enabled/topology.yaml |