onering-client 0.2.3 → 0.2.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -2,7 +2,7 @@ $: << File.expand_path(File.dirname(__FILE__))
2
2
 
3
3
  module Onering
4
4
  module Client
5
- VERSION = "0.2.3"
5
+ VERSION = "0.2.4"
6
6
 
7
7
  class Error < Exception; end
8
8
  class FatalError < Error; end
@@ -41,6 +41,7 @@ module Onering
41
41
 
42
42
  def initialize(options={})
43
43
  @_plugins = {}
44
+ options = {} if options.nil?
44
45
  @_connection_options = options
45
46
 
46
47
  # load and merge all config file sources
@@ -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(global.merge({
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
- # this is kinda ugly
91
- # because we don't know which property might have an @-prefix, progressively
92
- # search through all of them. first non-null match wins
93
- parts = args[0].split('.')
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.3
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: &25261540 !ruby/object:Gem::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: *25261540
24
+ version_requirements: *16020480
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: deep_merge
27
- requirement: &25261040 !ruby/object:Gem::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: *25261040
35
+ version_requirements: *16019920
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: addressable
38
- requirement: &25260460 !ruby/object:Gem::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: *25260460
46
+ version_requirements: *16019340
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: httparty
49
- requirement: &25259960 !ruby/object:Gem::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: *25259960
57
+ version_requirements: *16018800
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: hashlib
60
- requirement: &25259500 !ruby/object:Gem::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: *25259500
68
+ version_requirements: *16018240
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: multi_json
71
- requirement: &25258920 !ruby/object:Gem::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: *25258920
79
+ version_requirements: *16017460
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: rainbow
82
- requirement: &25258480 !ruby/object:Gem::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: *25258480
90
+ version_requirements: *16016740
91
91
  - !ruby/object:Gem::Dependency
92
92
  name: trollop
93
- requirement: &25258000 !ruby/object:Gem::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: *25258000
101
+ version_requirements: *16016160
102
102
  - !ruby/object:Gem::Dependency
103
103
  name: xml-simple
104
- requirement: &25257520 !ruby/object:Gem::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: *25257520
112
+ version_requirements: *16015680
113
113
  description: A Ruby wrapper for Onering
114
114
  email: ghetzel@outbrain.com
115
115
  executables: