From e53a7856f6b760eea6e9f0edf706edd98deb167f Mon Sep 17 00:00:00 2001 From: Brian Coca Date: Mon, 10 Dec 2018 11:42:51 -0500 Subject: [PATCH] simplify vm_guest detection code (#49378) - remove a lot of repetition - change lists to tuples since they are faster to assign --- changelogs/fragments/vm_guest_facts.yml | 2 + .../module_utils/facts/virtual/linux.py | 52 +++++-------------- 2 files changed, 16 insertions(+), 38 deletions(-) create mode 100644 changelogs/fragments/vm_guest_facts.yml diff --git a/changelogs/fragments/vm_guest_facts.yml b/changelogs/fragments/vm_guest_facts.yml new file mode 100644 index 0000000000..b872a71a3d --- /dev/null +++ b/changelogs/fragments/vm_guest_facts.yml @@ -0,0 +1,2 @@ +bugfixes: + - simple code collapse, avoid a lot of repetition diff --git a/lib/ansible/module_utils/facts/virtual/linux.py b/lib/ansible/module_utils/facts/virtual/linux.py index a8298ad2bd..68edc14cb4 100644 --- a/lib/ansible/module_utils/facts/virtual/linux.py +++ b/lib/ansible/module_utils/facts/virtual/linux.py @@ -80,87 +80,63 @@ class LinuxVirtual(Virtual): pass return virtual_facts + # assume guest for this block + virtual_facts['virtualization_role'] = 'guest' + product_name = get_file_content('/sys/devices/virtual/dmi/id/product_name') - if product_name in ['KVM', 'Bochs']: + if product_name in ('KVM', 'Bochs'): virtual_facts['virtualization_type'] = 'kvm' - virtual_facts['virtualization_role'] = 'guest' return virtual_facts if product_name == 'RHEV Hypervisor': virtual_facts['virtualization_type'] = 'RHEV' - virtual_facts['virtualization_role'] = 'guest' return virtual_facts - if product_name in ['VMware Virtual Platform', 'VMware7,1']: + if product_name in ('VMware Virtual Platform', 'VMware7,1'): virtual_facts['virtualization_type'] = 'VMware' - virtual_facts['virtualization_role'] = 'guest' return virtual_facts - if product_name in ['OpenStack Compute', 'OpenStack Nova']: + if product_name in ('OpenStack Compute', 'OpenStack Nova'): virtual_facts['virtualization_type'] = 'openstack' - virtual_facts['virtualization_role'] = 'guest' return virtual_facts bios_vendor = get_file_content('/sys/devices/virtual/dmi/id/bios_vendor') if bios_vendor == 'Xen': virtual_facts['virtualization_type'] = 'xen' - virtual_facts['virtualization_role'] = 'guest' return virtual_facts if bios_vendor == 'innotek GmbH': virtual_facts['virtualization_type'] = 'virtualbox' - virtual_facts['virtualization_role'] = 'guest' return virtual_facts - if bios_vendor in ['Amazon EC2', 'Hetzner']: + if bios_vendor in ('Amazon EC2', 'Hetzner'): virtual_facts['virtualization_type'] = 'kvm' - virtual_facts['virtualization_role'] = 'guest' return virtual_facts sys_vendor = get_file_content('/sys/devices/virtual/dmi/id/sys_vendor') + KVM_SYS_VENDORS = ('QEMU', 'oVirt', 'Amazon EC2', 'Google', 'Scaleway') + if sys_vendor in KVM_SYS_VENDORS: + virtual_facts['virtualization_type'] = 'kvm' + return virtual_facts + # FIXME: This does also match hyperv if sys_vendor == 'Microsoft Corporation': virtual_facts['virtualization_type'] = 'VirtualPC' - virtual_facts['virtualization_role'] = 'guest' return virtual_facts if sys_vendor == 'Parallels Software International Inc.': virtual_facts['virtualization_type'] = 'parallels' - virtual_facts['virtualization_role'] = 'guest' - return virtual_facts - - if sys_vendor == 'QEMU': - virtual_facts['virtualization_type'] = 'kvm' - virtual_facts['virtualization_role'] = 'guest' - return virtual_facts - - if sys_vendor == 'oVirt': - virtual_facts['virtualization_type'] = 'kvm' - virtual_facts['virtualization_role'] = 'guest' return virtual_facts if sys_vendor == 'OpenStack Foundation': virtual_facts['virtualization_type'] = 'openstack' - virtual_facts['virtualization_role'] = 'guest' return virtual_facts - if sys_vendor == 'Amazon EC2': - virtual_facts['virtualization_type'] = 'kvm' - virtual_facts['virtualization_role'] = 'guest' - return virtual_facts - - if sys_vendor == 'Google': - virtual_facts['virtualization_type'] = 'kvm' - virtual_facts['virtualization_role'] = 'guest' - return virtual_facts - - if sys_vendor == 'Scaleway': - virtual_facts['virtualization_type'] = 'kvm' - virtual_facts['virtualization_role'] = 'guest' - return virtual_facts + # unassume guest + del virtual_facts['virtualization_role'] if os.path.exists('/proc/self/status'): for line in get_file_lines('/proc/self/status'):