onering-client 0.0.77 → 0.0.78

Sign up to get free protection for your applications and to get access to all the features.
@@ -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