onering-client 0.0.83 → 0.0.84
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/bin/onering +17 -2
- data/lib/onering/api.rb +26 -2
- data/lib/onering/cli/call.rb +2 -2
- data/lib/onering/cli/devices.rb +6 -6
- data/lib/onering/cli/reporter.rb +40 -29
- data/lib/onering/config.rb +7 -1
- data/lib/onering/logger.rb +107 -0
- data/lib/onering/plugins/reporter.rb +15 -5
- data/lib/onering.rb +11 -0
- metadata +75 -30
- data/lib/onering/cli/version.rb +0 -5
data/bin/onering
CHANGED
@@ -8,7 +8,7 @@ require 'pp'
|
|
8
8
|
plugins = Onering::CLI.submodules.collect{|i| i.name.split('::').last.downcase }
|
9
9
|
global = Trollop::options do
|
10
10
|
banner <<-EOS
|
11
|
-
onering command line client utility - version #{Onering::
|
11
|
+
onering command line client utility - version #{Onering::Client::VERSION}
|
12
12
|
|
13
13
|
Usage:
|
14
14
|
onering [global] [plugin] [subcommand] [options]
|
@@ -24,6 +24,7 @@ EOS
|
|
24
24
|
opt :sslkey, "Location of the SSL client key to use for authentication", :short => '-c', :type => :string
|
25
25
|
opt :apikey, "The API token to use for authentication", :short => '-k', :type => :string
|
26
26
|
opt :quiet, "Suppress standard output", :short => '-q'
|
27
|
+
opt :verbosity, "Set the log level (fatal, error, warn, info, debug)", :short => '-v', :type => :string, :default => 'warn'
|
27
28
|
|
28
29
|
stop_on plugins
|
29
30
|
end
|
@@ -32,17 +33,31 @@ end
|
|
32
33
|
plugin = ARGV.shift
|
33
34
|
Trollop::die("plugin argument is requried") if plugin.nil?
|
34
35
|
|
36
|
+
Onering::Logger.setup({
|
37
|
+
:destination => 'stderr',
|
38
|
+
:threshold => global[:verbosity]
|
39
|
+
})
|
40
|
+
|
35
41
|
Onering::Config.load()
|
36
42
|
|
43
|
+
|
37
44
|
if plugins.include?(plugin)
|
38
45
|
begin
|
39
46
|
plugin = Onering::CLI.const_get(plugin.capitalize)
|
40
47
|
plugin.configure(global)
|
48
|
+
|
49
|
+
Onering::Logger.debug("Executing plugin #{plugin}\#run()", $0)
|
41
50
|
rv = plugin.run(ARGV)
|
51
|
+
Onering::Logger.debug("Outputting data as #{global[:format]}:", $0)
|
42
52
|
Onering::CLI.output(rv, global[:format])
|
53
|
+
|
43
54
|
rescue Onering::API::Errors::Exception => e
|
44
|
-
|
55
|
+
Onering::Logger.fatal(e.message, e.class.name.split('::').last) rescue nil
|
45
56
|
exit 1
|
57
|
+
|
58
|
+
rescue Onering::Client::FatalError => e
|
59
|
+
exit 255
|
60
|
+
|
46
61
|
end
|
47
62
|
else
|
48
63
|
Trollop::die("unknown plugin #{plugin}")
|
data/lib/onering/api.rb
CHANGED
@@ -83,6 +83,10 @@ module Onering
|
|
83
83
|
|
84
84
|
# arm the hack
|
85
85
|
TCPSocket._hack_local_ip = options.get('config.source')
|
86
|
+
|
87
|
+
# sound the siren
|
88
|
+
Onering::Logger.info("Using local interface #{options.get('config.source')} to connect", "Onering::API")
|
89
|
+
|
86
90
|
else
|
87
91
|
raise "Invalid source IP address #{options.get('config.source')}"
|
88
92
|
end
|
@@ -90,6 +94,7 @@ module Onering
|
|
90
94
|
|
91
95
|
# set API connectivity details
|
92
96
|
Onering::API.base_uri(options.get('config.url', Onering::Config.get(:url, DEFAULT_BASE)))
|
97
|
+
Onering::Logger.info("Server URL is #{Onering::API.base_uri}", "Onering::API")
|
93
98
|
|
94
99
|
# add default parameters
|
95
100
|
options.get('config.params',{}).each do |k,v|
|
@@ -104,6 +109,7 @@ module Onering
|
|
104
109
|
# setup authentication
|
105
110
|
_setup_auth()
|
106
111
|
|
112
|
+
Onering::Logger.debug("Connection setup complete", "Onering::API")
|
107
113
|
return self
|
108
114
|
end
|
109
115
|
|
@@ -111,6 +117,12 @@ module Onering
|
|
111
117
|
def request(method, endpoint, options={})
|
112
118
|
endpoint = [Onering::Config.get(:path, DEFAULT_PATH).strip, endpoint.sub(/^\//,'')].join('/')
|
113
119
|
|
120
|
+
Onering::Logger.debug("#{method.to_s.upcase} #{endpoint}#{(options[:query] || {}).empty? ? '' : '?'+options[:query].join('=', '&')}", "Onering::API")
|
121
|
+
options.get(:headers,[]).each do |name, value|
|
122
|
+
next if name == 'Content-Type' and value == 'application/json'
|
123
|
+
Onering::Logger.debug("+#{name}: #{value}", "Onering::API")
|
124
|
+
end
|
125
|
+
|
114
126
|
case (method.to_sym rescue method)
|
115
127
|
when :post
|
116
128
|
rv = Onering::API.post(endpoint, options)
|
@@ -216,19 +228,27 @@ module Onering
|
|
216
228
|
# -----------------------------------------------------------------------------
|
217
229
|
def _setup_auth_ssl()
|
218
230
|
begin
|
231
|
+
Onering::Logger.info("Using SSL authentication mechanism", "Onering::API")
|
232
|
+
|
219
233
|
# get first keyfile found
|
220
234
|
key = (([Onering::Config.get('authentication.keyfile')] + DEFAULT_CLIENT_PEM).compact.select{|i|
|
221
|
-
(File.
|
235
|
+
rv = (File.readable?(File.expand_path(i)) rescue false)
|
236
|
+
Onering::Logger.debug("SSL keyfile found at #{File.expand_path(i)}", "Onering::API") if rv === true
|
237
|
+
rv
|
222
238
|
}).first
|
223
239
|
|
224
240
|
# SSL client key not found, attempt autoregistration...
|
225
241
|
if key.nil?
|
226
242
|
if Onering::Config.get('authentication.autoregister', true)
|
243
|
+
Onering::Logger.warn("SSL keyfile not found, attempting to autoregister client", "Onering::API")
|
244
|
+
|
227
245
|
validation_key = Onering::Config.get('authentication.validation_keyfile', DEFAULT_VALIDATION_PEM)
|
228
246
|
validation_key = (File.expand_path(validation_key) rescue validation_key)
|
229
247
|
|
230
248
|
# if validation key exists, autoregister
|
231
249
|
if File.size?(validation_key)
|
250
|
+
Onering::Logger.debug("Using validation key at #{validation_key}", "Onering::API")
|
251
|
+
|
232
252
|
# set the authentication PEM to validation.pem
|
233
253
|
Onering::API.pem(File.read(validation_key))
|
234
254
|
|
@@ -257,6 +277,7 @@ module Onering
|
|
257
277
|
next if File.exists?(keyfile)
|
258
278
|
|
259
279
|
# attempt to create/download the keyfile
|
280
|
+
Onering::Logger.debug("Requesting SSL keyfile as client #{client[:name].strip}, key #{client[:keyname]}", "Onering::API")
|
260
281
|
response = self.class.get("/api/users/#{client[:name].strip}/keys/#{client[:keyname]}")
|
261
282
|
|
262
283
|
# if successful, write the file
|
@@ -265,7 +286,7 @@ module Onering
|
|
265
286
|
raise Actions::Retry.new
|
266
287
|
else
|
267
288
|
# all errors are fatal at this stage
|
268
|
-
|
289
|
+
Onering::Logger.fatal("Cannot autoregister client: HTTP #{response.code} - #{(response.parsed_response || {}).get('error.message', 'Unknown error')}", "Onering::API")
|
269
290
|
end
|
270
291
|
end
|
271
292
|
|
@@ -281,6 +302,7 @@ module Onering
|
|
281
302
|
end
|
282
303
|
else
|
283
304
|
Onering::API.pem(File.read((File.expand_path(key) rescue key)))
|
305
|
+
Onering::Logger.debug("Using SSL keyfile #{File.expand_path(key) rescue key}", "Onering::API")
|
284
306
|
end
|
285
307
|
|
286
308
|
rescue Actions::Retry
|
@@ -291,6 +313,8 @@ module Onering
|
|
291
313
|
|
292
314
|
# -----------------------------------------------------------------------------
|
293
315
|
def _setup_auth_token()
|
316
|
+
Onering::Logger.info("Using token authentication mechanism", "Onering::API")
|
317
|
+
|
294
318
|
# get first keyfile found
|
295
319
|
key = Onering::Config.get('authentication.key')
|
296
320
|
raise Errors::AuthenticationMissing.new("Cannot find an API token") if key.nil?
|
data/lib/onering/cli/call.rb
CHANGED
@@ -35,7 +35,7 @@ EOS
|
|
35
35
|
headers = {
|
36
36
|
'Content-Type' => 'application/json'
|
37
37
|
}.merge(Hash[@opts[:header].collect{|i|
|
38
|
-
i.split(
|
38
|
+
i.split(/[\:=]\s*/,2)
|
39
39
|
}])
|
40
40
|
|
41
41
|
rv = @api.request(@opts[:method], args.first, {
|
@@ -44,7 +44,7 @@ EOS
|
|
44
44
|
:query => Hash[@opts[:query].collect{|i|
|
45
45
|
i.split('=',2)
|
46
46
|
}]
|
47
|
-
}
|
47
|
+
})
|
48
48
|
|
49
49
|
return (rv.parsed_response rescue rv.response.body)
|
50
50
|
end
|
data/lib/onering/cli/devices.rb
CHANGED
@@ -27,7 +27,7 @@ EOS
|
|
27
27
|
|
28
28
|
# -----------------------------------------------------------------------------
|
29
29
|
when :get
|
30
|
-
|
30
|
+
Onering::Logger.fatal("Expected 1 parameter, got #{args.length}") unless args.length == 1
|
31
31
|
|
32
32
|
if @opts[:query_given]
|
33
33
|
# doing this until a bulk field query endpoint is built
|
@@ -42,7 +42,7 @@ EOS
|
|
42
42
|
|
43
43
|
# -----------------------------------------------------------------------------
|
44
44
|
when :set
|
45
|
-
|
45
|
+
Onering::Logger.fatal("Expected 2 parameters, got #{args.length}") unless args.length == 2
|
46
46
|
|
47
47
|
if @opts[:query]
|
48
48
|
# doing this until a bulk field set endpoint is built
|
@@ -57,14 +57,14 @@ EOS
|
|
57
57
|
|
58
58
|
# -----------------------------------------------------------------------------
|
59
59
|
when :list
|
60
|
-
|
60
|
+
Onering::Logger.fatal("Expected 1 parameter, got #{args.length}") unless args.length >= 1
|
61
61
|
return @api.list(args[0], {
|
62
62
|
:filter => [@opts[:query], args[1]].compact.join('/')
|
63
63
|
}.compact)
|
64
64
|
|
65
65
|
# -----------------------------------------------------------------------------
|
66
66
|
when :find
|
67
|
-
|
67
|
+
Onering::Logger.fatal("Expected 1 parameter, got #{args.length}") unless args.length == 1
|
68
68
|
return @api.find(args[0])
|
69
69
|
|
70
70
|
# -----------------------------------------------------------------------------
|
@@ -79,13 +79,13 @@ EOS
|
|
79
79
|
File.read(args[1])
|
80
80
|
|
81
81
|
else
|
82
|
-
|
82
|
+
Onering::Logger.fatal("Cannot save data, no input data specified")
|
83
83
|
end
|
84
84
|
end
|
85
85
|
|
86
86
|
rv.parsed_response
|
87
87
|
else
|
88
|
-
|
88
|
+
Onering::Logger.fatal("Unknown subcommand #{sc.inspect}")
|
89
89
|
end
|
90
90
|
end
|
91
91
|
end
|
data/lib/onering/cli/reporter.rb
CHANGED
@@ -15,52 +15,63 @@ Usage:
|
|
15
15
|
|
16
16
|
Options:
|
17
17
|
EOS
|
18
|
-
opt :id,
|
19
|
-
opt :fields,
|
20
|
-
opt :save,
|
21
|
-
opt :timeout,
|
18
|
+
opt :id, "Override the autodetected Hardware ID for this node", :short => '-I', :type => :string
|
19
|
+
opt :fields, "Set the named FIELD to equal VALUE in the format FIELD=VALUE. Can be specified multiple times", :short => '-o', :type => :string, :multi => true
|
20
|
+
opt :save, "Save the report output to the configured Onering server"
|
21
|
+
opt :timeout, "The maximum amount of time to wait for a report to be generated", :type => :integer, :default => 60
|
22
|
+
opt :plugin_timeout, "The maximum amount of time to wait for a report plugin to return data", :type => :integer, :default => 10
|
22
23
|
end
|
23
24
|
|
24
25
|
# initialize report generator with user options
|
25
26
|
Onering::Reporter.setup({
|
26
|
-
:id
|
27
|
-
:timeout
|
27
|
+
:id => @opts[:id],
|
28
|
+
:timeout => @opts[:timeout],
|
29
|
+
:plugin_timeout => @opts[:plugin_timeout]
|
28
30
|
}.compact)
|
29
31
|
end
|
30
32
|
|
31
33
|
def self.run(args)
|
32
|
-
|
34
|
+
begin
|
35
|
+
Onering::Logger.debug("Gathering local data for report")
|
36
|
+
report = Onering::Reporter.report().stringify_keys()
|
33
37
|
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
38
|
+
# pull report overrides from the config file
|
39
|
+
Onering::Config.get('reporter.fields',{}).each do |key, value|
|
40
|
+
Onering::Logger.debug("Override value #{key} from config file")
|
41
|
+
|
42
|
+
if value.is_a?(Hash)
|
43
|
+
value.coalesce(key, nil, '.').each do |k,v|
|
44
|
+
v = nil if ['null', '', '-'].include?(v.to_s.strip.chomp)
|
45
|
+
report = report.set(k, v)
|
46
|
+
end
|
47
|
+
else
|
48
|
+
value = nil if ['null', '', '-'].include?(value.to_s.strip.chomp)
|
49
|
+
report = report.set(key, value)
|
40
50
|
end
|
41
|
-
|
51
|
+
end
|
52
|
+
|
53
|
+
# pull overrides from CLI arguments
|
54
|
+
@opts[:fields].each do |field|
|
55
|
+
key, value = field.split('=', 2)
|
56
|
+
Onering::Logger.debug("Override value #{key} from command line argument")
|
57
|
+
|
42
58
|
value = nil if ['null', '', '-'].include?(value.to_s.strip.chomp)
|
43
59
|
report = report.set(key, value)
|
44
60
|
end
|
45
|
-
end
|
46
|
-
|
47
|
-
# pull overrides from CLI arguments
|
48
|
-
@opts[:fields].each do |field|
|
49
|
-
key, value = field.split('=', 2)
|
50
|
-
value = nil if ['null', '', '-'].include?(value.to_s.strip.chomp)
|
51
|
-
report = report.set(key, value)
|
52
|
-
end
|
53
61
|
|
54
62
|
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
63
|
+
# save if specified
|
64
|
+
if @opts[:save] === true
|
65
|
+
@api.connect()
|
66
|
+
@api.devices.save(report['id']) do
|
67
|
+
MultiJson.dump(report)
|
68
|
+
end
|
60
69
|
end
|
61
|
-
end
|
62
70
|
|
63
|
-
|
71
|
+
return report
|
72
|
+
rescue Timeout::Error
|
73
|
+
Onering::Logger.fatal("Report took too long to generate, exiting...")
|
74
|
+
end
|
64
75
|
end
|
65
76
|
end
|
66
77
|
end
|
data/lib/onering/config.rb
CHANGED
@@ -27,12 +27,18 @@ module Onering
|
|
27
27
|
# only load files we haven't seen before
|
28
28
|
(@_configfiles - @_configfiles_seen.to_a).each do |i|
|
29
29
|
c = YAML.load(File.read(File.expand_path(i))) rescue {}
|
30
|
+
Onering::Logger.info("Loading config file at #{File.expand_path(i) rescue i}", "Onering::Config") unless c.empty?
|
31
|
+
|
30
32
|
@_config.deep_merge!(c)
|
31
33
|
@_configfiles_seen << i
|
32
34
|
end
|
33
35
|
|
36
|
+
|
34
37
|
# settings specified in the library override everything
|
35
|
-
|
38
|
+
unless config.empty?
|
39
|
+
Onering::Logger.debug("Merging settings specified in library instantiation", "Onering::Config")
|
40
|
+
@_config.deep_merge!(config.compact)
|
41
|
+
end
|
36
42
|
|
37
43
|
return @_config
|
38
44
|
end
|
@@ -0,0 +1,107 @@
|
|
1
|
+
require 'logger'
|
2
|
+
require 'rainbow'
|
3
|
+
|
4
|
+
module Onering
|
5
|
+
class Logger
|
6
|
+
def self.setup(options={})
|
7
|
+
outputfn = options[:destination]
|
8
|
+
|
9
|
+
if options[:destination] == /STDOUT/i
|
10
|
+
options[:destination] = STDOUT
|
11
|
+
|
12
|
+
elsif options[:destination] == /STDERR/i or
|
13
|
+
options[:destination].nil?
|
14
|
+
options[:destination] = STDERR
|
15
|
+
|
16
|
+
elsif File.writable?(options[:destination])
|
17
|
+
options[:destination] = File.open(options[:destination], 'a')
|
18
|
+
|
19
|
+
else
|
20
|
+
options[:destination] = STDERR
|
21
|
+
end
|
22
|
+
|
23
|
+
@_logger = ::Logger.new(options[:destination])
|
24
|
+
@_logger.formatter = (options[:formatter] || proc{|severity, datetime, source, msg|
|
25
|
+
case severity.downcase.to_sym
|
26
|
+
when :fatal then sevtag = '!!'
|
27
|
+
when :error then sevtag = 'EE'
|
28
|
+
when :warn then sevtag = 'WW'
|
29
|
+
when :info then sevtag = 'II'
|
30
|
+
when :debug then sevtag = 'DD'
|
31
|
+
else sevtag = '??'
|
32
|
+
end
|
33
|
+
|
34
|
+
logline = ["#{sevtag} ", (source.nil? ? nil : "[#{source}]"), msg].compact.join(' ')
|
35
|
+
|
36
|
+
if options[:destination] === STDOUT or options[:destination] === STDERR
|
37
|
+
case severity.downcase.to_sym
|
38
|
+
when :fatal, :error
|
39
|
+
logline = logline.foreground(:red)
|
40
|
+
when :warn
|
41
|
+
logline = logline.foreground(:yellow)
|
42
|
+
when :info
|
43
|
+
logline = logline.foreground(:green)
|
44
|
+
when :debug
|
45
|
+
logline = logline.foreground(:blue)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
options[:destination].puts(logline)
|
50
|
+
})
|
51
|
+
|
52
|
+
self.level = options[:threshold]
|
53
|
+
|
54
|
+
self.debug("Logger is initialized. Output is #{outputfn}, threshold: #{options[:threshold]} or worse", "Onering::Logger")
|
55
|
+
end
|
56
|
+
|
57
|
+
def self.level=(severity)
|
58
|
+
@_logger.sev_threshold = _get_level(severity)
|
59
|
+
@_logger.sev_threshold
|
60
|
+
end
|
61
|
+
|
62
|
+
def self.log(severity, message, source=nil)
|
63
|
+
if defined?(@_logger)
|
64
|
+
@_logger.add(_get_level(severity), message, source)
|
65
|
+
return true
|
66
|
+
end
|
67
|
+
|
68
|
+
return false
|
69
|
+
end
|
70
|
+
|
71
|
+
def self.fatal(message, source=nil)
|
72
|
+
self.log(:fatal, message, source)
|
73
|
+
raise Onering::Client::FatalError.new(message)
|
74
|
+
end
|
75
|
+
|
76
|
+
def self.error(message, source=nil)
|
77
|
+
self.log(:error, message, source)
|
78
|
+
end
|
79
|
+
|
80
|
+
def self.warn(message, source=nil)
|
81
|
+
self.log(:warn, message, source)
|
82
|
+
end
|
83
|
+
|
84
|
+
def self.info(message, source=nil)
|
85
|
+
self.log(:info, message, source)
|
86
|
+
end
|
87
|
+
|
88
|
+
def self.debug(message, source=nil)
|
89
|
+
self.log(:debug, message, source)
|
90
|
+
end
|
91
|
+
|
92
|
+
def self._get_level(severity)
|
93
|
+
case severity.to_sym
|
94
|
+
when :fatal
|
95
|
+
return ::Logger::FATAL
|
96
|
+
when :error
|
97
|
+
return ::Logger::ERROR
|
98
|
+
when :warn
|
99
|
+
return ::Logger::WARN
|
100
|
+
when :info
|
101
|
+
return ::Logger::INFO
|
102
|
+
else
|
103
|
+
return ::Logger::DEBUG
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end
|
@@ -41,7 +41,7 @@ module Onering
|
|
41
41
|
@path << File.join(p, 'reporter')
|
42
42
|
@facter_path << File.join(p, 'facter')
|
43
43
|
rescue Gem::LoadError => e
|
44
|
-
|
44
|
+
Onering::Logger.warn("Error loading gem: #{e.message}", "Onering::Reporter")
|
45
45
|
next
|
46
46
|
end
|
47
47
|
end
|
@@ -49,8 +49,10 @@ module Onering
|
|
49
49
|
begin
|
50
50
|
ENV['FACTERLIB'] = @facter_path.join(':')
|
51
51
|
require 'facter'
|
52
|
+
Onering::Logger.debug("Facter loaded successfully, FACTERLIB is #{ENV['FACTERLIB']}", "Onering::Reporter")
|
53
|
+
|
52
54
|
rescue LoadError
|
53
|
-
|
55
|
+
Onering::Logger.error("Unable to load Facter library", "Onering::Reporter")
|
54
56
|
end
|
55
57
|
end
|
56
58
|
|
@@ -71,13 +73,21 @@ module Onering
|
|
71
73
|
if d == 'default' or Facter.value(d.split('-',2).first).to_s.downcase.nil_empty == d.split('-',2).last.to_s.downcase.nil_empty
|
72
74
|
Dir[File.join(directory, '*.rb')].each do |e|
|
73
75
|
e = File.basename(e, '.rb')
|
74
|
-
|
76
|
+
|
77
|
+
begin
|
78
|
+
Timeout.timeout((@options[:plugin_timeout] || 10).to_i) do
|
79
|
+
Onering::Logger.debub("Loading plugin #{e}", "Onering::Reporter")
|
80
|
+
require "#{directory}/#{e}"
|
81
|
+
end
|
82
|
+
rescue Timeout::Error
|
83
|
+
Onering::Logger.warn("Plugin #{e} took too long to return, skipping", "Onering::Reporter")
|
84
|
+
end
|
75
85
|
end
|
76
86
|
end
|
77
87
|
end
|
78
88
|
end
|
79
89
|
rescue Exception => e
|
80
|
-
|
90
|
+
Onering::Logger.warn(e.message, e.class.name)
|
81
91
|
next
|
82
92
|
end
|
83
93
|
end
|
@@ -121,7 +131,7 @@ module Onering
|
|
121
131
|
return @_report.stringify_keys()
|
122
132
|
end
|
123
133
|
else
|
124
|
-
|
134
|
+
Onering::Logger.fatal("Cannot generate report without a hardware ID", "Onering::Reporter")
|
125
135
|
end
|
126
136
|
|
127
137
|
{}
|
data/lib/onering.rb
CHANGED
@@ -1,4 +1,15 @@
|
|
1
1
|
$: << File.expand_path(File.dirname(__FILE__))
|
2
|
+
|
3
|
+
module Onering
|
4
|
+
module Client
|
5
|
+
VERSION = "0.0.84"
|
6
|
+
|
7
|
+
class Error < Exception; end
|
8
|
+
class FatalError < Error; end
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
require 'onering/logger'
|
2
13
|
require 'onering/util'
|
3
14
|
require 'onering/api'
|
4
15
|
require 'onering/cli'
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: onering-client
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.84
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -13,7 +13,7 @@ date: 2013-01-29 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: facter
|
16
|
-
requirement:
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,15 @@ dependencies:
|
|
21
21
|
version: 1.7.2
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements:
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: 1.7.2
|
25
30
|
- !ruby/object:Gem::Dependency
|
26
31
|
name: deep_merge
|
27
|
-
requirement:
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
28
33
|
none: false
|
29
34
|
requirements:
|
30
35
|
- - ! '>='
|
@@ -32,10 +37,15 @@ dependencies:
|
|
32
37
|
version: '0'
|
33
38
|
type: :runtime
|
34
39
|
prerelease: false
|
35
|
-
version_requirements:
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
36
46
|
- !ruby/object:Gem::Dependency
|
37
47
|
name: addressable
|
38
|
-
requirement:
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
39
49
|
none: false
|
40
50
|
requirements:
|
41
51
|
- - ! '>='
|
@@ -43,21 +53,31 @@ dependencies:
|
|
43
53
|
version: '0'
|
44
54
|
type: :runtime
|
45
55
|
prerelease: false
|
46
|
-
version_requirements:
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
47
62
|
- !ruby/object:Gem::Dependency
|
48
63
|
name: httparty
|
49
|
-
requirement:
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
50
65
|
none: false
|
51
66
|
requirements:
|
52
|
-
- - =
|
67
|
+
- - '='
|
53
68
|
- !ruby/object:Gem::Version
|
54
69
|
version: 0.11.0
|
55
70
|
type: :runtime
|
56
71
|
prerelease: false
|
57
|
-
version_requirements:
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - '='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: 0.11.0
|
58
78
|
- !ruby/object:Gem::Dependency
|
59
79
|
name: hashlib
|
60
|
-
requirement:
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
61
81
|
none: false
|
62
82
|
requirements:
|
63
83
|
- - ! '>='
|
@@ -65,10 +85,15 @@ dependencies:
|
|
65
85
|
version: 0.0.25
|
66
86
|
type: :runtime
|
67
87
|
prerelease: false
|
68
|
-
version_requirements:
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - ! '>='
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: 0.0.25
|
69
94
|
- !ruby/object:Gem::Dependency
|
70
95
|
name: multi_json
|
71
|
-
requirement:
|
96
|
+
requirement: !ruby/object:Gem::Requirement
|
72
97
|
none: false
|
73
98
|
requirements:
|
74
99
|
- - ! '>='
|
@@ -76,10 +101,15 @@ dependencies:
|
|
76
101
|
version: '0'
|
77
102
|
type: :runtime
|
78
103
|
prerelease: false
|
79
|
-
version_requirements:
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ! '>='
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0'
|
80
110
|
- !ruby/object:Gem::Dependency
|
81
111
|
name: rainbow
|
82
|
-
requirement:
|
112
|
+
requirement: !ruby/object:Gem::Requirement
|
83
113
|
none: false
|
84
114
|
requirements:
|
85
115
|
- - ! '>='
|
@@ -87,10 +117,15 @@ dependencies:
|
|
87
117
|
version: '0'
|
88
118
|
type: :runtime
|
89
119
|
prerelease: false
|
90
|
-
version_requirements:
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
none: false
|
122
|
+
requirements:
|
123
|
+
- - ! '>='
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: '0'
|
91
126
|
- !ruby/object:Gem::Dependency
|
92
127
|
name: trollop
|
93
|
-
requirement:
|
128
|
+
requirement: !ruby/object:Gem::Requirement
|
94
129
|
none: false
|
95
130
|
requirements:
|
96
131
|
- - ! '>='
|
@@ -98,10 +133,15 @@ dependencies:
|
|
98
133
|
version: '0'
|
99
134
|
type: :runtime
|
100
135
|
prerelease: false
|
101
|
-
version_requirements:
|
136
|
+
version_requirements: !ruby/object:Gem::Requirement
|
137
|
+
none: false
|
138
|
+
requirements:
|
139
|
+
- - ! '>='
|
140
|
+
- !ruby/object:Gem::Version
|
141
|
+
version: '0'
|
102
142
|
- !ruby/object:Gem::Dependency
|
103
143
|
name: xml-simple
|
104
|
-
requirement:
|
144
|
+
requirement: !ruby/object:Gem::Requirement
|
105
145
|
none: false
|
106
146
|
requirements:
|
107
147
|
- - ! '>='
|
@@ -109,7 +149,12 @@ dependencies:
|
|
109
149
|
version: '0'
|
110
150
|
type: :runtime
|
111
151
|
prerelease: false
|
112
|
-
version_requirements:
|
152
|
+
version_requirements: !ruby/object:Gem::Requirement
|
153
|
+
none: false
|
154
|
+
requirements:
|
155
|
+
- - ! '>='
|
156
|
+
- !ruby/object:Gem::Version
|
157
|
+
version: '0'
|
113
158
|
description: A Ruby wrapper for Onering
|
114
159
|
email: ghetzel@outbrain.com
|
115
160
|
executables:
|
@@ -117,22 +162,22 @@ executables:
|
|
117
162
|
extensions: []
|
118
163
|
extra_rdoc_files: []
|
119
164
|
files:
|
120
|
-
- lib/onering.rb
|
121
|
-
- lib/onering/cli.rb
|
122
165
|
- lib/onering/config.rb
|
123
|
-
- lib/onering/
|
124
|
-
- lib/onering/
|
125
|
-
- lib/onering/plugins/authentication.rb
|
126
|
-
- lib/onering/plugins/reporter.rb
|
166
|
+
- lib/onering/logger.rb
|
167
|
+
- lib/onering/cli.rb
|
127
168
|
- lib/onering/plugins/devices.rb
|
169
|
+
- lib/onering/plugins/reporter.rb
|
170
|
+
- lib/onering/plugins/authentication.rb
|
128
171
|
- lib/onering/plugins/automation.rb
|
129
|
-
- lib/onering/cli/reporter.rb
|
130
|
-
- lib/onering/cli/version.rb
|
131
172
|
- lib/onering/cli/devices.rb
|
173
|
+
- lib/onering/cli/reporter.rb
|
132
174
|
- lib/onering/cli/config.rb
|
133
|
-
- lib/onering/cli/automation.rb
|
134
175
|
- lib/onering/cli/fact.rb
|
176
|
+
- lib/onering/cli/automation.rb
|
135
177
|
- lib/onering/cli/call.rb
|
178
|
+
- lib/onering/api.rb
|
179
|
+
- lib/onering/util.rb
|
180
|
+
- lib/onering.rb
|
136
181
|
- bin/onering
|
137
182
|
homepage: https://github.com/outbrain/onering-ruby
|
138
183
|
licenses: []
|
@@ -154,7 +199,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
154
199
|
version: '0'
|
155
200
|
requirements: []
|
156
201
|
rubyforge_project:
|
157
|
-
rubygems_version: 1.8.
|
202
|
+
rubygems_version: 1.8.23
|
158
203
|
signing_key:
|
159
204
|
specification_version: 3
|
160
205
|
summary: Onering client API and utilities
|