From eab3a872de04dfaa197cbe71ab34472dcb4fd7e5 Mon Sep 17 00:00:00 2001 From: elijah Date: Sat, 3 Nov 2012 22:43:22 -0700 Subject: added --print to "leap list" command. --- bin/leap | 9 ++++---- lib/leap_cli/commands/list.rb | 47 ++++++++++++++++++++++++++++-------------- lib/leap_cli/config/manager.rb | 2 ++ 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 -- cgit v1.2.3