From dead4679824531cfc35e4380c735f635c0135aa5 Mon Sep 17 00:00:00 2001 From: Rafael Guterres Jeffman <rjeffman@redhat.com> Date: Wed, 19 Jan 2022 09:54:16 -0300 Subject: [PATCH] dnsconfig: Fix management of forwarders. If one tries to set a list of forwarders which include an already existing forwarder, the existing forwarder is removed, and the list of configured forwarders contain only the new ones. This patch fixes this behavior by setting a union of the currently available forwarders and the list of forwarders provided in the playbook. Tests were added to ensure this behavior. --- plugins/modules/ipadnsconfig.py | 4 +-- tests/dnsconfig/test_dnsconfig.yml | 49 +++++++++++++++++++++++++++++- 2 files changed, 50 insertions(+), 3 deletions(-) diff --git a/plugins/modules/ipadnsconfig.py b/plugins/modules/ipadnsconfig.py index 7b82a076..6ca4aff5 100644 --- a/plugins/modules/ipadnsconfig.py +++ b/plugins/modules/ipadnsconfig.py @@ -144,8 +144,8 @@ def gen_args(module, state, dnsconfig, forwarders, forward_policy, _args['idnsforwarders'] = [''] elif state == 'present': - _args['idnsforwarders'] = [ - fwd for fwd in _forwarders if fwd not in global_forwarders] + _args['idnsforwarders'] = \ + list(set(list(_forwarders) + list(global_forwarders))) # If no forwarders should be added, remove argument. if not _args['idnsforwarders']: del _args['idnsforwarders'] diff --git a/tests/dnsconfig/test_dnsconfig.yml b/tests/dnsconfig/test_dnsconfig.yml index b416a0d1..408c0596 100644 --- a/tests/dnsconfig/test_dnsconfig.yml +++ b/tests/dnsconfig/test_dnsconfig.yml @@ -171,7 +171,6 @@ register: result failed_when: not result.changed or result.failed - - name: Ensure all forwarders are absent, again. ipadnsconfig: ipaadmin_password: SomeADMINpassword @@ -185,6 +184,54 @@ register: result failed_when: result.changed or result.failed + - name: Ensure forwarder is present. + ipadnsconfig: + ipaadmin_password: SomeADMINpassword + ipaapi_context: "{{ ipa_context | default(omit) }}" + forwarders: + - ip_address: 8.8.8.8 + register: result + failed_when: not result.changed or result.failed + + - name: Ensure forwarders are present. + ipadnsconfig: + ipaadmin_password: SomeADMINpassword + ipaapi_context: "{{ ipa_context | default(omit) }}" + forwarders: + - ip_address: 8.8.4.4 + - ip_address: 8.8.8.8 + register: result + failed_when: not result.changed or result.failed + + - name: Ensure forwarders are present, again. + ipadnsconfig: + ipaadmin_password: SomeADMINpassword + ipaapi_context: "{{ ipa_context | default(omit) }}" + forwarders: + - ip_address: 8.8.4.4 + - ip_address: 8.8.8.8 + register: result + failed_when: result.changed or result.failed + + - name: Ensure another forwarder is present. + ipadnsconfig: + ipaadmin_password: SomeADMINpassword + ipaapi_context: "{{ ipa_context | default(omit) }}" + forwarders: + - ip_address: 8.8.4.4 + register: result + failed_when: result.changed or result.failed + + - name: Ensure forwarders are present. + ipadnsconfig: + ipaadmin_password: SomeADMINpassword + ipaapi_context: "{{ ipa_context | default(omit) }}" + forwarders: + - ip_address: 8.8.4.4 + - ip_address: 8.8.8.8 + register: result + failed_when: result.changed or result.failed + # Cleanup. - name: Ensure forwarders are absent. ipadnsconfig: -- GitLab