From b9c73a3b99bbe1d6c5b184ecb4a9fc8532e94c47 Mon Sep 17 00:00:00 2001 From: Kirill Yudenok Date: Mon, 22 Mar 2021 19:53:52 +0300 Subject: [PATCH] Fix interaction with reload plugin --- lib/vagrant-libvirt/action/halt_domain.rb | 28 +++++++++++++++-------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/lib/vagrant-libvirt/action/halt_domain.rb b/lib/vagrant-libvirt/action/halt_domain.rb index 274acd0..43ed312 100644 --- a/lib/vagrant-libvirt/action/halt_domain.rb +++ b/lib/vagrant-libvirt/action/halt_domain.rb @@ -13,22 +13,30 @@ module VagrantPlugins def call(env) env[:ui].info(I18n.t('vagrant_libvirt.halt_domain')) + timeout = env[:machine].config.vm.graceful_halt_timeout domain = env[:machine].provider.driver.connection.servers.get(env[:machine].id.to_s) raise Errors::NoDomainError if domain.nil? begin - env[:machine].guest.capability(:halt) - rescue - @logger.info('Trying Libvirt graceful shutdown.') - domain.shutdown - end + Timeout.timeout(timeout) do + begin + env[:machine].guest.capability(:halt) + rescue Timeout::Error + raise + rescue + @logger.info('Trying Libvirt graceful shutdown.') + # Read domain object again + dom = env[:machine].provider.driver.connection.servers.get(env[:machine].id.to_s) + if dom.state.to_s == 'running' + dom.shutdown + end + end - - begin - domain.wait_for(30) do - !ready? + domain.wait_for(timeout) do + !ready? + end end - rescue Fog::Errors::TimeoutError + rescue Timeout::Error @logger.info('VM is still running. Calling force poweroff.') domain.poweroff end