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

- old
+ new

@@ -14,80 +14,81 @@ # 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(:freebsd) do + virtualization Mash.new -if from("sysctl -n security.jail.jailed").to_i == 1 - virtualization[:system] = "jail" - virtualization[:role] = "guest" -end - -# detect from modules -popen4("/sbin/kldstat") do |pid, stdin, stdout, stderr| - stdin.close - stdout.each do |line| - case line - when /vboxdrv/ - virtualization[:system] = "vbox" - virtualization[:role] = "host" - when /vboxguest/ - virtualization[:system] = "vbox" + so = shell_out("sysctl -n security.jail.jailed") + if so.stdout.split($/)[0].to_i == 1 + virtualization[:system] = "jail" virtualization[:role] = "guest" end - end -end + # detect from modules + so = shell_out("#{ Ohai.abs_path( "/sbin/kldstat" )}") + so.stdout.lines do |line| + case line + when /vboxdrv/ + virtualization[:system] = "vbox" + virtualization[:role] = "host" + when /vboxguest/ + virtualization[:system] = "vbox" + virtualization[:role] = "guest" + end + end -# XXX doesn't work when jail is there but not running (ezjail-admin stop) -if from("jls -n \| wc -l").to_i >= 1 - virtualization[:system] = "jail" - virtualization[:role] = "host" -end + # XXX doesn't work when jail is there but not running (ezjail-admin stop) + so = shell_out("jls -n") + if ( so.stdout || "" ).lines.count >= 1 + virtualization[:system] = "jail" + virtualization[:role] = "host" + end -# KVM Host support for FreeBSD is in development -# http://feanor.sssup.it/~fabio/freebsd/lkvm/ + # KVM Host support for FreeBSD is in development + # http://feanor.sssup.it/~fabio/freebsd/lkvm/ -# Detect KVM/QEMU from cpu, report as KVM -# hw.model: QEMU Virtual CPU version 0.9.1 -if from("sysctl -n hw.model") =~ /QEMU Virtual CPU/ - virtualization[:system] = "kvm" - virtualization[:role] = "guest" -end + # Detect KVM/QEMU from cpu, report as KVM + # hw.model: QEMU Virtual CPU version 0.9.1 + so = shell_out("sysctl -n hw.model") + if so.stdout.split($/)[0] =~ /QEMU Virtual CPU/ + virtualization[:system] = "kvm" + virtualization[:role] = "guest" + end -# http://www.dmo.ca/blog/detecting-virtualization-on-linux -if File.exists?("/usr/local/sbin/dmidecode") - popen4("dmidecode") do |pid, stdin, stdout, stderr| - stdin.close - found_virt_manufacturer = nil - found_virt_product = nil - stdout.each do |line| - case line - when /Manufacturer: Microsoft/ - found_virt_manufacturer = "microsoft" - when /Product Name: Virtual Machine/ - found_virt_product = "microsoft" - when /Version: 5.0/ - if found_virt_manufacturer == "microsoft" && found_virt_product == "microsoft" - virtualization[:system] = "virtualpc" - virtualization[:role] = "guest" + # http://www.dmo.ca/blog/detecting-virtualization-on-linux + if File.exists?("/usr/local/sbin/dmidecode") + so = shell_out("dmidecode") + found_virt_manufacturer = nil + found_virt_product = nil + so.stdout.lines do |line| + case line + when /Manufacturer: Microsoft/ + found_virt_manufacturer = "microsoft" + when /Product Name: Virtual Machine/ + found_virt_product = "microsoft" + when /Version: 5.0/ + if found_virt_manufacturer == "microsoft" && found_virt_product == "microsoft" + virtualization[:system] = "virtualpc" + virtualization[:role] = "guest" + end + when /Version: VS2005R2/ + if found_virt_manufacturer == "microsoft" && found_virt_product == "microsoft" + virtualization[:system] = "virtualserver" + virtualization[:role] = "guest" + end + when /Manufacturer: VMware/ + found_virt_manufacturer = "vmware" + when /Product Name: VMware Virtual Platform/ + if found_virt_manufacturer == "vmware" + virtualization[:system] = "vmware" + virtualization[:role] = "guest" + end end - when /Version: VS2005R2/ - if found_virt_manufacturer == "microsoft" && found_virt_product == "microsoft" - virtualization[:system] = "virtualserver" - virtualization[:role] = "guest" - end - when /Manufacturer: VMware/ - found_virt_manufacturer = "vmware" - when /Product Name: VMware Virtual Platform/ - if found_virt_manufacturer == "vmware" - virtualization[:system] = "vmware" - virtualization[:role] = "guest" - end end end end end -