class Nucleon::Action::Node::Identity
Public Class Methods
describe()
click to toggle source
Calls superclass method
# File lib/nucleon/action/node/identity.rb 10 def self.describe 11 super(:node, :identity, 700) 12 end
Public Instance Methods
arguments()
click to toggle source
# File lib/nucleon/action/node/identity.rb 35 def arguments 36 [ :name, :identity_nodes ] 37 end
configure()
click to toggle source
Calls superclass method
# File lib/nucleon/action/node/identity.rb 17 def configure 18 super do 19 codes :identity_required, :identity_upload_failure 20 21 register_str :name, nil 22 register_project :identity 23 register_nodes :identity_nodes 24 25 register_bool :delete, false 26 end 27 end
execute()
click to toggle source
Calls superclass method
# File lib/nucleon/action/node/identity.rb 42 def execute 43 super do |local_node| 44 ensure_network do 45 if settings[:identity] 46 # Get identity builder 47 builder = network.identity_builder({ settings[:name] => settings[:identity] }) 48 else 49 # Search for identity 50 builder = network.identity_builder 51 identity_directory = File.join(builder.build_directory, settings[:name]) 52 53 if File.directory?(identity_directory) 54 identity_nucleon_file = File.join(identity_directory, '.nucleon') 55 56 if File.exists?(identity_nucleon_file) 57 json_data = Util::Disk.read(identity_nucleon_file) 58 project_info = symbol_map(Util::Data.parse_json(json_data)) 59 settings[:identity] = "#{project_info[:provider]}:::#{project_info[:edit]}[#{project_info[:revision]}]" 60 end 61 end 62 63 if settings[:identity] 64 # Get identity builder 65 info('using_identity', { :identity => settings[:identity], :directory => identity_directory }) 66 builder = network.identity_builder({ settings[:name] => settings[:identity] }) 67 else 68 warn('identity_required') 69 myself.status = code.identity_required 70 end 71 end 72 73 # Build identity into local network project 74 if myself.status == code.success && ( settings[:delete] || builder.build(local_node) ) 75 identity_directory = File.join(builder.build_directory, settings[:name]) 76 77 # Loop over all nodes to assign identity to (or delete) 78 success = network.batch(settings[:identity_nodes], settings[:node_provider], settings[:parallel]) do |node| 79 if settings[:delete] 80 info('start_delete', { :provider => node.plugin_provider, :name => node.plugin_name }) 81 else 82 info('start_add', { :provider => node.plugin_provider, :name => node.plugin_name }) 83 end 84 85 # Lookup remote network path 86 success = true 87 remote_network_directory = node.lookup(:corl_network) 88 remote_config_directory = File.join(remote_network_directory, network.config_directory.sub(/#{network.directory}#{File::SEPARATOR}/, '')) 89 remote_identity_base_directory = File.join(remote_network_directory, builder.build_directory.sub(/#{network.directory}#{File::SEPARATOR}/, '')) 90 remote_identity_directory = File.join(remote_identity_base_directory, settings[:name]) 91 92 # Ensure proper remote directories are ready for identity 93 result = node.cli.mkdir('-p', remote_identity_base_directory) 94 success = false unless result.status == code.success 95 96 success = node.cli.chmod('-R', 'go-rwx', remote_config_directory) if success 97 98 if success 99 result = node.cli.rm('-Rf', remote_identity_directory) 100 success = false unless result.status == code.success 101 102 # Send identity through SCP to remote machine 103 if success && !settings[:delete] 104 if node.user == 'root' 105 success = node.send_files(identity_directory, remote_identity_directory, nil, '0700') 106 else 107 tmp_identity_directory = File.join('/', 'home', node.user, 'identity') 108 109 success = node.send_files(identity_directory, tmp_identity_directory, nil, '0700') if success 110 111 success = node.cli.mv(tmp_identity_directory, remote_identity_directory) if success 112 success = node.cli.chown('-R', 'root:root', remote_identity_directory) if success 113 success = node.cli.chmod('-R', 'go-rwx', remote_identity_directory) if success 114 end 115 end 116 end 117 success 118 end 119 120 if success && settings[:delete] 121 # Remove local identity last 122 info('local_delete', { :directory => identity_directory }) 123 FileUtils.rm_rf(identity_directory) 124 end 125 end 126 myself.status = code.batch_error unless success 127 end 128 end 129 end
ignore()
click to toggle source
# File lib/nucleon/action/node/identity.rb 31 def ignore 32 [ :nodes ] 33 end