onering-client 0.2.3 → 0.2.4
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/lib/onering.rb +1 -1
- data/lib/onering/api.rb +1 -0
- data/lib/onering/cli/reporter.rb +7 -51
- data/lib/onering/plugins/reporter.rb +58 -0
- metadata +19 -19
data/lib/onering.rb
CHANGED
data/lib/onering/api.rb
CHANGED
data/lib/onering/cli/reporter.rb
CHANGED
@@ -4,8 +4,8 @@ module Onering
|
|
4
4
|
DEFAULT_CACHE_MAXAGE=600
|
5
5
|
|
6
6
|
def self.configure(global={})
|
7
|
-
|
8
|
-
@api = Onering::CLI.connect(
|
7
|
+
@global_opts = global
|
8
|
+
@api = Onering::CLI.connect(@global_opts.merge({
|
9
9
|
:autoconnect => false
|
10
10
|
}))
|
11
11
|
|
@@ -86,55 +86,11 @@ EOS
|
|
86
86
|
|
87
87
|
when :get
|
88
88
|
Onering::Logger.fatal!("Expected at least 1 parameter, got #{args.length}", "Onering::CLI::Report") unless args.length >= 1
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
# create an array with every component of the path prefixed with the @-symbol, then with
|
96
|
-
# the path as is.
|
97
|
-
#
|
98
|
-
# e.g.: onering report get metrics.disk.block
|
99
|
-
# -> value exists in the inventory as properties.metrics.disk.@block,
|
100
|
-
# but the user shouldn't need to know where that @-prefix is, so...
|
101
|
-
#
|
102
|
-
# Search for all of these, first non-nil value wins:
|
103
|
-
# * properties.metrics.disk.block
|
104
|
-
# * properties.@metrics.disk.block
|
105
|
-
# * properties.metrics.@disk.block
|
106
|
-
# * properties.metrics.disk.@block
|
107
|
-
# * metrics.disk.block
|
108
|
-
#
|
109
|
-
candidates = [(['properties']+parts).join('.')]
|
110
|
-
|
111
|
-
parts.each_index{|ix|
|
112
|
-
candidates << (['properties']+(ix == 0 ? [] : parts[0..(ix-1)]) + ["@#{parts[ix]}"] + parts[ix+1..-1]).join('.')
|
113
|
-
}.flatten()
|
114
|
-
|
115
|
-
rv = nil
|
116
|
-
|
117
|
-
# search for the key using science or something
|
118
|
-
candidates.each do |c|
|
119
|
-
rv = report.get(c)
|
120
|
-
break unless rv.nil?
|
121
|
-
end
|
122
|
-
|
123
|
-
# if we're still nil by this point, use the fallback value
|
124
|
-
rv = report.get(args[0], args[1]) if rv.nil?
|
125
|
-
|
126
|
-
# attempt to get the value remotely if not found locally
|
127
|
-
if rv.nil? and not @opts[:local]
|
128
|
-
hid = Onering::Util.fact(:hardwareid)
|
129
|
-
|
130
|
-
if not hid.nil?
|
131
|
-
Onering::Logger.debug("Getting remote value #{args[0]} for asset #{hid}")
|
132
|
-
@api.connect()
|
133
|
-
return @api.assets.get_field(hid, args[0], args[1])
|
134
|
-
end
|
135
|
-
end
|
136
|
-
|
137
|
-
return rv
|
89
|
+
return @_reporter.get(args[0], args[1], {
|
90
|
+
:data => report,
|
91
|
+
:api => @global_opts,
|
92
|
+
:local => @opts[:local]
|
93
|
+
})
|
138
94
|
end
|
139
95
|
end
|
140
96
|
|
@@ -188,6 +188,64 @@ module Onering
|
|
188
188
|
end
|
189
189
|
|
190
190
|
|
191
|
+
def get(field, default=nil, options={})
|
192
|
+
if options[:data].is_a?(Hash)
|
193
|
+
_report = options[:data]
|
194
|
+
else
|
195
|
+
_report = self.report(options)
|
196
|
+
end
|
197
|
+
|
198
|
+
# this is kinda ugly
|
199
|
+
# because we don't know which property might have an @-prefix, progressively
|
200
|
+
# search through all of them. first non-null match wins
|
201
|
+
parts = field.split('.')
|
202
|
+
|
203
|
+
# create an array with every component of the path prefixed with the @-symbol, then with
|
204
|
+
# the path as is.
|
205
|
+
#
|
206
|
+
# e.g.: onering report get metrics.disk.block
|
207
|
+
# -> value exists in the inventory as properties.metrics.disk.@block,
|
208
|
+
# but the user shouldn't need to know where that @-prefix is, so...
|
209
|
+
#
|
210
|
+
# Search for all of these, first non-nil value wins:
|
211
|
+
# * properties.metrics.disk.block
|
212
|
+
# * properties.@metrics.disk.block
|
213
|
+
# * properties.metrics.@disk.block
|
214
|
+
# * properties.metrics.disk.@block
|
215
|
+
# * metrics.disk.block
|
216
|
+
#
|
217
|
+
candidates = [(['properties']+parts).join('.')]
|
218
|
+
|
219
|
+
parts.each_index{|ix|
|
220
|
+
candidates << (['properties']+(ix == 0 ? [] : parts[0..(ix-1)]) + ["@#{parts[ix]}"] + parts[ix+1..-1]).join('.')
|
221
|
+
}.flatten()
|
222
|
+
|
223
|
+
rv = nil
|
224
|
+
|
225
|
+
# search for the key using science or something
|
226
|
+
candidates.each do |c|
|
227
|
+
rv = _report.get(c)
|
228
|
+
break unless rv.nil?
|
229
|
+
end
|
230
|
+
|
231
|
+
# if we're still nil by this point, use the fallback value
|
232
|
+
rv = _report.get(field) if rv.nil?
|
233
|
+
|
234
|
+
# attempt to get the value remotely if not found locally
|
235
|
+
if rv.nil? and not options[:local]
|
236
|
+
hid = Onering::Util.fact(:hardwareid)
|
237
|
+
|
238
|
+
if not hid.nil?
|
239
|
+
Onering::Logger.debug("Getting remote value #{field} for asset #{hid}")
|
240
|
+
return Onering::API.new(options[:api]).assets.get_field(hid, field, default)
|
241
|
+
end
|
242
|
+
end
|
243
|
+
|
244
|
+
return default if rv.nil?
|
245
|
+
return rv
|
246
|
+
end
|
247
|
+
|
248
|
+
|
191
249
|
def _generated_report()
|
192
250
|
Timeout.timeout((@options[:timeout] || 60).to_i) do
|
193
251
|
hostname = (Facter.value('fqdn') rescue %x{hostname -f}.strip.chomp)
|
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.2.
|
4
|
+
version: 0.2.4
|
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: &16020480 !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: *16020480
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: deep_merge
|
27
|
-
requirement: &
|
27
|
+
requirement: &16019920 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - =
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: 1.0.0
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *16019920
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: addressable
|
38
|
-
requirement: &
|
38
|
+
requirement: &16019340 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - =
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: 2.3.5
|
44
44
|
type: :runtime
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *16019340
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: httparty
|
49
|
-
requirement: &
|
49
|
+
requirement: &16018800 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - =
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: 0.11.0
|
55
55
|
type: :runtime
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *16018800
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: hashlib
|
60
|
-
requirement: &
|
60
|
+
requirement: &16018240 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ! '>='
|
@@ -65,10 +65,10 @@ dependencies:
|
|
65
65
|
version: 0.0.35
|
66
66
|
type: :runtime
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *16018240
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: multi_json
|
71
|
-
requirement: &
|
71
|
+
requirement: &16017460 !ruby/object:Gem::Requirement
|
72
72
|
none: false
|
73
73
|
requirements:
|
74
74
|
- - =
|
@@ -76,10 +76,10 @@ dependencies:
|
|
76
76
|
version: 1.7.9
|
77
77
|
type: :runtime
|
78
78
|
prerelease: false
|
79
|
-
version_requirements: *
|
79
|
+
version_requirements: *16017460
|
80
80
|
- !ruby/object:Gem::Dependency
|
81
81
|
name: rainbow
|
82
|
-
requirement: &
|
82
|
+
requirement: &16016740 !ruby/object:Gem::Requirement
|
83
83
|
none: false
|
84
84
|
requirements:
|
85
85
|
- - <=
|
@@ -87,10 +87,10 @@ dependencies:
|
|
87
87
|
version: 1.1.4
|
88
88
|
type: :runtime
|
89
89
|
prerelease: false
|
90
|
-
version_requirements: *
|
90
|
+
version_requirements: *16016740
|
91
91
|
- !ruby/object:Gem::Dependency
|
92
92
|
name: trollop
|
93
|
-
requirement: &
|
93
|
+
requirement: &16016160 !ruby/object:Gem::Requirement
|
94
94
|
none: false
|
95
95
|
requirements:
|
96
96
|
- - =
|
@@ -98,10 +98,10 @@ dependencies:
|
|
98
98
|
version: '2.0'
|
99
99
|
type: :runtime
|
100
100
|
prerelease: false
|
101
|
-
version_requirements: *
|
101
|
+
version_requirements: *16016160
|
102
102
|
- !ruby/object:Gem::Dependency
|
103
103
|
name: xml-simple
|
104
|
-
requirement: &
|
104
|
+
requirement: &16015680 !ruby/object:Gem::Requirement
|
105
105
|
none: false
|
106
106
|
requirements:
|
107
107
|
- - =
|
@@ -109,7 +109,7 @@ dependencies:
|
|
109
109
|
version: 1.1.2
|
110
110
|
type: :runtime
|
111
111
|
prerelease: false
|
112
|
-
version_requirements: *
|
112
|
+
version_requirements: *16015680
|
113
113
|
description: A Ruby wrapper for Onering
|
114
114
|
email: ghetzel@outbrain.com
|
115
115
|
executables:
|