onering-client 0.0.83 → 0.0.84

Sign up to get free protection for your applications and to get access to all the features.
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::CLI::VERSION}
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
- STDERR.puts("[#{e.class.name.split('::').last}]".foreground(:red) + " #{e.message}")
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.exists?(File.expand_path(i)) rescue false)
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
- raise Errors::ClientError.new("Cannot autoregister client: HTTP #{response.code} - #{(response.parsed_response || {}).get('error.message', 'Unknown error')}")
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?
@@ -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(/\:\s*/,2)
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
- }.compact)
47
+ })
48
48
 
49
49
  return (rv.parsed_response rescue rv.response.body)
50
50
  end
@@ -27,7 +27,7 @@ EOS
27
27
 
28
28
  # -----------------------------------------------------------------------------
29
29
  when :get
30
- raise "Expected 1 parameter, got #{args.length}" unless args.length == 1
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
- raise "Expected 2 parameters, got #{args.length}" unless args.length == 2
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
- raise "Expected 1 parameter, got #{args.length}" unless args.length >= 1
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
- raise "Expected 1 parameter, got #{args.length}" unless args.length == 1
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
- raise "Cannot save data, no input data specified"
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
- raise "Unknown subcommand #{sc.inspect}"
88
+ Onering::Logger.fatal("Unknown subcommand #{sc.inspect}")
89
89
  end
90
90
  end
91
91
  end
@@ -15,52 +15,63 @@ Usage:
15
15
 
16
16
  Options:
17
17
  EOS
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
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 => @opts[:id],
27
- :timeout => @opts[: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
- report = Onering::Reporter.report().stringify_keys()
34
+ begin
35
+ Onering::Logger.debug("Gathering local data for report")
36
+ report = Onering::Reporter.report().stringify_keys()
33
37
 
34
- # pull report overrides from the config file
35
- Onering::Config.get('reporter.fields',{}).each do |key, value|
36
- if value.is_a?(Hash)
37
- value.coalesce(key, nil, '.').each do |k,v|
38
- v = nil if ['null', '', '-'].include?(v.to_s.strip.chomp)
39
- report = report.set(k, v)
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
- else
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
- # save if specified
56
- if @opts[:save] === true
57
- @api.connect()
58
- @api.devices.save(report['id']) do
59
- MultiJson.dump(report)
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
- return report
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
@@ -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
- @_config.deep_merge!(config.compact) unless config.empty?
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
- STDERR.puts("Error loading gem: #{e.message}")
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
- STDERR.puts("Unable to load Facter library")
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
- require "#{directory}/#{e}"
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
- STDERR.puts e.message
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
- raise "Cannot generate report without a hardware ID"
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.83
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: &10686340 !ruby/object:Gem::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: *10686340
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: &10685860 !ruby/object:Gem::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: *10685860
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: &10685360 !ruby/object:Gem::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: *10685360
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: &10684900 !ruby/object:Gem::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: *10684900
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: &10684420 !ruby/object:Gem::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: *10684420
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: &10700360 !ruby/object:Gem::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: *10700360
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: &10699860 !ruby/object:Gem::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: *10699860
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: &10699400 !ruby/object:Gem::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: *10699400
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: &10698940 !ruby/object:Gem::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: *10698940
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/api.rb
124
- - lib/onering/util.rb
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.11
202
+ rubygems_version: 1.8.23
158
203
  signing_key:
159
204
  specification_version: 3
160
205
  summary: Onering client API and utilities
@@ -1,5 +0,0 @@
1
- module Onering
2
- module CLI
3
- VERSION = "0.0.83"
4
- end
5
- end