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:
parent
820d80852c
commit
3ab64ab7e4
|
@ -73,35 +73,42 @@ 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|
|
||||||
if attempt == 0
|
exit_status = 0
|
||||||
@machine.ui.info I18n.t("vagrant.provisioners.chef.running_client")
|
while exit_status == 0 || exit_status == still_active
|
||||||
else
|
if @machine.guest.capability?(:wait_for_reboot)
|
||||||
@machine.ui.info I18n.t("vagrant.provisioners.chef.running_client_again")
|
@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
|
||||||
|
@machine.ui.info I18n.t("vagrant.provisioners.chef.running_client")
|
||||||
|
else
|
||||||
|
@machine.ui.info I18n.t("vagrant.provisioners.chef.running_client_again")
|
||||||
|
end
|
||||||
|
|
||||||
|
opts = { error_check: false, elevated: true }
|
||||||
|
exit_status = @machine.communicate.sudo(command, opts) do |type, data|
|
||||||
|
# Output the data with the proper color based on the stream.
|
||||||
|
color = type == :stdout ? :green : :red
|
||||||
|
|
||||||
|
data = data.chomp
|
||||||
|
next if data.empty?
|
||||||
|
|
||||||
|
@machine.ui.info(data, color: color)
|
||||||
|
end
|
||||||
|
|
||||||
|
# There is no need to run Chef again if it converges
|
||||||
|
return if exit_status == 0
|
||||||
end
|
end
|
||||||
|
|
||||||
opts = { error_check: false, elevated: true }
|
|
||||||
exit_status = @machine.communicate.sudo(command, opts) do |type, data|
|
|
||||||
# Output the data with the proper color based on the stream.
|
|
||||||
color = type == :stdout ? :green : :red
|
|
||||||
|
|
||||||
data = data.chomp
|
|
||||||
next if data.empty?
|
|
||||||
|
|
||||||
@machine.ui.info(data, color: color)
|
|
||||||
end
|
|
||||||
|
|
||||||
# There is no need to run Chef again if it converges
|
|
||||||
return if exit_status == 0
|
|
||||||
end
|
end
|
||||||
|
|
||||||
# If we reached this point then Chef never converged! Error.
|
# If we reached this point then Chef never converged! Error.
|
||||||
|
|
|
@ -176,36 +176,43 @@ 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|
|
||||||
if attempt == 0
|
exit_status = 0
|
||||||
@machine.ui.info I18n.t("vagrant.provisioners.chef.running_solo")
|
while exit_status == 0 || exit_status == still_active
|
||||||
else
|
if @machine.guest.capability?(:wait_for_reboot)
|
||||||
@machine.ui.info I18n.t("vagrant.provisioners.chef.running_solo_again")
|
@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
|
||||||
|
@machine.ui.info I18n.t("vagrant.provisioners.chef.running_solo")
|
||||||
|
else
|
||||||
|
@machine.ui.info I18n.t("vagrant.provisioners.chef.running_solo_again")
|
||||||
|
end
|
||||||
|
|
||||||
|
opts = { error_check: false, elevated: true }
|
||||||
|
exit_status = @machine.communicate.sudo(command, opts) do |type, data|
|
||||||
|
# Output the data with the proper color based on the stream.
|
||||||
|
color = type == :stdout ? :green : :red
|
||||||
|
|
||||||
|
data = data.chomp
|
||||||
|
next if data.empty?
|
||||||
|
|
||||||
|
@machine.ui.info(data, color: color)
|
||||||
|
end
|
||||||
|
|
||||||
|
# There is no need to run Chef again if it converges
|
||||||
|
return if exit_status == 0
|
||||||
end
|
end
|
||||||
|
|
||||||
opts = { error_check: false, elevated: true }
|
|
||||||
exit_status = @machine.communicate.sudo(command, opts) do |type, data|
|
|
||||||
# Output the data with the proper color based on the stream.
|
|
||||||
color = type == :stdout ? :green : :red
|
|
||||||
|
|
||||||
data = data.chomp
|
|
||||||
next if data.empty?
|
|
||||||
|
|
||||||
@machine.ui.info(data, color: color)
|
|
||||||
end
|
|
||||||
|
|
||||||
# There is no need to run Chef again if it converges
|
|
||||||
return if exit_status == 0
|
|
||||||
end
|
end
|
||||||
|
|
||||||
# If we reached this point then Chef never converged! Error.
|
# If we reached this point then Chef never converged! Error.
|
||||||
|
|
|
@ -56,36 +56,43 @@ 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|
|
||||||
if attempt == 0
|
exit_status = 0
|
||||||
@machine.ui.info I18n.t("vagrant.provisioners.chef.running_zero")
|
while exit_status == 0 || exit_status == still_active
|
||||||
else
|
if @machine.guest.capability?(:wait_for_reboot)
|
||||||
@machine.ui.info I18n.t("vagrant.provisioners.chef.running_zero_again")
|
@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
|
||||||
|
@machine.ui.info I18n.t("vagrant.provisioners.chef.running_zero")
|
||||||
|
else
|
||||||
|
@machine.ui.info I18n.t("vagrant.provisioners.chef.running_zero_again")
|
||||||
|
end
|
||||||
|
|
||||||
|
opts = { error_check: false, elevated: true }
|
||||||
|
exit_status = @machine.communicate.sudo(command, opts) do |type, data|
|
||||||
|
# Output the data with the proper color based on the stream.
|
||||||
|
color = type == :stdout ? :green : :red
|
||||||
|
|
||||||
|
data = data.chomp
|
||||||
|
next if data.empty?
|
||||||
|
|
||||||
|
@machine.ui.info(data, color: color)
|
||||||
|
end
|
||||||
|
|
||||||
|
# There is no need to run Chef again if it converges
|
||||||
|
return if exit_status == 0
|
||||||
end
|
end
|
||||||
|
|
||||||
opts = { error_check: false, elevated: true }
|
|
||||||
exit_status = @machine.communicate.sudo(command, opts) do |type, data|
|
|
||||||
# Output the data with the proper color based on the stream.
|
|
||||||
color = type == :stdout ? :green : :red
|
|
||||||
|
|
||||||
data = data.chomp
|
|
||||||
next if data.empty?
|
|
||||||
|
|
||||||
@machine.ui.info(data, color: color)
|
|
||||||
end
|
|
||||||
|
|
||||||
# There is no need to run Chef again if it converges
|
|
||||||
return if exit_status == 0
|
|
||||||
end
|
end
|
||||||
|
|
||||||
# If we reached this point then Chef never converged! Error.
|
# If we reached this point then Chef never converged! Error.
|
||||||
|
|
Loading…
Reference in New Issue