diff options
author | Patrik Lundin <patrik@sigterm.se> | 2016-08-26 17:27:41 +0200 |
---|---|---|
committer | Brian Coca <bcoca@users.noreply.github.com> | 2016-08-26 11:27:41 -0400 |
commit | b4f338bca738cbd3e3b64be2fc9579bcefa28d6e (patch) | |
tree | a808db8403646681d5697bfa6009a7418813b37c | |
parent | b4a035718ebb3fc7df0f932b2423d7533a1ddfca (diff) | |
download | ansible-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.py | 45 |
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): """ |