summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xbin/leap9
-rw-r--r--lib/leap_cli/commands/list.rb47
-rw-r--r--lib/leap_cli/config/manager.rb2
3 files changed, 39 insertions, 19 deletions
diff --git a/bin/leap b/bin/leap
index 45f64fb..2749fc8 100755
--- a/bin/leap
+++ b/bin/leap
@@ -42,11 +42,12 @@ module LeapCli::Commands
# delegate highline methods to make them available to sub-commands
#
@terminal = HighLine.new
- def_delegator :@terminal, :ask, 'self.ask'
- def_delegator :@terminal, :agree, 'self.agree'
+ def_delegator :@terminal, :ask, 'self.ask'
+ def_delegator :@terminal, :agree, 'self.agree'
def_delegator :@terminal, :choose, 'self.choose'
- def_delegator :@terminal, :say, 'self.say'
- def_delegator :@terminal, :color, 'self.color'
+ def_delegator :@terminal, :say, 'self.say'
+ def_delegator :@terminal, :color, 'self.color'
+ def_delegator :@terminal, :list, 'self.list'
#
# make config manager available as 'manager'
diff --git a/lib/leap_cli/commands/list.rb b/lib/leap_cli/commands/list.rb
index 0f1c96e..033c95f 100644
--- a/lib/leap_cli/commands/list.rb
+++ b/lib/leap_cli/commands/list.rb
@@ -1,6 +1,38 @@
module LeapCli
module Commands
+ desc 'List nodes and their classifications'
+ long_desc 'Prints out a listing of nodes, services, or tags.'
+ arg_name 'filter'
+ command :list do |c|
+ c.flag 'print', :desc => 'What attributes to print (optional)'
+ c.action do |global_options,options,args|
+ if options['print']
+ print_node_properties(manager.filter(args), options['print'])
+ else
+ if args.any?
+ print_config_table(:nodes, manager.filter(args))
+ else
+ print_config_table(:services, manager.services)
+ print_config_table(:tags, manager.tags)
+ print_config_table(:nodes, manager.nodes)
+ end
+ end
+ end
+ end
+
+ private
+
+ def self.print_node_properties(nodes, properties)
+ node_list = manager.nodes
+ properties = properties.split(',')
+ max_width = nodes.keys.inject(0) {|max,i| [i.size,max].max}
+ nodes.keys.sort.each do |node_name|
+ value = properties.collect{|prop| node_list[node_name][prop]}.join(', ')
+ printf("%#{max_width}s %s\n", node_name, value)
+ end
+ end
+
def self.print_config_table(type, object_list)
style = {:border_x => '-', :border_y => ':', :border_i => '-', :width => 60}
@@ -44,20 +76,5 @@ module LeapCli
end
end
- desc 'List nodes and their classifications'
- long_desc 'Prints out a listing of nodes, services, or tags.'
- arg_name 'filter'
- command :list do |c|
- c.action do |global_options,options,args|
- if args.any?
- print_config_table(:nodes, manager.filter(args))
- else
- print_config_table(:services, manager.services)
- print_config_table(:tags, manager.tags)
- print_config_table(:nodes, manager.nodes)
- end
- end
- end
-
end
end
diff --git a/lib/leap_cli/config/manager.rb b/lib/leap_cli/config/manager.rb
index 72958dd..2eda7a4 100644
--- a/lib/leap_cli/config/manager.rb
+++ b/lib/leap_cli/config/manager.rb
@@ -211,6 +211,8 @@ module LeapCli
service.node_list
elsif tag = self.tags[name]
tag.node_list
+ else
+ {}
end
end