class Nucleon::Action::Node::Seed

Public Class Methods

describe() click to toggle source
Calls superclass method
   # File lib/nucleon/action/node/seed.rb
10 def self.describe
11   super(:node, :seed, 625)
12 end

Public Instance Methods

arguments() click to toggle source
   # File lib/nucleon/action/node/seed.rb
35 def arguments
36   [ :project_reference ]
37 end
configure() click to toggle source
Calls superclass method
   # File lib/nucleon/action/node/seed.rb
17 def configure
18   super do
19     codes :key_store_failure,
20           :project_failure,
21           :network_load_failure,
22           :node_load_failure,
23           :node_save_failure
24     #---
25 
26     register_project :project_reference
27     register_str :project_branch, 'master'
28   end
29 
30   config[:parallel].default = false
31 end
execute() click to toggle source
Calls superclass method
    # File lib/nucleon/action/node/seed.rb
 42 def execute
 43   super do |node|
 44     info('start')
 45 
 46     admin_exec do
 47       network_path = lookup(:corl_network)
 48       backup_path  = File.join(Dir.tmpdir(), 'corl')
 49 
 50       info('deploy_keys')
 51 
 52       project_class = CORL.plugin_class(:nucleon, :project)
 53 
 54       if keys = Util::SSH.generate.store
 55         if @project_info = project_class.translate_reference(settings[:project_reference], true)
 56           project_info = Config.new(@project_info, {}, true, false)
 57         else
 58           project_info = Config.new({ :provider => :git }, {}, true, false)
 59         end
 60 
 61         project_class.clear_project_info(network_path)
 62 
 63         info('backup')
 64         FileUtils.rm_rf(backup_path)
 65         FileUtils.mv(network_path, backup_path)
 66 
 67         info('seeding')
 68         project = CORL.project(extended_config(:project, {
 69           :directory   => network_path,
 70           :reference   => project_info.get(:reference, nil),
 71           :url         => project_info.get(:url, settings[:project_reference]),
 72           :revision    => project_info.get(:revision, settings[:project_branch]),
 73           :create      => true,
 74           :pull        => true,
 75           :keys        => keys,
 76           :internal_ip => CORL.public_ip, # Needed for seeding Vagrant VMs,
 77           :new         => true
 78         }), project_info[:provider])
 79 
 80         if project
 81           info('finalizing')
 82           FileUtils.chmod_R(0600, network_path)
 83           FileUtils.rm_rf(backup_path)
 84 
 85           info('reinitializing')
 86           init_network
 87 
 88           if network.load
 89             if node = network.local_node(true)
 90               info('updating')
 91               myself.status = code.node_save_failure unless node.save
 92             else
 93               myself.status = code.node_load_failure
 94             end
 95           else
 96             myself.status = code.network_load_failure
 97           end
 98         else
 99           myself.status = code.project_failure
100         end
101       else
102         myself.status = code.key_store_failure
103       end
104     end
105   end
106 end