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 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