+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
+SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
+
+if [ "${#}" -ne "0" ]; then
+ arr=(${@})
+ echo ${arr[0]}
+else
+ rm -f *.deb
+ VPP_STABLE_VER=$(cat ${SCRIPT_DIR}/VPP_STABLE_VER)
+ VPP_REPO_URL=$(cat ${SCRIPT_DIR}/VPP_REPO_URL)
+ wget -q "${VPP_REPO_URL}/vpp/${VPP_STABLE_VER}/vpp-${VPP_STABLE_VER}.deb" || exit
+ wget -q "${VPP_REPO_URL}/vpp-dbg/${VPP_STABLE_VER}/vpp-dbg-${VPP_STABLE_VER}.deb" || exit
+ wget -q "${VPP_REPO_URL}/vpp-dev/${VPP_STABLE_VER}/vpp-dev-${VPP_STABLE_VER}.deb" || exit
+ wget -q "${VPP_REPO_URL}/vpp-dpdk-dev/${VPP_STABLE_VER}/vpp-dpdk-dev-${VPP_STABLE_VER}.deb" || exit
+ wget -q "${VPP_REPO_URL}/vpp-dpdk-dkms/${VPP_STABLE_VER}/vpp-dpdk-dkms-${VPP_STABLE_VER}.deb" || exit
+ wget -q "${VPP_REPO_URL}/vpp-lib/${VPP_STABLE_VER}/vpp-lib-${VPP_STABLE_VER}.deb" || exit
+fi
+
+VPP_DEBS=(*.deb)
+echo ${VPP_DEBS[@]}
+VIRL_DIR_LOC="/tmp"
+VPP_DEBS_FULL=(${VPP_DEBS[@]})
+
+# Prepend directory location at remote host to deb file list
+for index in "${!VPP_DEBS_FULL[@]}"; do
+ VPP_DEBS_FULL[${index}]=${VIRL_DIR_LOC}/${VPP_DEBS_FULL[${index}]}
+done
+
+echo "Updated file names: " ${VPP_DEBS_FULL[@]}
+
+cat ${VIRL_PKEY}
+# Copy the files to VIRL host
+scp ${SSH_OPTIONS} *.deb \
+ ${VIRL_USERNAME}@${VIRL_SERVER}:${VIRL_DIR_LOC}/
+
+result=$?
+if [ "${result}" -ne "0" ]; then
+ echo "Failed to copy vpp deb files to virl host"
+ echo ${result}
+ exit ${result}
+fi
+
+# Start a simulation on VIRL server
+echo "Starting simulation on VIRL server"
+
+function stop_virl_simulation {
+ ssh ${SSH_OPTIONS} ${VIRL_USERNAME}@${VIRL_SERVER}\
+ "stop-testcase ${VIRL_SID}"
+}
+
+VIRL_SID=$(ssh ${SSH_OPTIONS} \
+ ${VIRL_USERNAME}@${VIRL_SERVER} \
+ "start-testcase -c double-ring-nested ${VPP_DEBS_FULL[@]}")
+retval=$?
+if [ "$?" -ne "0" ]; then
+ echo "VIRL simulation start failed"
+ exit ${retval}
+fi
+
+if [[ ! "${VIRL_SID}" =~ session-[a-zA-Z0-9_]{6} ]]; then
+ echo "No VIRL session ID reported."
+ exit 127
+fi
+
+# Upon script exit, cleanup the simulation execution
+trap stop_virl_simulation EXIT
+echo ${VIRL_SID}
+
+ssh_do ${VIRL_USERNAME}@${VIRL_SERVER} cat /scratch/${VIRL_SID}/topology.yaml
+
+# Download the topology file from virl session
+scp ${SSH_OPTIONS} \
+ ${VIRL_USERNAME}@${VIRL_SERVER}:/scratch/${VIRL_SID}/topology.yaml \
+ topologies/enabled/topology.yaml
+
+retval=$?
+if [ "$?" -ne "0" ]; then
+ echo "Failed to copy topology file from VIRL simulation"
+ exit ${retval}
+fi
+
+
+virtualenv --system-site-packages env