diff --git a/src/vmm_mad/remotes/firecracker/deploy b/src/vmm_mad/remotes/firecracker/deploy index 387bc17628..84dd56e40c 100755 --- a/src/vmm_mad/remotes/firecracker/deploy +++ b/src/vmm_mad/remotes/firecracker/deploy @@ -38,13 +38,13 @@ microvm.gen_deployment_file # Create microVM rc = microvm.create - -exit(-1) unless rc +sleep(1) # Make sure process have started -sleep(1) -if microvm.get_pid == -1 +if !rc || microvm.get_pid == -1 STDERR.puts 'MicroVM failed to start.' + microvm.clean(false) + exit(-1) end diff --git a/src/vmm_mad/remotes/lib/firecracker/clean.sh b/src/vmm_mad/remotes/lib/firecracker/clean.sh index e442ae4302..1cfa3423cb 100755 --- a/src/vmm_mad/remotes/lib/firecracker/clean.sh +++ b/src/vmm_mad/remotes/lib/firecracker/clean.sh @@ -24,12 +24,14 @@ set -e CGROUP_PATH="" VM_NAME="" CGROUP_TO=60 +ONLY_UMOUNT="" -while getopts ":c:v:t:" opt; do +while getopts ":c:v:t:o" opt; do case $opt in c) CGROUP_PATH="$OPTARG" ;; v) VM_NAME="$OPTARG" ;; t) CGROUP_TO=$OPTARG ;; + o) ONLY_UMOUNT="1" esac done @@ -49,9 +51,6 @@ rm -f "$ROOTFS_PATH/firecracker" # Unmount VM directory umount "$ROOTFS_PATH" -# Remove VM chroot directory -rm -rf $(dirname $ROOTFS_PATH) - #------------------------------------------------------------------------------- # Wait for a cgroup to not being used # @param $1 - Path to cgroup @@ -80,4 +79,13 @@ function clean_cgroups () { retry 3 clean_cgroups +#------------------------------------------------------------------------------- +# Remove VM chroot directory +#------------------------------------------------------------------------------- +if [ -n "${ONLY_UMOUNT}" ]; then + exit 0 +fi + +rm -rf $(dirname $ROOTFS_PATH) + exit 0 diff --git a/src/vmm_mad/remotes/lib/firecracker/microvm.rb b/src/vmm_mad/remotes/lib/firecracker/microvm.rb index 38931c8371..a15355c32e 100644 --- a/src/vmm_mad/remotes/lib/firecracker/microvm.rb +++ b/src/vmm_mad/remotes/lib/firecracker/microvm.rb @@ -88,7 +88,7 @@ class MicroVM end def get_pid - rc, stdout, = Command.execute("ps auxwww | grep -E '^.*firecracker.*\\-\\-id[[:blank:]]+#{@one.vm_name}[[:blank:]]+'", + rc, stdout, = Command.execute("ps auxwww | grep '^.*firecracker.*\\<#{@one.vm_name}\\>' | grep -v grep", false) if !rc.zero? || stdout.nil? @@ -227,11 +227,12 @@ class MicroVM end # Clean resources and directories after shuttingdown the microVM - def clean + def clean(delete=true) cgroup_path = @one.fcrc[:cgroup_location] timeout = Integer(@one.fcrc[:cgroup_delete_timeout]) params = "-c #{cgroup_path} -v #{@one.vm_name} -t #{timeout}" + params << " -o" unless delete cmd = "sudo #{@clean_sh} #{params}"