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,109 +1,109 @@
1
- # frozen_string_literal: true
2
- #
3
- # Author:: "Dan Robinson" <drobinson@chef.io>
4
- # Author:: "Christopher M. Luciano" <cmlucian@us.ibm.com>
5
- # Copyright:: Copyright (c) Chef Software Inc.
6
- # Copyright (C) 2015 IBM Corp.
7
- # License:: Apache License, Version 2.0
8
- #
9
- # Licensed under the Apache License, Version 2.0 (the "License");
10
- # you may not use this file except in compliance with the License.
11
- # You may obtain a copy of the License at
12
- #
13
- # http://www.apache.org/licenses/LICENSE-2.0
14
- #
15
- # Unless required by applicable law or agreed to in writing, software
16
- # distributed under the License is distributed on an "AS IS" BASIS,
17
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18
- # See the License for the specific language governing permissions and
19
- # limitations under the License.
20
- #
21
-
22
- #
23
- # Provides a set of attributes for a VMware ESX virtual machine with results
24
- # obtained from vmware-toolbox-cmd. VMware Tools must be installed
25
- # on the virtual machine.
26
- #
27
- # Modify the path to vmware-toolbox-cmd in the call to get_vm_attributes for
28
- # your particular operating system and configuration
29
- #
30
- # Example:
31
- #
32
- # get_vm_attributes("/usr/bin/vmware-toolbox-cmd")
33
- #
34
-
35
- Ohai.plugin(:VMware) do
36
- provides "vmware"
37
- depends "virtualization"
38
-
39
- def from_cmd(cmd)
40
- shell_out(cmd).stdout.strip
41
- end
42
-
43
- def get_vm_attributes(vmtools_path)
44
- if !file_exist?(vmtools_path)
45
- logger.trace("Plugin VMware: #{vmtools_path} not found")
46
- else
47
- vmware Mash.new
48
- vmware[:host] = Mash.new
49
- vmware[:guest] = Mash.new
50
- begin
51
- # vmware-toolbox-cmd stat <param> commands
52
- # Iterate through each parameter supported by the "vwware-toolbox-cmd stat" command, assign value
53
- # to attribute "vmware[:<parameter>]"
54
- %w{hosttime speed sessionid balloon swap memlimit memres cpures cpulimit}.each do |param|
55
- vmware[param] = from_cmd([vmtools_path, "stat", param])
56
- if param == "hosttime" && vmtools_path.include?("Program Files")
57
- # popen and %x return stdout encoded as IBM437 in Windows but in a string marked
58
- # UTF-8. The string doesn't throw an exception when encoded to "UTF-8" but
59
- # displays [?] character in Windows without this.
60
- #
61
- # .force_encoding(Encoding::ISO_8859_1) causes the character to be dropped
62
- # and .force_encoding(Encoding::Windows_1252) displays the „ character in place
63
- # of an ä. .force_encoding(Encoding::IBM437) allows for the correct characters
64
- # to be displayed.
65
- #
66
- # Note:
67
- # * this is broken for at least Ruby 2.7 through 3.1.3
68
- # * confirmed that this is broken on Windows Server 2022
69
- vmware[param] = vmware[param].force_encoding(Encoding::IBM437).encode("UTF-8")
70
- end
71
- if vmware[param].include?("UpdateInfo failed")
72
- vmware[param] = nil
73
- end
74
- end
75
- # vmware-toolbox-cmd <param> status commands
76
- # Iterate through each parameter supported by the "vmware-toolbox-cmd status" command, assign value
77
- # to attribute "vmware[:<parameter>]"
78
- %w{upgrade timesync}.each do |param|
79
- vmware[param] = from_cmd([vmtools_path, param, "status"])
80
- end
81
- # Distinguish hypervisors by presence of raw session data (vSphere only)
82
- raw_session = from_cmd([vmtools_path, "stat", "raw", "json", "session"])
83
- if raw_session.empty?
84
- vmware[:host] = {
85
- type: "vmware_desktop",
86
- }
87
- else
88
- require "json" unless defined?(JSON)
89
- session = JSON.parse(raw_session)
90
- vmware[:host] = {
91
- type: "vmware_vsphere",
92
- version: session["version"],
93
- }
94
- end
95
- vmware[:guest][:vmware_tools_version] = from_cmd([vmtools_path, "-v"]).split(" ").first
96
- rescue
97
- logger.trace("Plugin VMware: Error while collecting VMware guest attributes")
98
- end
99
- end
100
- end
101
-
102
- collect_data(:linux) do
103
- get_vm_attributes("/usr/bin/vmware-toolbox-cmd") if virtualization[:systems][:vmware]
104
- end
105
-
106
- collect_data(:windows) do
107
- get_vm_attributes("C:/Program Files/VMWare/VMware Tools/VMwareToolboxCmd.exe") if virtualization[:systems][:vmware]
108
- end
109
- end
1
+ # frozen_string_literal: true
2
+ #
3
+ # Author:: "Dan Robinson" <drobinson@chef.io>
4
+ # Author:: "Christopher M. Luciano" <cmlucian@us.ibm.com>
5
+ # Copyright:: Copyright (c) Chef Software Inc.
6
+ # Copyright (C) 2015 IBM Corp.
7
+ # License:: Apache License, Version 2.0
8
+ #
9
+ # Licensed under the Apache License, Version 2.0 (the "License");
10
+ # you may not use this file except in compliance with the License.
11
+ # You may obtain a copy of the License at
12
+ #
13
+ # http://www.apache.org/licenses/LICENSE-2.0
14
+ #
15
+ # Unless required by applicable law or agreed to in writing, software
16
+ # distributed under the License is distributed on an "AS IS" BASIS,
17
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18
+ # See the License for the specific language governing permissions and
19
+ # limitations under the License.
20
+ #
21
+
22
+ #
23
+ # Provides a set of attributes for a VMware ESX virtual machine with results
24
+ # obtained from vmware-toolbox-cmd. VMware Tools must be installed
25
+ # on the virtual machine.
26
+ #
27
+ # Modify the path to vmware-toolbox-cmd in the call to get_vm_attributes for
28
+ # your particular operating system and configuration
29
+ #
30
+ # Example:
31
+ #
32
+ # get_vm_attributes("/usr/bin/vmware-toolbox-cmd")
33
+ #
34
+
35
+ Ohai.plugin(:VMware) do
36
+ provides "vmware"
37
+ depends "virtualization"
38
+
39
+ def from_cmd(cmd)
40
+ shell_out(cmd).stdout.strip
41
+ end
42
+
43
+ def get_vm_attributes(vmtools_path)
44
+ if !file_exist?(vmtools_path)
45
+ logger.trace("Plugin VMware: #{vmtools_path} not found")
46
+ else
47
+ vmware Mash.new
48
+ vmware[:host] = Mash.new
49
+ vmware[:guest] = Mash.new
50
+ begin
51
+ # vmware-toolbox-cmd stat <param> commands
52
+ # Iterate through each parameter supported by the "vwware-toolbox-cmd stat" command, assign value
53
+ # to attribute "vmware[:<parameter>]"
54
+ %w{hosttime speed sessionid balloon swap memlimit memres cpures cpulimit}.each do |param|
55
+ vmware[param] = from_cmd([vmtools_path, "stat", param])
56
+ if param == "hosttime" && vmtools_path.include?("Program Files")
57
+ # popen and %x return stdout encoded as IBM437 in Windows but in a string marked
58
+ # UTF-8. The string doesn't throw an exception when encoded to "UTF-8" but
59
+ # displays [?] character in Windows without this.
60
+ #
61
+ # .force_encoding(Encoding::ISO_8859_1) causes the character to be dropped
62
+ # and .force_encoding(Encoding::Windows_1252) displays the „ character in place
63
+ # of an ä. .force_encoding(Encoding::IBM437) allows for the correct characters
64
+ # to be displayed.
65
+ #
66
+ # Note:
67
+ # * this is broken for at least Ruby 2.7 through 3.1.3
68
+ # * confirmed that this is broken on Windows Server 2022
69
+ vmware[param] = vmware[param].force_encoding(Encoding::IBM437).encode("UTF-8")
70
+ end
71
+ if vmware[param].include?("UpdateInfo failed")
72
+ vmware[param] = nil
73
+ end
74
+ end
75
+ # vmware-toolbox-cmd <param> status commands
76
+ # Iterate through each parameter supported by the "vmware-toolbox-cmd status" command, assign value
77
+ # to attribute "vmware[:<parameter>]"
78
+ %w{upgrade timesync}.each do |param|
79
+ vmware[param] = from_cmd([vmtools_path, param, "status"])
80
+ end
81
+ # Distinguish hypervisors by presence of raw session data (vSphere only)
82
+ raw_session = from_cmd([vmtools_path, "stat", "raw", "json", "session"])
83
+ if raw_session.empty?
84
+ vmware[:host] = {
85
+ type: "vmware_desktop",
86
+ }
87
+ else
88
+ require "json" unless defined?(JSON)
89
+ session = JSON.parse(raw_session)
90
+ vmware[:host] = {
91
+ type: "vmware_vsphere",
92
+ version: session["version"],
93
+ }
94
+ end
95
+ vmware[:guest][:vmware_tools_version] = from_cmd([vmtools_path, "-v"]).split(" ").first
96
+ rescue
97
+ logger.trace("Plugin VMware: Error while collecting VMware guest attributes")
98
+ end
99
+ end
100
+ end
101
+
102
+ collect_data(:linux) do
103
+ get_vm_attributes("/usr/bin/vmware-toolbox-cmd") if virtualization[:systems][:vmware]
104
+ end
105
+
106
+ collect_data(:windows) do
107
+ get_vm_attributes("C:/Program Files/VMWare/VMware Tools/VMwareToolboxCmd.exe") if virtualization[:systems][:vmware]
108
+ end
109
+ end
@@ -1,95 +1,95 @@
1
- # frozen_string_literal: true
2
- #
3
- # Author:: Pete Higgins (pete@peterhiggins.org)
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
- Ohai.plugin(:DMI) do
21
- provides "dmi"
22
-
23
- # Map the linux component types to their rough Windows API equivalents
24
- DMI_TO_WIN32OLE ||= {
25
- chassis: "SystemEnclosure",
26
- processor: "Processor",
27
- bios: "Bios",
28
- system: "ComputerSystemProduct",
29
- base_board: "BaseBoard",
30
- }.freeze
31
-
32
- # This regex is in 3 parts for the different supported patterns in camel
33
- # case names coming from the Windows API:
34
- # * Typical camelcase, eg Depth, PartNumber, NumberOfPowerCords
35
- # * Acronyms preceding camelcase, eg SMBIOSAssetTag
36
- # * Acronyms that occur at the end of the name, eg SKU, DeviceID
37
- #
38
- # This cannot handle some property names, eg SMBIOSBIOSVersion.
39
- # https://rubular.com/r/FBNtXod4wkZGAG
40
- SPLIT_REGEX ||= /[A-Z][a-z0-9]+|[A-Z]{2,}(?=[A-Z][a-z0-9])|[A-Z]{2,}/.freeze
41
-
42
- WINDOWS_TO_UNIX_KEYS ||= [
43
- %w{vendor manufacturer},
44
- %w{identifying_number serial_number},
45
- %w{name family},
46
- ].freeze
47
-
48
- collect_data(:windows) do
49
- require_relative "../../common/dmi"
50
- require "wmi-lite/wmi" unless defined?(WmiLite::Wmi)
51
- wmi = WmiLite::Wmi.new
52
-
53
- dmi Mash.new
54
-
55
- # The Windows API returns property names in camel case, eg "SerialNumber",
56
- # while `dmi` returns them as space separated strings, eg "Serial Number".
57
- # `Ohai::Common::DMI.convenience_keys` expects property names in `dmi`'s
58
- # format, so build two parallel hashes with the keys as they come from the
59
- # Windows API and in a faked-out `dmi` version. After the call to
60
- # `Ohai::Common::DMI.convenience_keys` replace the faked-out `dmi`
61
- # collection with the one with the original property names.
62
- DMI_TO_WIN32OLE.each do |dmi_key, ole_key|
63
- wmi_objects = wmi.instances_of("Win32_#{ole_key}").map(&:wmi_ole_object)
64
-
65
- split_name_properties = []
66
- properties = []
67
-
68
- wmi_objects.each do |wmi_object|
69
- split_name_properties << Mash.new
70
- properties << Mash.new
71
-
72
- wmi_object.properties_.each do |property|
73
- property_name = property.name
74
- value = wmi_object.invoke(property_name)
75
-
76
- split_name = property_name.scan(SPLIT_REGEX).join(" ")
77
- split_name_properties.last[split_name] = value
78
- properties.last[property_name] = value
79
- end
80
- end
81
-
82
- dmi[dmi_key] = Mash.new(all_records: split_name_properties, _all_records: properties)
83
- end
84
-
85
- Ohai::Common::DMI.convenience_keys(dmi)
86
-
87
- dmi.each_value do |records|
88
- records[:all_records] = records.delete(:_all_records)
89
-
90
- WINDOWS_TO_UNIX_KEYS.each do |windows_key, unix_key|
91
- records[unix_key] = records.delete(windows_key) if records.key?(windows_key)
92
- end
93
- end
94
- end
95
- end
1
+ # frozen_string_literal: true
2
+ #
3
+ # Author:: Pete Higgins (pete@peterhiggins.org)
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
+ Ohai.plugin(:DMI) do
21
+ provides "dmi"
22
+
23
+ # Map the linux component types to their rough Windows API equivalents
24
+ DMI_TO_WIN32OLE ||= {
25
+ chassis: "SystemEnclosure",
26
+ processor: "Processor",
27
+ bios: "Bios",
28
+ system: "ComputerSystemProduct",
29
+ base_board: "BaseBoard",
30
+ }.freeze
31
+
32
+ # This regex is in 3 parts for the different supported patterns in camel
33
+ # case names coming from the Windows API:
34
+ # * Typical camelcase, eg Depth, PartNumber, NumberOfPowerCords
35
+ # * Acronyms preceding camelcase, eg SMBIOSAssetTag
36
+ # * Acronyms that occur at the end of the name, eg SKU, DeviceID
37
+ #
38
+ # This cannot handle some property names, eg SMBIOSBIOSVersion.
39
+ # https://rubular.com/r/FBNtXod4wkZGAG
40
+ SPLIT_REGEX ||= /[A-Z][a-z0-9]+|[A-Z]{2,}(?=[A-Z][a-z0-9])|[A-Z]{2,}/.freeze
41
+
42
+ WINDOWS_TO_UNIX_KEYS ||= [
43
+ %w{vendor manufacturer},
44
+ %w{identifying_number serial_number},
45
+ %w{name family},
46
+ ].freeze
47
+
48
+ collect_data(:windows) do
49
+ require_relative "../../common/dmi"
50
+ require "wmi-lite/wmi" unless defined?(WmiLite::Wmi)
51
+ wmi = WmiLite::Wmi.new
52
+
53
+ dmi Mash.new
54
+
55
+ # The Windows API returns property names in camel case, eg "SerialNumber",
56
+ # while `dmi` returns them as space separated strings, eg "Serial Number".
57
+ # `Ohai::Common::DMI.convenience_keys` expects property names in `dmi`'s
58
+ # format, so build two parallel hashes with the keys as they come from the
59
+ # Windows API and in a faked-out `dmi` version. After the call to
60
+ # `Ohai::Common::DMI.convenience_keys` replace the faked-out `dmi`
61
+ # collection with the one with the original property names.
62
+ DMI_TO_WIN32OLE.each do |dmi_key, ole_key|
63
+ wmi_objects = wmi.instances_of("Win32_#{ole_key}").map(&:wmi_ole_object)
64
+
65
+ split_name_properties = []
66
+ properties = []
67
+
68
+ wmi_objects.each do |wmi_object|
69
+ split_name_properties << Mash.new
70
+ properties << Mash.new
71
+
72
+ wmi_object.properties_.each do |property|
73
+ property_name = property.name
74
+ value = wmi_object.invoke(property_name)
75
+
76
+ split_name = property_name.scan(SPLIT_REGEX).join(" ")
77
+ split_name_properties.last[split_name] = value
78
+ properties.last[property_name] = value
79
+ end
80
+ end
81
+
82
+ dmi[dmi_key] = Mash.new(all_records: split_name_properties, _all_records: properties)
83
+ end
84
+
85
+ Ohai::Common::DMI.convenience_keys(dmi)
86
+
87
+ dmi.each_value do |records|
88
+ records[:all_records] = records.delete(:_all_records)
89
+
90
+ WINDOWS_TO_UNIX_KEYS.each do |windows_key, unix_key|
91
+ records[unix_key] = records.delete(windows_key) if records.key?(windows_key)
92
+ end
93
+ end
94
+ end
95
+ end
@@ -1,52 +1,52 @@
1
- # frozen_string_literal: true
2
- #
3
- # Copyright:: Copyright (c) Chef Software Inc.
4
- # License:: Apache License, Version 2.0
5
- #
6
- # Licensed under the Apache License, Version 2.0 (the "License");
7
- # you may not use this file except in compliance with the License.
8
- # You may obtain a copy of the License at
9
- #
10
- # http://www.apache.org/licenses/LICENSE-2.0
11
- #
12
- # Unless required by applicable law or agreed to in writing, software
13
- # distributed under the License is distributed on an "AS IS" BASIS,
14
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
- # See the License for the specific language governing permissions and
16
- # limitations under the License.
17
- #
18
-
19
- Ohai.plugin(:Drivers) do
20
- provides "kernel/pnp_drivers", "kernel/modules"
21
- depends "kernel"
22
-
23
- collect_data(:windows) do
24
- if configuration(:enabled)
25
-
26
- require "wmi-lite/wmi" unless defined?(WmiLite::Wmi)
27
-
28
- kext = Mash.new
29
- pnp_drivers = Mash.new
30
-
31
- wmi = WmiLite::Wmi.new
32
-
33
- drivers = wmi.instances_of("Win32_PnPSignedDriver")
34
- drivers.each do |driver|
35
- pnp_drivers[driver["deviceid"]] = Mash.new
36
- driver.wmi_ole_object.properties_.each do |p|
37
- pnp_drivers[driver["deviceid"]][p.name.wmi_underscore.to_sym] = driver[p.name.downcase]
38
- end
39
- if driver["devicename"]
40
- kext[driver["devicename"]] = pnp_drivers[driver["deviceid"]]
41
- kext[driver["devicename"]][:version] = pnp_drivers[driver["deviceid"]][:driver_version]
42
- kext[driver["devicename"]][:date] = pnp_drivers[driver["deviceid"]][:driver_date] ? pnp_drivers[driver["deviceid"]][:driver_date].to_s[0..7] : nil
43
- end
44
- end
45
-
46
- kernel[:pnp_drivers] = pnp_drivers
47
- kernel[:modules] = kext
48
-
49
- end
50
- end
51
-
52
- end
1
+ # frozen_string_literal: true
2
+ #
3
+ # Copyright:: Copyright (c) Chef Software Inc.
4
+ # License:: Apache License, Version 2.0
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+ #
18
+
19
+ Ohai.plugin(:Drivers) do
20
+ provides "kernel/pnp_drivers", "kernel/modules"
21
+ depends "kernel"
22
+
23
+ collect_data(:windows) do
24
+ if configuration(:enabled)
25
+
26
+ require "wmi-lite/wmi" unless defined?(WmiLite::Wmi)
27
+
28
+ kext = Mash.new
29
+ pnp_drivers = Mash.new
30
+
31
+ wmi = WmiLite::Wmi.new
32
+
33
+ drivers = wmi.instances_of("Win32_PnPSignedDriver")
34
+ drivers.each do |driver|
35
+ pnp_drivers[driver["deviceid"]] = Mash.new
36
+ driver.wmi_ole_object.properties_.each do |p|
37
+ pnp_drivers[driver["deviceid"]][p.name.wmi_underscore.to_sym] = driver[p.name.downcase]
38
+ end
39
+ if driver["devicename"]
40
+ kext[driver["devicename"]] = pnp_drivers[driver["deviceid"]]
41
+ kext[driver["devicename"]][:version] = pnp_drivers[driver["deviceid"]][:driver_version]
42
+ kext[driver["devicename"]][:date] = pnp_drivers[driver["deviceid"]][:driver_date] ? pnp_drivers[driver["deviceid"]][:driver_date].to_s[0..7] : nil
43
+ end
44
+ end
45
+
46
+ kernel[:pnp_drivers] = pnp_drivers
47
+ kernel[:modules] = kext
48
+
49
+ end
50
+ end
51
+
52
+ end
@@ -1,39 +1,39 @@
1
- # frozen_string_literal: true
2
- #
3
- # License:: Apache License, Version 2.0
4
- #
5
- # Licensed under the Apache License, Version 2.0 (the "License");
6
- # you may not use this file except in compliance with the License.
7
- # You may obtain a copy of the License at
8
- #
9
- # http://www.apache.org/licenses/LICENSE-2.0
10
- #
11
- # Unless required by applicable law or agreed to in writing, software
12
- # distributed under the License is distributed on an "AS IS" BASIS,
13
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
- # See the License for the specific language governing permissions and
15
- # limitations under the License.
16
- #
17
- Ohai.plugin(:Memory) do
18
- provides "memory"
19
-
20
- collect_data(:windows) do
21
- require "wmi-lite/wmi" unless defined?(WmiLite::Wmi)
22
-
23
- memory Mash.new
24
- memory[:swap] = Mash.new
25
-
26
- wmi = WmiLite::Wmi.new
27
-
28
- os = wmi.first_of("Win32_OperatingSystem")
29
-
30
- # MemTotal
31
- memory[:total] = os["TotalVisibleMemorySize"] + "kB"
32
- # MemFree
33
- memory[:free] = os["FreePhysicalMemory"] + "kB"
34
- # SwapTotal
35
- memory[:swap][:total] = os["SizeStoredInPagingFiles"] + "kB"
36
- # SwapFree
37
- memory[:swap][:free] = os["FreeSpaceInPagingFiles"] + "kB"
38
- end
39
- end
1
+ # frozen_string_literal: true
2
+ #
3
+ # License:: Apache License, Version 2.0
4
+ #
5
+ # Licensed under the Apache License, Version 2.0 (the "License");
6
+ # you may not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing, software
12
+ # distributed under the License is distributed on an "AS IS" BASIS,
13
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ # See the License for the specific language governing permissions and
15
+ # limitations under the License.
16
+ #
17
+ Ohai.plugin(:Memory) do
18
+ provides "memory"
19
+
20
+ collect_data(:windows) do
21
+ require "wmi-lite/wmi" unless defined?(WmiLite::Wmi)
22
+
23
+ memory Mash.new
24
+ memory[:swap] = Mash.new
25
+
26
+ wmi = WmiLite::Wmi.new
27
+
28
+ os = wmi.first_of("Win32_OperatingSystem")
29
+
30
+ # MemTotal
31
+ memory[:total] = os["TotalVisibleMemorySize"] + "kB"
32
+ # MemFree
33
+ memory[:free] = os["FreePhysicalMemory"] + "kB"
34
+ # SwapTotal
35
+ memory[:swap][:total] = os["SizeStoredInPagingFiles"] + "kB"
36
+ # SwapFree
37
+ memory[:swap][:free] = os["FreeSpaceInPagingFiles"] + "kB"
38
+ end
39
+ end