class MCollective::Application::Rpc

Public Instance Methods

main() click to toggle source
    # File lib/mcollective/application/rpc.rb
 80 def main
 81   mc = rpcclient(configuration[:agent])
 82 
 83   mc.agent_filter(configuration[:agent])
 84 
 85   string_to_ddl_type(configuration[:arguments], mc.ddl.action_interface(configuration[:action])) if mc.ddl
 86 
 87   mc.validate_request(configuration[:action], configuration[:arguments])
 88 
 89   if mc.reply_to
 90     configuration[:arguments][:process_results] = true
 91 
 92     puts "Request sent with id: " + mc.send(configuration[:action], configuration[:arguments]) + " replies to #{mc.reply_to}"
 93   elsif !configuration[:show_results]
 94     configuration[:arguments][:process_results] = false
 95 
 96     puts "Request sent with id: " + mc.send(configuration[:action], configuration[:arguments])
 97   else
 98     discover_args = {:verbose => true}
 99 
100     mc.detect_and_set_stdin_discovery
101 
102     mc.discover discover_args
103 
104     printrpc mc.send(configuration[:action], configuration[:arguments])
105 
106     printrpcstats :summarize => true, :caption => "#{configuration[:agent]}##{configuration[:action]} call stats" if mc.discover.size > 0
107 
108     halt mc.stats
109   end
110 end
post_option_parser(configuration) click to toggle source
   # File lib/mcollective/application/rpc.rb
28 def post_option_parser(configuration)
29   # handle the alternative format that optparse cant parse
30   unless (configuration.include?(:agent) && configuration.include?(:action))
31     if ARGV.length >= 2
32       configuration[:agent] = ARGV[0]
33       ARGV.delete_at(0)
34 
35       configuration[:action] = ARGV[0]
36       ARGV.delete_at(0)
37 
38       ARGV.each do |v|
39         if v =~ /^(.+?)=(.+)$/
40           configuration[:arguments] = [] unless configuration.include?(:arguments)
41           configuration[:arguments] << v
42         else
43           STDERR.puts("Could not parse --arg #{v}")
44           exit(1)
45         end
46       end
47     else
48       STDERR.puts("No agent, action and arguments specified")
49       exit(1)
50     end
51   end
52 
53   # convert arguments to symbols for keys to comply with simplerpc conventions
54   args = configuration[:arguments].clone
55   configuration[:arguments] = {}
56 
57   args.each do |v|
58     if v =~ /^(.+?)=(.+)$/
59       configuration[:arguments][$1.to_sym] = $2
60     end
61   end
62 end
string_to_ddl_type(arguments, ddl) click to toggle source
   # File lib/mcollective/application/rpc.rb
64 def string_to_ddl_type(arguments, ddl)
65   return if ddl.empty?
66 
67   arguments.keys.each do |key|
68     if ddl[:input].keys.include?(key)
69       case ddl[:input][key][:type]
70         when :boolean
71           arguments[key] = MCollective::DDL.string_to_boolean(arguments[key])
72 
73         when :number, :integer, :float
74           arguments[key] = MCollective::DDL.string_to_number(arguments[key])
75       end
76     end
77   end
78 end