diff --git a/changelogs/fragments/460-respawn.yaml b/changelogs/fragments/460-respawn.yaml index 7223b5d..00f8028 100644 --- a/changelogs/fragments/460-respawn.yaml +++ b/changelogs/fragments/460-respawn.yaml @@ -4,3 +4,5 @@ minor_changes: (https://github.com/ansible-collections/ansible.posix/pull/460)." - "selinux - respawn module to use the system python interpreter when the ``selinux`` python module is not available for ``ansible_python_interpreter`` (https://github.com/ansible-collections/ansible.posix/pull/460)." + - "firewalld - respawn module to use the system python interpreter when the ``firewall`` python module is not available for ``ansible_python_interpreter`` + (https://github.com/ansible-collections/ansible.posix/pull/460)." diff --git a/plugins/module_utils/firewalld.py b/plugins/module_utils/firewalld.py index 6a76c32..011b140 100644 --- a/plugins/module_utils/firewalld.py +++ b/plugins/module_utils/firewalld.py @@ -5,6 +5,7 @@ from __future__ import absolute_import, division, print_function from ansible_collections.ansible.posix.plugins.module_utils.version import LooseVersion +from ansible_collections.ansible.posix.plugins.module_utils._respawn import respawn_module, HAS_RESPAWN_UTIL from ansible.module_utils.basic import missing_required_lib __metaclass__ = type @@ -314,6 +315,8 @@ class FirewallTransaction(object): installed version (%s) likely too old. Requires firewalld >= 0.2.11" % FW_VERSION) if import_failure: + if HAS_RESPAWN_UTIL: + respawn_module("firewall") module.fail_json( msg=missing_required_lib('firewall') + '. Version 0.2.11 or newer required (0.3.9 or newer for offline operations)' ) diff --git a/tests/integration/targets/firewalld/tasks/main.yml b/tests/integration/targets/firewalld/tasks/main.yml index 17f14c2..5f81c62 100644 --- a/tests/integration/targets/firewalld/tasks/main.yml +++ b/tests/integration/targets/firewalld/tasks/main.yml @@ -10,11 +10,6 @@ state: present # This doesn't work for CentOS 6 because firewalld doesn't exist in CentOS6 - - name: Check to make sure the firewalld python module is available. - shell: "{{ansible_python.executable}} -c 'import firewall'" - register: check_output - ignore_errors: true - - name: Enable dbus-broker daemon service: name: dbus-broker @@ -30,7 +25,6 @@ state: started - import_tasks: run_all_tests.yml - when: check_output.rc == 0 - name: Test Offline Operations block: @@ -40,7 +34,6 @@ state: stopped - import_tasks: run_all_tests.yml - when: check_output.rc == 0 when: - ansible_facts.os_family == "RedHat" and ansible_facts.distribution_major_version is version('7', '>=')