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.
- data/bin/onering +3 -1
- data/lib/onering/api.rb +9 -45
- data/lib/onering/cli/reporter.rb +2 -1
- data/lib/onering/cli/version.rb +1 -1
- data/lib/onering/config.rb +48 -0
- data/lib/onering/plugins/reporter.rb +4 -3
- metadata +18 -17
data/bin/onering
CHANGED
@@ -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
|
data/lib/onering/api.rb
CHANGED
@@ -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
|
-
|
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
|
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 = [
|
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 =
|
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 = (([
|
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
|
263
|
-
validation_key =
|
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 =
|
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
|
data/lib/onering/cli/reporter.rb
CHANGED
@@ -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
|
-
|
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)
|
data/lib/onering/cli/version.rb
CHANGED
@@ -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 = [
|
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
|
-
([
|
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.
|
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: &
|
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: *
|
24
|
+
version_requirements: *6409160
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: deep_merge
|
27
|
-
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: *
|
35
|
+
version_requirements: *6408420
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: addressable
|
38
|
-
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: *
|
46
|
+
version_requirements: *6423780
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: httparty
|
49
|
-
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: *
|
57
|
+
version_requirements: *6422520
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: hashlib
|
60
|
-
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: *
|
68
|
+
version_requirements: *6420980
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: multi_json
|
71
|
-
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: *
|
79
|
+
version_requirements: *6418720
|
80
80
|
- !ruby/object:Gem::Dependency
|
81
81
|
name: rainbow
|
82
|
-
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: *
|
90
|
+
version_requirements: *6431820
|
91
91
|
- !ruby/object:Gem::Dependency
|
92
92
|
name: trollop
|
93
|
-
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: *
|
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
|