ohai 18.2.6 → 19.0.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.
Files changed (169) 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 +83 -83
  17. data/lib/ohai/mixin/azure_metadata.rb +105 -105
  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 +264 -270
  24. data/lib/ohai/mixin/gce_metadata.rb +79 -79
  25. data/lib/ohai/mixin/http_helper.rb +64 -64
  26. data/lib/ohai/mixin/json_helper.rb +36 -36
  27. data/lib/ohai/mixin/network_helper.rb +92 -92
  28. data/lib/ohai/mixin/oci_metadata.rb +60 -60
  29. data/lib/ohai/mixin/os.rb +128 -128
  30. data/lib/ohai/mixin/scaleway_metadata.rb +51 -51
  31. data/lib/ohai/mixin/seconds_to_human.rb +52 -52
  32. data/lib/ohai/mixin/shell_out.rb +51 -51
  33. data/lib/ohai/mixin/softlayer_metadata.rb +74 -74
  34. data/lib/ohai/mixin/string.rb +31 -31
  35. data/lib/ohai/mixin/train_helpers.rb +36 -36
  36. data/lib/ohai/mixin/which.rb +39 -39
  37. data/lib/ohai/plugin_config.rb +47 -47
  38. data/lib/ohai/plugins/aix/kernel.rb +50 -50
  39. data/lib/ohai/plugins/aix/memory.rb +37 -37
  40. data/lib/ohai/plugins/aix/network.rb +142 -142
  41. data/lib/ohai/plugins/aix/platform.rb +30 -30
  42. data/lib/ohai/plugins/aix/uptime.rb +54 -54
  43. data/lib/ohai/plugins/aix/virtualization.rb +154 -154
  44. data/lib/ohai/plugins/alibaba.rb +72 -72
  45. data/lib/ohai/plugins/azure.rb +154 -154
  46. data/lib/ohai/plugins/bsd/virtualization.rb +121 -121
  47. data/lib/ohai/plugins/c.rb +178 -178
  48. data/lib/ohai/plugins/chef.rb +50 -50
  49. data/lib/ohai/plugins/cloud.rb +379 -379
  50. data/lib/ohai/plugins/command.rb +26 -26
  51. data/lib/ohai/plugins/cpu.rb +642 -642
  52. data/lib/ohai/plugins/darwin/hardware.rb +99 -99
  53. data/lib/ohai/plugins/darwin/memory.rb +62 -62
  54. data/lib/ohai/plugins/darwin/network.rb +207 -207
  55. data/lib/ohai/plugins/darwin/platform.rb +40 -40
  56. data/lib/ohai/plugins/darwin/virtualization.rb +104 -104
  57. data/lib/ohai/plugins/digital_ocean.rb +67 -67
  58. data/lib/ohai/plugins/dmi.rb +134 -134
  59. data/lib/ohai/plugins/docker.rb +58 -58
  60. data/lib/ohai/plugins/dragonflybsd/memory.rb +60 -60
  61. data/lib/ohai/plugins/dragonflybsd/network.rb +128 -128
  62. data/lib/ohai/plugins/dragonflybsd/platform.rb +28 -28
  63. data/lib/ohai/plugins/ec2.rb +148 -148
  64. data/lib/ohai/plugins/elixir.rb +36 -36
  65. data/lib/ohai/plugins/erlang.rb +60 -60
  66. data/lib/ohai/plugins/eucalyptus.rb +86 -86
  67. data/lib/ohai/plugins/filesystem.rb +753 -753
  68. data/lib/ohai/plugins/fips.rb +36 -36
  69. data/lib/ohai/plugins/freebsd/memory.rb +60 -60
  70. data/lib/ohai/plugins/freebsd/network.rb +128 -128
  71. data/lib/ohai/plugins/freebsd/platform.rb +28 -28
  72. data/lib/ohai/plugins/gce.rb +89 -89
  73. data/lib/ohai/plugins/go.rb +34 -34
  74. data/lib/ohai/plugins/groovy.rb +38 -38
  75. data/lib/ohai/plugins/grub2.rb +40 -40
  76. data/lib/ohai/plugins/habitat.rb +73 -73
  77. data/lib/ohai/plugins/haskell.rb +96 -96
  78. data/lib/ohai/plugins/hostname.rb +133 -133
  79. data/lib/ohai/plugins/init_package.rb +26 -26
  80. data/lib/ohai/plugins/java.rb +78 -78
  81. data/lib/ohai/plugins/kernel.rb +292 -292
  82. data/lib/ohai/plugins/keys.rb +27 -27
  83. data/lib/ohai/plugins/languages.rb +26 -26
  84. data/lib/ohai/plugins/libvirt.rb +114 -114
  85. data/lib/ohai/plugins/linode.rb +73 -73
  86. data/lib/ohai/plugins/linux/block_device.rb +48 -48
  87. data/lib/ohai/plugins/linux/hostnamectl.rb +34 -34
  88. data/lib/ohai/plugins/linux/interrupts.rb +84 -83
  89. data/lib/ohai/plugins/linux/ipc.rb +52 -52
  90. data/lib/ohai/plugins/linux/livepatch.rb +38 -38
  91. data/lib/ohai/plugins/linux/lsb.rb +46 -46
  92. data/lib/ohai/plugins/linux/lspci.rb +80 -80
  93. data/lib/ohai/plugins/linux/machineid.rb +36 -36
  94. data/lib/ohai/plugins/linux/mdadm.rb +120 -120
  95. data/lib/ohai/plugins/linux/memory.rb +106 -106
  96. data/lib/ohai/plugins/linux/network.rb +879 -879
  97. data/lib/ohai/plugins/linux/os_release.rb +38 -38
  98. data/lib/ohai/plugins/linux/platform.rb +314 -314
  99. data/lib/ohai/plugins/linux/selinux.rb +69 -69
  100. data/lib/ohai/plugins/linux/sessions.rb +54 -54
  101. data/lib/ohai/plugins/linux/sysctl.rb +39 -39
  102. data/lib/ohai/plugins/linux/systemd_paths.rb +36 -36
  103. data/lib/ohai/plugins/linux/tc.rb +61 -61
  104. data/lib/ohai/plugins/linux/virtualization.rb +300 -300
  105. data/lib/ohai/plugins/lua.rb +39 -39
  106. data/lib/ohai/plugins/mono.rb +50 -50
  107. data/lib/ohai/plugins/netbsd/memory.rb +99 -99
  108. data/lib/ohai/plugins/netbsd/network.rb +122 -122
  109. data/lib/ohai/plugins/netbsd/platform.rb +28 -28
  110. data/lib/ohai/plugins/network.rb +186 -186
  111. data/lib/ohai/plugins/nodejs.rb +40 -40
  112. data/lib/ohai/plugins/oci.rb +94 -94
  113. data/lib/ohai/plugins/ohai.rb +29 -29
  114. data/lib/ohai/plugins/ohai_time.rb +26 -26
  115. data/lib/ohai/plugins/openbsd/memory.rb +99 -99
  116. data/lib/ohai/plugins/openbsd/network.rb +122 -122
  117. data/lib/ohai/plugins/openbsd/platform.rb +28 -28
  118. data/lib/ohai/plugins/openstack.rb +84 -84
  119. data/lib/ohai/plugins/os.rb +55 -55
  120. data/lib/ohai/plugins/packages.rb +234 -234
  121. data/lib/ohai/plugins/passwd.rb +104 -104
  122. data/lib/ohai/plugins/perl.rb +45 -45
  123. data/lib/ohai/plugins/php.rb +52 -52
  124. data/lib/ohai/plugins/platform.rb +41 -41
  125. data/lib/ohai/plugins/powershell.rb +82 -82
  126. data/lib/ohai/plugins/ps.rb +35 -35
  127. data/lib/ohai/plugins/python.rb +43 -43
  128. data/lib/ohai/plugins/rackspace.rb +177 -177
  129. data/lib/ohai/plugins/root_group.rb +41 -41
  130. data/lib/ohai/plugins/rpm.rb +121 -121
  131. data/lib/ohai/plugins/ruby.rb +66 -66
  132. data/lib/ohai/plugins/rust.rb +34 -34
  133. data/lib/ohai/plugins/scala.rb +38 -38
  134. data/lib/ohai/plugins/scaleway.rb +58 -58
  135. data/lib/ohai/plugins/scsi.rb +52 -52
  136. data/lib/ohai/plugins/shard.rb +142 -142
  137. data/lib/ohai/plugins/shells.rb +32 -32
  138. data/lib/ohai/plugins/softlayer.rb +48 -48
  139. data/lib/ohai/plugins/solaris2/dmi.rb +191 -191
  140. data/lib/ohai/plugins/solaris2/memory.rb +32 -32
  141. data/lib/ohai/plugins/solaris2/network.rb +192 -192
  142. data/lib/ohai/plugins/solaris2/platform.rb +58 -58
  143. data/lib/ohai/plugins/solaris2/virtualization.rb +90 -90
  144. data/lib/ohai/plugins/ssh_host_key.rb +84 -84
  145. data/lib/ohai/plugins/sysconf.rb +46 -46
  146. data/lib/ohai/plugins/timezone.rb +45 -45
  147. data/lib/ohai/plugins/train.rb +35 -35
  148. data/lib/ohai/plugins/uptime.rb +95 -95
  149. data/lib/ohai/plugins/virtualbox.rb +197 -197
  150. data/lib/ohai/plugins/vmware.rb +109 -109
  151. data/lib/ohai/plugins/windows/dmi.rb +95 -95
  152. data/lib/ohai/plugins/windows/drivers.rb +52 -52
  153. data/lib/ohai/plugins/windows/memory.rb +39 -39
  154. data/lib/ohai/plugins/windows/network.rb +222 -222
  155. data/lib/ohai/plugins/windows/platform.rb +34 -34
  156. data/lib/ohai/plugins/windows/system_enclosure.rb +29 -29
  157. data/lib/ohai/plugins/windows/virtualization.rb +45 -45
  158. data/lib/ohai/plugins/zpools.rb +94 -94
  159. data/lib/ohai/provides_map.rb +208 -208
  160. data/lib/ohai/runner.rb +128 -126
  161. data/lib/ohai/system.rb +258 -258
  162. data/lib/ohai/train_transport.rb +29 -29
  163. data/lib/ohai/util/file_helper.rb +6 -6
  164. data/lib/ohai/util/ip_helper.rb +56 -56
  165. data/lib/ohai/util/win32.rb +47 -47
  166. data/lib/ohai/version.rb +23 -23
  167. data/lib/ohai.rb +23 -23
  168. data/ohai.gemspec +35 -35
  169. metadata +9 -15
@@ -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