diff options
-rw-r--r-- | lib/leap_cli/commands/node.rb | 22 | ||||
-rw-r--r-- | lib/leap_cli/config/manager.rb | 4 |
2 files changed, 24 insertions, 2 deletions
diff --git a/lib/leap_cli/commands/node.rb b/lib/leap_cli/commands/node.rb index da29a02..bb02fa9 100644 --- a/lib/leap_cli/commands/node.rb +++ b/lib/leap_cli/commands/node.rb @@ -1,5 +1,6 @@ require 'net/ssh/known_hosts' require 'tempfile' +require 'ipaddr' module LeapCli; module Commands @@ -23,17 +24,22 @@ module LeapCli; module Commands name = args.first assert! name, 'No <node-name> specified.' assert! name =~ /^[0-9a-z-]+$/, "illegal characters used in node name '#{name}'" - assert_files_missing! [:node_config, node.name] + assert_files_missing! [:node_config, name] # create and seed new node - node = Config::Object.new + node = Config::Node.new(manager) if options[:local] node['ip_address'] = pick_next_vagrant_ip_address end seed_node_data(node, args[1..-1]) + validate_ip_address(node) # write the file write_file! [:node_config, name], node.dump_json + "\n" + node['name'] = name + if file_exists? :ca_cert, :ca_key + generate_cert_for_node(manager.reload_node(node)) + end end end @@ -199,4 +205,16 @@ module LeapCli; module Commands end end + def validate_ip_address(node) + IPAddr.new(node['ip_address']) + rescue ArgumentError + bail! do + if node['ip_address'] + log :invalid, "ip_address #{node['ip_address'].inspect}" + else + log :missing, "ip_address" + end + end + end + end; end
\ No newline at end of file diff --git a/lib/leap_cli/config/manager.rb b/lib/leap_cli/config/manager.rb index 5a82526..79a5c0e 100644 --- a/lib/leap_cli/config/manager.rb +++ b/lib/leap_cli/config/manager.rb @@ -158,6 +158,10 @@ module LeapCli nodes.each_node &block end + def reload_node(node) + @nodes[node.name] = apply_inheritance(node) + end + private def load_all_json(pattern, object_class) |