ohai 15.0.35 → 15.1.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 (65) hide show
  1. checksums.yaml +4 -4
  2. data/lib/ohai.rb +4 -4
  3. data/lib/ohai/application.rb +3 -3
  4. data/lib/ohai/config.rb +2 -2
  5. data/lib/ohai/dsl.rb +2 -2
  6. data/lib/ohai/dsl/plugin.rb +5 -5
  7. data/lib/ohai/hints.rb +1 -1
  8. data/lib/ohai/loader.rb +4 -4
  9. data/lib/ohai/mixin/azure_metadata.rb +3 -3
  10. data/lib/ohai/mixin/command.rb +3 -3
  11. data/lib/ohai/mixin/do_metadata.rb +3 -3
  12. data/lib/ohai/mixin/ec2_metadata.rb +6 -6
  13. data/lib/ohai/mixin/gce_metadata.rb +3 -3
  14. data/lib/ohai/mixin/http_helper.rb +1 -1
  15. data/lib/ohai/mixin/scaleway_metadata.rb +3 -3
  16. data/lib/ohai/mixin/softlayer_metadata.rb +2 -2
  17. data/lib/ohai/plugin_config.rb +1 -1
  18. data/lib/ohai/plugins/aix/network.rb +6 -6
  19. data/lib/ohai/plugins/azure.rb +2 -2
  20. data/lib/ohai/plugins/bsd/virtualization.rb +2 -2
  21. data/lib/ohai/plugins/darwin/network.rb +14 -13
  22. data/lib/ohai/plugins/darwin/virtualization.rb +1 -1
  23. data/lib/ohai/plugins/digital_ocean.rb +2 -2
  24. data/lib/ohai/plugins/dmi.rb +3 -3
  25. data/lib/ohai/plugins/dragonflybsd/network.rb +9 -9
  26. data/lib/ohai/plugins/ec2.rb +2 -2
  27. data/lib/ohai/plugins/eucalyptus.rb +2 -2
  28. data/lib/ohai/plugins/filesystem.rb +5 -5
  29. data/lib/ohai/plugins/freebsd/network.rb +9 -9
  30. data/lib/ohai/plugins/gce.rb +2 -2
  31. data/lib/ohai/plugins/hostname.rb +2 -2
  32. data/lib/ohai/plugins/kernel.rb +1 -1
  33. data/lib/ohai/plugins/linux/fips.rb +1 -1
  34. data/lib/ohai/plugins/linux/network.rb +18 -18
  35. data/lib/ohai/plugins/linux/platform.rb +1 -3
  36. data/lib/ohai/plugins/linux/sessions.rb +2 -2
  37. data/lib/ohai/plugins/linux/virtualization.rb +2 -2
  38. data/lib/ohai/plugins/netbsd/network.rb +9 -9
  39. data/lib/ohai/plugins/network.rb +3 -3
  40. data/lib/ohai/plugins/openbsd/network.rb +9 -9
  41. data/lib/ohai/plugins/openstack.rb +2 -2
  42. data/lib/ohai/plugins/os.rb +1 -1
  43. data/lib/ohai/plugins/packages.rb +6 -8
  44. data/lib/ohai/plugins/passwd.rb +1 -1
  45. data/lib/ohai/plugins/scaleway.rb +2 -2
  46. data/lib/ohai/plugins/scsi.rb +1 -1
  47. data/lib/ohai/plugins/softlayer.rb +1 -1
  48. data/lib/ohai/plugins/solaris2/dmi.rb +2 -2
  49. data/lib/ohai/plugins/solaris2/network.rb +9 -9
  50. data/lib/ohai/plugins/solaris2/virtualization.rb +1 -1
  51. data/lib/ohai/plugins/uptime.rb +1 -1
  52. data/lib/ohai/plugins/virtualbox.rb +164 -19
  53. data/lib/ohai/plugins/windows/filesystem.rb +1 -1
  54. data/lib/ohai/plugins/windows/fips.rb +1 -1
  55. data/lib/ohai/plugins/windows/network.rb +3 -3
  56. data/lib/ohai/plugins/windows/virtualization.rb +2 -2
  57. data/lib/ohai/provides_map.rb +4 -4
  58. data/lib/ohai/runner.rb +1 -1
  59. data/lib/ohai/system.rb +15 -15
  60. data/lib/ohai/util/win32.rb +1 -1
  61. data/lib/ohai/version.rb +1 -1
  62. data/spec/unit/plugins/solaris2/network_spec.rb +10 -1
  63. data/spec/unit/plugins/vbox_host_spec.rb +14 -0
  64. data/spec/unit/plugins/virtualbox_spec.rb +310 -23
  65. metadata +3 -2
@@ -18,7 +18,7 @@
18
18
 
19
19
  Ohai.plugin(:NetworkAddresses) do
20
20
  require "ipaddress"
21
- require "ohai/mixin/network_constants"
21
+ require_relative "../mixin/network_constants"
22
22
  include Ohai::Mixin::NetworkConstants
23
23
 
24
24
  provides "ipaddress", "ip6address", "macaddress"
@@ -135,9 +135,9 @@ Ohai.plugin(:NetworkAddresses) do
135
135
  results = {}
136
136
 
137
137
  network Mash.new unless network
138
- network[:interfaces] = Mash.new unless network[:interfaces]
138
+ network[:interfaces] ||= Mash.new
139
139
  counters Mash.new unless counters
140
- counters[:network] = Mash.new unless counters[:network]
140
+ counters[:network] ||= Mash.new
141
141
 
142
142
  # inet family is processed before inet6 to give ipv4 precedence
143
143
  Ohai::Mixin::NetworkConstants::FAMILIES.keys.sort.each do |family|
@@ -22,9 +22,9 @@ Ohai.plugin(:Network) do
22
22
 
23
23
  collect_data(:openbsd) do
24
24
  network Mash.new unless network
25
- network[:interfaces] = Mash.new unless network[:interfaces]
25
+ network[:interfaces] ||= Mash.new
26
26
  counters Mash.new unless counters
27
- counters[:network] = Mash.new unless counters[:network]
27
+ counters[:network] ||= Mash.new
28
28
 
29
29
  so = shell_out("route -n get default")
30
30
  so.stdout.lines do |line|
@@ -52,11 +52,11 @@ Ohai.plugin(:Network) do
52
52
  end
53
53
  # call the family lladdr to match linux for consistency
54
54
  if line =~ /\s+lladdr (.+?)\s/
55
- iface[cint][:addresses] = Mash.new unless iface[cint][:addresses]
55
+ iface[cint][:addresses] ||= Mash.new
56
56
  iface[cint][:addresses][$1] = { "family" => "lladdr" }
57
57
  end
58
58
  if line =~ /\s+inet ([\d.]+) netmask ([\da-fx]+)\s*\w*\s*([\d.]*)/
59
- iface[cint][:addresses] = Mash.new unless iface[cint][:addresses]
59
+ iface[cint][:addresses] ||= Mash.new
60
60
  # convert the netmask to decimal for consistency
61
61
  netmask = "#{$2[2, 2].hex}.#{$2[4, 2].hex}.#{$2[6, 2].hex}.#{$2[8, 2].hex}"
62
62
  if $3.empty?
@@ -67,7 +67,7 @@ Ohai.plugin(:Network) do
67
67
  end
68
68
  end
69
69
  if line =~ /\s+inet6 ([a-f0-9\:]+)%?(\w*)\s+prefixlen\s+(\d+)\s*\w*\s*([\da-fx]*)/
70
- iface[cint][:addresses] = Mash.new unless iface[cint][:addresses]
70
+ iface[cint][:addresses] ||= Mash.new
71
71
  if $4.empty?
72
72
  iface[cint][:addresses][$1] = { "family" => "inet6", "prefixlen" => $3 }
73
73
  else
@@ -89,7 +89,7 @@ Ohai.plugin(:Network) do
89
89
  so.stdout.lines do |line|
90
90
  if line =~ /\((\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})\) at ([a-fA-F0-9\:]+) on ([0-9a-zA-Z\.\:\-]+)/
91
91
  next unless iface[$3] # this should never happen
92
- iface[$3][:arp] = Mash.new unless iface[$3][:arp]
92
+ iface[$3][:arp] ||= Mash.new
93
93
  iface[$3][:arp][$1] = $2.downcase
94
94
  end
95
95
  end
@@ -107,9 +107,9 @@ Ohai.plugin(:Network) do
107
107
  # em0 1500 <Link> 00:11:25:2d:90:be 3719557 0 3369969 0 0 0
108
108
  # $1 $2 $3 $4 $5 $6 $7 $8
109
109
  if line =~ /^([\w\.\*]+)\s+\d+\s+<Link>\s+([\w:]*)\s*(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)/
110
- net_counters[$1] = Mash.new unless net_counters[$1]
111
- net_counters[$1]["rx"] = Mash.new unless net_counters[$1]["rx"]
112
- net_counters[$1]["tx"] = Mash.new unless net_counters[$1]["tx"]
110
+ net_counters[$1] ||= Mash.new
111
+ net_counters[$1]["rx"] ||= Mash.new
112
+ net_counters[$1]["tx"] ||= Mash.new
113
113
  net_counters[$1]["rx"]["packets"] = $3
114
114
  net_counters[$1]["rx"]["errors"] = $4
115
115
  net_counters[$1]["tx"]["packets"] = $5
@@ -17,8 +17,8 @@
17
17
  # limitations under the License.
18
18
 
19
19
  Ohai.plugin(:Openstack) do
20
- require "ohai/mixin/ec2_metadata"
21
- require "ohai/mixin/http_helper"
20
+ require_relative "../mixin/ec2_metadata"
21
+ require_relative "../mixin/http_helper"
22
22
  include Ohai::Mixin::Ec2Metadata
23
23
  include Ohai::Mixin::HttpHelper
24
24
 
@@ -20,7 +20,7 @@
20
20
  #
21
21
 
22
22
  Ohai.plugin(:OS) do
23
- require "ohai/mixin/os"
23
+ require_relative "../mixin/os"
24
24
  provides "os", "os_version"
25
25
  depends "kernel"
26
26
 
@@ -22,13 +22,11 @@ Ohai.plugin(:Packages) do
22
22
  provides "packages"
23
23
  depends "platform_family"
24
24
 
25
- unless defined?(WINDOWS_ATTRIBUTE_ALIASES)
26
- WINDOWS_ATTRIBUTE_ALIASES = {
27
- "DisplayVersion" => "version",
28
- "Publisher" => "publisher",
29
- "InstallDate" => "installdate",
30
- }.freeze
31
- end
25
+ WINDOWS_ATTRIBUTE_ALIASES ||= {
26
+ "DisplayVersion" => "version",
27
+ "Publisher" => "publisher",
28
+ "InstallDate" => "installdate",
29
+ }.freeze
32
30
 
33
31
  collect_data(:linux) do
34
32
  packages Mash.new
@@ -104,7 +102,7 @@ Ohai.plugin(:Packages) do
104
102
  end
105
103
 
106
104
  collect_data(:windows) do
107
- require "win32/registry"
105
+ require "win32/registry" unless defined?(Win32::Registry)
108
106
  packages Mash.new
109
107
  collect_programs_from_registry_key('Software\Microsoft\Windows\CurrentVersion\Uninstall')
110
108
  # on 64 bit systems, 32 bit programs are stored here
@@ -1,6 +1,6 @@
1
1
 
2
2
  Ohai.plugin(:Passwd) do
3
- require "etc"
3
+ require "etc" unless defined?(Etc)
4
4
  provides "etc", "current_user"
5
5
  optional true
6
6
 
@@ -15,8 +15,8 @@
15
15
  # limitations under the License.
16
16
 
17
17
  Ohai.plugin(:Scaleway) do
18
- require "ohai/mixin/scaleway_metadata"
19
- require "ohai/mixin/http_helper"
18
+ require_relative "../mixin/scaleway_metadata"
19
+ require_relative "../mixin/http_helper"
20
20
 
21
21
  include Ohai::Mixin::ScalewayMetadata
22
22
  include Ohai::Mixin::HttpHelper
@@ -21,7 +21,7 @@ Ohai.plugin(:Lsscsi) do
21
21
  provides "scsi"
22
22
  optional true
23
23
 
24
- require "mixlib/shellout"
24
+ require "mixlib/shellout" unless defined?(Mixlib::ShellOut::DEFAULT_READ_TIMEOUT)
25
25
 
26
26
  collect_data(:linux) do
27
27
  devices = Mash.new
@@ -19,7 +19,7 @@
19
19
  # limitations under the License.
20
20
 
21
21
  Ohai.plugin(:Softlayer) do
22
- require "ohai/mixin/softlayer_metadata"
22
+ require_relative "../mixin/softlayer_metadata"
23
23
  include ::Ohai::Mixin::SoftlayerMetadata
24
24
 
25
25
  provides "softlayer"
@@ -20,7 +20,7 @@ Ohai.plugin(:DMI) do
20
20
  provides "dmi"
21
21
 
22
22
  collect_data(:solaris2) do
23
- require "ohai/common/dmi"
23
+ require_relative "../../common/dmi"
24
24
 
25
25
  # if we already have a "dmi" with keys (presumably from dmidecode), don't try smbios
26
26
  # note that a single key just means dmidecode exited with its version
@@ -142,7 +142,7 @@ Ohai.plugin(:DMI) do
142
142
  next
143
143
  end
144
144
 
145
- dmi[dmi_record[:type]] = Mash.new unless dmi.key?(dmi_record[:type])
145
+ dmi[dmi_record[:type]] ||= Mash.new
146
146
  dmi[dmi_record[:type]][:all_records] = [] unless dmi[dmi_record[:type]].key?(:all_records)
147
147
  dmi_record[:position] = dmi[dmi_record[:type]][:all_records].length
148
148
  dmi[dmi_record[:type]][:all_records].push(Mash.new)
@@ -95,18 +95,18 @@ Ohai.plugin(:Network) do
95
95
 
96
96
  iface = Mash.new
97
97
  network Mash.new unless network
98
- network[:interfaces] = Mash.new unless network[:interfaces]
98
+ network[:interfaces] ||= Mash.new
99
99
  counters Mash.new unless counters
100
- counters[:network] = Mash.new unless counters[:network]
100
+ counters[:network] ||= Mash.new
101
101
 
102
102
  so = shell_out("ifconfig -a")
103
103
  cint = nil
104
104
 
105
105
  so.stdout.lines do |line|
106
- # regex: http://rubular.com/r/Iag7JLVTVe
107
- if line =~ /^([0-9a-zA-Z\.\:\-]+): \S+ mtu (\d+) index (\d+)/
106
+ # regex: https://rubular.com/r/ZiIHbsnfiWPW1p
107
+ if line =~ /^([0-9a-zA-Z\.\:\-]+): \S+ mtu (\d+)(?: index (\d+))?/
108
108
  cint = $1
109
- iface[cint] = Mash.new unless iface[cint]
109
+ iface[cint] ||= Mash.new
110
110
  iface[cint][:mtu] = $2
111
111
  iface[cint][:index] = $3
112
112
  if line =~ / flags\=\d+\<((ADDRCONF|ANYCAST|BROADCAST|CoS|DEPRECATED|DHCP|DUPLICATE|FAILED|FIXEDMTU|INACTIVE|L3PROTECT|LOOPBACK|MIP|MULTI_BCAST|MULTICAST|NOARP|NOFAILOVER|NOLOCAL|NONUD|NORTEXCH|NOXMIT|OFFLINE|PHYSRUNNING|POINTOPOINT|PREFERRED|PRIVATE|ROUTER|RUNNING|STANDBY|TEMPORARY|UNNUMBERED|UP|VIRTUAL|XRESOLV|IPv4|IPv6|,)+)\>\s/
@@ -122,15 +122,15 @@ Ohai.plugin(:Network) do
122
122
  end
123
123
  end
124
124
  if line =~ /\s+inet (\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}) netmask (([0-9a-f]){1,8})\s*$/
125
- iface[cint][:addresses] = Mash.new unless iface[cint][:addresses]
125
+ iface[cint][:addresses] ||= Mash.new
126
126
  iface[cint][:addresses][$1] = { "family" => "inet", "netmask" => $2.scanf("%2x" * 4) * "." }
127
127
  end
128
128
  if line =~ /\s+inet (\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}) netmask (([0-9a-f]){1,8}) broadcast (\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})/
129
- iface[cint][:addresses] = Mash.new unless iface[cint][:addresses]
129
+ iface[cint][:addresses] ||= Mash.new
130
130
  iface[cint][:addresses][$1] = { "family" => "inet", "netmask" => $2.scanf("%2x" * 4) * ".", "broadcast" => $4 }
131
131
  end
132
132
  if line =~ /\s+inet6 ([a-f0-9\:]+)(\s*|(\%[a-z0-9]+)\s*)\/(\d+)\s*$/
133
- iface[cint][:addresses] = Mash.new unless iface[cint][:addresses]
133
+ iface[cint][:addresses] ||= Mash.new
134
134
  iface[cint][:addresses][$1] = { "family" => "inet6", "prefixlen" => $4 }
135
135
  end
136
136
  end
@@ -141,7 +141,7 @@ Ohai.plugin(:Network) do
141
141
  so.stdout.lines do |line|
142
142
  if line =~ /([0-9a-zA-Z]+)\s+(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})\s+(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})\s+(\w+)?\s+([a-zA-Z0-9\.\:\-]+)/
143
143
  next unless iface[arpname_to_ifname(iface, $1)] # this should never happen, except on solaris because sun hates you.
144
- iface[arpname_to_ifname(iface, $1)][:arp] = Mash.new unless iface[arpname_to_ifname(iface, $1)][:arp]
144
+ iface[arpname_to_ifname(iface, $1)][:arp] ||= Mash.new
145
145
  iface[arpname_to_ifname(iface, $1)][:arp][$2] = $5
146
146
  end
147
147
  end
@@ -19,7 +19,7 @@
19
19
  #
20
20
 
21
21
  Ohai.plugin(:Virtualization) do
22
- require "ohai/mixin/dmi_decode"
22
+ require_relative "../../mixin/dmi_decode"
23
23
  include Ohai::Mixin::DmiDecode
24
24
  provides "virtualization"
25
25
  depends "dmi"
@@ -25,7 +25,7 @@
25
25
  #
26
26
 
27
27
  Ohai.plugin(:Uptime) do
28
- require "ohai/mixin/seconds_to_human"
28
+ require_relative "../mixin/seconds_to_human"
29
29
  provides "uptime", "uptime_seconds"
30
30
  provides "idletime", "idletime_seconds" # linux only
31
31
 
@@ -1,6 +1,8 @@
1
1
  #
2
- # Author:: "Tim Smith" <tsmith@chef.io>
3
- # Copyright:: Copyright (c) 2015-2016 Chef Software, Inc.
2
+ # Author:: Tim Smith <tsmith@chef.io>
3
+ # Author:: Joshua Colson <joshua.colson@gmail.com>
4
+ # Copyright:: 2015-2019 Chef Software, Inc.
5
+ # Copyright:: 2019 Joshua Colson
4
6
  # License:: Apache License, Version 2.0
5
7
  #
6
8
  # Licensed under the Apache License, Version 2.0 (the "License");
@@ -17,33 +19,176 @@
17
19
  #
18
20
 
19
21
  Ohai.plugin(:Virtualbox) do
22
+ depends "virtualization"
20
23
  provides "virtualbox"
21
24
 
22
- collect_data do
23
-
24
- so = shell_out("VBoxControl guestproperty enumerate")
25
+ # query virtualbox for each configured vm, as well as
26
+ # each guest's individual configuration settings
27
+ def vboxmanage_list_vms
28
+ vms = Mash.new
29
+ so_cmd = "VBoxManage list --sorted vms"
30
+ logger.trace(so_cmd)
31
+ so = shell_out(so_cmd)
25
32
 
26
33
  if so.exitstatus == 0
27
- virtualbox Mash.new
28
- virtualbox[:host] = Mash.new
29
- virtualbox[:guest] = Mash.new
34
+ # parse the output
30
35
  so.stdout.lines.each do |line|
31
36
  case line
32
- when /LanguageID, value: (\S*),/
33
- virtualbox[:host][:language] = Regexp.last_match(1)
34
- when /VBoxVer, value: (\S*),/
35
- virtualbox[:host][:version] = Regexp.last_match(1)
36
- when /VBoxRev, value: (\S*),/
37
- virtualbox[:host][:revision] = Regexp.last_match(1)
38
- when /GuestAdd\/VersionExt, value: (\S*),/
39
- virtualbox[:guest][:guest_additions_version] = Regexp.last_match(1)
40
- when /GuestAdd\/Revision, value: (\S*),/
41
- virtualbox[:guest][:guest_additions_revision] = Regexp.last_match(1)
37
+ when /^"(\S*)" \{(\S*)\}$/
38
+ name = Regexp.last_match(1)
39
+ uuid = Regexp.last_match(2)
40
+ vms[name] = vboxmanage_vminfo(uuid)
42
41
  end
43
42
  end
44
43
  end
44
+ vms
45
45
  rescue Ohai::Exceptions::Exec
46
- logger.trace('Plugin Virtualbox: Could not execute "VBoxControl guestproperty enumerate". Skipping data')
46
+ logger.trace("Plugin VboxHost: Could not run 'VBoxManage list --sorted vms'. Skipping data")
47
+ end
48
+
49
+ # query the vminfo for particular guest instance, normalizing
50
+ # the fields so that they're not enclosed in double-quotes (")
51
+ def vboxmanage_vminfo(machine_id)
52
+ vm = Mash.new
53
+
54
+ so_cmd = "VBoxManage showvminfo #{machine_id} --machinereadable"
55
+ logger.trace(so_cmd)
56
+ so = shell_out(so_cmd)
57
+
58
+ if so.exitstatus == 0
59
+ so.stdout.lines.each do |line|
60
+ line.chomp!
61
+ left, right = line.split("=")
62
+
63
+ # remove enclosing quotes, if needed
64
+ key = left.delete_prefix('"').delete_suffix('"')
65
+
66
+ # skip the name attribute since that is the parent key
67
+ next if key == "name"
68
+
69
+ vm[key.downcase] = right.delete_prefix('"').delete_suffix('"')
70
+ end
71
+ end
72
+ vm
73
+ rescue Ohai::Exceptions::Exec
74
+ logger.trace("Plugin VboxHost: Could not run '#{so_cmd}'. Skipping data")
75
+ end
76
+
77
+ # query virtualbox for a list of #{query_type} items
78
+ # these queries return a result set that is delimited by
79
+ # multiple successive newlines, with each block containing
80
+ # key/value pairs delimited by a colon (:) and column aligned
81
+ #
82
+ # the keys of each k/v pair are normalized to lowercase
83
+ def vboxmanage_list_blocks(query_type, name_key)
84
+ # ignore unrecognized query type
85
+ supported_queries = %w{
86
+ bridgedifs dhcpservers dvds hdds hostdvds
87
+ hostfloppies hostonlyifs natnets
88
+ }
89
+ return nil unless supported_queries.include? query_type
90
+ results = Mash.new
91
+
92
+ so_cmd = "VBoxManage list --sorted #{query_type}"
93
+ logger.trace(so_cmd)
94
+ so = shell_out(so_cmd)
95
+ # raise an exception if the command fails
96
+ # so.error!
97
+
98
+ if so.exitstatus == 0
99
+ # break the result into paragraph blocks, on successive newlines
100
+ so.stdout.each_line("") do |blk|
101
+ # remove the multiple newlines of each record
102
+ blk.chomp!.chomp!
103
+ # initialize a blank record hash
104
+ record = Mash.new
105
+ # parse the record block into key/value pairs
106
+ blk.each_line() do |line|
107
+ next unless line.include? ":"
108
+ # split the line into key/value pair
109
+ key, right = line.split(":", 2)
110
+
111
+ # strip the leading/trailing whitespace if the value is not nil
112
+ value = right.nil? ? "" : right.strip
113
+ record[key.downcase] = value
114
+ end
47
115
 
116
+ # insert the record into the list of results
117
+ if record.key? name_key.downcase
118
+ name = record.delete(name_key.downcase)
119
+ results[name] = record
120
+ end
121
+ end
122
+ end
123
+ results
124
+ rescue Ohai::Exceptions::Exec
125
+ logger.trace("Plugin VboxHost: Could not run '#{so_cmd}'. Skipping data")
126
+ end
127
+
128
+ collect_data(:default) do
129
+ case virtualization.dig("systems", "vbox")
130
+ when "guest"
131
+ logger.trace("Plugin Virtualbox: Node detected as vbox guest. Collecting guest data.")
132
+ begin
133
+ so = shell_out("VBoxControl guestproperty enumerate")
134
+
135
+ if so.exitstatus == 0
136
+ virtualbox Mash.new
137
+ virtualbox[:host] = Mash.new
138
+ virtualbox[:guest] = Mash.new
139
+ so.stdout.lines.each do |line|
140
+ case line
141
+ when /LanguageID, value: (\S*),/
142
+ virtualbox[:host][:language] = Regexp.last_match(1)
143
+ when /VBoxVer, value: (\S*),/
144
+ virtualbox[:host][:version] = Regexp.last_match(1)
145
+ when /VBoxRev, value: (\S*),/
146
+ virtualbox[:host][:revision] = Regexp.last_match(1)
147
+ when /GuestAdd\/VersionExt, value: (\S*),/
148
+ virtualbox[:guest][:guest_additions_version] = Regexp.last_match(1)
149
+ when /GuestAdd\/Revision, value: (\S*),/
150
+ virtualbox[:guest][:guest_additions_revision] = Regexp.last_match(1)
151
+ end
152
+ end
153
+ end
154
+ rescue Ohai::Exceptions::Exec
155
+ logger.trace('Plugin Virtualbox: Could not execute "VBoxControl guestproperty enumerate". Skipping data collection.')
156
+ end
157
+ when "host"
158
+ logger.trace("Plugin Virtualbox: Node detected as vbox host. Collecting host data.")
159
+ virtualbox Mash.new
160
+ begin
161
+ # get a list of virtualbox guest vms
162
+ virtualbox["guests"] = vboxmanage_list_vms
163
+
164
+ # get a list of virtualbox virtual hard disk drives
165
+ virtualbox["hdds"] = vboxmanage_list_blocks("hdds", "Location")
166
+
167
+ # get a list of virtualbox virtual dvd drives
168
+ virtualbox["dvds"] = vboxmanage_list_blocks("dvds", "Location")
169
+
170
+ # get a list of virtualbox host dvd drives
171
+ virtualbox["hostdvds"] = vboxmanage_list_blocks("hostdvds", "Name")
172
+
173
+ # get a list of virtualbox host floppy drives
174
+ virtualbox["hostfloppies"] = vboxmanage_list_blocks("hostfloppies", "Name")
175
+
176
+ # get a list of virtualbox hostonly network interfaces
177
+ virtualbox["hostonlyifs"] = vboxmanage_list_blocks("hostonlyifs", "Name")
178
+
179
+ # get a list of virtualbox bridged network interfaces
180
+ virtualbox["bridgedifs"] = vboxmanage_list_blocks("bridgedifs", "Name")
181
+
182
+ # get a list of virtualbox dhcp servers
183
+ virtualbox["dhcpservers"] = vboxmanage_list_blocks("dhcpservers", "NetworkName")
184
+
185
+ # get a list of virtualbox nat networks
186
+ virtualbox["natnets"] = vboxmanage_list_blocks("natnets", "NetworkName")
187
+ rescue Ohai::Exceptions::Exec
188
+ logger.trace("Plugin VboxHost: Could not collect data for VirtualBox host. Skipping data")
189
+ end
190
+ else
191
+ logger.trace("Plugin Virtualbox: Not on a Virtualbox host or guest. Skipping plugin.")
192
+ end
48
193
  end
49
194
  end