onering-client 0.0.77 → 0.0.78

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.
@@ -32,6 +32,8 @@ end
32
32
  plugin = ARGV.shift
33
33
  Trollop::die("plugin argument is requried") if plugin.nil?
34
34
 
35
+ Onering::Config.load()
36
+
35
37
  if plugins.include?(plugin)
36
38
  begin
37
39
  plugin = Onering::CLI.const_get(plugin.capitalize)
@@ -44,4 +46,4 @@ if plugins.include?(plugin)
44
46
  end
45
47
  else
46
48
  Trollop::die("unknown plugin #{plugin}")
47
- end
49
+ end
@@ -16,6 +16,7 @@ require 'hashlib'
16
16
  require 'deep_merge'
17
17
  require 'addressable/uri'
18
18
  require 'httparty'
19
+ require 'onering/config'
19
20
 
20
21
  module Onering
21
22
  class API
@@ -43,22 +44,19 @@ module Onering
43
44
  attr_accessor :url
44
45
  format :json
45
46
 
46
- DEFAULT_CONFIG={}
47
47
  DEFAULT_BASE="https://onering"
48
48
  DEFAULT_PATH="/api"
49
- DEFAULT_OPTIONS_FILE=["~/.onering/cli.yml", "/etc/onering/cli.yml"]
50
49
  DEFAULT_CLIENT_PEM=["~/.onering/client.pem", "/etc/onering/client.pem"]
51
50
  DEFAULT_CLIENT_KEY=["~/.onering/client.key", "/etc/onering/client.key"]
52
51
  DEFAULT_VALIDATION_PEM="/etc/onering/validation.pem"
53
52
 
54
53
 
55
54
  def initialize(options={})
56
- @_config = {}
57
55
  @_plugins = {}
58
56
  @_connection_options = options
59
57
 
60
58
  # load and merge all config file sources
61
- _load_config(@_connection_options[:configfile], @_connection_options.get(:config, {}))
59
+ Onering::Config.load(@_connection_options[:configfile], @_connection_options.get(:config, {}))
62
60
 
63
61
  # source interface specified
64
62
  # !! HAX !! HAX !! HAX !! HAX !! HAX !! HAX !! HAX !! HAX !! HAX !! HAX !!
@@ -91,7 +89,7 @@ module Onering
91
89
  end
92
90
 
93
91
  # set API connectivity details
94
- Onering::API.base_uri @_config.get(:url, DEFAULT_BASE)
92
+ Onering::API.base_uri Onering::Config.get(:url, DEFAULT_BASE)
95
93
 
96
94
  # add default parameters
97
95
  options.get('config.params',{}).each do |k,v|
@@ -111,7 +109,7 @@ module Onering
111
109
 
112
110
 
113
111
  def request(method, endpoint, options={})
114
- endpoint = [@_config.get(:path, DEFAULT_PATH).strip, endpoint.sub(/^\//,'')].join('/')
112
+ endpoint = [Onering::Config.get(:path, DEFAULT_PATH).strip, endpoint.sub(/^\//,'')].join('/')
115
113
 
116
114
  case (method.to_sym rescue method)
117
115
  when :post
@@ -191,47 +189,13 @@ module Onering
191
189
  end
192
190
  end
193
191
 
194
- def opt(name, default=nil)
195
- @_config.get(name, default)
196
- end
197
-
198
-
199
192
  def status()
200
193
  Onering::API.get("/").parsed_response
201
194
  end
202
195
 
203
-
204
-
205
- private
206
- # -----------------------------------------------------------------------------
207
- def _load_config(configfile, config={})
208
- if configfile.nil?
209
- configfile = []
210
- else
211
- # recursively grab all .yml files if directory is specified
212
- configfile = (File.directory?(configfile) ? Dir.glob(File.join(configfile, "**", "*.yml")).sort : [configfile])
213
- end
214
-
215
- # list all existing config files from least specific to most
216
- @_configfiles = (configfile + DEFAULT_OPTIONS_FILE).compact.select{|i|
217
- (File.exists?(File.expand_path(i)) rescue false)
218
- }.reverse
219
-
220
- # merge all config files with more-specific values overriding less-specific ones
221
- @_config = DEFAULT_CONFIG
222
- @_configfiles.each do |i|
223
- c = YAML.load(File.read(File.expand_path(i))) rescue {}
224
- @_config.deep_merge!(c)
225
- end
226
-
227
- # settings specified in the library override everything
228
- @_config.deep_merge!(config.compact) unless config.empty?
229
- end
230
-
231
-
232
196
  # -----------------------------------------------------------------------------
233
197
  def _setup_auth()
234
- type = @_config.get('authentication.type', :auto)
198
+ type = Onering::Config.get('authentication.type', :auto)
235
199
 
236
200
  case type.to_sym
237
201
  when :token
@@ -253,14 +217,14 @@ module Onering
253
217
  def _setup_auth_ssl()
254
218
  begin
255
219
  # get first keyfile found
256
- key = (([@_config.get('authentication.keyfile')] + DEFAULT_CLIENT_PEM).compact.select{|i|
220
+ key = (([Onering::Config.get('authentication.keyfile')] + DEFAULT_CLIENT_PEM).compact.select{|i|
257
221
  (File.exists?(File.expand_path(i)) rescue false)
258
222
  }).first
259
223
 
260
224
  # SSL client key not found, attempt autoregistration...
261
225
  if key.nil?
262
- if @_config.get('authentication.autoregister', true)
263
- validation_key = @_config.get('authentication.validation_keyfile', DEFAULT_VALIDATION_PEM)
226
+ if Onering::Config.get('authentication.autoregister', true)
227
+ validation_key = Onering::Config.get('authentication.validation_keyfile', DEFAULT_VALIDATION_PEM)
264
228
  validation_key = (File.expand_path(validation_key) rescue validation_key)
265
229
 
266
230
  # if validation key exists, autoregister
@@ -328,7 +292,7 @@ module Onering
328
292
  # -----------------------------------------------------------------------------
329
293
  def _setup_auth_token()
330
294
  # get first keyfile found
331
- key = @_config.get('authentication.key')
295
+ key = Onering::Config.get('authentication.key')
332
296
  raise Errors::AuthenticationMissing.new("Cannot find an API token") if key.nil?
333
297
 
334
298
  # set auth mechanism
@@ -5,6 +5,7 @@ module Onering
5
5
  @api = (Onering::CLI.connect(global.merge({
6
6
  :autoconnect => false
7
7
  })) rescue nil)
8
+
8
9
  @opts = ::Trollop::options do
9
10
  banner <<-EOS
10
11
  Generate a system report that can be saved or submitted to a Onering server
@@ -31,7 +32,7 @@ EOS
31
32
  report = Onering::Reporter.report().stringify_keys()
32
33
 
33
34
  # pull report overrides from the config file
34
- @api.opt('reporter.fields',{}).each do |key, value|
35
+ Onering::Config.get('reporter.fields',{}).each do |key, value|
35
36
  if value.is_a?(Hash)
36
37
  value.coalesce(key, nil, '.').each do |k,v|
37
38
  v = nil if ['null', '', '-'].include?(v.to_s.strip.chomp)
@@ -1,5 +1,5 @@
1
1
  module Onering
2
2
  module CLI
3
- VERSION = "0.0.77"
3
+ VERSION = "0.0.78"
4
4
  end
5
5
  end
@@ -0,0 +1,48 @@
1
+ require 'hashlib'
2
+
3
+ module Onering
4
+ class Config
5
+ class<<self
6
+ DEFAULT_CONFIG={}
7
+ DEFAULT_OPTIONS_FILE=["~/.onering/cli.yml", "/etc/onering/cli.yml"]
8
+
9
+ def load(configfile=nil, config={})
10
+ if configfile.nil?
11
+ configfile = []
12
+ else
13
+ # recursively grab all .yml files if directory is specified
14
+ configfile = (File.directory?(configfile) ? Dir.glob(File.join(configfile, "**", "*.yml")).sort : [configfile])
15
+ end
16
+
17
+ # list all existing config files from least specific to most
18
+ @_configfiles = (configfile + DEFAULT_OPTIONS_FILE).compact.select{|i|
19
+ (File.exists?(File.expand_path(i)) rescue false)
20
+ }.reverse
21
+
22
+ # merge all config files with more-specific values overriding less-specific ones
23
+ @_config ||= DEFAULT_CONFIG
24
+ @_configfiles.each do |i|
25
+ c = YAML.load(File.read(File.expand_path(i))) rescue {}
26
+ @_config.deep_merge!(c)
27
+ end
28
+
29
+ # settings specified in the library override everything
30
+ @_config.deep_merge!(config.compact) unless config.empty?
31
+
32
+ return @_config
33
+ end
34
+
35
+ def get(key, default=nil)
36
+ @_config.get(key, default)
37
+ end
38
+
39
+ def set(key, value)
40
+ @_config.set(key, value)
41
+ end
42
+
43
+ def unset(key)
44
+ @_config.unset(key)
45
+ end
46
+ end
47
+ end
48
+ end
@@ -31,16 +31,17 @@ module Onering
31
31
  @options = config
32
32
  @facter_path = DEFAULT_FACTER_PATH
33
33
 
34
- @path = [*@options[:plugin_path]]
34
+ @path = [*Onering::Config.get('reporter.plugin_path',[])]
35
35
  @path += DEFAULT_PLUGIN_PATH
36
36
 
37
37
  # add gem paths to the @path
38
- ([*@options[:plugin_gems]]+DEFAULT_PLUGIN_GEMNAMES).compact.each do |g|
38
+ ([*Onering::Config.get('reporter.plugin_gems',[])]+DEFAULT_PLUGIN_GEMNAMES).compact.each do |g|
39
39
  begin
40
40
  p = File.join(Util.gem_path(g), 'lib')
41
41
  @path << File.join(p, 'reporter')
42
42
  @facter_path << File.join(p, 'facter')
43
- rescue Gem::LoadError
43
+ rescue Gem::LoadError => e
44
+ STDERR.puts("Error loading gem: #{e.message}")
44
45
  next
45
46
  end
46
47
  end
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.77
4
+ version: 0.0.78
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: &13246140 !ruby/object:Gem::Requirement
16
+ requirement: &6409160 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: 1.7.2
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *13246140
24
+ version_requirements: *6409160
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: deep_merge
27
- requirement: &13245100 !ruby/object:Gem::Requirement
27
+ requirement: &6408420 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *13245100
35
+ version_requirements: *6408420
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: addressable
38
- requirement: &13244140 !ruby/object:Gem::Requirement
38
+ requirement: &6423780 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '0'
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *13244140
46
+ version_requirements: *6423780
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: httparty
49
- requirement: &13242580 !ruby/object:Gem::Requirement
49
+ requirement: &6422520 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: '0'
55
55
  type: :runtime
56
56
  prerelease: false
57
- version_requirements: *13242580
57
+ version_requirements: *6422520
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: hashlib
60
- requirement: &13226000 !ruby/object:Gem::Requirement
60
+ requirement: &6420980 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ! '>='
@@ -65,10 +65,10 @@ dependencies:
65
65
  version: 0.0.19
66
66
  type: :runtime
67
67
  prerelease: false
68
- version_requirements: *13226000
68
+ version_requirements: *6420980
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: multi_json
71
- requirement: &13223680 !ruby/object:Gem::Requirement
71
+ requirement: &6418720 !ruby/object:Gem::Requirement
72
72
  none: false
73
73
  requirements:
74
74
  - - ! '>='
@@ -76,10 +76,10 @@ dependencies:
76
76
  version: '0'
77
77
  type: :runtime
78
78
  prerelease: false
79
- version_requirements: *13223680
79
+ version_requirements: *6418720
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: rainbow
82
- requirement: &13220880 !ruby/object:Gem::Requirement
82
+ requirement: &6431820 !ruby/object:Gem::Requirement
83
83
  none: false
84
84
  requirements:
85
85
  - - ! '>='
@@ -87,10 +87,10 @@ dependencies:
87
87
  version: '0'
88
88
  type: :runtime
89
89
  prerelease: false
90
- version_requirements: *13220880
90
+ version_requirements: *6431820
91
91
  - !ruby/object:Gem::Dependency
92
92
  name: trollop
93
- requirement: &13218940 !ruby/object:Gem::Requirement
93
+ requirement: &6430940 !ruby/object:Gem::Requirement
94
94
  none: false
95
95
  requirements:
96
96
  - - ! '>='
@@ -98,7 +98,7 @@ dependencies:
98
98
  version: '0'
99
99
  type: :runtime
100
100
  prerelease: false
101
- version_requirements: *13218940
101
+ version_requirements: *6430940
102
102
  description: A Ruby wrapper for Onering
103
103
  email: ghetzel@outbrain.com
104
104
  executables:
@@ -108,6 +108,7 @@ extra_rdoc_files: []
108
108
  files:
109
109
  - lib/onering.rb
110
110
  - lib/onering/cli.rb
111
+ - lib/onering/config.rb
111
112
  - lib/onering/api.rb
112
113
  - lib/onering/util.rb
113
114
  - lib/onering/plugins/authentication.rb