| Class | MCollective::Optionparser |
| In: |
lib/mcollective/optionparser.rb
|
| Parent: | Object |
A simple helper to build cli tools that supports a uniform command line layout.
| parser | [R] |
Creates a new instance of the parser, you can supply defaults and include named groups of options.
Starts a parser that defaults to verbose and that includs the filter options:
oparser = MCollective::Optionparser.new({:verbose => true}, "filter")
Stats a parser in non verbose mode that does support discovery
oparser = MCollective::Optionparser.new()
Starts a parser in verbose mode that does not show the common options:
oparser = MCollective::Optionparser.new({:verbose => true}, "filter", "common")
# File lib/mcollective/optionparser.rb, line 20
20: def initialize(defaults = {}, include_sections = nil, exclude_sections = nil)
21: @parser = ::OptionParser.new
22:
23: @include = [include_sections].flatten
24: @exclude = [exclude_sections].flatten
25:
26: @options = Util.default_options
27:
28: @options.merge!(defaults)
29: end
These options will be added to most cli tools
# File lib/mcollective/optionparser.rb, line 128
128: def add_common_options
129: @parser.separator ""
130: @parser.separator "Common Options"
131:
132: @parser.on('-T', '--target COLLECTIVE', 'Target messages to a specific sub collective') do |f|
133: @options[:collective] = f
134: end
135:
136: @parser.on('--dt', '--discovery-timeout SECONDS', Integer, 'Timeout for doing discovery') do |t|
137: @options[:disctimeout] = t
138: end
139:
140: @parser.on('-t', '--timeout SECONDS', Integer, 'Timeout for calling remote agents') do |t|
141: @options[:timeout] = t
142: end
143:
144: @parser.on('-q', '--quiet', 'Do not be verbose') do |v|
145: @options[:verbose] = false
146: end
147:
148: @parser.on('--ttl TTL', 'Set the message validity period') do |v|
149: @options[:ttl] = v.to_i
150: end
151:
152: @parser.on('--reply-to TARGET', 'Set a custom target for replies') do |v|
153: @options[:reply_to] = v
154: end
155: end
These options will be added if you pass ‘filter’ into the include list of the constructor.
# File lib/mcollective/optionparser.rb, line 73
73: def add_filter_options
74: @parser.separator ""
75: @parser.separator "Host Filters"
76:
77: @parser.on('-W', '--with FILTER', 'Combined classes and facts filter') do |f|
78: f.split(" ").each do |filter|
79: begin
80: fact_parsed = parse_fact(filter)
81: @options[:filter]["fact"] << fact_parsed
82: rescue
83: @options[:filter]["cf_class"] << filter
84: end
85: end
86: end
87:
88: @parser.on('-S', '--select FILTER', 'Compound filter combining facts and classes') do |f|
89: @options[:filter]["compound"] << MCollective::Matcher::Parser.new(f).execution_stack
90: end
91:
92: @parser.on('-F', '--wf', '--with-fact fact=val', 'Match hosts with a certain fact') do |f|
93: fact_parsed = parse_fact(f)
94:
95: @options[:filter]["fact"] << fact_parsed if fact_parsed
96: end
97:
98: @parser.on('-C', '--wc', '--with-class CLASS', 'Match hosts with a certain config management class') do |f|
99: @options[:filter]["cf_class"] << f
100: end
101:
102: @parser.on('-A', '--wa', '--with-agent AGENT', 'Match hosts with a certain agent') do |a|
103: @options[:filter]["agent"] << a
104: end
105:
106: @parser.on('-I', '--wi', '--with-identity IDENT', 'Match hosts with a certain configured identity') do |a|
107: @options[:filter]["identity"] << a
108: end
109: end
These options should always be present
# File lib/mcollective/optionparser.rb, line 112
112: def add_required_options
113: @parser.on('-c', '--config FILE', 'Load configuratuion from file rather than default') do |f|
114: @options[:config] = f
115: end
116:
117: @parser.on('-v', '--verbose', 'Be verbose') do |v|
118: @options[:verbose] = v
119: end
120:
121: @parser.on('-h', '--help', 'Display this screen') do
122: puts @parser
123: exit! 1
124: end
125: end
Parse the options returning the options, you can pass a block that adds additional options to the Optionparser.
The sample below starts a parser that also prompts for —arguments in addition to the defaults. It also sets the description and shows a usage message specific to this app.
options = oparser.parse{|parser, options|
parser.define_head "Control the mcollective controller daemon"
parser.banner = "Usage: sh-mcollective [options] command"
parser.on('--arg', '--argument ARGUMENT', 'Argument to pass to agent') do |v|
options[:argument] = v
end
}
Users can set default options that get parsed in using the MCOLLECTIVE_EXTRA_OPTS environemnt variable
# File lib/mcollective/optionparser.rb, line 48
48: def parse(&block)
49: yield(@parser, @options) if block_given?
50:
51: add_required_options
52:
53: add_common_options unless @exclude.include?("common")
54:
55: @include.each do |i|
56: next if @exclude.include?(i)
57:
58: options_name = "add_#{i}_options"
59: send(options_name) if respond_to?(options_name)
60: end
61:
62: @parser.environment("MCOLLECTIVE_EXTRA_OPTS")
63:
64: @parser.parse!
65:
66: @options[:collective] = Config.instance.main_collective unless @options[:collective]
67:
68: @options
69: end