def initialize(agent, flags = {})
if flags.include?(:options)
initial_options = flags[:options]
elsif @@initial_options
initial_options = Marshal.load(@@initial_options)
else
oparser = MCollective::Optionparser.new({ :verbose => false,
:progress_bar => true,
:mcollective_limit_targets => false,
:batch_size => nil,
:batch_sleep_time => 1 },
"filter")
initial_options = oparser.parse do |parser, opts|
if block_given?
yield(parser, opts)
end
Helpers.add_simplerpc_options(parser, opts)
end
@@initial_options = Marshal.dump(initial_options)
end
@initial_options = initial_options
@config = initial_options[:config]
@client = MCollective::Client.new(@initial_options)
@stats = Stats.new
@agent = agent
@timeout = initial_options[:timeout] || 5
@verbose = initial_options[:verbose]
@filter = initial_options[:filter] || Util.empty_filter
@discovered_agents = nil
@progress = initial_options[:progress_bar]
@limit_targets = initial_options[:mcollective_limit_targets]
@limit_method = Config.instance.rpclimitmethod
@limit_seed = initial_options[:limit_seed] || nil
@output_format = initial_options[:output_format] || :console
@force_direct_request = false
@reply_to = initial_options[:reply_to]
@discovery_method = initial_options[:discovery_method]
if !@discovery_method
@discovery_method = Config.instance.default_discovery_method
@default_discovery_method = true
else
@default_discovery_method = false
end
@discovery_options = initial_options[:discovery_options] || []
@force_display_mode = initial_options[:force_display_mode] || false
@batch_size = initial_options[:batch_size] || 0
@batch_sleep_time = Float(initial_options[:batch_sleep_time] || 1)
@batch_mode = determine_batch_mode(@batch_size)
agent_filter agent
@discovery_timeout = @initial_options.fetch(:disctimeout, nil) || Config.instance.discovery_timeout
@collective = @client.collective
@ttl = initial_options[:ttl] || Config.instance.ttl
@publish_timeout = initial_options[:publish_timeout] || Config.instance.publish_timeout
@threaded = initial_options[:threaded] || Config.instance.threaded
@ddl = DDL.new(agent)
@stats.ddl = @ddl
@timeout = @ddl.meta[:timeout] + discovery_timeout if @timeout == 5
if initial_options[:stderr]
@stderr = initial_options[:stderr]
else
@stderr = STDERR
@stderr.sync = true
end
if initial_options[:stdout]
@stdout = initial_options[:stdout]
else
@stdout = STDOUT
@stdout.sync = true
end
end