Class: Spiceweasel::Nodes
- Inherits:
-
Object
- Object
- Spiceweasel::Nodes
- Includes:
- CommandHelper
- Defined in:
- lib/spiceweasel/nodes.rb
Constant Summary collapse
- PROVIDERS =
%w{bluebox clodo cs ec2 gandi hp joyent lxc openstack rackspace slicehost terremark vagrant voxel vsphere}
Instance Attribute Summary collapse
-
#create ⇒ Object
readonly
Returns the value of attribute create.
-
#delete ⇒ Object
readonly
Returns the value of attribute delete.
Instance Method Summary collapse
-
#initialize(nodes, cookbooks, environments, roles) ⇒ Nodes
constructor
A new instance of Nodes.
-
#validateOptions(node, options, environments) ⇒ Object
for now, just check that -E is legit.
-
#validateRunList(node, run_list, cookbooks, roles) ⇒ Object
ensure run_list contents are listed previously.
Methods included from CommandHelper
#create_command, #delete_command
Constructor Details
#initialize(nodes, cookbooks, environments, roles) ⇒ Nodes
Returns a new instance of Nodes.
28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 |
# File 'lib/spiceweasel/nodes.rb', line 28 def initialize(nodes, cookbooks, environments, roles) @create = Array.new @delete = Array.new if nodes Spiceweasel::Log.debug("nodes: #{nodes}") nodes.each do |node| name = node.keys.first Spiceweasel::Log.debug("node: '#{name}' '#{node[name]}'") if node[name] #convert spaces to commas, drop multiple commas run_list = node[name]['run_list'] || '' run_list = run_list.gsub(/ /,',').gsub(/,+/,',') Spiceweasel::Log.debug("node: '#{name}' run_list: '#{run_list}'") validateRunList(name, run_list, cookbooks, roles) unless Spiceweasel::Config[:novalidation] = node[name]['options'] || '' Spiceweasel::Log.debug("node: '#{name}' options: '#{}'") validateOptions(name, , environments) unless Spiceweasel::Config[:novalidation] = {} %w(allow_create_failure timeout).each do |key| if(node[name].has_key?(key)) [key] = node[name][key] end end additional_commands = node[name]['additional_commands'] || [] end #provider support provider = name.split() if PROVIDERS.member?(provider[0]) count = 1 if provider.length == 2 count = provider[1] end provided_names = [] if Spiceweasel::Config[:parallel] parallel = "seq #{count} | parallel -j 0 -v \"" if provider[0].eql?('vsphere') parallel += "knife #{provider[0]}#{Spiceweasel::Config[:knife_options]} vm clone #{}".gsub(/\{\{n\}\}/, '{}') else parallel += "knife #{provider[0]}#{Spiceweasel::Config[:knife_options]} server create #{}".gsub(/\{\{n\}\}/, '{}') end parallel += " -r '#{run_list}'" unless run_list.empty? parallel += "\"" create_command(parallel, ) else count.to_i.times do |i| if provider[0].eql?('vsphere') server = "knife #{provider[0]}#{Spiceweasel::Config[:knife_options]} vm clone #{}".gsub(/\{\{n\}\}/, (i + 1).to_s) else server = "knife #{provider[0]}#{Spiceweasel::Config[:knife_options]} server create #{}".gsub(/\{\{n\}\}/, (i + 1).to_s) end server += " -r '#{run_list}'" unless run_list.empty? provided_names << node[name]['name'].gsub('{{n}}', (i + 1).to_s) if node[name]['name'] create_command(server, ) end end if Spiceweasel::Config[:bulkdelete] && provided_names.empty? && provider[0] != 'windows' if provider[0].eql?('vsphere') delete_command("knife node#{Spiceweasel::Config[:knife_options]} list | xargs knife #{provider[0]} vm delete -y") else delete_command("knife node#{Spiceweasel::Config[:knife_options]} list | xargs knife #{provider[0]} server delete -y") end else provided_names.each do |p_name| if provider[0].eql?('vsphere') delete_command("knife #{provider[0]} vm delete -y #{p_name}") else delete_command("knife #{provider[0]} server delete -y #{p_name}") end delete_command("knife node#{Spiceweasel::Config[:knife_options]} delete #{p_name} -y") delete_command("knife client#{Spiceweasel::Config[:knife_options]} delete #{p_name} -y") end end elsif name.start_with?("windows") #windows node bootstrap support nodeline = name.split() provider = nodeline.shift.split('_') #split on 'windows_ssh' etc nodeline.each do |server| servercommand = "knife bootstrap #{provider[0]} #{provider[1]}#{Spiceweasel::Config[:knife_options]} #{server} #{}" servercommand += " -r '#{run_list}'" unless run_list.empty? create_command(servercommand, ) delete_command("knife node#{Spiceweasel::Config[:knife_options]} delete #{server} -y") delete_command("knife client#{Spiceweasel::Config[:knife_options]} delete #{server} -y") end else #node bootstrap support name.split.each_with_index do |server, i| servercommand = "knife bootstrap#{Spiceweasel::Config[:knife_options]} #{server} #{}".gsub(/\{\{n\}\}/, (i + 1).to_s) servercommand += " -r '#{run_list}'" unless run_list.empty? create_command(servercommand, ) delete_command("knife node#{Spiceweasel::Config[:knife_options]} delete #{server} -y") delete_command("knife client#{Spiceweasel::Config[:knife_options]} delete #{server} -y") end end unless additional_commands.empty? additional_commands.each do |cmd| create_command(cmd, ) end end end end if Spiceweasel::Config[:bulkdelete] delete_command("knife node#{Spiceweasel::Config[:knife_options]} bulk delete .* -y") end end |
Instance Attribute Details
#create ⇒ Object (readonly)
Returns the value of attribute create.
26 27 28 |
# File 'lib/spiceweasel/nodes.rb', line 26 def create @create end |
#delete ⇒ Object (readonly)
Returns the value of attribute delete.
26 27 28 |
# File 'lib/spiceweasel/nodes.rb', line 26 def delete @delete end |
Instance Method Details
#validateOptions(node, options, environments) ⇒ Object
for now, just check that -E is legit
156 157 158 159 160 161 162 163 164 |
# File 'lib/spiceweasel/nodes.rb', line 156 def validateOptions(node, , environments) if =~ /-E/ #check for environments env = .split('-E')[1].split()[0] unless environments.member?(env) STDERR.puts "ERROR: '#{node}' environment '#{env}' is missing from the list of environments in the manifest." exit(-1) end end end |
#validateRunList(node, run_list, cookbooks, roles) ⇒ Object
ensure run_list contents are listed previously.
132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 |
# File 'lib/spiceweasel/nodes.rb', line 132 def validateRunList(node, run_list, cookbooks, roles) run_list.split(',').each do |item| if item.start_with?("recipe[") #recipe[foo] or recipe[foo::bar] cb = item.split(/\[|\]/)[1].split(':')[0] unless cookbooks.member?(cb) STDERR.puts "ERROR: '#{node}' run list cookbook '#{cb}' is missing from the list of cookbooks in the manifest." exit(-1) end elsif item.start_with?("role[") #role[blah] role = item.split(/\[|\]/)[1] unless roles.member?(role) STDERR.puts "ERROR: '#{node}' run list role '#{role}' is missing from the list of roles in the manifest." exit(-1) end else STDERR.puts "ERROR: '#{node}' run list '#{item}' is an invalid run list entry in the manifest." exit(-1) end end end |