ohai 15.0.35 → 15.1.3

Sign up to get free protection for your applications and to get access to all the features.
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