modules/mu/groomers/chef.rb in cloud-mu-3.5.1 vs modules/mu/groomers/chef.rb in cloud-mu-3.6.3

- old
+ new

@@ -56,10 +56,13 @@ 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/bootstrap/train_connector' + require 'chef/knife/bootstrap/chef_vault_handler' + require 'chef/knife/bootstrap/client_builder' require 'chef/knife/node_delete' require 'chef/knife/client_delete' require 'chef/knife/data_bag_delete' require 'chef/knife/data_bag_show' require 'chef/knife/vault_delete' @@ -94,15 +97,15 @@ MU.log "Chef libraries loaded (took #{(Time.now-start).to_s} seconds)", MU::DEBUG end } end - @knife = "cd #{MU.myRoot} && env -i HOME=#{Etc.getpwnam(MU.mu_user).dir} PATH=/opt/chef/embedded/bin:/usr/bin:/usr/sbin knife" + @@knife = "cd #{MU.myRoot} && env -i HOME=#{Etc.getpwnam(MU.mu_user).dir} PATH=/usr/local/ruby-current/bin:/opt/chef/embedded/bin:/usr/bin:/usr/sbin knife" # The canonical path to invoke Chef's *knife* utility with a clean environment. # @return [String] - def self.knife; - @knife; + def self.knife + @@knife end attr_reader :knife @vault_opts = "--mode client -u #{MU.chef_user} -F json" @@ -216,11 +219,11 @@ return loaded end end # see {MU::Groomer::Chef.getSecret} - def getSecret(vault: nil, item: nil, field: nil) + def getSecret(vault: @server.mu_name, item: nil, field: nil) self.class.getSecret(vault: vault, item: item, field: field) end # Delete a Chef data bag / Vault # @param vault [String]: A repository of secrets to delete @@ -616,20 +619,23 @@ kb = ::Chef::Knife::Bootstrap.new([canonical_addr]) kb.config[:use_sudo] = true kb.name_args = "#{canonical_addr}" kb.config[:distro] = 'chef-full' kb.config[:ssh_user] = ssh_user + kb.config[:ssh_verify_host_key] = :accept_new kb.config[:forward_agent] = ssh_user kb.config[:identity_file] = "#{Etc.getpwuid(Process.uid).dir}/.ssh/#{ssh_key_name}" + kb.config[:ssh_identity_file] = "#{Etc.getpwuid(Process.uid).dir}/.ssh/#{ssh_key_name}" else kb = ::Chef::Knife::BootstrapWindowsWinrm.new([@server.mu_name]) kb.name_args = [@server.mu_name] kb.config[:manual] = true kb.config[:winrm_transport] = :ssl kb.config[:winrm_port] = 5986 kb.config[:session_timeout] = timeout kb.config[:operation_timeout] = timeout +# kb.config[:bootstrap_curl_options] = "" if retries % 2 == 0 kb.config[:host] = canonical_addr kb.config[:winrm_authentication_protocol] = :basic kb.config[:winrm_user] = @server.config['windows_admin_username'] kb.config[:winrm_password] = @server.getWindowsAdminPassword @@ -656,11 +662,13 @@ # end kb.config[:json_attribs] = JSON.generate(json_attribs) if json_attribs.size > 1 kb.config[:run_list] = run_list kb.config[:chef_node_name] = @server.mu_name + kb.config[:bootstrap_product] = "chef" kb.config[:bootstrap_version] = MU.chefVersion + kb.config[:channel] = "stable" # XXX key off of MU verbosity level kb.config[:log_level] = :debug # kb.config[:ssh_gateway] = "#{nat_ssh_user}@#{nat_ssh_host}" if !nat_ssh_host.nil? # Breaking bootsrap MU.log "Knife Bootstrap settings for #{@server.mu_name} (#{canonical_addr}), timeout set to #{timeout.to_s}", MU::NOTICE, details: kb.config @@ -896,11 +904,11 @@ return if nodeonly vaults_to_clean.each { |vault| MU::MommaCat.lock("vault-#{vault['vault']}", false, true) MU.log "Purging unknown clients from #{vault['vault']} #{vault['item']}", MU::DEBUG - output = %x{#{@knife} data bag show "#{vault['vault']}" "#{vault['item']}_keys" --format json} + output = %x{#{knife} data bag show "#{vault['vault']}" "#{vault['item']}_keys" --format json} # This is an ugly workaround for --clean-unknown-clients, which in # fact cleans known clients. if output begin vault_cfg = JSON.parse(output) @@ -939,11 +947,11 @@ def self.grantSecretAccess(host, vault, item) loadChefLib MU::MommaCat.lock("vault-#{vault}", false, true) MU.log "Granting #{host} access to #{vault} #{item}" begin - ::Chef::Knife.run(['vault', 'update', vault, item, "--search", "name:#{host}"]) + ::Chef::Knife.run(['vault', 'update', vault, item, "--clients", "#{host}"]) rescue StandardError => e MU.log e.inspect, MU::ERR, details: caller end MU::MommaCat.unlock("vault-#{vault}", true) end @@ -1085,9 +1093,10 @@ end def grantSecretAccess(vault, item) return if @secrets_granted["#{vault}:#{item}"] == item self.class.grantSecretAccess(@server.mu_name, vault, item) + MU.log %Q{To retrieve secret #{vault}:#{item} - #{self.class.knife} vault show "#{vault}" "#{item}"}, MU::SUMMARY @secrets_granted["#{vault}:#{item}"] = item end def knifeCmd(cmd, showoutput = false) self.class.knifeCmd(cmd, showoutput)