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,104 +1,104 @@
1
- # frozen_string_literal: true
2
- #
3
- # Author:: Pavel Yudin (<pyudin@parallels.com>)
4
- # Author:: Tim Smith (<tsmith@chef.io>)
5
- # Copyright:: Copyright (c) 2015 Pavel Yudin
6
- # Copyright:: Copyright (c) Chef Software Inc.
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
- Ohai.plugin(:Virtualization) do
23
- provides "virtualization"
24
- depends "hardware"
25
-
26
- def vboxmanage_exists?
27
- which("VBoxManage")
28
- end
29
-
30
- def prlctl_exists?
31
- which("prlctl")
32
- end
33
-
34
- def ioreg_exists?
35
- which("ioreg")
36
- end
37
-
38
- def fusion_exists?
39
- file_exist?("/Applications/VMware Fusion.app/")
40
- end
41
-
42
- def docker_exists?
43
- which("docker")
44
- end
45
-
46
- def sysctl_exists?
47
- which("sysctl")
48
- end
49
-
50
- collect_data(:darwin) do
51
- virtualization Mash.new unless virtualization
52
- virtualization[:systems] ||= Mash.new
53
-
54
- if docker_exists?
55
- virtualization[:system] = "docker"
56
- virtualization[:role] = "host"
57
- virtualization[:systems][:docker] = "host"
58
- end
59
-
60
- if vboxmanage_exists?
61
- virtualization[:system] = "vbox"
62
- virtualization[:role] = "host"
63
- virtualization[:systems][:vbox] = "host"
64
- end
65
-
66
- if hardware[:boot_rom_version].match?(/VirtualBox/i)
67
- virtualization[:system] = "vbox"
68
- virtualization[:role] = "guest"
69
- virtualization[:systems][:vbox] = "guest"
70
- end
71
-
72
- if fusion_exists?
73
- virtualization[:system] = "vmware"
74
- virtualization[:role] = "host"
75
- virtualization[:systems][:vmware] = "host"
76
- end
77
-
78
- if hardware[:boot_rom_version].match?(/VMW/i)
79
- virtualization[:system] = "vmware"
80
- virtualization[:role] = "guest"
81
- virtualization[:systems][:vmware] = "guest"
82
- end
83
-
84
- if sysctl_exists? && shell_out("sysctl -in kern.hv_vmm_present").stdout.strip.to_i == 1
85
- virtualization[:system] = "qemu"
86
- virtualization[:role] = "guest"
87
- end
88
-
89
- if ioreg_exists? && shell_out("ioreg -l").stdout.include?("pci1ab8,4000")
90
- virtualization[:system] = "parallels"
91
- virtualization[:role] = "guest"
92
- virtualization[:systems][:parallels] = "guest"
93
- elsif prlctl_exists?
94
- virtualization[:system] = "parallels"
95
- virtualization[:role] = "host"
96
- virtualization[:systems][:parallels] = "host"
97
- end
98
-
99
- if hardware["machine_model"].include? "VirtualMac"
100
- virtualization[:system] = "apple"
101
- virtualization[:role] = "guest"
102
- end
103
- end
104
- end
1
+ # frozen_string_literal: true
2
+ #
3
+ # Author:: Pavel Yudin (<pyudin@parallels.com>)
4
+ # Author:: Tim Smith (<tsmith@chef.io>)
5
+ # Copyright:: Copyright (c) 2015 Pavel Yudin
6
+ # Copyright:: Copyright (c) Chef Software Inc.
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
+ Ohai.plugin(:Virtualization) do
23
+ provides "virtualization"
24
+ depends "hardware"
25
+
26
+ def vboxmanage_exists?
27
+ which("VBoxManage")
28
+ end
29
+
30
+ def prlctl_exists?
31
+ which("prlctl")
32
+ end
33
+
34
+ def ioreg_exists?
35
+ which("ioreg")
36
+ end
37
+
38
+ def fusion_exists?
39
+ file_exist?("/Applications/VMware\ Fusion.app/")
40
+ end
41
+
42
+ def docker_exists?
43
+ which("docker")
44
+ end
45
+
46
+ def sysctl_exists?
47
+ which("sysctl")
48
+ end
49
+
50
+ collect_data(:darwin) do
51
+ virtualization Mash.new unless virtualization
52
+ virtualization[:systems] ||= Mash.new
53
+
54
+ if docker_exists?
55
+ virtualization[:system] = "docker"
56
+ virtualization[:role] = "host"
57
+ virtualization[:systems][:docker] = "host"
58
+ end
59
+
60
+ if vboxmanage_exists?
61
+ virtualization[:system] = "vbox"
62
+ virtualization[:role] = "host"
63
+ virtualization[:systems][:vbox] = "host"
64
+ end
65
+
66
+ if hardware[:boot_rom_version].match?(/VirtualBox/i)
67
+ virtualization[:system] = "vbox"
68
+ virtualization[:role] = "guest"
69
+ virtualization[:systems][:vbox] = "guest"
70
+ end
71
+
72
+ if fusion_exists?
73
+ virtualization[:system] = "vmware"
74
+ virtualization[:role] = "host"
75
+ virtualization[:systems][:vmware] = "host"
76
+ end
77
+
78
+ if hardware[:boot_rom_version].match?(/VMW/i)
79
+ virtualization[:system] = "vmware"
80
+ virtualization[:role] = "guest"
81
+ virtualization[:systems][:vmware] = "guest"
82
+ end
83
+
84
+ if sysctl_exists? && shell_out("sysctl -in kern.hv_vmm_present").stdout.strip.to_i == 1
85
+ virtualization[:system] = "qemu"
86
+ virtualization[:role] = "guest"
87
+ end
88
+
89
+ if ioreg_exists? && shell_out("ioreg -l").stdout.include?("pci1ab8,4000")
90
+ virtualization[:system] = "parallels"
91
+ virtualization[:role] = "guest"
92
+ virtualization[:systems][:parallels] = "guest"
93
+ elsif prlctl_exists?
94
+ virtualization[:system] = "parallels"
95
+ virtualization[:role] = "host"
96
+ virtualization[:systems][:parallels] = "host"
97
+ end
98
+
99
+ if hardware["machine_model"].include? "VirtualMac"
100
+ virtualization[:system] = "apple"
101
+ virtualization[:role] = "guest"
102
+ end
103
+ end
104
+ end
@@ -1,67 +1,67 @@
1
- # frozen_string_literal: true
2
- #
3
- # Author:: Dylan Page (<dpage@digitalocean.com>)
4
- # Author:: Stafford Brunk (<stafford.brunk@gmail.com>)
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
- Ohai.plugin(:DigitalOcean) do
20
- require_relative "../mixin/do_metadata"
21
- require_relative "../mixin/http_helper"
22
-
23
- include Ohai::Mixin::DOMetadata
24
- include Ohai::Mixin::HttpHelper
25
-
26
- provides "digital_ocean"
27
-
28
- depends "dmi"
29
-
30
- # look for digitalocean string in dmi bios data
31
- def has_do_dmi?
32
- begin
33
- # detect a vendor of "DigitalOcean"
34
- if dmi[:bios][:all_records][0][:Vendor] == "DigitalOcean"
35
- logger.trace("Plugin DigitalOcean: has_do_dmi? == true")
36
- return true
37
- end
38
- rescue NoMethodError
39
- # dmi[:bios][:all_records][0][:Vendor] may not exist
40
- end
41
- logger.trace("Plugin DigitalOcean: has_do_dmi? == false")
42
- false
43
- end
44
-
45
- def looks_like_digital_ocean?
46
- return true if hint?("digital_ocean")
47
- return true if has_do_dmi? && can_socket_connect?(Ohai::Mixin::DOMetadata::DO_METADATA_ADDR, 80)
48
-
49
- false
50
- end
51
-
52
- # linux and freebsd is all digitalocean supports
53
- collect_data(:linux, :freebsd) do
54
- if looks_like_digital_ocean?
55
- logger.trace("Plugin Digitalocean: looks_like_digital_ocean? == true")
56
- digital_ocean Mash.new
57
- fetch_metadata.each do |k, v|
58
- next if k == "vendor_data" # this may have sensitive data we shouldn't store
59
-
60
- digital_ocean[k] = v
61
- end
62
- else
63
- logger.trace("Plugin Digitalocean: No hints present for and doesn't look like digitalocean")
64
- false
65
- end
66
- end
67
- end
1
+ # frozen_string_literal: true
2
+ #
3
+ # Author:: Dylan Page (<dpage@digitalocean.com>)
4
+ # Author:: Stafford Brunk (<stafford.brunk@gmail.com>)
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
+ Ohai.plugin(:DigitalOcean) do
20
+ require_relative "../mixin/do_metadata"
21
+ require_relative "../mixin/http_helper"
22
+
23
+ include Ohai::Mixin::DOMetadata
24
+ include Ohai::Mixin::HttpHelper
25
+
26
+ provides "digital_ocean"
27
+
28
+ depends "dmi"
29
+
30
+ # look for digitalocean string in dmi bios data
31
+ def has_do_dmi?
32
+ begin
33
+ # detect a vendor of "DigitalOcean"
34
+ if dmi[:bios][:all_records][0][:Vendor] == "DigitalOcean"
35
+ logger.trace("Plugin DigitalOcean: has_do_dmi? == true")
36
+ return true
37
+ end
38
+ rescue NoMethodError
39
+ # dmi[:bios][:all_records][0][:Vendor] may not exist
40
+ end
41
+ logger.trace("Plugin DigitalOcean: has_do_dmi? == false")
42
+ false
43
+ end
44
+
45
+ def looks_like_digital_ocean?
46
+ return true if hint?("digital_ocean")
47
+ return true if has_do_dmi? && can_socket_connect?(Ohai::Mixin::DOMetadata::DO_METADATA_ADDR, 80)
48
+
49
+ false
50
+ end
51
+
52
+ # linux and freebsd is all digitalocean supports
53
+ collect_data(:linux, :freebsd) do
54
+ if looks_like_digital_ocean?
55
+ logger.trace("Plugin Digitalocean: looks_like_digital_ocean? == true")
56
+ digital_ocean Mash.new
57
+ fetch_metadata.each do |k, v|
58
+ next if k == "vendor_data" # this may have sensitive data we shouldn't store
59
+
60
+ digital_ocean[k] = v
61
+ end
62
+ else
63
+ logger.trace("Plugin Digitalocean: No hints present for and doesn't look like digitalocean")
64
+ false
65
+ end
66
+ end
67
+ end
@@ -1,134 +1,134 @@
1
- # frozen_string_literal: true
2
- #
3
- # Author:: Kurt Yoder (ktyopscode@yoderhome.com)
4
- # Copyright:: Copyright (c) 2010 Kurt Yoder
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
- # dmidecode does not return data without access to /dev/mem (or its equivalent)
24
-
25
- collect_data do
26
- require_relative "../common/dmi"
27
- dmi Mash.new
28
-
29
- # all output lines should fall within one of these patterns
30
- handle_line = /^Handle (0x[0-9A-F]{4}), DMI type (\d+), (\d+) bytes/
31
- type_line = /^([A-Z][a-zA-Z ]+)( Information)?/
32
- blank_line = /^\s*$/
33
- data_line = /^\t([^:]+):(?: (.*))?/
34
- extended_data_line = /^\t\t(.+)/
35
- # first lines may contain some interesting information:
36
- # # dmidecode 2.10
37
- # SMBIOS 2.5 present.
38
- # 5 structures occupying 352 bytes.
39
- # Table at 0x000E1000.
40
- dmidecode_version_line = /^# dmidecode (\d+\.\d+)/
41
- smbios_version_line = /^SMBIOS (\d+\.\d+) present\./
42
- structures_line = /^(\d+) structures occupying (\d+) bytes\./
43
- table_location_line = /^Table at (0x[0-9A-E]+)\./
44
-
45
- dmi_record = nil
46
- field = nil
47
-
48
- begin
49
- so = shell_out("dmidecode")
50
- # ==== EXAMPLE RECORD: ====
51
- # Handle 0x0000, DMI type 0, 24 bytes
52
- # BIOS Information
53
- # Vendor: American Megatrends Inc.
54
- # Version: 080012
55
- # ... similar lines trimmed
56
- # Characteristics:
57
- # ISA is supported
58
- # PCI is supported
59
- # ... similar lines trimmed
60
- so.stdout.lines do |line|
61
- next if blank_line.match(line)
62
-
63
- line = line.encode(line.encoding, universal_newline: true)
64
-
65
- if ( dmidecode_version = dmidecode_version_line.match(line) )
66
- dmi[:dmidecode_version] = dmidecode_version[1]
67
-
68
- elsif ( smbios_version = smbios_version_line.match(line) )
69
- dmi[:smbios_version] = smbios_version[1]
70
-
71
- elsif ( structures = structures_line.match(line) )
72
- dmi[:structures] = Mash.new
73
- dmi[:structures][:count] = structures[1]
74
- dmi[:structures][:size] = structures[2]
75
-
76
- elsif ( table_location = table_location_line.match(line) )
77
- dmi[:table_location] = table_location[1]
78
-
79
- elsif ( handle = handle_line.match(line) )
80
- unless Ohai::Common::DMI.allowlisted_ids.include?(handle[2].to_i)
81
- dmi_record = nil
82
- next
83
- end
84
-
85
- dmi_record = { type: Ohai::Common::DMI.id_lookup(handle[2]) }
86
-
87
- dmi[dmi_record[:type]] ||= Mash.new
88
- dmi[dmi_record[:type]][:all_records] ||= []
89
- dmi_record[:position] = dmi[dmi_record[:type]][:all_records].length
90
- dmi[dmi_record[:type]][:all_records].push(Mash.new)
91
- dmi[dmi_record[:type]][:all_records][dmi_record[:position]][:record_id] = handle[1]
92
- dmi[dmi_record[:type]][:all_records][dmi_record[:position]][:size] = handle[2]
93
- field = nil
94
-
95
- elsif ( type = type_line.match(line) )
96
- if dmi_record.nil?
97
- logger.trace("Plugin DMI: unexpected data line found before header; discarding:\n#{line}")
98
- next
99
- end
100
- dmi[dmi_record[:type]][:all_records][dmi_record[:position]][:application_identifier] = type[1]
101
-
102
- elsif ( data = data_line.match(line) )
103
- if dmi_record.nil?
104
- logger.trace("Plugin DMI: unexpected data line found before header; discarding:\n#{line}")
105
- next
106
- end
107
- dmi[dmi_record[:type]][:all_records][dmi_record[:position]][data[1]] = data[2]
108
- field = data[1]
109
-
110
- elsif ( extended_data = extended_data_line.match(line) )
111
- if dmi_record.nil?
112
- logger.trace("Plugin DMI: unexpected extended data line found before header; discarding:\n#{line}")
113
- next
114
- end
115
- if field.nil?
116
- logger.trace("Plugin DMI: unexpected extended data line found outside data section; discarding:\n#{line}")
117
- next
118
- end
119
- # overwrite "raw" value with a new Mash
120
- dmi[dmi_record[:type]][:all_records][dmi_record[:position]][field] = Mash.new unless dmi[dmi_record[:type]][:all_records][dmi_record[:position]][field].class.to_s == "Mash"
121
- dmi[dmi_record[:type]][:all_records][dmi_record[:position]][field][extended_data[1]] = nil
122
-
123
- else
124
- logger.trace("Plugin DMI: unrecognized output line; discarding:\n#{line}")
125
-
126
- end
127
- end
128
-
129
- Ohai::Common::DMI.convenience_keys(dmi)
130
- rescue Ohai::Exceptions::Exec
131
- logger.trace('Plugin DMI: Could not shell_out "dmidecode". Skipping data')
132
- end
133
- end
134
- end
1
+ # frozen_string_literal: true
2
+ #
3
+ # Author:: Kurt Yoder (ktyopscode@yoderhome.com)
4
+ # Copyright:: Copyright (c) 2010 Kurt Yoder
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
+ # dmidecode does not return data without access to /dev/mem (or its equivalent)
24
+
25
+ collect_data do
26
+ require_relative "../common/dmi"
27
+ dmi Mash.new
28
+
29
+ # all output lines should fall within one of these patterns
30
+ handle_line = /^Handle (0x[0-9A-F]{4}), DMI type (\d+), (\d+) bytes/
31
+ type_line = /^([A-Z][a-zA-Z ]+)( Information)?/
32
+ blank_line = /^\s*$/
33
+ data_line = /^\t([^:]+):(?: (.*))?/
34
+ extended_data_line = /^\t\t(.+)/
35
+ # first lines may contain some interesting information:
36
+ # # dmidecode 2.10
37
+ # SMBIOS 2.5 present.
38
+ # 5 structures occupying 352 bytes.
39
+ # Table at 0x000E1000.
40
+ dmidecode_version_line = /^# dmidecode (\d+\.\d+)/
41
+ smbios_version_line = /^SMBIOS (\d+\.\d+) present\./
42
+ structures_line = /^(\d+) structures occupying (\d+) bytes\./
43
+ table_location_line = /^Table at (0x[0-9A-E]+)\./
44
+
45
+ dmi_record = nil
46
+ field = nil
47
+
48
+ begin
49
+ so = shell_out("dmidecode")
50
+ # ==== EXAMPLE RECORD: ====
51
+ # Handle 0x0000, DMI type 0, 24 bytes
52
+ # BIOS Information
53
+ # Vendor: American Megatrends Inc.
54
+ # Version: 080012
55
+ # ... similar lines trimmed
56
+ # Characteristics:
57
+ # ISA is supported
58
+ # PCI is supported
59
+ # ... similar lines trimmed
60
+ so.stdout.lines do |line|
61
+ next if blank_line.match(line)
62
+
63
+ line = line.encode(line.encoding, universal_newline: true)
64
+
65
+ if ( dmidecode_version = dmidecode_version_line.match(line) )
66
+ dmi[:dmidecode_version] = dmidecode_version[1]
67
+
68
+ elsif ( smbios_version = smbios_version_line.match(line) )
69
+ dmi[:smbios_version] = smbios_version[1]
70
+
71
+ elsif ( structures = structures_line.match(line) )
72
+ dmi[:structures] = Mash.new
73
+ dmi[:structures][:count] = structures[1]
74
+ dmi[:structures][:size] = structures[2]
75
+
76
+ elsif ( table_location = table_location_line.match(line) )
77
+ dmi[:table_location] = table_location[1]
78
+
79
+ elsif ( handle = handle_line.match(line) )
80
+ unless Ohai::Common::DMI.allowlisted_ids.include?(handle[2].to_i)
81
+ dmi_record = nil
82
+ next
83
+ end
84
+
85
+ dmi_record = { type: Ohai::Common::DMI.id_lookup(handle[2]) }
86
+
87
+ dmi[dmi_record[:type]] ||= Mash.new
88
+ dmi[dmi_record[:type]][:all_records] ||= []
89
+ dmi_record[:position] = dmi[dmi_record[:type]][:all_records].length
90
+ dmi[dmi_record[:type]][:all_records].push(Mash.new)
91
+ dmi[dmi_record[:type]][:all_records][dmi_record[:position]][:record_id] = handle[1]
92
+ dmi[dmi_record[:type]][:all_records][dmi_record[:position]][:size] = handle[2]
93
+ field = nil
94
+
95
+ elsif ( type = type_line.match(line) )
96
+ if dmi_record.nil?
97
+ logger.trace("Plugin DMI: unexpected data line found before header; discarding:\n#{line}")
98
+ next
99
+ end
100
+ dmi[dmi_record[:type]][:all_records][dmi_record[:position]][:application_identifier] = type[1]
101
+
102
+ elsif ( data = data_line.match(line) )
103
+ if dmi_record.nil?
104
+ logger.trace("Plugin DMI: unexpected data line found before header; discarding:\n#{line}")
105
+ next
106
+ end
107
+ dmi[dmi_record[:type]][:all_records][dmi_record[:position]][data[1]] = data[2]
108
+ field = data[1]
109
+
110
+ elsif ( extended_data = extended_data_line.match(line) )
111
+ if dmi_record.nil?
112
+ logger.trace("Plugin DMI: unexpected extended data line found before header; discarding:\n#{line}")
113
+ next
114
+ end
115
+ if field.nil?
116
+ logger.trace("Plugin DMI: unexpected extended data line found outside data section; discarding:\n#{line}")
117
+ next
118
+ end
119
+ # overwrite "raw" value with a new Mash
120
+ dmi[dmi_record[:type]][:all_records][dmi_record[:position]][field] = Mash.new unless dmi[dmi_record[:type]][:all_records][dmi_record[:position]][field].class.to_s == "Mash"
121
+ dmi[dmi_record[:type]][:all_records][dmi_record[:position]][field][extended_data[1]] = nil
122
+
123
+ else
124
+ logger.trace("Plugin DMI: unrecognized output line; discarding:\n#{line}")
125
+
126
+ end
127
+ end
128
+
129
+ Ohai::Common::DMI.convenience_keys(dmi)
130
+ rescue Ohai::Exceptions::Exec
131
+ logger.trace('Plugin DMI: Could not shell_out "dmidecode". Skipping data')
132
+ end
133
+ end
134
+ end