diff --git a/changelogs/fragments/73167-bhyve-facts.yml b/changelogs/fragments/73167-bhyve-facts.yml new file mode 100644 index 00000000000..d9f6d0fc904 --- /dev/null +++ b/changelogs/fragments/73167-bhyve-facts.yml @@ -0,0 +1,2 @@ +bugfixes: + - facts - properly report virtualization facts for Linux guests running on bhyve (https://github.com/ansible/ansible/issues/73167) diff --git a/lib/ansible/module_utils/facts/virtual/linux.py b/lib/ansible/module_utils/facts/virtual/linux.py index 46a7cfaddc3..7e5b5d71a88 100644 --- a/lib/ansible/module_utils/facts/virtual/linux.py +++ b/lib/ansible/module_utils/facts/virtual/linux.py @@ -352,6 +352,13 @@ class LinuxVirtual(Virtual): virtual_facts['virtualization_role'] = 'guest' found_virt = True + if 'BHYVE' in out: + guest_tech.add('bhyve') + if not found_virt: + virtual_facts['virtualization_type'] = 'bhyve' + virtual_facts['virtualization_role'] = 'guest' + found_virt = True + if os.path.exists('/dev/kvm'): host_tech.add('kvm') if not found_virt: diff --git a/test/units/module_utils/facts/virtual/__init__.py b/test/units/module_utils/facts/virtual/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/test/units/module_utils/facts/virtual/test_linux.py b/test/units/module_utils/facts/virtual/test_linux.py new file mode 100644 index 00000000000..25503750ae6 --- /dev/null +++ b/test/units/module_utils/facts/virtual/test_linux.py @@ -0,0 +1,28 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2020 Ansible Project +# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) + +from __future__ import absolute_import, division, print_function +__metaclass__ = type + +from ansible.module_utils.facts.virtual import linux + + +def test_get_virtual_facts_bhyve(mocker): + mocker.patch('os.path.exists', return_value=False) + mocker.patch('ansible.module_utils.facts.virtual.linux.get_file_content', return_value='') + mocker.patch('ansible.module_utils.facts.virtual.linux.get_file_lines', return_value=[]) + + module = mocker.Mock() + module.run_command.return_value = (0, 'BHYVE\n', '') + inst = linux.LinuxVirtual(module) + + facts = inst.get_virtual_facts() + expected = { + 'virtualization_role': 'guest', + 'virtualization_tech_host': set(), + 'virtualization_type': 'bhyve', + 'virtualization_tech_guest': set(['bhyve']), + } + + assert facts == expected