modules/mu/groomers/chef.rb in cloud-mu-3.0.2 vs modules/mu/groomers/chef.rb in cloud-mu-3.1.0

- old
+ new

@@ -48,10 +48,11 @@ require 'chef' require 'chef/api_client_v1' require 'chef/knife' require 'chef/application/knife' require 'chef/knife/ssh' + require 'mu/monkey_patches/chef_knife_ssh' require 'chef/knife/bootstrap' require 'chef/knife/node_delete' require 'chef/knife/client_delete' require 'chef/knife/data_bag_delete' require 'chef/knife/data_bag_show' @@ -80,10 +81,11 @@ ::Chef::Config[:environment] = env ::Chef::Config[:yes] = true if mu_user != "root" ::Chef::Config.trusted_certs_dir = "#{Etc.getpwnam(mu_user).dir}/.chef/trusted_certs" end + @chefloaded = true MU.log "Chef libraries loaded (took #{(Time.now-start).to_s} seconds)", MU::DEBUG end } end @@ -297,12 +299,16 @@ upgrade_cmd = try_upgrade ? "curl -L https://chef.io/chef/install.sh | version=#{MU.chefVersion} sh &&" : "" cmd = "#{upgrade_cmd} chef-client --color || echo #{error_signal}" end Timeout::timeout(timeout) { retval = ssh.exec!(cmd) { |ch, stream, data| + extra_logfile = if Dir.exist?(@server.deploy.deploy_dir) + File.open(@server.deploy.deploy_dir+"/log", "a") + end puts data output_lines << data + extra_logfile.puts data.chomp if extra_logfile raise MU::Cloud::BootstrapTempFail if data.match(/REBOOT_SCHEDULED| WARN: Reboot requested:|Rebooting server at a recipe's request|Chef::Exceptions::Reboot/) if data.match(/#{error_signal}/) error_msg = "" clip = false output_lines.each { |chunk| @@ -595,10 +601,11 @@ @server.windows? ? max_retries = 25 : max_retries = 10 @server.windows? ? timeout = 1800 : timeout = 300 retries = 0 begin + load MU.myRoot+'/modules/mu/monkey_patches/chef_knife_ssh.rb' if !@server.windows? kb = ::Chef::Knife::Bootstrap.new([canonical_addr]) kb.config[:use_sudo] = true kb.name_args = "#{canonical_addr}" kb.config[:distro] = 'chef-full' @@ -644,11 +651,10 @@ MU.log "Knife Bootstrap settings for #{@server.mu_name} (#{canonical_addr}), timeout set to #{timeout.to_s}", MU::NOTICE, details: kb.config if @server.windows? and @server.windowsRebootPending? raise MU::Cloud::BootstrapTempFail, "#{@server.mu_name} has a pending reboot" end Timeout::timeout(timeout) { - require 'chef' MU::Cloud.handleNetSSHExceptions kb.run } # throws Net::HTTPServerException if we haven't really bootstrapped ::Chef::Node.load(@server.mu_name) @@ -681,10 +687,11 @@ MU.log e.inspect, MU::ERR, details: e.backtrace sleep 10*retries retry end + # Now that we're done, remove one-shot bootstrap recipes from the # node's final run list ["mu-tools::newclient"].each { |recipe| begin ::Chef::Knife.run(['node', 'run_list', 'remove', @server.mu_name, "recipe[#{recipe}]"], {}) @@ -793,11 +800,15 @@ MU.log "Deleting Chef resources associated with #{node}" if !nodeonly vaults_to_clean.each { |vault| MU::MommaCat.lock("vault-#{vault['vault']}", false, true) MU.log "knife vault remove #{vault['vault']} #{vault['item']} --search name:#{node}", MU::NOTICE - ::Chef::Knife.run(['vault', 'remove', vault['vault'], vault['item'], "--search", "name:#{node}"]) if !noop + begin + ::Chef::Knife.run(['vault', 'remove', vault['vault'], vault['item'], "--search", "name:#{node}"]) if !noop + rescue Exception => e + MU.log "Error removing vault access for #{node} from #{vault['vault']} #{vault['item']}", MU::ERR, details: e.inspect + end MU::MommaCat.unlock("vault-#{vault['vault']}") } end MU.log "knife node delete #{node}" if !noop @@ -970,9 +981,13 @@ if !@config['tags'].nil? @config['tags'].each { |tag| tags[tag['key']] = tag['value'] } + end + + if @config.has_key?("monitor") and !@config['monitor'] + tags['nomonitor'] = true end chef_node.normal['tags'] = tags chef_node.save