Module MCollective::RPC
In: lib/mcollective/rpc.rb
lib/mcollective/rpc/progress.rb
lib/mcollective/rpc/stats.rb
lib/mcollective/rpc/ddl.rb
lib/mcollective/rpc/agent.rb
lib/mcollective/rpc/result.rb
lib/mcollective/rpc/request.rb
lib/mcollective/rpc/client.rb
lib/mcollective/rpc/helpers.rb
lib/mcollective/rpc/audit.rb
lib/mcollective/rpc/reply.rb
plugins/mcollective/audit/logfile.rb

Toolset to create a standard interface of client and agent using an RPC metaphor, standard compliant agents will make it easier to create generic clients like web interfaces etc

Methods

Classes and Modules

Class MCollective::RPC::Agent
Class MCollective::RPC::Audit
Class MCollective::RPC::Client
Class MCollective::RPC::DDL
Class MCollective::RPC::Helpers
Class MCollective::RPC::Logfile
Class MCollective::RPC::Progress
Class MCollective::RPC::Reply
Class MCollective::RPC::Request
Class MCollective::RPC::Result
Class MCollective::RPC::Stats

Public Class methods

means for other classes to drop discovered hosts into this module its a bit hacky but needed so that the mixin methods like printrpcstats can easily get access to it without users having to pass it around in params.

[Source]

    # File lib/mcollective/rpc.rb, line 91
91:         def self.discovered(discovered)
92:             @@discovered = discovered
93:         end

Factory for RPC::Reply messages, only really here to make agents a bit easier to understand

[Source]

     # File lib/mcollective/rpc.rb, line 156
156:         def self.reply
157:             RPC::Reply.new
158:         end

Factory for RPC::Request messages, only really here to make agents a bit easier to understand

[Source]

     # File lib/mcollective/rpc.rb, line 150
150:         def self.request(msg)
151:             RPC::Request.new(msg)
152:         end

means for other classes to drop stats into this module its a bit hacky but needed so that the mixin methods like printrpcstats can easily get access to it without users having to pass it around in params.

[Source]

    # File lib/mcollective/rpc.rb, line 83
83:         def self.stats(stats)
84:             @@stats = stats
85:         end

Public Instance methods

Wrapper for MCollective::Util.empty_filter? to make clients less fugly to write - ticket 18

[Source]

     # File lib/mcollective/rpc.rb, line 140
140:         def empty_filter?(options)
141:             if options.include?(:filter)
142:                 Util.empty_filter?(options[:filter])
143:             else
144:                 Util.empty_filter?(options)
145:             end
146:         end

Prints the result of an RPC call.

In the default quiet mode - no flattening or verbose - only results that produce an error will be printed

To get details of each result run with the -v command line option.

[Source]

     # File lib/mcollective/rpc.rb, line 129
129:         def printrpc(result, flags = {})
130:             verbose = @options[:verbose] rescue verbose = false
131:             verbose = flags[:verbose] || verbose
132:             flatten = flags[:flatten] || false
133: 
134:             puts
135:             puts Helpers.rpcresults(result, {:verbose => verbose, :flatten => flatten})
136:         end

Prints stats, requires stats to be saved from elsewhere using the MCollective::RPC.stats method.

If you‘ve passed -v on the command line a detailed stat block will be printed, else just a one liner.

You can pass flags into it, at the moment only one flag is supported:

printrpcstats :caption => "Foo"

This will use "Foo" as the caption to the stats in verbose mode

[Source]

     # File lib/mcollective/rpc.rb, line 108
108:         def printrpcstats(flags={})
109:             verbose = @options[:verbose] rescue verbose = false
110:             caption = flags[:caption] || "rpc stats"
111: 
112:             begin
113:                 stats = @@stats
114:             rescue
115:                 puts("no stats to display")
116:                 return
117:             end
118: 
119:             puts
120:             puts stats.report(caption, verbose)
121:         end

Wrapper to create clients, supposed to be used as a mixin:

include MCollective::RPC

exim = rpcclient("exim") printrpc exim.mailq

or

rpcclient("exim") do |exim|

   printrpc exim.mailq

end

It will take a few flags:

   :configfile => "etc/client.cfg"
   :options => options

Options would be a build up options hash from the Optionparser you can use the rpcoptions helper to create this

[Source]

    # File lib/mcollective/rpc.rb, line 55
55:         def rpcclient(agent, flags = {})
56:             configfile = flags[:configfile] || "/etc/mcollective/client.cfg"
57:             options = flags[:options] || nil
58: 
59:             begin
60:                 if options
61:                     rpc = Client.new(agent, :configfile => options[:config], :options => options)
62:                     @options = rpc.options
63:                 else
64:                     rpc = Client.new(agent, :configfile => configfile)
65:                     @options = rpc.options
66:                 end
67:             rescue Exception => e
68:                 puts("Could not create RPC client: #{e}")
69:                 exit!
70:             end
71: 
72:             if block_given?
73:                 yield(rpc)
74:             else
75:                 return rpc
76:             end
77:         end

Creates a standard options hash, pass in a block to add extra headings etc see Optionparser

[Source]

    # File lib/mcollective/rpc.rb, line 21
21:         def rpcoptions
22:             oparser = MCollective::Optionparser.new({:verbose => false, :progress_bar => true}, "filter")
23: 
24:             options = oparser.parse do |parser, options|
25:                 if block_given?
26:                     yield(parser, options)
27:                 end
28: 
29:                 Helpers.add_simplerpc_options(parser, options)
30:             end
31: 
32:             return options
33:         end

[Validate]