Class: Chef::Knife::HitoriCook
- Inherits:
-
Chef::Knife
- Object
- Chef::Knife
- Chef::Knife::HitoriCook
- Includes:
- HitoriBase, RunListOptions
- Defined in:
- lib/chef/knife/hitori_cook.rb
Instance Method Summary collapse
- #fetch_server_info ⇒ Object
- #find_ec2_servers ⇒ Object
-
#new_run_list ⇒ Hash
def json_attrs attrs = load_settings || {} # Chef::Mixin::DeepMerge.merge(normal_attrs,normal_attrs_to_merge).
- #run ⇒ Object
- #run_remote(server_list = nil) ⇒ Object
- #server_info_list ⇒ Object
Methods included from RunListOptions
Methods included from HitoriBase
Instance Method Details
#fetch_server_info ⇒ Object
116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 |
# File 'lib/chef/knife/hitori_cook.rb', line 116 def fetch_server_info servers = server_info_list if config[:tag] tag_key, tag_value = config[:tag].to_s.split(/=/, 2) servers.select {|x| x.[tag_key] == tag_value.to_s} elsif config[:groups] g = Set.new(config[:groups].split(/,/)) servers.select {|x| (Set.new(x.groups) & g).size > 0} elsif config[:name] servers.select {|x| x.['Name'] == config[:name]} elsif config[:public_ip_address] servers.select {|x| x.public_ip_address == config[:public_ip_address]} end end |
#find_ec2_servers ⇒ Object
104 105 106 107 108 109 110 111 112 113 114 |
# File 'lib/chef/knife/hitori_cook.rb', line 104 def find_ec2_servers server = nil 3.times do server = fetch_server_info break if server && !server.empty? print '.' sleep 5 end puts server end |
#new_run_list ⇒ Hash
def json_attrs
attrs = load_settings || {}
# Chef::Mixin::DeepMerge.merge(normal_attrs,normal_attrs_to_merge)
# Update run_list
run_list = new_run_list
unless run_list.empty?
attrs['run_list'] = run_list
end
#
attrs
end
def load_settings
path = Chef::Config[:settings_path]
if ::File.exists?(path)
return JSON.parse(::File.read(path))
end
ui.warn "#{path} is not found!!" if path
{}
end
72 73 74 75 76 77 |
# File 'lib/chef/knife/hitori_cook.rb', line 72 def new_run_list run_list = [] run_list += config[:roles].split(/,/).map{|r| "role[#{r.strip}]"} if config[:roles] run_list += config[:recipes].split(/,/).map{|r| "recipe[#{r.strip}]"} if config[:recipes] run_list end |
#run ⇒ Object
44 45 46 47 |
# File 'lib/chef/knife/hitori_cook.rb', line 44 def run update_environment(config[:environment]) if config[:environment] run_remote end |
#run_remote(server_list = nil) ⇒ Object
81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 |
# File 'lib/chef/knife/hitori_cook.rb', line 81 def run_remote(server_list=nil) if server_list servers = server_list else servers = find_ec2_servers unless servers && !servers.empty? ui.warn ui.color('no server found', :red) return end end run_list = new_run_list threads = [] servers.each_with_index do |server, idx| threads << Thread.new { KnifeHitori::RunRemoteCook.new(Chef::Config, config, server, :idx => idx, :ui => ui, :run_list => run_list).run } end threads.each do |t| t.join end end |
#server_info_list ⇒ Object
132 133 134 135 136 137 138 139 140 |
# File 'lib/chef/knife/hitori_cook.rb', line 132 def server_info_list connection = Fog::Compute.new( :provider => 'AWS', :aws_access_key_id => Chef::Config[:knife][:aws_access_key_id], :aws_secret_access_key => Chef::Config[:knife][:aws_secret_access_key], :region => Chef::Config[:knife][:region] ) connection.servers.all.to_a end |