| #!/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 |