Generate leaner P4 VM
Dev: 1.5 GB instead of 3.5 GB
Tutorial: 2.3 GB instead of 5.5 GB
Change-Id: Ib63d47578a2c9e16a97827bfba463f90cfe1187d
diff --git a/tools/dev/p4vm/export-ova.sh b/tools/dev/p4vm/export-ova.sh
index 32e1694..6507849 100755
--- a/tools/dev/p4vm/export-ova.sh
+++ b/tools/dev/p4vm/export-ova.sh
@@ -4,27 +4,48 @@
VM_TYPE=${P4_VM_TYPE:-dev}
+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
+}
+
# Remove references to the existing vagrant-built VM (if any).
# We want to build a new one from scratch, not start an existing one.
rm -rf .vagrant/
-
vagrant up
SSH_PORT=`vagrant port --guest 22`
VB_UUID=`cat .vagrant/machines/default/virtualbox/id`
+VMDK_PATH=`VBoxManage showvminfo ${VB_UUID} --machinereadable | grep vmdk | cut -d'=' -f2`
+# 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"
+
+# Cleanup
+vagrant up
sshpass -p 'rocks' \
ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no \
-p ${SSH_PORT} sdn@127.0.0.1 "bash /vagrant/pre-ova-cleanup.sh"
-
sleep 5
vboxmanage controlvm ${VB_UUID} acpipowerbutton
-
-# Wait for VM to power off
-sleep 30
+wait_vm_shutdown ${VB_UUID}
# Remove vagrant shared folder
vboxmanage sharedfolder remove ${VB_UUID} -name "vagrant"
-rm -rf onos-p4-${VM_TYPE}.ova
+rm -f onos-p4-${VM_TYPE}.ova
vboxmanage export ${VB_UUID} -o onos-p4-${VM_TYPE}.ova
+
+sleep 1
+vboxmanage snapshot ${VB_UUID} restore pre-cleanup
+sleep 1
+vboxmanage snapshot ${VB_UUID} delete pre-cleanup