#!/usr/bin/env bash set -xe VM_TYPE=${1:-dev} USE_STRATUM=${USE_STRATUM:-false} STRATUM_BMV2_TAR=${STRATUM_BMV2_TAR-unknown} DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" function wait_vm_shutdown { set +x while vboxmanage showvminfo $1 | grep -c "running (since"; do echo "Waiting for VM to shutdown..." sleep 1 done sleep 2 set -x } function wait_for_tcp_port { set +x while ! nc -z $1 $2; do echo "Waiting for TCP port $2 on $1 to be open..." sleep 1 done sleep 2 set -x } rm -rf ./tmp if [[ ${VM_TYPE} = "tutorial" ]] then bazel build //:onos bazel build //:onos-package-admin rm -rf ~/.m2/repository/org/onosproject cd ${ONOS_ROOT} onos-publish -l cd ${DIR} mkdir -p ./tmp cp ../../../bazel-bin/onos.tar.gz ./tmp/onos.tar.gz cp ../../../bazel-bin/onos-admin.tar.gz ./tmp/onos-admin.tar.gz cp ../mininet/bmv2.py ./tmp/bmv2.py mv ~/.m2/repository/org/onosproject ./tmp/artifacts if [[ ${USE_STRATUM} = true ]] then cp ${STRATUM_BMV2_TAR} ./tmp/stratum_bmv2.tar.gz fi fi # Initial provisioning if necessary. USE_STRATUM=${USE_STRATUM} vagrant up ${VM_TYPE} rm -rf ./tmp SSH_PORT=`vagrant port --guest 22 ${VM_TYPE}` VB_UUID=`cat .vagrant/machines/${VM_TYPE}/virtualbox/id` if [[ ${VM_TYPE} = "dev" ]] then # Take snapshot before cleanup for local use # e.g. to avoid re-building P4 tools from scratch vboxmanage controlvm ${VB_UUID} acpipowerbutton wait_vm_shutdown ${VB_UUID} VBoxManage snapshot ${VB_UUID} take "pre-cleanup" vagrant up ${VM_TYPE} # SSH port forwarding might change after vagrant up. SSH_PORT=`vagrant port --guest 22 ${VM_TYPE}` wait_for_tcp_port 127.0.0.1 ${SSH_PORT} fi # Cleanup sshpass -p 'rocks' \ ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no \ -p ${SSH_PORT} sdn@127.0.0.1 "bash /vagrant/ova-cleanup.sh" sleep 5 vboxmanage controlvm ${VB_UUID} acpipowerbutton wait_vm_shutdown ${VB_UUID} # Remove vagrant shared folder vboxmanage sharedfolder remove ${VB_UUID} -name "vagrant" rm -f onos-p4-${VM_TYPE}.ova vboxmanage export ${VB_UUID} -o onos-p4-${VM_TYPE}.ova if [[ ${VM_TYPE} = "dev" ]] then sleep 1 vboxmanage snapshot ${VB_UUID} restore pre-cleanup sleep 1 vboxmanage snapshot ${VB_UUID} delete pre-cleanup fi