ohai 18.0.26 → 18.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (168) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +28 -28
  3. data/LICENSE +201 -201
  4. data/bin/ohai +25 -25
  5. data/lib/ohai/application.rb +189 -189
  6. data/lib/ohai/common/dmi.rb +167 -167
  7. data/lib/ohai/config.rb +51 -51
  8. data/lib/ohai/dsl/plugin/versionvii.rb +203 -203
  9. data/lib/ohai/dsl/plugin.rb +232 -232
  10. data/lib/ohai/dsl.rb +22 -22
  11. data/lib/ohai/exception.rb +36 -36
  12. data/lib/ohai/hints.rb +68 -68
  13. data/lib/ohai/loader.rb +178 -178
  14. data/lib/ohai/log.rb +34 -34
  15. data/lib/ohai/mash.rb +22 -22
  16. data/lib/ohai/mixin/alibaba_metadata.rb +86 -86
  17. data/lib/ohai/mixin/azure_metadata.rb +111 -111
  18. data/lib/ohai/mixin/chef_utils_wiring.rb +52 -52
  19. data/lib/ohai/mixin/command.rb +4 -4
  20. data/lib/ohai/mixin/constant_helper.rb +55 -55
  21. data/lib/ohai/mixin/dmi_decode.rb +54 -54
  22. data/lib/ohai/mixin/do_metadata.rb +48 -48
  23. data/lib/ohai/mixin/ec2_metadata.rb +256 -256
  24. data/lib/ohai/mixin/gce_metadata.rb +83 -83
  25. data/lib/ohai/mixin/http_helper.rb +64 -64
  26. data/lib/ohai/mixin/network_helper.rb +65 -65
  27. data/lib/ohai/mixin/oci_metadata.rb +69 -0
  28. data/lib/ohai/mixin/os.rb +128 -128
  29. data/lib/ohai/mixin/scaleway_metadata.rb +51 -51
  30. data/lib/ohai/mixin/seconds_to_human.rb +52 -52
  31. data/lib/ohai/mixin/shell_out.rb +51 -51
  32. data/lib/ohai/mixin/softlayer_metadata.rb +74 -74
  33. data/lib/ohai/mixin/string.rb +31 -31
  34. data/lib/ohai/mixin/train_helpers.rb +36 -36
  35. data/lib/ohai/mixin/which.rb +39 -39
  36. data/lib/ohai/plugin_config.rb +47 -47
  37. data/lib/ohai/plugins/aix/kernel.rb +50 -50
  38. data/lib/ohai/plugins/aix/memory.rb +37 -37
  39. data/lib/ohai/plugins/aix/network.rb +142 -142
  40. data/lib/ohai/plugins/aix/platform.rb +30 -30
  41. data/lib/ohai/plugins/aix/uptime.rb +54 -54
  42. data/lib/ohai/plugins/aix/virtualization.rb +154 -154
  43. data/lib/ohai/plugins/alibaba.rb +72 -72
  44. data/lib/ohai/plugins/azure.rb +154 -154
  45. data/lib/ohai/plugins/bsd/virtualization.rb +121 -121
  46. data/lib/ohai/plugins/c.rb +178 -178
  47. data/lib/ohai/plugins/chef.rb +50 -50
  48. data/lib/ohai/plugins/cloud.rb +379 -357
  49. data/lib/ohai/plugins/command.rb +26 -26
  50. data/lib/ohai/plugins/cpu.rb +635 -635
  51. data/lib/ohai/plugins/darwin/hardware.rb +99 -99
  52. data/lib/ohai/plugins/darwin/memory.rb +62 -62
  53. data/lib/ohai/plugins/darwin/network.rb +207 -207
  54. data/lib/ohai/plugins/darwin/platform.rb +38 -38
  55. data/lib/ohai/plugins/darwin/virtualization.rb +90 -93
  56. data/lib/ohai/plugins/digital_ocean.rb +67 -67
  57. data/lib/ohai/plugins/dmi.rb +134 -134
  58. data/lib/ohai/plugins/docker.rb +58 -58
  59. data/lib/ohai/plugins/dragonflybsd/memory.rb +60 -60
  60. data/lib/ohai/plugins/dragonflybsd/network.rb +128 -128
  61. data/lib/ohai/plugins/dragonflybsd/platform.rb +28 -28
  62. data/lib/ohai/plugins/ec2.rb +148 -148
  63. data/lib/ohai/plugins/elixir.rb +36 -36
  64. data/lib/ohai/plugins/erlang.rb +60 -60
  65. data/lib/ohai/plugins/eucalyptus.rb +86 -86
  66. data/lib/ohai/plugins/filesystem.rb +751 -751
  67. data/lib/ohai/plugins/fips.rb +36 -36
  68. data/lib/ohai/plugins/freebsd/memory.rb +60 -60
  69. data/lib/ohai/plugins/freebsd/network.rb +128 -128
  70. data/lib/ohai/plugins/freebsd/platform.rb +28 -28
  71. data/lib/ohai/plugins/gce.rb +89 -89
  72. data/lib/ohai/plugins/go.rb +34 -34
  73. data/lib/ohai/plugins/groovy.rb +38 -38
  74. data/lib/ohai/plugins/grub2.rb +40 -40
  75. data/lib/ohai/plugins/habitat.rb +73 -73
  76. data/lib/ohai/plugins/haskell.rb +96 -96
  77. data/lib/ohai/plugins/hostname.rb +133 -133
  78. data/lib/ohai/plugins/init_package.rb +26 -26
  79. data/lib/ohai/plugins/java.rb +78 -78
  80. data/lib/ohai/plugins/kernel.rb +292 -292
  81. data/lib/ohai/plugins/keys.rb +27 -27
  82. data/lib/ohai/plugins/languages.rb +26 -26
  83. data/lib/ohai/plugins/libvirt.rb +114 -114
  84. data/lib/ohai/plugins/linode.rb +73 -73
  85. data/lib/ohai/plugins/linux/block_device.rb +48 -48
  86. data/lib/ohai/plugins/linux/hostnamectl.rb +34 -34
  87. data/lib/ohai/plugins/linux/interrupts.rb +84 -84
  88. data/lib/ohai/plugins/linux/ipc.rb +52 -52
  89. data/lib/ohai/plugins/linux/livepatch.rb +38 -38
  90. data/lib/ohai/plugins/linux/lsb.rb +46 -46
  91. data/lib/ohai/plugins/linux/lspci.rb +76 -76
  92. data/lib/ohai/plugins/linux/machineid.rb +36 -36
  93. data/lib/ohai/plugins/linux/mdadm.rb +120 -120
  94. data/lib/ohai/plugins/linux/memory.rb +106 -106
  95. data/lib/ohai/plugins/linux/network.rb +879 -879
  96. data/lib/ohai/plugins/linux/os_release.rb +38 -38
  97. data/lib/ohai/plugins/linux/platform.rb +314 -314
  98. data/lib/ohai/plugins/linux/selinux.rb +69 -69
  99. data/lib/ohai/plugins/linux/sessions.rb +54 -54
  100. data/lib/ohai/plugins/linux/sysctl.rb +39 -39
  101. data/lib/ohai/plugins/linux/systemd_paths.rb +36 -36
  102. data/lib/ohai/plugins/linux/tc.rb +61 -61
  103. data/lib/ohai/plugins/linux/virtualization.rb +300 -300
  104. data/lib/ohai/plugins/lua.rb +39 -39
  105. data/lib/ohai/plugins/mono.rb +50 -50
  106. data/lib/ohai/plugins/netbsd/memory.rb +99 -99
  107. data/lib/ohai/plugins/netbsd/network.rb +122 -122
  108. data/lib/ohai/plugins/netbsd/platform.rb +28 -28
  109. data/lib/ohai/plugins/network.rb +186 -186
  110. data/lib/ohai/plugins/nodejs.rb +40 -40
  111. data/lib/ohai/plugins/oci.rb +94 -0
  112. data/lib/ohai/plugins/ohai.rb +29 -29
  113. data/lib/ohai/plugins/ohai_time.rb +26 -26
  114. data/lib/ohai/plugins/openbsd/memory.rb +99 -99
  115. data/lib/ohai/plugins/openbsd/network.rb +122 -122
  116. data/lib/ohai/plugins/openbsd/platform.rb +28 -28
  117. data/lib/ohai/plugins/openstack.rb +84 -84
  118. data/lib/ohai/plugins/os.rb +55 -55
  119. data/lib/ohai/plugins/packages.rb +234 -234
  120. data/lib/ohai/plugins/passwd.rb +104 -104
  121. data/lib/ohai/plugins/perl.rb +45 -45
  122. data/lib/ohai/plugins/php.rb +52 -52
  123. data/lib/ohai/plugins/platform.rb +29 -29
  124. data/lib/ohai/plugins/powershell.rb +82 -82
  125. data/lib/ohai/plugins/ps.rb +35 -35
  126. data/lib/ohai/plugins/python.rb +43 -43
  127. data/lib/ohai/plugins/rackspace.rb +177 -177
  128. data/lib/ohai/plugins/root_group.rb +41 -41
  129. data/lib/ohai/plugins/rpm.rb +121 -121
  130. data/lib/ohai/plugins/ruby.rb +66 -66
  131. data/lib/ohai/plugins/rust.rb +34 -34
  132. data/lib/ohai/plugins/scala.rb +38 -38
  133. data/lib/ohai/plugins/scaleway.rb +58 -58
  134. data/lib/ohai/plugins/scsi.rb +52 -52
  135. data/lib/ohai/plugins/shard.rb +142 -142
  136. data/lib/ohai/plugins/shells.rb +32 -32
  137. data/lib/ohai/plugins/softlayer.rb +48 -48
  138. data/lib/ohai/plugins/solaris2/dmi.rb +191 -191
  139. data/lib/ohai/plugins/solaris2/memory.rb +32 -32
  140. data/lib/ohai/plugins/solaris2/network.rb +192 -192
  141. data/lib/ohai/plugins/solaris2/platform.rb +58 -58
  142. data/lib/ohai/plugins/solaris2/virtualization.rb +90 -90
  143. data/lib/ohai/plugins/ssh_host_key.rb +84 -84
  144. data/lib/ohai/plugins/sysconf.rb +46 -46
  145. data/lib/ohai/plugins/timezone.rb +45 -25
  146. data/lib/ohai/plugins/train.rb +35 -35
  147. data/lib/ohai/plugins/uptime.rb +95 -95
  148. data/lib/ohai/plugins/virtualbox.rb +197 -197
  149. data/lib/ohai/plugins/vmware.rb +109 -94
  150. data/lib/ohai/plugins/windows/dmi.rb +95 -95
  151. data/lib/ohai/plugins/windows/drivers.rb +52 -52
  152. data/lib/ohai/plugins/windows/memory.rb +39 -39
  153. data/lib/ohai/plugins/windows/network.rb +222 -222
  154. data/lib/ohai/plugins/windows/platform.rb +34 -34
  155. data/lib/ohai/plugins/windows/system_enclosure.rb +29 -29
  156. data/lib/ohai/plugins/windows/virtualization.rb +45 -45
  157. data/lib/ohai/plugins/zpools.rb +94 -94
  158. data/lib/ohai/provides_map.rb +208 -208
  159. data/lib/ohai/runner.rb +128 -128
  160. data/lib/ohai/system.rb +258 -258
  161. data/lib/ohai/train_transport.rb +29 -29
  162. data/lib/ohai/util/file_helper.rb +6 -6
  163. data/lib/ohai/util/ip_helper.rb +56 -56
  164. data/lib/ohai/util/win32.rb +47 -47
  165. data/lib/ohai/version.rb +23 -23
  166. data/lib/ohai.rb +23 -23
  167. data/ohai.gemspec +35 -35
  168. metadata +5 -3
@@ -1,232 +1,232 @@
1
- # frozen_string_literal: true
2
- #
3
- # Author:: Adam Jacob (<adam@chef.io>)
4
- # Author:: Claire McQuin (<claire@chef.io>)
5
- # Copyright:: Copyright (c) Chef Software Inc.
6
- # License:: Apache License, Version 2.0
7
- #
8
- # Licensed under the Apache License, Version 2.0 (the "License");
9
- # you may not use this file except in compliance with the License.
10
- # You may obtain a copy of the License at
11
- #
12
- # http://www.apache.org/licenses/LICENSE-2.0
13
- #
14
- # Unless required by applicable law or agreed to in writing, software
15
- # distributed under the License is distributed on an "AS IS" BASIS,
16
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
17
- # implied.
18
- # See the License for the specific language governing permissions and
19
- # limitations under the License.
20
- #
21
-
22
- require_relative "../mixin/os"
23
- require_relative "../mixin/shell_out"
24
- require_relative "../mixin/seconds_to_human"
25
- require_relative "../mixin/which"
26
- require_relative "../mixin/train_helpers"
27
- require_relative "../hints"
28
-
29
- module Ohai
30
-
31
- # For plugin namespacing
32
- module NamedPlugin
33
-
34
- # Is the plugin a Symbol starting with a capital letter that has no underscores
35
- #
36
- # @param name [String] the plugin name
37
- # @return [Boolean]
38
- def self.valid_name?(name)
39
- name.is_a?(Symbol) && name.to_s.match(/^[^A-Z]|_/).nil?
40
- end
41
-
42
- # @return [Boolean]
43
- def self.strict_const_defined?(const)
44
- const_defined?(const, false)
45
- end
46
- end
47
-
48
- # @param name [String]
49
- def self.plugin(name, &block)
50
- raise Ohai::Exceptions::InvalidPluginName, "#{name} is not a valid plugin name. A valid plugin name is a symbol which begins with a capital letter and contains no underscores" unless NamedPlugin.valid_name?(name)
51
-
52
- plugin = nil
53
-
54
- # avoid already initialized constant warnings if already defined
55
- if NamedPlugin.strict_const_defined?(name)
56
- plugin = NamedPlugin.const_get(name)
57
- plugin.class_eval(&block)
58
- else
59
- klass = Class.new(DSL::Plugin::VersionVII, &block)
60
- plugin = NamedPlugin.const_set(name, klass)
61
- end
62
-
63
- plugin
64
- end
65
-
66
- # Cross platform /dev/null to support testability
67
- #
68
- # @return [String]
69
- def self.dev_null
70
- if RUBY_PLATFORM.match?(/mswin|mingw|windows/)
71
- "NUL"
72
- else
73
- "/dev/null"
74
- end
75
- end
76
-
77
- # Extracted abs_path to support testability:
78
- # This method gets overridden at test time, to force the shell to check
79
- # ohai/spec/unit/path/original/absolute/path/to/exe
80
- def self.abs_path( abs_path )
81
- abs_path
82
- end
83
-
84
- module DSL
85
- class Plugin
86
-
87
- include Ohai::Mixin::OS
88
- include Ohai::Mixin::ShellOut
89
- include Ohai::Mixin::SecondsToHuman
90
- include Ohai::Mixin::Which
91
- include Ohai::Mixin::TrainHelpers
92
-
93
- attr_reader :data
94
- attr_reader :failed
95
- attr_reader :logger
96
- attr_accessor :transport_connection
97
-
98
- def initialize(data, logger)
99
- @data = data
100
- @logger = logger.with_child({ subsystem: "plugin", plugin: name })
101
- @has_run = false
102
- @failed = false
103
- end
104
-
105
- def target_mode?
106
- !!@transport_connection
107
- end
108
-
109
- def run
110
- @has_run = true
111
-
112
- if Ohai.config[:disabled_plugins].include?(name)
113
- logger.trace("Skipping disabled plugin #{name}")
114
- else
115
- run_plugin
116
- end
117
- end
118
-
119
- def has_run?
120
- @has_run
121
- end
122
-
123
- def reset!
124
- @has_run = false
125
- end
126
-
127
- def [](key)
128
- @data[key]
129
- end
130
-
131
- def []=(key, value)
132
- @data[key] = value
133
- end
134
-
135
- def each(&block)
136
- @data.each do |key, value|
137
- yield(key, value)
138
- end
139
- end
140
-
141
- def has_key?(name)
142
- @data.key?(name)
143
- end
144
-
145
- def attribute?(name, *keys)
146
- !safe_get_attribute(name, *keys).nil?
147
- end
148
-
149
- def set(name, *value)
150
- set_attribute(name, *value)
151
- end
152
-
153
- def from(cmd)
154
- _status, stdout, _stderr = run_command(command: cmd)
155
- return "" if stdout.nil? || stdout.empty?
156
-
157
- stdout.strip
158
- end
159
-
160
- # Set the value equal to the stdout of the command, plus
161
- # run through a regex - the first piece of match data is\
162
- # the value.
163
- def from_with_regex(cmd, *regex_list)
164
- regex_list.flatten.each do |regex|
165
- _status, stdout, _stderr = run_command(command: cmd)
166
- return "" if stdout.nil? || stdout.empty?
167
-
168
- stdout.chomp!.strip
169
- md = stdout.match(regex)
170
- return md[1]
171
- end
172
- end
173
-
174
- def set_attribute(name, *attrs, value)
175
- # Initialize the path in the @data Mash with new Mashes, if needed.
176
- # Will raise a TypeError if we hit a subattribute that is not a
177
- # Hash, Mash, or Array.
178
- keys = [name] + attrs
179
- attribute = keys[0..-2].inject(@data) do |atts, key|
180
- atts[key] ||= Mash.new
181
- atts[key]
182
- end
183
-
184
- # Set the subattribute to the value.
185
- attr_name = attrs.empty? ? name : attrs[-1]
186
- attribute[attr_name] = value
187
- @data[name]
188
- end
189
-
190
- def get_attribute(name, *keys)
191
- safe_get_attribute(name, *keys)
192
- end
193
-
194
- def hint?(name)
195
- Ohai::Hints.hint?(name)
196
- end
197
-
198
- # emulates the old plugin loading behavior
199
- def safe_run
200
- run
201
- rescue Ohai::Exceptions::Error => e
202
- @failed = true
203
- raise e
204
- rescue => e
205
- @failed = true
206
- logger.trace("Plugin #{name} threw #{e.inspect}")
207
- e.backtrace.each { |line| logger.trace( line ) }
208
- end
209
-
210
- def method_missing(name, *args)
211
- return get_attribute(name) if args.length == 0
212
-
213
- set_attribute(name, *args)
214
- end
215
-
216
- private
217
-
218
- def safe_get_attribute(*keys)
219
- keys.inject(@data) do |attrs, key|
220
- unless attrs.nil? || attrs.is_a?(Array) || attrs.is_a?(Hash)
221
- raise TypeError, "Expected Hash but got #{attrs.class}."
222
- end
223
-
224
- attrs[key]
225
- end
226
- rescue NoMethodError
227
- # NoMethodError occurs when trying to access a key on nil
228
- nil
229
- end
230
- end
231
- end
232
- end
1
+ # frozen_string_literal: true
2
+ #
3
+ # Author:: Adam Jacob (<adam@chef.io>)
4
+ # Author:: Claire McQuin (<claire@chef.io>)
5
+ # Copyright:: Copyright (c) Chef Software Inc.
6
+ # License:: Apache License, Version 2.0
7
+ #
8
+ # Licensed under the Apache License, Version 2.0 (the "License");
9
+ # you may not use this file except in compliance with the License.
10
+ # You may obtain a copy of the License at
11
+ #
12
+ # http://www.apache.org/licenses/LICENSE-2.0
13
+ #
14
+ # Unless required by applicable law or agreed to in writing, software
15
+ # distributed under the License is distributed on an "AS IS" BASIS,
16
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
17
+ # implied.
18
+ # See the License for the specific language governing permissions and
19
+ # limitations under the License.
20
+ #
21
+
22
+ require_relative "../mixin/os"
23
+ require_relative "../mixin/shell_out"
24
+ require_relative "../mixin/seconds_to_human"
25
+ require_relative "../mixin/which"
26
+ require_relative "../mixin/train_helpers"
27
+ require_relative "../hints"
28
+
29
+ module Ohai
30
+
31
+ # For plugin namespacing
32
+ module NamedPlugin
33
+
34
+ # Is the plugin a Symbol starting with a capital letter that has no underscores
35
+ #
36
+ # @param name [String] the plugin name
37
+ # @return [Boolean]
38
+ def self.valid_name?(name)
39
+ name.is_a?(Symbol) && name.to_s.match(/^[^A-Z]|_/).nil?
40
+ end
41
+
42
+ # @return [Boolean]
43
+ def self.strict_const_defined?(const)
44
+ const_defined?(const, false)
45
+ end
46
+ end
47
+
48
+ # @param name [String]
49
+ def self.plugin(name, &block)
50
+ raise Ohai::Exceptions::InvalidPluginName, "#{name} is not a valid plugin name. A valid plugin name is a symbol which begins with a capital letter and contains no underscores" unless NamedPlugin.valid_name?(name)
51
+
52
+ plugin = nil
53
+
54
+ # avoid already initialized constant warnings if already defined
55
+ if NamedPlugin.strict_const_defined?(name)
56
+ plugin = NamedPlugin.const_get(name)
57
+ plugin.class_eval(&block)
58
+ else
59
+ klass = Class.new(DSL::Plugin::VersionVII, &block)
60
+ plugin = NamedPlugin.const_set(name, klass)
61
+ end
62
+
63
+ plugin
64
+ end
65
+
66
+ # Cross platform /dev/null to support testability
67
+ #
68
+ # @return [String]
69
+ def self.dev_null
70
+ if RUBY_PLATFORM.match?(/mswin|mingw|windows/)
71
+ "NUL"
72
+ else
73
+ "/dev/null"
74
+ end
75
+ end
76
+
77
+ # Extracted abs_path to support testability:
78
+ # This method gets overridden at test time, to force the shell to check
79
+ # ohai/spec/unit/path/original/absolute/path/to/exe
80
+ def self.abs_path( abs_path )
81
+ abs_path
82
+ end
83
+
84
+ module DSL
85
+ class Plugin
86
+
87
+ include Ohai::Mixin::OS
88
+ include Ohai::Mixin::ShellOut
89
+ include Ohai::Mixin::SecondsToHuman
90
+ include Ohai::Mixin::Which
91
+ include Ohai::Mixin::TrainHelpers
92
+
93
+ attr_reader :data
94
+ attr_reader :failed
95
+ attr_reader :logger
96
+ attr_accessor :transport_connection
97
+
98
+ def initialize(data, logger)
99
+ @data = data
100
+ @logger = logger.with_child({ subsystem: "plugin", plugin: name })
101
+ @has_run = false
102
+ @failed = false
103
+ end
104
+
105
+ def target_mode?
106
+ !!@transport_connection
107
+ end
108
+
109
+ def run
110
+ @has_run = true
111
+
112
+ if Ohai.config[:disabled_plugins].include?(name)
113
+ logger.trace("Skipping disabled plugin #{name}")
114
+ else
115
+ run_plugin
116
+ end
117
+ end
118
+
119
+ def has_run?
120
+ @has_run
121
+ end
122
+
123
+ def reset!
124
+ @has_run = false
125
+ end
126
+
127
+ def [](key)
128
+ @data[key]
129
+ end
130
+
131
+ def []=(key, value)
132
+ @data[key] = value
133
+ end
134
+
135
+ def each(&block)
136
+ @data.each do |key, value|
137
+ yield(key, value)
138
+ end
139
+ end
140
+
141
+ def has_key?(name)
142
+ @data.key?(name)
143
+ end
144
+
145
+ def attribute?(name, *keys)
146
+ !safe_get_attribute(name, *keys).nil?
147
+ end
148
+
149
+ def set(name, *value)
150
+ set_attribute(name, *value)
151
+ end
152
+
153
+ def from(cmd)
154
+ _status, stdout, _stderr = run_command(command: cmd)
155
+ return "" if stdout.nil? || stdout.empty?
156
+
157
+ stdout.strip
158
+ end
159
+
160
+ # Set the value equal to the stdout of the command, plus
161
+ # run through a regex - the first piece of match data is\
162
+ # the value.
163
+ def from_with_regex(cmd, *regex_list)
164
+ regex_list.flatten.each do |regex|
165
+ _status, stdout, _stderr = run_command(command: cmd)
166
+ return "" if stdout.nil? || stdout.empty?
167
+
168
+ stdout.chomp!.strip
169
+ md = stdout.match(regex)
170
+ return md[1]
171
+ end
172
+ end
173
+
174
+ def set_attribute(name, *attrs, value)
175
+ # Initialize the path in the @data Mash with new Mashes, if needed.
176
+ # Will raise a TypeError if we hit a subattribute that is not a
177
+ # Hash, Mash, or Array.
178
+ keys = [name] + attrs
179
+ attribute = keys[0..-2].inject(@data) do |atts, key|
180
+ atts[key] ||= Mash.new
181
+ atts[key]
182
+ end
183
+
184
+ # Set the subattribute to the value.
185
+ attr_name = attrs.empty? ? name : attrs[-1]
186
+ attribute[attr_name] = value
187
+ @data[name]
188
+ end
189
+
190
+ def get_attribute(name, *keys)
191
+ safe_get_attribute(name, *keys)
192
+ end
193
+
194
+ def hint?(name)
195
+ Ohai::Hints.hint?(name)
196
+ end
197
+
198
+ # emulates the old plugin loading behavior
199
+ def safe_run
200
+ run
201
+ rescue Ohai::Exceptions::Error => e
202
+ @failed = true
203
+ raise e
204
+ rescue => e
205
+ @failed = true
206
+ logger.trace("Plugin #{name} threw #{e.inspect}")
207
+ e.backtrace.each { |line| logger.trace( line ) }
208
+ end
209
+
210
+ def method_missing(name, *args)
211
+ return get_attribute(name) if args.length == 0
212
+
213
+ set_attribute(name, *args)
214
+ end
215
+
216
+ private
217
+
218
+ def safe_get_attribute(*keys)
219
+ keys.inject(@data) do |attrs, key|
220
+ unless attrs.nil? || attrs.is_a?(Array) || attrs.is_a?(Hash)
221
+ raise TypeError, "Expected Hash but got #{attrs.class}."
222
+ end
223
+
224
+ attrs[key]
225
+ end
226
+ rescue NoMethodError
227
+ # NoMethodError occurs when trying to access a key on nil
228
+ nil
229
+ end
230
+ end
231
+ end
232
+ end
data/lib/ohai/dsl.rb CHANGED
@@ -1,22 +1,22 @@
1
- # frozen_string_literal: true
2
- #
3
- # Author:: Serdar Sutay (<serdar@chef.io>)
4
- # Copyright:: Copyright (c) Chef Software Inc.
5
- # License:: Apache License, Version 2.0
6
- #
7
- # Licensed under the Apache License, Version 2.0 (the "License");
8
- # you may not use this file except in compliance with the License.
9
- # You may obtain a copy of the License at
10
- #
11
- # http://www.apache.org/licenses/LICENSE-2.0
12
- #
13
- # Unless required by applicable law or agreed to in writing, software
14
- # distributed under the License is distributed on an "AS IS" BASIS,
15
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
16
- # implied.
17
- # See the License for the specific language governing permissions and
18
- # limitations under the License.
19
- #
20
-
21
- require_relative "dsl/plugin"
22
- require_relative "dsl/plugin/versionvii"
1
+ # frozen_string_literal: true
2
+ #
3
+ # Author:: Serdar Sutay (<serdar@chef.io>)
4
+ # Copyright:: Copyright (c) Chef Software Inc.
5
+ # License:: Apache License, Version 2.0
6
+ #
7
+ # Licensed under the Apache License, Version 2.0 (the "License");
8
+ # you may not use this file except in compliance with the License.
9
+ # You may obtain a copy of the License at
10
+ #
11
+ # http://www.apache.org/licenses/LICENSE-2.0
12
+ #
13
+ # Unless required by applicable law or agreed to in writing, software
14
+ # distributed under the License is distributed on an "AS IS" BASIS,
15
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
16
+ # implied.
17
+ # See the License for the specific language governing permissions and
18
+ # limitations under the License.
19
+ #
20
+
21
+ require_relative "dsl/plugin"
22
+ require_relative "dsl/plugin/versionvii"
@@ -1,36 +1,36 @@
1
- # frozen_string_literal: true
2
- #
3
- # Author:: Adam Jacob (<adam@chef.io>)
4
- # Copyright:: Copyright (c) Chef Software Inc.
5
- # License:: Apache License, Version 2.0
6
- #
7
- # Licensed under the Apache License, Version 2.0 (the "License");
8
- # you may not use this file except in compliance with the License.
9
- # You may obtain a copy of the License at
10
- #
11
- # http://www.apache.org/licenses/LICENSE-2.0
12
- #
13
- # Unless required by applicable law or agreed to in writing, software
14
- # distributed under the License is distributed on an "AS IS" BASIS,
15
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
- # See the License for the specific language governing permissions and
17
- # limitations under the License.
18
- #
19
-
20
- module Ohai
21
- # Ohai specific exceptions
22
- module Exceptions
23
- class Exec < RuntimeError; end
24
- class Error < StandardError; end
25
- class InvalidPlugin < Error; end
26
- class InvalidPluginName < Error; end
27
- class IllegalPluginDefinition < Error; end
28
- class AttributeNotFound < Error; end
29
- class ProviderNotFound < Error; end
30
- class DependencyCycle < Error; end
31
- class DependencyNotFound < Error; end
32
- class AttributeSyntaxError < Error; end
33
- class PluginConfigError < Error; end
34
- class CriticalPluginFailure < Error; end
35
- end
36
- end
1
+ # frozen_string_literal: true
2
+ #
3
+ # Author:: Adam Jacob (<adam@chef.io>)
4
+ # Copyright:: Copyright (c) Chef Software Inc.
5
+ # License:: Apache License, Version 2.0
6
+ #
7
+ # Licensed under the Apache License, Version 2.0 (the "License");
8
+ # you may not use this file except in compliance with the License.
9
+ # You may obtain a copy of the License at
10
+ #
11
+ # http://www.apache.org/licenses/LICENSE-2.0
12
+ #
13
+ # Unless required by applicable law or agreed to in writing, software
14
+ # distributed under the License is distributed on an "AS IS" BASIS,
15
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
+ # See the License for the specific language governing permissions and
17
+ # limitations under the License.
18
+ #
19
+
20
+ module Ohai
21
+ # Ohai specific exceptions
22
+ module Exceptions
23
+ class Exec < RuntimeError; end
24
+ class Error < StandardError; end
25
+ class InvalidPlugin < Error; end
26
+ class InvalidPluginName < Error; end
27
+ class IllegalPluginDefinition < Error; end
28
+ class AttributeNotFound < Error; end
29
+ class ProviderNotFound < Error; end
30
+ class DependencyCycle < Error; end
31
+ class DependencyNotFound < Error; end
32
+ class AttributeSyntaxError < Error; end
33
+ class PluginConfigError < Error; end
34
+ class CriticalPluginFailure < Error; end
35
+ end
36
+ end