onering-client 0.2.1 → 0.2.3
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 -3
- data/lib/onering.rb +1 -1
- data/lib/onering/cli.rb +24 -0
- data/lib/onering/cli/assets.rb +1 -1
- data/lib/onering/cli/automation.rb +1 -1
- data/lib/onering/cli/call.rb +1 -1
- data/lib/onering/cli/devices.rb +1 -1
- data/lib/onering/cli/fact.rb +1 -1
- data/lib/onering/cli/reporter.rb +2 -17
- data/lib/onering/plugins/assets.rb +1 -1
- data/lib/onering/plugins/reporter.rb +22 -5
- metadata +19 -19
data/bin/onering
CHANGED
@@ -5,7 +5,7 @@ require 'hashlib'
|
|
5
5
|
require 'rainbow'
|
6
6
|
require 'pp'
|
7
7
|
|
8
|
-
plugins = Onering::CLI.
|
8
|
+
plugins = Onering::CLI::Plugin.registered_plugins.collect{|i| i.name.split('::').last.downcase }
|
9
9
|
exclude_plugins = %w{devices}
|
10
10
|
|
11
11
|
global = Trollop::options do
|
@@ -25,7 +25,7 @@ EOS
|
|
25
25
|
opt :path, "The base path to prepend to all requests (default: /api)", :type => :string
|
26
26
|
opt :source, "Specify the source IP address to use (i.e. which network interface the request should originate from)", :short => '-I', :type => :string
|
27
27
|
opt :param, "Additional query string parameters to include with the request in the format FIELD=VALUE. Can be specified multiple times.", :short => '-p', :type => :string, :multi => true
|
28
|
-
opt :format, "The output format for return values (i.e.: json, yaml, text)", :
|
28
|
+
opt :format, "The output format for return values (i.e.: json, yaml, text)", :short => '-t', :type => :string
|
29
29
|
opt :sslkey, "Location of the SSL client key to use for authentication", :short => '-c', :type => :string
|
30
30
|
opt :nosslverify, "Disable verification of the server SSL certificate", :type => :boolean
|
31
31
|
opt :apikey, "The API token to use for authentication", :short => '-k', :type => :string
|
@@ -52,7 +52,7 @@ if plugins.include?(plugin)
|
|
52
52
|
|
53
53
|
Onering::Logger.debug("Executing plugin #{plugin}\#run()", $0)
|
54
54
|
rv = plugin.run(ARGV)
|
55
|
-
Onering::CLI.output(rv, global[:format])
|
55
|
+
Onering::CLI.output(rv, (global[:format] || plugin.default_format(rv, ARGV) || 'text'))
|
56
56
|
|
57
57
|
rescue Onering::API::Errors::Exception => e
|
58
58
|
Onering::Logger.fatal(e.message, e.class.name.split('::').last) rescue nil
|
data/lib/onering.rb
CHANGED
data/lib/onering/cli.rb
CHANGED
@@ -5,6 +5,30 @@ module Onering
|
|
5
5
|
|
6
6
|
@_args = {}
|
7
7
|
|
8
|
+
class Plugin
|
9
|
+
def self.default_format(output_value=nil, args=nil)
|
10
|
+
if output_value.is_a?(Hash) or
|
11
|
+
(output_value.is_a?(Array) and output_value.compact.first.is_a?(Hash))
|
12
|
+
then
|
13
|
+
return 'yaml'
|
14
|
+
end
|
15
|
+
|
16
|
+
return nil
|
17
|
+
|
18
|
+
rescue Exception
|
19
|
+
return nil
|
20
|
+
end
|
21
|
+
|
22
|
+
def self.inherited(subsclass)
|
23
|
+
@_subclasses ||= []
|
24
|
+
@_subclasses << subsclass unless @_subclasses.include?(subsclass)
|
25
|
+
end
|
26
|
+
|
27
|
+
def self.registered_plugins()
|
28
|
+
@_subclasses || []
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
8
32
|
def self.connect(cliargs)
|
9
33
|
@_args = cliargs
|
10
34
|
|
data/lib/onering/cli/assets.rb
CHANGED
data/lib/onering/cli/call.rb
CHANGED
data/lib/onering/cli/devices.rb
CHANGED
data/lib/onering/cli/fact.rb
CHANGED
data/lib/onering/cli/reporter.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
module Onering
|
2
2
|
module CLI
|
3
|
-
|
3
|
+
class Report < Plugin
|
4
4
|
DEFAULT_CACHE_MAXAGE=600
|
5
5
|
|
6
6
|
def self.configure(global={})
|
@@ -122,7 +122,7 @@ EOS
|
|
122
122
|
|
123
123
|
# if we're still nil by this point, use the fallback value
|
124
124
|
rv = report.get(args[0], args[1]) if rv.nil?
|
125
|
-
|
125
|
+
|
126
126
|
# attempt to get the value remotely if not found locally
|
127
127
|
if rv.nil? and not @opts[:local]
|
128
128
|
hid = Onering::Util.fact(:hardwareid)
|
@@ -155,21 +155,6 @@ EOS
|
|
155
155
|
Onering::Logger.fatal("Reporter not configured. This is a bug", "Onering::CLI::Report") if @_reporter.nil?
|
156
156
|
report = @_reporter.report(options).stringify_keys()
|
157
157
|
|
158
|
-
# pull report overrides from the config file
|
159
|
-
Onering::Config.get('reporter.fields',{}).each do |key, value|
|
160
|
-
Onering::Logger.debug("Override value #{key} from config file", "Onering::CLI::Report")
|
161
|
-
|
162
|
-
if value.is_a?(Hash)
|
163
|
-
value.coalesce(key, nil, '.').each do |k,v|
|
164
|
-
v = nil if ['null', '', '-'].include?(v.to_s.strip.chomp)
|
165
|
-
report = report.set(k, v)
|
166
|
-
end
|
167
|
-
else
|
168
|
-
value = nil if ['null', '', '-'].include?(value.to_s.strip.chomp)
|
169
|
-
report = report.set(key, value)
|
170
|
-
end
|
171
|
-
end
|
172
|
-
|
173
158
|
return report
|
174
159
|
rescue Timeout::Error
|
175
160
|
Onering::Logger.fatal!("Report took too long to generate, exiting...", "Onering::CLI::Report")
|
@@ -8,7 +8,7 @@ module Onering
|
|
8
8
|
def get_field(id, field, fallback=nil)
|
9
9
|
rv = get("/devices/#{id}/get/#{field}")
|
10
10
|
rv = (rv.parsed_response rescue rv.response.body)
|
11
|
-
return fallback if rv.nil? or rv.strip.chomp.empty?
|
11
|
+
return fallback if rv.nil? or (rv.is_a?(String) and rv.strip.chomp.empty?)
|
12
12
|
return rv
|
13
13
|
end
|
14
14
|
|
@@ -112,9 +112,9 @@ module Onering
|
|
112
112
|
def load_plugins()
|
113
113
|
|
114
114
|
# load plugins from @path
|
115
|
-
@path.compact.each do |root|
|
115
|
+
@path.compact.uniq.each do |root|
|
116
116
|
begin
|
117
|
-
Dir["#{root}/*"].each do |directory|
|
117
|
+
Dir["#{root}/*"].uniq.each do |directory|
|
118
118
|
|
119
119
|
# only process top-level directories
|
120
120
|
if File.directory?(directory)
|
@@ -134,6 +134,7 @@ module Onering
|
|
134
134
|
begin
|
135
135
|
Timeout.timeout((@options[:plugin_timeout] || 10).to_i) do
|
136
136
|
Onering::Logger.debug("Loading plugin #{directory}/#{plugin}.rb", "Onering::Reporter")
|
137
|
+
Onering::Logger.debug3("Properties will be set in report object #{@_report.object_id}", "Onering::Reporter")
|
137
138
|
eval(File.read("#{directory}/#{plugin}.rb"), PluginDelegate.new(self, {
|
138
139
|
:plugin => plugin,
|
139
140
|
:path => "#{directory}/#{plugin}.rb"
|
@@ -162,14 +163,14 @@ module Onering
|
|
162
163
|
|
163
164
|
def property(name, value=nil)
|
164
165
|
unless value.nil?
|
165
|
-
Onering::Logger.debug3("-> Set property #{name.to_s} (was: #{@_report[:properties].get(name.to_s,'null')})", "Onering::Reporter")
|
166
|
+
Onering::Logger.debug3("-> Set property #{name.to_s} (was: #{@_report[:properties].get(name.to_s,'null')}) in object #{@_report.object_id}", "Onering::Reporter")
|
166
167
|
@_report[:properties].set(name.to_s, value)
|
167
168
|
end
|
168
169
|
end
|
169
170
|
|
170
171
|
def report(options={})
|
171
172
|
options = @options.merge(options)
|
172
|
-
@id = (@options[:id] || Onering::Util.fact('hardwareid', nil))
|
173
|
+
@id = (@options[:id] || Onering::Config.get('id') || Onering::Config.get('reporter.fields.id') || Onering::Util.fact('hardwareid', nil))
|
173
174
|
|
174
175
|
if not @id.nil?
|
175
176
|
if options[:nocache]
|
@@ -180,7 +181,7 @@ module Onering
|
|
180
181
|
return rv
|
181
182
|
end
|
182
183
|
else
|
183
|
-
Onering::Logger.fatal!("Cannot generate report without
|
184
|
+
Onering::Logger.fatal!("Cannot generate report without an ID", "Onering::Reporter")
|
184
185
|
end
|
185
186
|
|
186
187
|
return {}
|
@@ -204,6 +205,22 @@ module Onering
|
|
204
205
|
# loads plugins and populates @_report
|
205
206
|
load_plugins()
|
206
207
|
|
208
|
+
# pull report field overrides from the config file
|
209
|
+
Onering::Config.get('reporter.fields',{}).each do |key, value|
|
210
|
+
Onering::Logger.debug("Override value #{key} from config file", "Onering::CLI::Report")
|
211
|
+
|
212
|
+
if value.is_a?(Hash)
|
213
|
+
value.coalesce(key, nil, '.').each do |k,v|
|
214
|
+
v = nil if ['null', '', '-'].include?(v.to_s.strip.chomp)
|
215
|
+
@_report = @_report.set(k, v)
|
216
|
+
end
|
217
|
+
else
|
218
|
+
value = nil if ['null', '', '-'].include?(value.to_s.strip.chomp)
|
219
|
+
@_report = @_report.set(key, value)
|
220
|
+
end
|
221
|
+
end
|
222
|
+
|
223
|
+
# return final report
|
207
224
|
return @_report.stringify_keys()
|
208
225
|
end
|
209
226
|
|
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.3
|
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: &25261540 !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: *25261540
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: deep_merge
|
27
|
-
requirement: &
|
27
|
+
requirement: &25261040 !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: *25261040
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: addressable
|
38
|
-
requirement: &
|
38
|
+
requirement: &25260460 !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: *25260460
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: httparty
|
49
|
-
requirement: &
|
49
|
+
requirement: &25259960 !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: *25259960
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: hashlib
|
60
|
-
requirement: &
|
60
|
+
requirement: &25259500 !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: *25259500
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: multi_json
|
71
|
-
requirement: &
|
71
|
+
requirement: &25258920 !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: *25258920
|
80
80
|
- !ruby/object:Gem::Dependency
|
81
81
|
name: rainbow
|
82
|
-
requirement: &
|
82
|
+
requirement: &25258480 !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: *25258480
|
91
91
|
- !ruby/object:Gem::Dependency
|
92
92
|
name: trollop
|
93
|
-
requirement: &
|
93
|
+
requirement: &25258000 !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: *25258000
|
102
102
|
- !ruby/object:Gem::Dependency
|
103
103
|
name: xml-simple
|
104
|
-
requirement: &
|
104
|
+
requirement: &25257520 !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: *25257520
|
113
113
|
description: A Ruby wrapper for Onering
|
114
114
|
email: ghetzel@outbrain.com
|
115
115
|
executables:
|