diff --git a/lib/ansible/module_utils/facts.py b/lib/ansible/module_utils/facts.py index 78c460756d..652aa12a5d 100644 --- a/lib/ansible/module_utils/facts.py +++ b/lib/ansible/module_utils/facts.py @@ -3171,8 +3171,49 @@ class OpenBSDVirtual(Virtual): return self.facts def get_virtual_facts(self): - self.facts['virtualization_type'] = '' - self.facts['virtualization_role'] = '' + sysctl_path = self.module.get_bin_path('sysctl') + + if sysctl_path: + rc, out, err = self.module.run_command("%s -n hw.product" % sysctl_path) + if rc != 0: + self.facts['virtualization_type'] = '' + self.facts['virtualization_role'] = '' + elif re.match('(KVM|Bochs|SmartDC).*', out): + self.facts['virtualization_type'] = 'kvm' + self.facts['virtualization_role'] = 'guest' + elif re.match('.*VMware.*', out): + self.facts['virtualization_type'] = 'VMware' + self.facts['virtualization_role'] = 'guest' + elif out.rstrip() == 'VirtualBox': + self.facts['virtualization_type'] = 'virtualbox' + self.facts['virtualization_role'] = 'guest' + elif out.rstrip() == 'HVM domU': + self.facts['virtualization_type'] = 'xen' + self.facts['virtualization_role'] = 'guest' + elif out.rstrip() == 'Parallels': + self.facts['virtualization_type'] = 'parallels' + self.facts['virtualization_role'] = 'guest' + elif out.rstrip() == 'RHEV Hypervisor': + self.facts['virtualization_type'] = 'RHEV' + self.facts['virtualization_role'] = 'guest' + else: + # Try harder and see if hw.vendor has anything we could use. + rc, out, err = self.module.run_command("%s -n hw.vendor" % sysctl_path) + if rc != 0: + self.facts['virtualization_type'] = '' + self.facts['virtualization_role'] = '' + elif out.rstrip() == 'QEMU': + self.facts['virtualization_type'] = 'kvm' + self.facts['virtualization_role'] = 'guest' + else: + # Set empty values if we find no match at all. + self.facts['virtualization_type'] = '' + self.facts['virtualization_role'] = '' + else: + # Set empty values if we find no sysctl binary. + self.facts['virtualization_type'] = '' + self.facts['virtualization_role'] = '' + class HPUXVirtual(Virtual): """