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