summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPatrik Lundin <patrik@sigterm.se>2016-08-26 17:27:41 +0200
committerBrian Coca <bcoca@users.noreply.github.com>2016-08-26 11:27:41 -0400
commitb4f338bca738cbd3e3b64be2fc9579bcefa28d6e (patch)
treea808db8403646681d5697bfa6009a7418813b37c
parentb4a035718ebb3fc7df0f932b2423d7533a1ddfca (diff)
downloadansible-b4f338bca738cbd3e3b64be2fc9579bcefa28d6e.tar.gz
Add OpenBSD virtualization facts. (#17227)
* Add OpenBSD virtualization facts. Patch written by @jasperla. Tested by various people on: - virtualbox - vmware esx(i) + fusion - kvm (smartos + plain linux + a random cloud provider) This patch is already present in the OpenBSD port of ansible. * Rework diff to get rid of extra returns. Requested by @bcoca. While here, use four-space indentations of all code blocks. * Set facts even if no match is found. Discussed with @bcoca. * Find sysctl via get_bin_path(). Requested by @bcoca. * Fail if we do not find a sysctl binary. * Do not fail if a sysctl binary is not found. Just set empty fact values instead. Requested by @bcoca.
-rw-r--r--lib/ansible/module_utils/facts.py45
1 files changed, 43 insertions, 2 deletions
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):
"""