plugins/provisioners/chef/provisioner/chef_solo.rb in vagrant-unbundled-2.0.0.1 vs plugins/provisioners/chef/provisioner/chef_solo.rb in vagrant-unbundled-2.0.1.0

- old
+ new

@@ -174,39 +174,46 @@ def run_chef_solo if @config.run_list && @config.run_list.empty? @machine.ui.warn(I18n.t("vagrant.chef_run_list_empty")) end - if @machine.guest.capability?(:wait_for_reboot) - @machine.guest.capability(:wait_for_reboot) - end - command = CommandBuilder.command(:solo, @config, windows: windows?, colored: @machine.env.ui.color?, legacy_mode: @config.legacy_mode, ) + still_active = 259 #provisioner has asked chef to reboot + @config.attempts.times do |attempt| - 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 + 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 + @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 + 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? + data = data.chomp + next if data.empty? - @machine.ui.info(data, color: color) - end + @machine.ui.info(data, color: color) + end - # There is no need to run Chef again if it converges - return if exit_status == 0 + # 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. raise ChefError, :no_convergence end