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,94 +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 /UpdateInfo failed/.match?(vmware[param])
57
- vmware[param] = nil
58
- end
59
- end
60
- # vmware-toolbox-cmd <param> status commands
61
- # Iterate through each parameter supported by the "vmware-toolbox-cmd status" command, assign value
62
- # to attribute "vmware[:<parameter>]"
63
- %w{upgrade timesync}.each do |param|
64
- vmware[param] = from_cmd([vmtools_path, param, "status"])
65
- end
66
- # Distinguish hypervisors by presence of raw session data (vSphere only)
67
- raw_session = from_cmd([vmtools_path, "stat", "raw", "json", "session"])
68
- if raw_session.empty?
69
- vmware[:host] = {
70
- type: "vmware_desktop",
71
- }
72
- else
73
- require "json" unless defined?(JSON)
74
- session = JSON.parse(raw_session)
75
- vmware[:host] = {
76
- type: "vmware_vsphere",
77
- version: session["version"],
78
- }
79
- end
80
- vmware[:guest][:vmware_tools_version] = from_cmd([vmtools_path, "-v"]).split(" ").first
81
- rescue
82
- logger.trace("Plugin VMware: Error while collecting VMware guest attributes")
83
- end
84
- end
85
- end
86
-
87
- collect_data(:linux) do
88
- get_vm_attributes("/usr/bin/vmware-toolbox-cmd") if virtualization[:systems][:vmware]
89
- end
90
-
91
- collect_data(:windows) do
92
- get_vm_attributes("C:/Program Files/VMWare/VMware Tools/VMwareToolboxCmd.exe") if virtualization[:systems][:vmware]
93
- end
94
- 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