class Nucleon::Action::Node::Spawn

Public Class Methods

describe() click to toggle source
Calls superclass method
   # File lib/nucleon/action/node/spawn.rb
12 def self.describe
13   super(:node, :spawn, 635)
14 end

Public Instance Methods

arguments() click to toggle source
   # File lib/nucleon/action/node/spawn.rb
53 def arguments
54   [ :node_provider, :image, :hostnames ]
55 end
configure() click to toggle source
Calls superclass method
   # File lib/nucleon/action/node/spawn.rb
19 def configure
20   super do
21     codes :key_failure,
22           :node_create_failure
23     
24     register_bool :bootstrap, true
25     register_bool :provision, false
26     
27     register_array :hostnames, nil
28     register_array :groups
29          
30     register_str :region, nil
31     register_str :machine_type, nil
32     register_str :image, nil
33     register_str :user, nil     
34             
35     keypair_config
36     
37     config.defaults(CORL.action_config(:node_bootstrap))
38     config.defaults(CORL.action_config(:node_seed))
39   end
40 end
execute() click to toggle source
Calls superclass method
    # File lib/nucleon/action/node/spawn.rb
 60 def execute
 61   super do |node|
 62     ensure_network do
 63       if keypair && keypair_clean
 64         hostnames     = []
 65         results       = []
 66         node_provider = settings.delete(:node_provider)
 67         is_parallel   = CORL.parallel? && settings[:parallel]
 68         
 69         if CORL.vagrant? && ! CORL.loaded_plugins(:CORL, :node).keys.include?(node_provider.to_sym)
 70           settings[:machine_type] = node_provider
 71           settings[:user]         = :vagrant unless settings[:user]            
 72           node_provider           = :vagrant
 73         end
 74         unless settings[:user]
 75           settings[:user] = :root  
 76         end
 77         
 78         info('start', { :node_provider => node_provider }) 
 79         
 80         settings.delete(:hostnames).each do |hostname|
 81           hostnames << extract_hostnames(hostname)
 82         end
 83         hostnames.flatten.each do |hostname|
 84           if hostname.is_a?(Hash)
 85             settings[:public_ip] = hostname[:ip]
 86             hostname             = hostname[:hostname]  
 87           end
 88           
 89           if is_parallel
 90             results << network.future.add_node(node_provider, hostname, settings.export)
 91           else
 92             results << network.add_node(node_provider, hostname, settings.export)    
 93           end
 94         end
 95         results       = results.map { |future| future.value } if is_parallel                
 96         myself.status = code.batch_error if results.include?(false)
 97       else
 98         myself.status = code.key_failure  
 99       end        
100     end
101   end
102 end
ignore() click to toggle source
   # File lib/nucleon/action/node/spawn.rb
49 def ignore
50   node_ignore - [ :parallel, :node_provider ] + [ :bootstrap_nodes ]
51 end
node_config() click to toggle source
Calls superclass method
   # File lib/nucleon/action/node/spawn.rb
42 def node_config
43   super
44   config[:node_provider].default = nil
45 end

Protected Instance Methods

extract_hostnames(hostname) click to toggle source
    # File lib/nucleon/action/node/spawn.rb
107 def extract_hostnames(hostname)
108   hostnames = []
109   
110   if hostname.match(/([^\[]+)\[([^\]]+)\](.*)/)
111     before = $1
112     extra  = $2.strip
113     after  = $3
114     
115     if extra.match(/\-/)
116       low, high = extra.split(/\s*\-\s*/)
117       range     = Range.new(low, high)
118     
119       range.each do |item|
120         hostnames << "#{before}#{item}#{after}"  
121       end
122       
123     elsif extra.match(/\d+\.\d+\.\d+\.\d+/)
124       hostnames = [ { :hostname => "#{before}#{after}", :ip => extra } ]  
125     end
126   else
127     hostnames = [ hostname ]
128   end
129   hostnames
130 end