diff --git a/src/vmm_mad/remotes/firecracker/deploy b/src/vmm_mad/remotes/firecracker/deploy index e3b30aa146..124d55baec 100755 --- a/src/vmm_mad/remotes/firecracker/deploy +++ b/src/vmm_mad/remotes/firecracker/deploy @@ -42,11 +42,19 @@ microvm.gen_logs_files # Create microVM rc = microvm.create -sleep(1) + +if !rc + STDERR.puts 'There was an error deploying the microVM. Check oned.log.' + microvm.clean(false) + + exit(-1) +end # Make sure process have started -if !rc || microvm.get_pid == -1 - STDERR.puts 'MicroVM failed to start.' +rc = microvm.wait_deploy + +if !rc + STDERR.puts 'MicroVM process did not start.' microvm.clean(false) exit(-1) diff --git a/src/vmm_mad/remotes/lib/firecracker/microvm.rb b/src/vmm_mad/remotes/lib/firecracker/microvm.rb index 665ed2834d..4cf29fdaa4 100644 --- a/src/vmm_mad/remotes/lib/firecracker/microvm.rb +++ b/src/vmm_mad/remotes/lib/firecracker/microvm.rb @@ -130,6 +130,15 @@ class MicroVM get_pid < 0 end + def wait_deploy + t_start = Time.now + timeout = 5 + + next while (Time.now - t_start < timeout) && (get_pid < 0) + + get_pid > 0 + end + # rubocop:disable Lint/RedundantCopDisableDirective # rubocop:disable Lint/SuppressedException def wait_cgroup(path) diff --git a/src/vmm_mad/remotes/lib/firecracker/one-clean-firecracker-domain b/src/vmm_mad/remotes/lib/firecracker/one-clean-firecracker-domain index 4a7f242bf7..e283b7b925 100755 --- a/src/vmm_mad/remotes/lib/firecracker/one-clean-firecracker-domain +++ b/src/vmm_mad/remotes/lib/firecracker/one-clean-firecracker-domain @@ -21,6 +21,9 @@ # running) or the timeout is reached. function retry { + # Disable exit on error + set +e + times=$1 function=$2 @@ -36,6 +39,8 @@ function retry error=$? done + # enable exit on error back + set -e [ "x$error" = "x0" ] }