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,292 +1,292 @@
1
- # frozen_string_literal: true
2
- #
3
- # Author:: Adam Jacob (<adam@chef.io>)
4
- # Author:: Benjamin Black (<nostromo@gmail.com>)
5
- # Author:: Bryan McLellan (<btm@loftninjas.org>)
6
- # Author:: Claire McQuin (<claire@chef.io>)
7
- # Author:: James Gartrell (<jgartrel@gmail.com>)
8
- # Copyright:: Copyright (c) Chef Software Inc.
9
- # Copyright:: Copyright (c) 2009 Bryan McLellan
10
- # License:: Apache License, Version 2.0
11
- #
12
- # Licensed under the Apache License, Version 2.0 (the "License");
13
- # you may not use this file except in compliance with the License.
14
- # You may obtain a copy of the License at
15
- #
16
- # http://www.apache.org/licenses/LICENSE-2.0
17
- #
18
- # Unless required by applicable law or agreed to in writing, software
19
- # distributed under the License is distributed on an "AS IS" BASIS,
20
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
21
- # implied.
22
- # See the License for the specific language governing permissions and
23
- # limitations under the License.
24
- #
25
-
26
- Ohai.plugin(:Kernel) do
27
- provides "kernel", "kernel/modules"
28
-
29
- # common initial kernel attribute values
30
- # @return [Mash] basic kernel properties from uname
31
- def init_kernel
32
- kernel Mash.new
33
- [["uname -s", :name], ["uname -r", :release],
34
- ["uname -v", :version], ["uname -m", :machine],
35
- ["uname -p", :processor]].each do |cmd, property|
36
- so = shell_out(cmd)
37
- kernel[property] = so.stdout.strip
38
- end
39
- kernel
40
- end
41
-
42
- # common *bsd code for collecting modules data
43
- # @return [Mash]
44
- def bsd_modules(path)
45
- modules = Mash.new
46
- so = shell_out(Ohai.abs_path(path).to_s)
47
- so.stdout.lines do |line|
48
- # 1 7 0xc0400000 97f830 kernel
49
- if line =~ /(\d+)\s+(\d+)\s+([0-9a-fx]+)\s+([0-9a-fx]+)\s+([a-zA-Z0-9\_]+)/
50
- modules[$5] = { size: $4, refcount: $2 }
51
- end
52
- end
53
- modules
54
- end
55
-
56
- # given the OperatingSystemSKU value from WMI's Win32_OperatingSystem class
57
- # https://msdn.microsoft.com/en-us/library/aa394239(v=vs.85).aspx
58
- # return if we're on a Server Core installation
59
- # @param [String] sku OperatingSystemSKU value from Win32_OperatingSystem
60
- # @return [boolean]
61
- def server_core?(sku)
62
- return true if [
63
- 12, # Server Datacenter Core
64
- 39, # Server Datacenter without Hyper-V Core
65
- 14, # Server Enterprise Core
66
- 41, # Server Enterprise without Hyper-V Core
67
- 13, # Server Standard Core
68
- 40, # Server Standard without Hyper-V Core
69
- 63, # Small Business Server Premium Core
70
- 53, # Server Solutions Premium Core
71
- 46, # Storage Server Enterprise Core
72
- 43, # Storage Server Express Core
73
- 44, # Storage Server Standard Core
74
- 45, # Storage Server Workgroup Core
75
- 29, # Web Server Core
76
- ].include?(sku)
77
-
78
- false
79
- end
80
-
81
- # given the SystemType value from WMI's Win32_ComputerSystem class
82
- # https://msdn.microsoft.com/en-us/library/aa394102(v=vs.85).aspx
83
- # return the architecture type
84
- # @param [String] sys_type SystemType value from Win32_ComputerSystem
85
- # @return [String] x86_64 or i386
86
- def arch_lookup(sys_type)
87
- return "x86_64" if sys_type == "x64-based PC"
88
- return "i386" if sys_type == "X86-based PC"
89
-
90
- sys_type
91
- end
92
-
93
- # given the ProductType value from WMI's Win32_OperatingSystem class
94
- # https://msdn.microsoft.com/en-us/library/aa394239(v=vs.85).aspx
95
- # return either workstation or server
96
- # @param [Integer] type ProductType value from Win32_OperatingSystem
97
- # @return [String] Workstation or Server
98
- def product_type_decode(type)
99
- return "Workstation" if type == 1
100
-
101
- "Server"
102
- end
103
-
104
- # decode the OSType field from WMI Win32_OperatingSystem class
105
- # https://msdn.microsoft.com/en-us/library/aa394239(v=vs.85).aspx
106
- # @param [Integer] sys_type OSType value from Win32_OperatingSystem
107
- # @return [String] the human consumable OS type value
108
- def os_type_decode(sys_type)
109
- case sys_type
110
- when 18 then "WINNT" # most likely so first
111
- when 0 then "Unknown"
112
- when 1 then "Other"
113
- when 14 then "MSDOS"
114
- when 15 then "WIN3x"
115
- when 16 then "WIN95"
116
- when 17 then "WIN98"
117
- when 19 then "WINCE"
118
- end
119
- end
120
-
121
- # decode the PCSystemType field from WMI Win32_OperatingSystem class
122
- # https://msdn.microsoft.com/en-us/library/aa394239(v=vs.85).aspx
123
- # @param [Integer] type the integer value from PCSystemType
124
- # @return [String] the human consumable OS type value
125
- def pc_system_type_decode(type)
126
- case type
127
- when 4 then "Enterprise Server" # most likely so first
128
- when 0 then "Unspecified"
129
- when 1 then "Desktop"
130
- when 2 then "Mobile"
131
- when 3 then "Workstation"
132
- when 5 then "SOHO Server"
133
- when 6 then "Appliance PC"
134
- when 7 then "Performance Server"
135
- when 8 then "Maximum"
136
- end
137
- end
138
-
139
- # see if a WMI name is in the blocked list so we can avoid writing
140
- # out useless data to ohai
141
- #
142
- # @param [String] name the wmi name to check
143
- # @return [Boolean] is the wmi name in the blocked list
144
- def blocked_wmi_name?(name)
145
- [
146
- "creation_class_name", # this is just the wmi name
147
- "cs_creation_class_name", # this is just the wmi name
148
- "oem_logo_bitmap", # this is the entire OEM bitmap file
149
- "total_swap_space_size", # already in memory plugin
150
- "total_virtual_memory_size", # already in memory plugin
151
- "total_virtual_memory_size", # already in memory plugin
152
- "free_physical_memory", # already in memory plugin
153
- "free_space_in_paging_files", # already in memory plugin
154
- "free_virtual_memory", # already in memory plugin
155
- ].include?(name)
156
- end
157
-
158
- collect_data(:target) do
159
- # intentionally left blank
160
- end
161
-
162
- collect_data(:default) do
163
- kernel init_kernel
164
- end
165
-
166
- collect_data(:darwin) do
167
- kernel init_kernel
168
- kernel[:os] = kernel[:name]
169
-
170
- so = shell_out("sysctl -n hw.optional.x86_64")
171
- if so.stdout.strip.to_i == 1
172
- kernel[:machine] = "x86_64"
173
- end
174
-
175
- modules = Mash.new
176
- so = shell_out("kextstat -k -l")
177
- so.stdout.lines do |line|
178
- if line =~ /(\d+)\s+(\d+)\s+0x[0-9a-f]+\s+0x([0-9a-f]+)\s+0x[0-9a-f]+\s+([a-zA-Z0-9\.]+) \(([0-9\.]+)\)/
179
- modules[$4] = { version: $5, size: $3.hex, index: $1, refcount: $2 }
180
- end
181
- end
182
-
183
- kernel[:modules] = modules
184
- end
185
-
186
- collect_data(:freebsd, :dragonflybsd) do
187
- kernel init_kernel
188
- kernel[:os] = kernel[:name]
189
-
190
- so = shell_out("uname -i")
191
- kernel[:ident] = so.stdout.strip
192
- so = shell_out("sysctl kern.securelevel")
193
- kernel[:securelevel] = so.stdout.split($/).select { |e| e =~ /kern.securelevel: (.+)$/ }
194
-
195
- kernel[:modules] = bsd_modules("/sbin/kldstat")
196
- end
197
-
198
- collect_data(:linux) do
199
- kernel init_kernel
200
-
201
- so = shell_out("uname -o")
202
- kernel[:os] = so.stdout.strip
203
-
204
- modules = Mash.new
205
- so = shell_out("env lsmod")
206
- so.stdout.lines do |line|
207
- if line =~ /([a-zA-Z0-9\_]+)\s+(\d+)\s+(\d+)/
208
- modules[$1] = { size: $2, refcount: $3 }
209
- # Making sure to get the module version that has been loaded
210
- if file_exist?("/sys/module/#{$1}/version")
211
- version = file_read("/sys/module/#{$1}/version").chomp.strip
212
- modules[$1]["version"] = version unless version.empty?
213
- end
214
- end
215
- end
216
-
217
- kernel[:modules] = modules
218
- end
219
-
220
- collect_data(:netbsd, :openbsd) do
221
- kernel init_kernel
222
- kernel[:os] = kernel[:name]
223
-
224
- so = shell_out("sysctl kern.securelevel")
225
- kernel[:securelevel] = so.stdout.split($/).select { |e| e =~ /kern.securelevel:\ (.+)$/ }
226
-
227
- kernel[:modules] = bsd_modules("/usr/bin/modstat")
228
- end
229
-
230
- collect_data(:solaris2) do
231
- kernel init_kernel
232
-
233
- so = shell_out("uname -s")
234
- kernel[:os] = so.stdout.strip
235
-
236
- so = file_open("/etc/release", &:gets)
237
- md = /(?<update>\d.*\d)/.match(so)
238
- kernel[:update] = md[:update] if md
239
-
240
- modules = Mash.new
241
-
242
- so = shell_out("modinfo")
243
- # EXAMPLE:
244
- # Id Loadaddr Size Info Rev Module Name
245
- # 6 1180000 4623 1 1 specfs (filesystem for specfs)
246
- module_description = /\s*(\d+)\s+([a-f\d]+)\s+([a-f\d]+)\s+(?:[\-\d]+)\s+(?:\d+)\s+(\S+)\s+\((.+)\)$/
247
- so.stdout.lines do |line|
248
- if ( mod = module_description.match(line) )
249
- modules[mod[4]] = { id: mod[1].to_i, loadaddr: mod[2], size: mod[3].to_i(16), description: mod[5] }
250
- end
251
- end
252
-
253
- kernel[:modules] = modules
254
- end
255
-
256
- collect_data(:windows) do
257
- require "win32ole" unless defined?(WIN32OLE)
258
- require "wmi-lite/wmi" unless defined?(WmiLite::Wmi)
259
-
260
- WIN32OLE.codepage = WIN32OLE::CP_UTF8
261
-
262
- wmi = WmiLite::Wmi.new
263
-
264
- kernel Mash.new
265
-
266
- host = wmi.first_of("Win32_OperatingSystem")
267
- kernel[:os_info] = Mash.new
268
- host.wmi_ole_object.properties_.each do |p|
269
- next if blocked_wmi_name?(p.name.wmi_underscore)
270
-
271
- kernel[:os_info][p.name.wmi_underscore.to_sym] = host[p.name.downcase]
272
- end
273
-
274
- kernel[:name] = (kernel[:os_info][:caption]).to_s
275
- kernel[:release] = (kernel[:os_info][:version]).to_s
276
- kernel[:version] = "#{kernel[:os_info][:version]} #{kernel[:os_info][:csd_version]} Build #{kernel[:os_info][:build_number]}"
277
- kernel[:os] = os_type_decode(kernel[:os_info][:os_type]) || languages[:ruby][:host_os]
278
- kernel[:product_type] = product_type_decode(kernel[:os_info][:product_type])
279
- kernel[:server_core] = server_core?(kernel[:os_info][:operating_system_sku])
280
-
281
- kernel[:cs_info] = Mash.new
282
- host = wmi.first_of("Win32_ComputerSystem")
283
- host.wmi_ole_object.properties_.each do |p|
284
- next if blocked_wmi_name?(p.name.wmi_underscore)
285
-
286
- kernel[:cs_info][p.name.wmi_underscore.to_sym] = host[p.name.downcase]
287
- end
288
-
289
- kernel[:machine] = arch_lookup((kernel[:cs_info][:system_type]).to_s)
290
- kernel[:system_type] = pc_system_type_decode(kernel[:cs_info][:pc_system_type])
291
- end
292
- end
1
+ # frozen_string_literal: true
2
+ #
3
+ # Author:: Adam Jacob (<adam@chef.io>)
4
+ # Author:: Benjamin Black (<nostromo@gmail.com>)
5
+ # Author:: Bryan McLellan (<btm@loftninjas.org>)
6
+ # Author:: Claire McQuin (<claire@chef.io>)
7
+ # Author:: James Gartrell (<jgartrel@gmail.com>)
8
+ # Copyright:: Copyright (c) Chef Software Inc.
9
+ # Copyright:: Copyright (c) 2009 Bryan McLellan
10
+ # License:: Apache License, Version 2.0
11
+ #
12
+ # Licensed under the Apache License, Version 2.0 (the "License");
13
+ # you may not use this file except in compliance with the License.
14
+ # You may obtain a copy of the License at
15
+ #
16
+ # http://www.apache.org/licenses/LICENSE-2.0
17
+ #
18
+ # Unless required by applicable law or agreed to in writing, software
19
+ # distributed under the License is distributed on an "AS IS" BASIS,
20
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
21
+ # implied.
22
+ # See the License for the specific language governing permissions and
23
+ # limitations under the License.
24
+ #
25
+
26
+ Ohai.plugin(:Kernel) do
27
+ provides "kernel", "kernel/modules"
28
+
29
+ # common initial kernel attribute values
30
+ # @return [Mash] basic kernel properties from uname
31
+ def init_kernel
32
+ kernel Mash.new
33
+ [["uname -s", :name], ["uname -r", :release],
34
+ ["uname -v", :version], ["uname -m", :machine],
35
+ ["uname -p", :processor]].each do |cmd, property|
36
+ so = shell_out(cmd)
37
+ kernel[property] = so.stdout.strip
38
+ end
39
+ kernel
40
+ end
41
+
42
+ # common *bsd code for collecting modules data
43
+ # @return [Mash]
44
+ def bsd_modules(path)
45
+ modules = Mash.new
46
+ so = shell_out(Ohai.abs_path(path).to_s)
47
+ so.stdout.lines do |line|
48
+ # 1 7 0xc0400000 97f830 kernel
49
+ if line =~ /(\d+)\s+(\d+)\s+([0-9a-fx]+)\s+([0-9a-fx]+)\s+([a-zA-Z0-9\_]+)/
50
+ modules[$5] = { size: $4, refcount: $2 }
51
+ end
52
+ end
53
+ modules
54
+ end
55
+
56
+ # given the OperatingSystemSKU value from WMI's Win32_OperatingSystem class
57
+ # https://msdn.microsoft.com/en-us/library/aa394239(v=vs.85).aspx
58
+ # return if we're on a Server Core installation
59
+ # @param [String] sku OperatingSystemSKU value from Win32_OperatingSystem
60
+ # @return [boolean]
61
+ def server_core?(sku)
62
+ return true if [
63
+ 12, # Server Datacenter Core
64
+ 39, # Server Datacenter without Hyper-V Core
65
+ 14, # Server Enterprise Core
66
+ 41, # Server Enterprise without Hyper-V Core
67
+ 13, # Server Standard Core
68
+ 40, # Server Standard without Hyper-V Core
69
+ 63, # Small Business Server Premium Core
70
+ 53, # Server Solutions Premium Core
71
+ 46, # Storage Server Enterprise Core
72
+ 43, # Storage Server Express Core
73
+ 44, # Storage Server Standard Core
74
+ 45, # Storage Server Workgroup Core
75
+ 29, # Web Server Core
76
+ ].include?(sku)
77
+
78
+ false
79
+ end
80
+
81
+ # given the SystemType value from WMI's Win32_ComputerSystem class
82
+ # https://msdn.microsoft.com/en-us/library/aa394102(v=vs.85).aspx
83
+ # return the architecture type
84
+ # @param [String] sys_type SystemType value from Win32_ComputerSystem
85
+ # @return [String] x86_64 or i386
86
+ def arch_lookup(sys_type)
87
+ return "x86_64" if sys_type == "x64-based PC"
88
+ return "i386" if sys_type == "X86-based PC"
89
+
90
+ sys_type
91
+ end
92
+
93
+ # given the ProductType value from WMI's Win32_OperatingSystem class
94
+ # https://msdn.microsoft.com/en-us/library/aa394239(v=vs.85).aspx
95
+ # return either workstation or server
96
+ # @param [Integer] type ProductType value from Win32_OperatingSystem
97
+ # @return [String] Workstation or Server
98
+ def product_type_decode(type)
99
+ return "Workstation" if type == 1
100
+
101
+ "Server"
102
+ end
103
+
104
+ # decode the OSType field from WMI Win32_OperatingSystem class
105
+ # https://msdn.microsoft.com/en-us/library/aa394239(v=vs.85).aspx
106
+ # @param [Integer] sys_type OSType value from Win32_OperatingSystem
107
+ # @return [String] the human consumable OS type value
108
+ def os_type_decode(sys_type)
109
+ case sys_type
110
+ when 18 then "WINNT" # most likely so first
111
+ when 0 then "Unknown"
112
+ when 1 then "Other"
113
+ when 14 then "MSDOS"
114
+ when 15 then "WIN3x"
115
+ when 16 then "WIN95"
116
+ when 17 then "WIN98"
117
+ when 19 then "WINCE"
118
+ end
119
+ end
120
+
121
+ # decode the PCSystemType field from WMI Win32_OperatingSystem class
122
+ # https://msdn.microsoft.com/en-us/library/aa394239(v=vs.85).aspx
123
+ # @param [Integer] type the integer value from PCSystemType
124
+ # @return [String] the human consumable OS type value
125
+ def pc_system_type_decode(type)
126
+ case type
127
+ when 4 then "Enterprise Server" # most likely so first
128
+ when 0 then "Unspecified"
129
+ when 1 then "Desktop"
130
+ when 2 then "Mobile"
131
+ when 3 then "Workstation"
132
+ when 5 then "SOHO Server"
133
+ when 6 then "Appliance PC"
134
+ when 7 then "Performance Server"
135
+ when 8 then "Maximum"
136
+ end
137
+ end
138
+
139
+ # see if a WMI name is in the blocked list so we can avoid writing
140
+ # out useless data to ohai
141
+ #
142
+ # @param [String] name the wmi name to check
143
+ # @return [Boolean] is the wmi name in the blocked list
144
+ def blocked_wmi_name?(name)
145
+ [
146
+ "creation_class_name", # this is just the wmi name
147
+ "cs_creation_class_name", # this is just the wmi name
148
+ "oem_logo_bitmap", # this is the entire OEM bitmap file
149
+ "total_swap_space_size", # already in memory plugin
150
+ "total_virtual_memory_size", # already in memory plugin
151
+ "total_virtual_memory_size", # already in memory plugin
152
+ "free_physical_memory", # already in memory plugin
153
+ "free_space_in_paging_files", # already in memory plugin
154
+ "free_virtual_memory", # already in memory plugin
155
+ ].include?(name)
156
+ end
157
+
158
+ collect_data(:target) do
159
+ # intentionally left blank
160
+ end
161
+
162
+ collect_data(:default) do
163
+ kernel init_kernel
164
+ end
165
+
166
+ collect_data(:darwin) do
167
+ kernel init_kernel
168
+ kernel[:os] = kernel[:name]
169
+
170
+ so = shell_out("sysctl -n hw.optional.x86_64")
171
+ if so.stdout.strip.to_i == 1
172
+ kernel[:machine] = "x86_64"
173
+ end
174
+
175
+ modules = Mash.new
176
+ so = shell_out("kextstat -k -l")
177
+ so.stdout.lines do |line|
178
+ if line =~ /(\d+)\s+(\d+)\s+0x[0-9a-f]+\s+0x([0-9a-f]+)\s+0x[0-9a-f]+\s+([a-zA-Z0-9\.]+) \(([0-9\.]+)\)/
179
+ modules[$4] = { version: $5, size: $3.hex, index: $1, refcount: $2 }
180
+ end
181
+ end
182
+
183
+ kernel[:modules] = modules
184
+ end
185
+
186
+ collect_data(:freebsd, :dragonflybsd) do
187
+ kernel init_kernel
188
+ kernel[:os] = kernel[:name]
189
+
190
+ so = shell_out("uname -i")
191
+ kernel[:ident] = so.stdout.strip
192
+ so = shell_out("sysctl kern.securelevel")
193
+ kernel[:securelevel] = so.stdout.split($/).select { |e| e =~ /kern.securelevel: (.+)$/ }
194
+
195
+ kernel[:modules] = bsd_modules("/sbin/kldstat")
196
+ end
197
+
198
+ collect_data(:linux) do
199
+ kernel init_kernel
200
+
201
+ so = shell_out("uname -o")
202
+ kernel[:os] = so.stdout.strip
203
+
204
+ modules = Mash.new
205
+ so = shell_out("env lsmod")
206
+ so.stdout.lines do |line|
207
+ if line =~ /([a-zA-Z0-9\_]+)\s+(\d+)\s+(\d+)/
208
+ modules[$1] = { size: $2, refcount: $3 }
209
+ # Making sure to get the module version that has been loaded
210
+ if file_exist?("/sys/module/#{$1}/version")
211
+ version = file_read("/sys/module/#{$1}/version").chomp.strip
212
+ modules[$1]["version"] = version unless version.empty?
213
+ end
214
+ end
215
+ end
216
+
217
+ kernel[:modules] = modules
218
+ end
219
+
220
+ collect_data(:netbsd, :openbsd) do
221
+ kernel init_kernel
222
+ kernel[:os] = kernel[:name]
223
+
224
+ so = shell_out("sysctl kern.securelevel")
225
+ kernel[:securelevel] = so.stdout.split($/).select { |e| e =~ /kern.securelevel:\ (.+)$/ }
226
+
227
+ kernel[:modules] = bsd_modules("/usr/bin/modstat")
228
+ end
229
+
230
+ collect_data(:solaris2) do
231
+ kernel init_kernel
232
+
233
+ so = shell_out("uname -s")
234
+ kernel[:os] = so.stdout.strip
235
+
236
+ so = file_open("/etc/release", &:gets)
237
+ md = /(?<update>\d.*\d)/.match(so)
238
+ kernel[:update] = md[:update] if md
239
+
240
+ modules = Mash.new
241
+
242
+ so = shell_out("modinfo")
243
+ # EXAMPLE:
244
+ # Id Loadaddr Size Info Rev Module Name
245
+ # 6 1180000 4623 1 1 specfs (filesystem for specfs)
246
+ module_description = /\s*(\d+)\s+([a-f\d]+)\s+([a-f\d]+)\s+(?:[\-\d]+)\s+(?:\d+)\s+(\S+)\s+\((.+)\)$/
247
+ so.stdout.lines do |line|
248
+ if ( mod = module_description.match(line) )
249
+ modules[mod[4]] = { id: mod[1].to_i, loadaddr: mod[2], size: mod[3].to_i(16), description: mod[5] }
250
+ end
251
+ end
252
+
253
+ kernel[:modules] = modules
254
+ end
255
+
256
+ collect_data(:windows) do
257
+ require "win32ole" unless defined?(WIN32OLE)
258
+ require "wmi-lite/wmi" unless defined?(WmiLite::Wmi)
259
+
260
+ WIN32OLE.codepage = WIN32OLE::CP_UTF8
261
+
262
+ wmi = WmiLite::Wmi.new
263
+
264
+ kernel Mash.new
265
+
266
+ host = wmi.first_of("Win32_OperatingSystem")
267
+ kernel[:os_info] = Mash.new
268
+ host.wmi_ole_object.properties_.each do |p|
269
+ next if blocked_wmi_name?(p.name.wmi_underscore)
270
+
271
+ kernel[:os_info][p.name.wmi_underscore.to_sym] = host[p.name.downcase]
272
+ end
273
+
274
+ kernel[:name] = (kernel[:os_info][:caption]).to_s
275
+ kernel[:release] = (kernel[:os_info][:version]).to_s
276
+ kernel[:version] = "#{kernel[:os_info][:version]} #{kernel[:os_info][:csd_version]} Build #{kernel[:os_info][:build_number]}"
277
+ kernel[:os] = os_type_decode(kernel[:os_info][:os_type]) || languages[:ruby][:host_os]
278
+ kernel[:product_type] = product_type_decode(kernel[:os_info][:product_type])
279
+ kernel[:server_core] = server_core?(kernel[:os_info][:operating_system_sku])
280
+
281
+ kernel[:cs_info] = Mash.new
282
+ host = wmi.first_of("Win32_ComputerSystem")
283
+ host.wmi_ole_object.properties_.each do |p|
284
+ next if blocked_wmi_name?(p.name.wmi_underscore)
285
+
286
+ kernel[:cs_info][p.name.wmi_underscore.to_sym] = host[p.name.downcase]
287
+ end
288
+
289
+ kernel[:machine] = arch_lookup((kernel[:cs_info][:system_type]).to_s)
290
+ kernel[:system_type] = pc_system_type_decode(kernel[:cs_info][:pc_system_type])
291
+ end
292
+ end
@@ -1,27 +1,27 @@
1
- # frozen_string_literal: true
2
- #
3
- # Cookbook Name:: apache2
4
- # Recipe:: default
5
- #
6
- # Copyright:: Copyright (c) Chef Software Inc.
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 implied.
17
- # See the License for the specific language governing permissions and
18
- # limitations under the License.
19
- #
20
-
21
- Ohai.plugin(:Keys) do
22
- provides "keys"
23
-
24
- collect_data do
25
- keys Mash.new
26
- end
27
- end
1
+ # frozen_string_literal: true
2
+ #
3
+ # Cookbook Name:: apache2
4
+ # Recipe:: default
5
+ #
6
+ # Copyright:: Copyright (c) Chef Software Inc.
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 implied.
17
+ # See the License for the specific language governing permissions and
18
+ # limitations under the License.
19
+ #
20
+
21
+ Ohai.plugin(:Keys) do
22
+ provides "keys"
23
+
24
+ collect_data do
25
+ keys Mash.new
26
+ end
27
+ end