Handle Chef provisioner requests to reboot. A request to reboot is not a convergence failure, so don't treat it like a convergence failure.

Wait for the machine to reboot before trying to continue the provisioning.
This commit is contained in:
Taliesin Sisson 2017-08-10 11:39:41 +01:00
parent 820d80852c
commit 3ab64ab7e4
3 changed files with 88 additions and 67 deletions

View File

@ -73,16 +73,22 @@ module VagrantPlugins
@machine.ui.warn(I18n.t("vagrant.chef_run_list_empty")) @machine.ui.warn(I18n.t("vagrant.chef_run_list_empty"))
end end
if @machine.guest.capability?(:wait_for_reboot)
@machine.guest.capability(:wait_for_reboot)
end
command = CommandBuilder.command(:client, @config, command = CommandBuilder.command(:client, @config,
windows: windows?, windows: windows?,
colored: @machine.env.ui.color?, colored: @machine.env.ui.color?,
) )
still_active = 259 #provisioner has asked chef to reboot
@config.attempts.times do |attempt| @config.attempts.times do |attempt|
exit_status = 0
while exit_status == 0 || exit_status == still_active
if @machine.guest.capability?(:wait_for_reboot)
@machine.guest.capability(:wait_for_reboot)
elsif attempt > 0
sleep 10
@machine.communicate.wait_for_ready(@machine.config.vm.boot_timeout)
end
if attempt == 0 if attempt == 0
@machine.ui.info I18n.t("vagrant.provisioners.chef.running_client") @machine.ui.info I18n.t("vagrant.provisioners.chef.running_client")
else else
@ -103,6 +109,7 @@ module VagrantPlugins
# There is no need to run Chef again if it converges # There is no need to run Chef again if it converges
return if exit_status == 0 return if exit_status == 0
end end
end
# If we reached this point then Chef never converged! Error. # If we reached this point then Chef never converged! Error.
raise ChefError, :no_convergence raise ChefError, :no_convergence

View File

@ -176,17 +176,23 @@ module VagrantPlugins
@machine.ui.warn(I18n.t("vagrant.chef_run_list_empty")) @machine.ui.warn(I18n.t("vagrant.chef_run_list_empty"))
end end
if @machine.guest.capability?(:wait_for_reboot)
@machine.guest.capability(:wait_for_reboot)
end
command = CommandBuilder.command(:solo, @config, command = CommandBuilder.command(:solo, @config,
windows: windows?, windows: windows?,
colored: @machine.env.ui.color?, colored: @machine.env.ui.color?,
legacy_mode: @config.legacy_mode, legacy_mode: @config.legacy_mode,
) )
still_active = 259 #provisioner has asked chef to reboot
@config.attempts.times do |attempt| @config.attempts.times do |attempt|
exit_status = 0
while exit_status == 0 || exit_status == still_active
if @machine.guest.capability?(:wait_for_reboot)
@machine.guest.capability(:wait_for_reboot)
elsif attempt > 0
sleep 10
@machine.communicate.wait_for_ready(@machine.config.vm.boot_timeout)
end
if attempt == 0 if attempt == 0
@machine.ui.info I18n.t("vagrant.provisioners.chef.running_solo") @machine.ui.info I18n.t("vagrant.provisioners.chef.running_solo")
else else
@ -207,6 +213,7 @@ module VagrantPlugins
# There is no need to run Chef again if it converges # There is no need to run Chef again if it converges
return if exit_status == 0 return if exit_status == 0
end end
end
# If we reached this point then Chef never converged! Error. # If we reached this point then Chef never converged! Error.
raise ChefError, :no_convergence raise ChefError, :no_convergence

View File

@ -56,17 +56,23 @@ module VagrantPlugins
@machine.ui.warn(I18n.t("vagrant.chef_run_list_empty")) @machine.ui.warn(I18n.t("vagrant.chef_run_list_empty"))
end end
if @machine.guest.capability?(:wait_for_reboot)
@machine.guest.capability(:wait_for_reboot)
end
command = CommandBuilder.command(:client, @config, command = CommandBuilder.command(:client, @config,
windows: windows?, windows: windows?,
colored: @machine.env.ui.color?, colored: @machine.env.ui.color?,
local_mode: true, local_mode: true,
) )
still_active = 259 #provisioner has asked chef to reboot
@config.attempts.times do |attempt| @config.attempts.times do |attempt|
exit_status = 0
while exit_status == 0 || exit_status == still_active
if @machine.guest.capability?(:wait_for_reboot)
@machine.guest.capability(:wait_for_reboot)
elsif attempt > 0
sleep 10
@machine.communicate.wait_for_ready(@machine.config.vm.boot_timeout)
end
if attempt == 0 if attempt == 0
@machine.ui.info I18n.t("vagrant.provisioners.chef.running_zero") @machine.ui.info I18n.t("vagrant.provisioners.chef.running_zero")
else else
@ -87,6 +93,7 @@ module VagrantPlugins
# There is no need to run Chef again if it converges # There is no need to run Chef again if it converges
return if exit_status == 0 return if exit_status == 0
end end
end
# If we reached this point then Chef never converged! Error. # If we reached this point then Chef never converged! Error.
raise ChefError, :no_convergence raise ChefError, :no_convergence