lib/ohai/plugins/solaris2/virtualization.rb in ohai-6.24.2 vs lib/ohai/plugins/solaris2/virtualization.rb in ohai-7.0.0.rc.0

- old
+ new

@@ -16,76 +16,71 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # -provides "virtualization" +Ohai.plugin(:Virtualization) do + provides "virtualization" -virtualization Mash.new + collect_data(:solaris2) do + virtualization Mash.new -# Detect KVM/QEMU from cpuinfo, report as KVM -psrinfo_path="/usr/sbin/psrinfo" -if File.exists?(psrinfo_path) - popen4(psrinfo_path + " -pv") do |pid, stdin, stdout, stderr| - stdin.close - psr_info = stdout.read - if psr_info =~ /QEMU Virtual CPU/ - virtualization[:system] = "kvm" - virtualization[:role] = "guest" + # Detect KVM/QEMU from cpuinfo, report as KVM + psrinfo_path = Ohai.abs_path( "/usr/sbin/psrinfo" ) + if File.exists?(psrinfo_path) + so = shell_out("#{psrinfo_path} -pv") + if so.stdout =~ /QEMU Virtual CPU/ + virtualization[:system] = "kvm" + virtualization[:role] = "guest" + end end - end -end -# http://www.dmo.ca/blog/detecting-virtualization-on-linux -smbios_path="/usr/sbin/smbios" -if File.exists?(smbios_path) - popen4(smbios_path) do |pid, stdin, stdout, stderr| - stdin.close - dmi_info = stdout.read - case dmi_info - when /Manufacturer: Microsoft/ - if dmi_info =~ /Product: Virtual Machine/ - virtualization[:system] = "virtualpc" - virtualization[:role] = "guest" - end - when /Manufacturer: VMware/ - if dmi_info =~ /Product: VMware Virtual Platform/ - virtualization[:system] = "vmware" - virtualization[:role] = "guest" + # http://www.dmo.ca/blog/detecting-virtualization-on-linux + smbios_path= Ohai.abs_path( "/usr/sbin/smbios" ) + if File.exists?(smbios_path) + so = shell_out(smbios_path) + case so.stdout + when /Manufacturer: Microsoft/ + if so.stdout =~ /Product: Virtual Machine/ + virtualization[:system] = "virtualpc" + virtualization[:role] = "guest" + end + when /Manufacturer: VMware/ + if so.stdout =~ /Product: VMware Virtual Platform/ + virtualization[:system] = "vmware" + virtualization[:role] = "guest" + end + else + nil end - else - nil end - end -end -if File.executable?('/usr/sbin/zoneadm') - zones = Mash.new - - popen4("zoneadm list -pc") do |pid, stdin, stdout, stderr| - stdin.close - stdout.each{ |line| - info = line.chomp.split(/:/) - zones[info[1]] = { - 'id' => info[0], - 'state' => info[2], - 'root' => info[3], - 'uuid' => info[4], - 'brand' => info[5], - 'ip' => info[6], - } - } - - if (zones.length == 1) - first_zone = zones.keys[0] - unless( first_zone == 'global') + if File.executable?('/usr/sbin/zoneadm') + zones = Mash.new + so = shell_out("zoneadm list -pc") + so.stdout.lines do |line| + info = line.chomp.split(/:/) + zones[info[1]] = { + 'id' => info[0], + 'state' => info[2], + 'root' => info[3], + 'uuid' => info[4], + 'brand' => info[5], + 'ip' => info[6], + } + end + + if (zones.length == 1) + first_zone = zones.keys[0] + unless( first_zone == 'global') + virtualization[:system] = 'zone' + virtualization[:role] = 'guest' + virtualization[:guest_uuid] = zones[first_zone]['uuid'] + end + elsif (zones.length > 1) virtualization[:system] = 'zone' - virtualization[:role] = 'guest' - virtualization[:guest_uuid] = zones[first_zone]['uuid'] + virtualization[:role] = 'host' + virtualization[:guests] = zones end - elsif (zones.length > 1) - virtualization[:system] = 'zone' - virtualization[:role] = 'host' - virtualization[:guests] = zones end end end