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.
- checksums.yaml +4 -4
- data/Gemfile +28 -28
- data/LICENSE +201 -201
- data/bin/ohai +25 -25
- data/lib/ohai/application.rb +189 -189
- data/lib/ohai/common/dmi.rb +167 -167
- data/lib/ohai/config.rb +51 -51
- data/lib/ohai/dsl/plugin/versionvii.rb +203 -203
- data/lib/ohai/dsl/plugin.rb +232 -232
- data/lib/ohai/dsl.rb +22 -22
- data/lib/ohai/exception.rb +36 -36
- data/lib/ohai/hints.rb +68 -68
- data/lib/ohai/loader.rb +178 -178
- data/lib/ohai/log.rb +34 -34
- data/lib/ohai/mash.rb +22 -22
- data/lib/ohai/mixin/alibaba_metadata.rb +83 -83
- data/lib/ohai/mixin/azure_metadata.rb +105 -105
- data/lib/ohai/mixin/chef_utils_wiring.rb +52 -52
- data/lib/ohai/mixin/command.rb +4 -4
- data/lib/ohai/mixin/constant_helper.rb +55 -55
- data/lib/ohai/mixin/dmi_decode.rb +54 -54
- data/lib/ohai/mixin/do_metadata.rb +48 -48
- data/lib/ohai/mixin/ec2_metadata.rb +264 -270
- data/lib/ohai/mixin/gce_metadata.rb +79 -79
- data/lib/ohai/mixin/http_helper.rb +64 -64
- data/lib/ohai/mixin/json_helper.rb +36 -36
- data/lib/ohai/mixin/network_helper.rb +92 -92
- data/lib/ohai/mixin/oci_metadata.rb +60 -60
- data/lib/ohai/mixin/os.rb +128 -128
- data/lib/ohai/mixin/scaleway_metadata.rb +51 -51
- data/lib/ohai/mixin/seconds_to_human.rb +52 -52
- data/lib/ohai/mixin/shell_out.rb +51 -51
- data/lib/ohai/mixin/softlayer_metadata.rb +74 -74
- data/lib/ohai/mixin/string.rb +31 -31
- data/lib/ohai/mixin/train_helpers.rb +36 -36
- data/lib/ohai/mixin/which.rb +39 -39
- data/lib/ohai/plugin_config.rb +47 -47
- data/lib/ohai/plugins/aix/kernel.rb +50 -50
- data/lib/ohai/plugins/aix/memory.rb +37 -37
- data/lib/ohai/plugins/aix/network.rb +142 -142
- data/lib/ohai/plugins/aix/platform.rb +30 -30
- data/lib/ohai/plugins/aix/uptime.rb +54 -54
- data/lib/ohai/plugins/aix/virtualization.rb +154 -154
- data/lib/ohai/plugins/alibaba.rb +72 -72
- data/lib/ohai/plugins/azure.rb +154 -154
- data/lib/ohai/plugins/bsd/virtualization.rb +121 -121
- data/lib/ohai/plugins/c.rb +178 -178
- data/lib/ohai/plugins/chef.rb +50 -50
- data/lib/ohai/plugins/cloud.rb +379 -379
- data/lib/ohai/plugins/command.rb +26 -26
- data/lib/ohai/plugins/cpu.rb +642 -642
- data/lib/ohai/plugins/darwin/hardware.rb +99 -99
- data/lib/ohai/plugins/darwin/memory.rb +62 -62
- data/lib/ohai/plugins/darwin/network.rb +207 -207
- data/lib/ohai/plugins/darwin/platform.rb +40 -40
- data/lib/ohai/plugins/darwin/virtualization.rb +104 -104
- data/lib/ohai/plugins/digital_ocean.rb +67 -67
- data/lib/ohai/plugins/dmi.rb +134 -134
- data/lib/ohai/plugins/docker.rb +58 -58
- data/lib/ohai/plugins/dragonflybsd/memory.rb +60 -60
- data/lib/ohai/plugins/dragonflybsd/network.rb +128 -128
- data/lib/ohai/plugins/dragonflybsd/platform.rb +28 -28
- data/lib/ohai/plugins/ec2.rb +148 -148
- data/lib/ohai/plugins/elixir.rb +36 -36
- data/lib/ohai/plugins/erlang.rb +60 -60
- data/lib/ohai/plugins/eucalyptus.rb +86 -86
- data/lib/ohai/plugins/filesystem.rb +753 -753
- data/lib/ohai/plugins/fips.rb +36 -36
- data/lib/ohai/plugins/freebsd/memory.rb +60 -60
- data/lib/ohai/plugins/freebsd/network.rb +128 -128
- data/lib/ohai/plugins/freebsd/platform.rb +28 -28
- data/lib/ohai/plugins/gce.rb +89 -89
- data/lib/ohai/plugins/go.rb +34 -34
- data/lib/ohai/plugins/groovy.rb +38 -38
- data/lib/ohai/plugins/grub2.rb +40 -40
- data/lib/ohai/plugins/habitat.rb +73 -73
- data/lib/ohai/plugins/haskell.rb +96 -96
- data/lib/ohai/plugins/hostname.rb +133 -133
- data/lib/ohai/plugins/init_package.rb +26 -26
- data/lib/ohai/plugins/java.rb +78 -78
- data/lib/ohai/plugins/kernel.rb +292 -292
- data/lib/ohai/plugins/keys.rb +27 -27
- data/lib/ohai/plugins/languages.rb +26 -26
- data/lib/ohai/plugins/libvirt.rb +114 -114
- data/lib/ohai/plugins/linode.rb +73 -73
- data/lib/ohai/plugins/linux/block_device.rb +48 -48
- data/lib/ohai/plugins/linux/hostnamectl.rb +34 -34
- data/lib/ohai/plugins/linux/interrupts.rb +84 -83
- data/lib/ohai/plugins/linux/ipc.rb +52 -52
- data/lib/ohai/plugins/linux/livepatch.rb +38 -38
- data/lib/ohai/plugins/linux/lsb.rb +46 -46
- data/lib/ohai/plugins/linux/lspci.rb +80 -80
- data/lib/ohai/plugins/linux/machineid.rb +36 -36
- data/lib/ohai/plugins/linux/mdadm.rb +120 -120
- data/lib/ohai/plugins/linux/memory.rb +106 -106
- data/lib/ohai/plugins/linux/network.rb +879 -879
- data/lib/ohai/plugins/linux/os_release.rb +38 -38
- data/lib/ohai/plugins/linux/platform.rb +314 -314
- data/lib/ohai/plugins/linux/selinux.rb +69 -69
- data/lib/ohai/plugins/linux/sessions.rb +54 -54
- data/lib/ohai/plugins/linux/sysctl.rb +39 -39
- data/lib/ohai/plugins/linux/systemd_paths.rb +36 -36
- data/lib/ohai/plugins/linux/tc.rb +61 -61
- data/lib/ohai/plugins/linux/virtualization.rb +300 -300
- data/lib/ohai/plugins/lua.rb +39 -39
- data/lib/ohai/plugins/mono.rb +50 -50
- data/lib/ohai/plugins/netbsd/memory.rb +99 -99
- data/lib/ohai/plugins/netbsd/network.rb +122 -122
- data/lib/ohai/plugins/netbsd/platform.rb +28 -28
- data/lib/ohai/plugins/network.rb +186 -186
- data/lib/ohai/plugins/nodejs.rb +40 -40
- data/lib/ohai/plugins/oci.rb +94 -94
- data/lib/ohai/plugins/ohai.rb +29 -29
- data/lib/ohai/plugins/ohai_time.rb +26 -26
- data/lib/ohai/plugins/openbsd/memory.rb +99 -99
- data/lib/ohai/plugins/openbsd/network.rb +122 -122
- data/lib/ohai/plugins/openbsd/platform.rb +28 -28
- data/lib/ohai/plugins/openstack.rb +84 -84
- data/lib/ohai/plugins/os.rb +55 -55
- data/lib/ohai/plugins/packages.rb +234 -234
- data/lib/ohai/plugins/passwd.rb +104 -104
- data/lib/ohai/plugins/perl.rb +45 -45
- data/lib/ohai/plugins/php.rb +52 -52
- data/lib/ohai/plugins/platform.rb +41 -41
- data/lib/ohai/plugins/powershell.rb +82 -82
- data/lib/ohai/plugins/ps.rb +35 -35
- data/lib/ohai/plugins/python.rb +43 -43
- data/lib/ohai/plugins/rackspace.rb +177 -177
- data/lib/ohai/plugins/root_group.rb +41 -41
- data/lib/ohai/plugins/rpm.rb +121 -121
- data/lib/ohai/plugins/ruby.rb +66 -66
- data/lib/ohai/plugins/rust.rb +34 -34
- data/lib/ohai/plugins/scala.rb +38 -38
- data/lib/ohai/plugins/scaleway.rb +58 -58
- data/lib/ohai/plugins/scsi.rb +52 -52
- data/lib/ohai/plugins/shard.rb +142 -142
- data/lib/ohai/plugins/shells.rb +32 -32
- data/lib/ohai/plugins/softlayer.rb +48 -48
- data/lib/ohai/plugins/solaris2/dmi.rb +191 -191
- data/lib/ohai/plugins/solaris2/memory.rb +32 -32
- data/lib/ohai/plugins/solaris2/network.rb +192 -192
- data/lib/ohai/plugins/solaris2/platform.rb +58 -58
- data/lib/ohai/plugins/solaris2/virtualization.rb +90 -90
- data/lib/ohai/plugins/ssh_host_key.rb +84 -84
- data/lib/ohai/plugins/sysconf.rb +46 -46
- data/lib/ohai/plugins/timezone.rb +45 -45
- data/lib/ohai/plugins/train.rb +35 -35
- data/lib/ohai/plugins/uptime.rb +95 -95
- data/lib/ohai/plugins/virtualbox.rb +197 -197
- data/lib/ohai/plugins/vmware.rb +109 -109
- data/lib/ohai/plugins/windows/dmi.rb +95 -95
- data/lib/ohai/plugins/windows/drivers.rb +52 -52
- data/lib/ohai/plugins/windows/memory.rb +39 -39
- data/lib/ohai/plugins/windows/network.rb +222 -222
- data/lib/ohai/plugins/windows/platform.rb +34 -34
- data/lib/ohai/plugins/windows/system_enclosure.rb +29 -29
- data/lib/ohai/plugins/windows/virtualization.rb +45 -45
- data/lib/ohai/plugins/zpools.rb +94 -94
- data/lib/ohai/provides_map.rb +208 -208
- data/lib/ohai/runner.rb +128 -126
- data/lib/ohai/system.rb +258 -258
- data/lib/ohai/train_transport.rb +29 -29
- data/lib/ohai/util/file_helper.rb +6 -6
- data/lib/ohai/util/ip_helper.rb +56 -56
- data/lib/ohai/util/win32.rb +47 -47
- data/lib/ohai/version.rb +23 -23
- data/lib/ohai.rb +23 -23
- data/ohai.gemspec +35 -35
- metadata +9 -15
data/lib/ohai/plugins/uptime.rb
CHANGED
@@ -1,95 +1,95 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
#
|
3
|
-
# Author:: Adam Jacob (<adam@chef.io>)
|
4
|
-
# Author:: Bryan McLellan (<btm@loftninjas.org>)
|
5
|
-
# Author:: Claire McQuin (<claire@chef.io>)
|
6
|
-
# Author:: Doug MacEachern (<dougm@vmware.com>)
|
7
|
-
# Author:: Kurt Yoder (<ktyopscode@yoderhome.com>)
|
8
|
-
# Author:: Paul Mooring (<paul@chef.io>)
|
9
|
-
# Copyright:: Copyright (c) Chef Software Inc.
|
10
|
-
# Copyright:: Copyright (c) 2009 Bryan McLellan
|
11
|
-
# Copyright:: Copyright (c) 2010 VMware, Inc.
|
12
|
-
# License:: Apache License, Version 2.0
|
13
|
-
#
|
14
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
15
|
-
# you may not use this file except in compliance with the License.
|
16
|
-
# You may obtain a copy of the License at
|
17
|
-
#
|
18
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
19
|
-
#
|
20
|
-
# Unless required by applicable law or agreed to in writing, software
|
21
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
22
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
23
|
-
# implied.
|
24
|
-
# See the License for the specific language governing permissions and
|
25
|
-
# limitations under the License.
|
26
|
-
#
|
27
|
-
|
28
|
-
Ohai.plugin(:Uptime) do
|
29
|
-
require_relative "../mixin/seconds_to_human"
|
30
|
-
provides "uptime", "uptime_seconds"
|
31
|
-
provides "idletime", "idletime_seconds" # linux only
|
32
|
-
|
33
|
-
def collect_uptime(path)
|
34
|
-
# kern.boottime: { sec = 1232765114, usec = 823118 } Fri Jan 23 18:45:14 2009
|
35
|
-
so = shell_out("#{Ohai.abs_path(path)} kern.boottime")
|
36
|
-
so.stdout.lines do |line|
|
37
|
-
if line =~ /kern.boottime:\D+(\d+)/
|
38
|
-
usec = Time.new.to_i - $1.to_i
|
39
|
-
return [usec, seconds_to_human(usec)]
|
40
|
-
end
|
41
|
-
end
|
42
|
-
[nil, nil]
|
43
|
-
end
|
44
|
-
|
45
|
-
collect_data(:darwin) do
|
46
|
-
data = collect_uptime("/usr/sbin/sysctl")
|
47
|
-
uptime_seconds data.first
|
48
|
-
uptime data.last
|
49
|
-
end
|
50
|
-
|
51
|
-
collect_data(:freebsd, :netbsd, :dragonflybsd) do
|
52
|
-
data = collect_uptime("/sbin/sysctl")
|
53
|
-
uptime_seconds data.first
|
54
|
-
uptime data.last
|
55
|
-
end
|
56
|
-
|
57
|
-
collect_data(:linux) do
|
58
|
-
uptime, idletime = file_open("/proc/uptime").gets.split
|
59
|
-
uptime_seconds uptime.to_i
|
60
|
-
uptime seconds_to_human(uptime.to_i)
|
61
|
-
idletime_seconds idletime.to_i
|
62
|
-
idletime seconds_to_human(idletime.to_i)
|
63
|
-
end
|
64
|
-
|
65
|
-
collect_data(:openbsd) do
|
66
|
-
# kern.boottime=Tue Nov 1 14:45:52 2011
|
67
|
-
so = shell_out("#{Ohai.abs_path( "/sbin/sysctl" )} #kern.boottime")
|
68
|
-
so.stdout.lines do |line|
|
69
|
-
if line =~ /kern.boottime=(.+)/
|
70
|
-
uptime_seconds Time.new.to_i - Time.parse($1).to_i
|
71
|
-
uptime seconds_to_human(uptime_seconds)
|
72
|
-
end
|
73
|
-
end
|
74
|
-
end
|
75
|
-
|
76
|
-
collect_data(:solaris2) do
|
77
|
-
so = shell_out("kstat -p unix:0:system_misc:boot_time")
|
78
|
-
# unix:0:system_misc:boot_time 1343860543
|
79
|
-
so.stdout.lines do |line|
|
80
|
-
if line =~ /unix:0:system_misc:boot_time\s+(\d+)/
|
81
|
-
uptime_seconds Time.new.to_i - $1.to_i
|
82
|
-
uptime seconds_to_human(uptime_seconds)
|
83
|
-
end
|
84
|
-
end
|
85
|
-
end
|
86
|
-
|
87
|
-
collect_data(:windows) do
|
88
|
-
require "wmi-lite/wmi" unless defined?(WmiLite::Wmi)
|
89
|
-
wmi = WmiLite::Wmi.new
|
90
|
-
last_boot_up_time = wmi.first_of("Win32_OperatingSystem")["lastbootuptime"]
|
91
|
-
uptime_seconds Time.new.to_i - Time.parse(last_boot_up_time).to_i
|
92
|
-
uptime seconds_to_human(uptime_seconds)
|
93
|
-
end
|
94
|
-
|
95
|
-
end
|
1
|
+
# frozen_string_literal: true
|
2
|
+
#
|
3
|
+
# Author:: Adam Jacob (<adam@chef.io>)
|
4
|
+
# Author:: Bryan McLellan (<btm@loftninjas.org>)
|
5
|
+
# Author:: Claire McQuin (<claire@chef.io>)
|
6
|
+
# Author:: Doug MacEachern (<dougm@vmware.com>)
|
7
|
+
# Author:: Kurt Yoder (<ktyopscode@yoderhome.com>)
|
8
|
+
# Author:: Paul Mooring (<paul@chef.io>)
|
9
|
+
# Copyright:: Copyright (c) Chef Software Inc.
|
10
|
+
# Copyright:: Copyright (c) 2009 Bryan McLellan
|
11
|
+
# Copyright:: Copyright (c) 2010 VMware, Inc.
|
12
|
+
# License:: Apache License, Version 2.0
|
13
|
+
#
|
14
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
15
|
+
# you may not use this file except in compliance with the License.
|
16
|
+
# You may obtain a copy of the License at
|
17
|
+
#
|
18
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
19
|
+
#
|
20
|
+
# Unless required by applicable law or agreed to in writing, software
|
21
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
22
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
23
|
+
# implied.
|
24
|
+
# See the License for the specific language governing permissions and
|
25
|
+
# limitations under the License.
|
26
|
+
#
|
27
|
+
|
28
|
+
Ohai.plugin(:Uptime) do
|
29
|
+
require_relative "../mixin/seconds_to_human"
|
30
|
+
provides "uptime", "uptime_seconds"
|
31
|
+
provides "idletime", "idletime_seconds" # linux only
|
32
|
+
|
33
|
+
def collect_uptime(path)
|
34
|
+
# kern.boottime: { sec = 1232765114, usec = 823118 } Fri Jan 23 18:45:14 2009
|
35
|
+
so = shell_out("#{Ohai.abs_path(path)} kern.boottime")
|
36
|
+
so.stdout.lines do |line|
|
37
|
+
if line =~ /kern.boottime:\D+(\d+)/
|
38
|
+
usec = Time.new.to_i - $1.to_i
|
39
|
+
return [usec, seconds_to_human(usec)]
|
40
|
+
end
|
41
|
+
end
|
42
|
+
[nil, nil]
|
43
|
+
end
|
44
|
+
|
45
|
+
collect_data(:darwin) do
|
46
|
+
data = collect_uptime("/usr/sbin/sysctl")
|
47
|
+
uptime_seconds data.first
|
48
|
+
uptime data.last
|
49
|
+
end
|
50
|
+
|
51
|
+
collect_data(:freebsd, :netbsd, :dragonflybsd) do
|
52
|
+
data = collect_uptime("/sbin/sysctl")
|
53
|
+
uptime_seconds data.first
|
54
|
+
uptime data.last
|
55
|
+
end
|
56
|
+
|
57
|
+
collect_data(:linux) do
|
58
|
+
uptime, idletime = file_open("/proc/uptime").gets.split
|
59
|
+
uptime_seconds uptime.to_i
|
60
|
+
uptime seconds_to_human(uptime.to_i)
|
61
|
+
idletime_seconds idletime.to_i
|
62
|
+
idletime seconds_to_human(idletime.to_i)
|
63
|
+
end
|
64
|
+
|
65
|
+
collect_data(:openbsd) do
|
66
|
+
# kern.boottime=Tue Nov 1 14:45:52 2011
|
67
|
+
so = shell_out("#{Ohai.abs_path( "/sbin/sysctl" )} #kern.boottime")
|
68
|
+
so.stdout.lines do |line|
|
69
|
+
if line =~ /kern.boottime=(.+)/
|
70
|
+
uptime_seconds Time.new.to_i - Time.parse($1).to_i
|
71
|
+
uptime seconds_to_human(uptime_seconds)
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
collect_data(:solaris2) do
|
77
|
+
so = shell_out("kstat -p unix:0:system_misc:boot_time")
|
78
|
+
# unix:0:system_misc:boot_time 1343860543
|
79
|
+
so.stdout.lines do |line|
|
80
|
+
if line =~ /unix:0:system_misc:boot_time\s+(\d+)/
|
81
|
+
uptime_seconds Time.new.to_i - $1.to_i
|
82
|
+
uptime seconds_to_human(uptime_seconds)
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
collect_data(:windows) do
|
88
|
+
require "wmi-lite/wmi" unless defined?(WmiLite::Wmi)
|
89
|
+
wmi = WmiLite::Wmi.new
|
90
|
+
last_boot_up_time = wmi.first_of("Win32_OperatingSystem")["lastbootuptime"]
|
91
|
+
uptime_seconds Time.new.to_i - Time.parse(last_boot_up_time).to_i
|
92
|
+
uptime seconds_to_human(uptime_seconds)
|
93
|
+
end
|
94
|
+
|
95
|
+
end
|
@@ -1,197 +1,197 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
#
|
3
|
-
# Author:: Tim Smith <tsmith@chef.io>
|
4
|
-
# Author:: Joshua Colson <joshua.colson@gmail.com>
|
5
|
-
# Copyright:: Copyright (c) Chef Software Inc.
|
6
|
-
# Copyright:: 2019 Joshua Colson
|
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(:Virtualbox) do
|
23
|
-
depends "virtualization"
|
24
|
-
provides "virtualbox"
|
25
|
-
|
26
|
-
# query virtualbox for each configured vm, as well as
|
27
|
-
# each guest's individual configuration settings
|
28
|
-
def vboxmanage_list_vms
|
29
|
-
vms = Mash.new
|
30
|
-
so_cmd = "VBoxManage list --sorted vms"
|
31
|
-
logger.trace(so_cmd)
|
32
|
-
so = shell_out(so_cmd)
|
33
|
-
|
34
|
-
if so.exitstatus == 0
|
35
|
-
# parse the output
|
36
|
-
so.stdout.lines.each do |line|
|
37
|
-
case line
|
38
|
-
when /^"(\S*)" \{(\S*)\}$/
|
39
|
-
name = Regexp.last_match(1)
|
40
|
-
uuid = Regexp.last_match(2)
|
41
|
-
vms[name] = vboxmanage_vminfo(uuid)
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|
45
|
-
vms
|
46
|
-
rescue Ohai::Exceptions::Exec
|
47
|
-
logger.trace("Plugin VboxHost: Could not run 'VBoxManage list --sorted vms'. Skipping data")
|
48
|
-
end
|
49
|
-
|
50
|
-
# query the vminfo for particular guest instance, normalizing
|
51
|
-
# the fields so that they're not enclosed in double-quotes (")
|
52
|
-
def vboxmanage_vminfo(machine_id)
|
53
|
-
vm = Mash.new
|
54
|
-
|
55
|
-
so_cmd = "VBoxManage showvminfo #{machine_id} --machinereadable"
|
56
|
-
logger.trace(so_cmd)
|
57
|
-
so = shell_out(so_cmd)
|
58
|
-
|
59
|
-
if so.exitstatus == 0
|
60
|
-
so.stdout.lines.each do |line|
|
61
|
-
line.chomp!
|
62
|
-
left, right = line.split("=")
|
63
|
-
|
64
|
-
# remove enclosing quotes, if needed
|
65
|
-
key = left.delete_prefix('"').delete_suffix('"')
|
66
|
-
|
67
|
-
# skip the name attribute since that is the parent key
|
68
|
-
next if key == "name"
|
69
|
-
|
70
|
-
vm[key.downcase] = right.delete_prefix('"').delete_suffix('"')
|
71
|
-
end
|
72
|
-
end
|
73
|
-
vm
|
74
|
-
rescue Ohai::Exceptions::Exec
|
75
|
-
logger.trace("Plugin VboxHost: Could not run '#{so_cmd}'. Skipping data")
|
76
|
-
end
|
77
|
-
|
78
|
-
# query virtualbox for a list of #{query_type} items
|
79
|
-
# these queries return a result set that is delimited by
|
80
|
-
# multiple successive newlines, with each block containing
|
81
|
-
# key/value pairs delimited by a colon (:) and column aligned
|
82
|
-
#
|
83
|
-
# the keys of each k/v pair are normalized to lowercase
|
84
|
-
def vboxmanage_list_blocks(query_type, name_key)
|
85
|
-
# ignore unrecognized query type
|
86
|
-
supported_queries = %w{
|
87
|
-
bridgedifs dhcpservers dvds hdds hostdvds
|
88
|
-
hostfloppies hostonlyifs natnets
|
89
|
-
}
|
90
|
-
return nil unless supported_queries.include? query_type
|
91
|
-
|
92
|
-
results = Mash.new
|
93
|
-
|
94
|
-
so_cmd = "VBoxManage list --sorted #{query_type}"
|
95
|
-
logger.trace(so_cmd)
|
96
|
-
so = shell_out(so_cmd)
|
97
|
-
# raise an exception if the command fails
|
98
|
-
# so.error!
|
99
|
-
|
100
|
-
if so.exitstatus == 0
|
101
|
-
# break the result into paragraph blocks, on successive newlines
|
102
|
-
so.stdout.each_line("") do |blk|
|
103
|
-
# remove the multiple newlines of each record
|
104
|
-
blk.chomp!.chomp!
|
105
|
-
# initialize a blank record hash
|
106
|
-
record = Mash.new
|
107
|
-
# parse the record block into key/value pairs
|
108
|
-
blk.each_line do |line|
|
109
|
-
next unless line.include? ":"
|
110
|
-
|
111
|
-
# split the line into key/value pair
|
112
|
-
key, right = line.split(":", 2)
|
113
|
-
|
114
|
-
# strip the leading/trailing whitespace if the value is not nil
|
115
|
-
value = right.nil? ? "" : right.strip
|
116
|
-
record[key.downcase] = value
|
117
|
-
end
|
118
|
-
|
119
|
-
# insert the record into the list of results
|
120
|
-
if record.key? name_key.downcase
|
121
|
-
name = record.delete(name_key.downcase)
|
122
|
-
results[name] = record
|
123
|
-
end
|
124
|
-
end
|
125
|
-
end
|
126
|
-
results
|
127
|
-
rescue Ohai::Exceptions::Exec
|
128
|
-
logger.trace("Plugin VboxHost: Could not run '#{so_cmd}'. Skipping data")
|
129
|
-
end
|
130
|
-
|
131
|
-
collect_data(:windows, :linux, :solaris2, :darwin) do
|
132
|
-
case virtualization.dig("systems", "vbox")
|
133
|
-
when "guest"
|
134
|
-
logger.trace("Plugin Virtualbox: Node detected as vbox guest. Collecting guest data.")
|
135
|
-
begin
|
136
|
-
so = shell_out("VBoxControl guestproperty enumerate")
|
137
|
-
|
138
|
-
if so.exitstatus == 0
|
139
|
-
virtualbox Mash.new
|
140
|
-
virtualbox[:host] = Mash.new
|
141
|
-
virtualbox[:guest] = Mash.new
|
142
|
-
so.stdout.lines.each do |line|
|
143
|
-
case line
|
144
|
-
when /LanguageID, value: (\S*),/
|
145
|
-
virtualbox[:host][:language] = Regexp.last_match(1)
|
146
|
-
when /VBoxVer, value: (\S*),/
|
147
|
-
virtualbox[:host][:version] = Regexp.last_match(1)
|
148
|
-
when /VBoxRev, value: (\S*),/
|
149
|
-
virtualbox[:host][:revision] = Regexp.last_match(1)
|
150
|
-
when %r{GuestAdd/VersionExt, value: (\S*),}
|
151
|
-
virtualbox[:guest][:guest_additions_version] = Regexp.last_match(1)
|
152
|
-
when %r{GuestAdd/Revision, value: (\S*),}
|
153
|
-
virtualbox[:guest][:guest_additions_revision] = Regexp.last_match(1)
|
154
|
-
end
|
155
|
-
end
|
156
|
-
end
|
157
|
-
rescue Ohai::Exceptions::Exec
|
158
|
-
logger.trace('Plugin Virtualbox: Could not execute "VBoxControl guestproperty enumerate". Skipping data collection.')
|
159
|
-
end
|
160
|
-
when "host"
|
161
|
-
logger.trace("Plugin Virtualbox: Node detected as vbox host. Collecting host data.")
|
162
|
-
virtualbox Mash.new
|
163
|
-
begin
|
164
|
-
# get a list of virtualbox guest vms
|
165
|
-
virtualbox["guests"] = vboxmanage_list_vms
|
166
|
-
|
167
|
-
# get a list of virtualbox virtual hard disk drives
|
168
|
-
virtualbox["hdds"] = vboxmanage_list_blocks("hdds", "Location")
|
169
|
-
|
170
|
-
# get a list of virtualbox virtual dvd drives
|
171
|
-
virtualbox["dvds"] = vboxmanage_list_blocks("dvds", "Location")
|
172
|
-
|
173
|
-
# get a list of virtualbox host dvd drives
|
174
|
-
virtualbox["hostdvds"] = vboxmanage_list_blocks("hostdvds", "Name")
|
175
|
-
|
176
|
-
# get a list of virtualbox host floppy drives
|
177
|
-
virtualbox["hostfloppies"] = vboxmanage_list_blocks("hostfloppies", "Name")
|
178
|
-
|
179
|
-
# get a list of virtualbox hostonly network interfaces
|
180
|
-
virtualbox["hostonlyifs"] = vboxmanage_list_blocks("hostonlyifs", "Name")
|
181
|
-
|
182
|
-
# get a list of virtualbox bridged network interfaces
|
183
|
-
virtualbox["bridgedifs"] = vboxmanage_list_blocks("bridgedifs", "Name")
|
184
|
-
|
185
|
-
# get a list of virtualbox dhcp servers
|
186
|
-
virtualbox["dhcpservers"] = vboxmanage_list_blocks("dhcpservers", "NetworkName")
|
187
|
-
|
188
|
-
# get a list of virtualbox nat networks
|
189
|
-
virtualbox["natnets"] = vboxmanage_list_blocks("natnets", "NetworkName")
|
190
|
-
rescue Ohai::Exceptions::Exec
|
191
|
-
logger.trace("Plugin VboxHost: Could not collect data for VirtualBox host. Skipping data")
|
192
|
-
end
|
193
|
-
else
|
194
|
-
logger.trace("Plugin Virtualbox: Not on a Virtualbox host or guest. Skipping plugin.")
|
195
|
-
end
|
196
|
-
end
|
197
|
-
end
|
1
|
+
# frozen_string_literal: true
|
2
|
+
#
|
3
|
+
# Author:: Tim Smith <tsmith@chef.io>
|
4
|
+
# Author:: Joshua Colson <joshua.colson@gmail.com>
|
5
|
+
# Copyright:: Copyright (c) Chef Software Inc.
|
6
|
+
# Copyright:: 2019 Joshua Colson
|
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(:Virtualbox) do
|
23
|
+
depends "virtualization"
|
24
|
+
provides "virtualbox"
|
25
|
+
|
26
|
+
# query virtualbox for each configured vm, as well as
|
27
|
+
# each guest's individual configuration settings
|
28
|
+
def vboxmanage_list_vms
|
29
|
+
vms = Mash.new
|
30
|
+
so_cmd = "VBoxManage list --sorted vms"
|
31
|
+
logger.trace(so_cmd)
|
32
|
+
so = shell_out(so_cmd)
|
33
|
+
|
34
|
+
if so.exitstatus == 0
|
35
|
+
# parse the output
|
36
|
+
so.stdout.lines.each do |line|
|
37
|
+
case line
|
38
|
+
when /^"(\S*)" \{(\S*)\}$/
|
39
|
+
name = Regexp.last_match(1)
|
40
|
+
uuid = Regexp.last_match(2)
|
41
|
+
vms[name] = vboxmanage_vminfo(uuid)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
vms
|
46
|
+
rescue Ohai::Exceptions::Exec
|
47
|
+
logger.trace("Plugin VboxHost: Could not run 'VBoxManage list --sorted vms'. Skipping data")
|
48
|
+
end
|
49
|
+
|
50
|
+
# query the vminfo for particular guest instance, normalizing
|
51
|
+
# the fields so that they're not enclosed in double-quotes (")
|
52
|
+
def vboxmanage_vminfo(machine_id)
|
53
|
+
vm = Mash.new
|
54
|
+
|
55
|
+
so_cmd = "VBoxManage showvminfo #{machine_id} --machinereadable"
|
56
|
+
logger.trace(so_cmd)
|
57
|
+
so = shell_out(so_cmd)
|
58
|
+
|
59
|
+
if so.exitstatus == 0
|
60
|
+
so.stdout.lines.each do |line|
|
61
|
+
line.chomp!
|
62
|
+
left, right = line.split("=")
|
63
|
+
|
64
|
+
# remove enclosing quotes, if needed
|
65
|
+
key = left.delete_prefix('"').delete_suffix('"')
|
66
|
+
|
67
|
+
# skip the name attribute since that is the parent key
|
68
|
+
next if key == "name"
|
69
|
+
|
70
|
+
vm[key.downcase] = right.delete_prefix('"').delete_suffix('"')
|
71
|
+
end
|
72
|
+
end
|
73
|
+
vm
|
74
|
+
rescue Ohai::Exceptions::Exec
|
75
|
+
logger.trace("Plugin VboxHost: Could not run '#{so_cmd}'. Skipping data")
|
76
|
+
end
|
77
|
+
|
78
|
+
# query virtualbox for a list of #{query_type} items
|
79
|
+
# these queries return a result set that is delimited by
|
80
|
+
# multiple successive newlines, with each block containing
|
81
|
+
# key/value pairs delimited by a colon (:) and column aligned
|
82
|
+
#
|
83
|
+
# the keys of each k/v pair are normalized to lowercase
|
84
|
+
def vboxmanage_list_blocks(query_type, name_key)
|
85
|
+
# ignore unrecognized query type
|
86
|
+
supported_queries = %w{
|
87
|
+
bridgedifs dhcpservers dvds hdds hostdvds
|
88
|
+
hostfloppies hostonlyifs natnets
|
89
|
+
}
|
90
|
+
return nil unless supported_queries.include? query_type
|
91
|
+
|
92
|
+
results = Mash.new
|
93
|
+
|
94
|
+
so_cmd = "VBoxManage list --sorted #{query_type}"
|
95
|
+
logger.trace(so_cmd)
|
96
|
+
so = shell_out(so_cmd)
|
97
|
+
# raise an exception if the command fails
|
98
|
+
# so.error!
|
99
|
+
|
100
|
+
if so.exitstatus == 0
|
101
|
+
# break the result into paragraph blocks, on successive newlines
|
102
|
+
so.stdout.each_line("") do |blk|
|
103
|
+
# remove the multiple newlines of each record
|
104
|
+
blk.chomp!.chomp!
|
105
|
+
# initialize a blank record hash
|
106
|
+
record = Mash.new
|
107
|
+
# parse the record block into key/value pairs
|
108
|
+
blk.each_line do |line|
|
109
|
+
next unless line.include? ":"
|
110
|
+
|
111
|
+
# split the line into key/value pair
|
112
|
+
key, right = line.split(":", 2)
|
113
|
+
|
114
|
+
# strip the leading/trailing whitespace if the value is not nil
|
115
|
+
value = right.nil? ? "" : right.strip
|
116
|
+
record[key.downcase] = value
|
117
|
+
end
|
118
|
+
|
119
|
+
# insert the record into the list of results
|
120
|
+
if record.key? name_key.downcase
|
121
|
+
name = record.delete(name_key.downcase)
|
122
|
+
results[name] = record
|
123
|
+
end
|
124
|
+
end
|
125
|
+
end
|
126
|
+
results
|
127
|
+
rescue Ohai::Exceptions::Exec
|
128
|
+
logger.trace("Plugin VboxHost: Could not run '#{so_cmd}'. Skipping data")
|
129
|
+
end
|
130
|
+
|
131
|
+
collect_data(:windows, :linux, :solaris2, :darwin) do
|
132
|
+
case virtualization.dig("systems", "vbox")
|
133
|
+
when "guest"
|
134
|
+
logger.trace("Plugin Virtualbox: Node detected as vbox guest. Collecting guest data.")
|
135
|
+
begin
|
136
|
+
so = shell_out("VBoxControl guestproperty enumerate")
|
137
|
+
|
138
|
+
if so.exitstatus == 0
|
139
|
+
virtualbox Mash.new
|
140
|
+
virtualbox[:host] = Mash.new
|
141
|
+
virtualbox[:guest] = Mash.new
|
142
|
+
so.stdout.lines.each do |line|
|
143
|
+
case line
|
144
|
+
when /LanguageID, value: (\S*),/
|
145
|
+
virtualbox[:host][:language] = Regexp.last_match(1)
|
146
|
+
when /VBoxVer, value: (\S*),/
|
147
|
+
virtualbox[:host][:version] = Regexp.last_match(1)
|
148
|
+
when /VBoxRev, value: (\S*),/
|
149
|
+
virtualbox[:host][:revision] = Regexp.last_match(1)
|
150
|
+
when %r{GuestAdd/VersionExt, value: (\S*),}
|
151
|
+
virtualbox[:guest][:guest_additions_version] = Regexp.last_match(1)
|
152
|
+
when %r{GuestAdd/Revision, value: (\S*),}
|
153
|
+
virtualbox[:guest][:guest_additions_revision] = Regexp.last_match(1)
|
154
|
+
end
|
155
|
+
end
|
156
|
+
end
|
157
|
+
rescue Ohai::Exceptions::Exec
|
158
|
+
logger.trace('Plugin Virtualbox: Could not execute "VBoxControl guestproperty enumerate". Skipping data collection.')
|
159
|
+
end
|
160
|
+
when "host"
|
161
|
+
logger.trace("Plugin Virtualbox: Node detected as vbox host. Collecting host data.")
|
162
|
+
virtualbox Mash.new
|
163
|
+
begin
|
164
|
+
# get a list of virtualbox guest vms
|
165
|
+
virtualbox["guests"] = vboxmanage_list_vms
|
166
|
+
|
167
|
+
# get a list of virtualbox virtual hard disk drives
|
168
|
+
virtualbox["hdds"] = vboxmanage_list_blocks("hdds", "Location")
|
169
|
+
|
170
|
+
# get a list of virtualbox virtual dvd drives
|
171
|
+
virtualbox["dvds"] = vboxmanage_list_blocks("dvds", "Location")
|
172
|
+
|
173
|
+
# get a list of virtualbox host dvd drives
|
174
|
+
virtualbox["hostdvds"] = vboxmanage_list_blocks("hostdvds", "Name")
|
175
|
+
|
176
|
+
# get a list of virtualbox host floppy drives
|
177
|
+
virtualbox["hostfloppies"] = vboxmanage_list_blocks("hostfloppies", "Name")
|
178
|
+
|
179
|
+
# get a list of virtualbox hostonly network interfaces
|
180
|
+
virtualbox["hostonlyifs"] = vboxmanage_list_blocks("hostonlyifs", "Name")
|
181
|
+
|
182
|
+
# get a list of virtualbox bridged network interfaces
|
183
|
+
virtualbox["bridgedifs"] = vboxmanage_list_blocks("bridgedifs", "Name")
|
184
|
+
|
185
|
+
# get a list of virtualbox dhcp servers
|
186
|
+
virtualbox["dhcpservers"] = vboxmanage_list_blocks("dhcpservers", "NetworkName")
|
187
|
+
|
188
|
+
# get a list of virtualbox nat networks
|
189
|
+
virtualbox["natnets"] = vboxmanage_list_blocks("natnets", "NetworkName")
|
190
|
+
rescue Ohai::Exceptions::Exec
|
191
|
+
logger.trace("Plugin VboxHost: Could not collect data for VirtualBox host. Skipping data")
|
192
|
+
end
|
193
|
+
else
|
194
|
+
logger.trace("Plugin Virtualbox: Not on a Virtualbox host or guest. Skipping plugin.")
|
195
|
+
end
|
196
|
+
end
|
197
|
+
end
|