From cf7fc949fe7fdfbacf177a045fd60f61c5ff67ef Mon Sep 17 00:00:00 2001 From: Rafael Guterres Jeffman <rjeffman@redhat.com> Date: Wed, 27 Oct 2021 15:57:10 -0300 Subject: [PATCH] sudorule: Create FQDN from single hostnames Single hostnames can be used for sudorule_add_host and will match fqdn in IPA internally. Simple host names have to be extended to be FQDN to be able to compare them for sudorule_host_add and sudorule_host_remove. Fixes #672 --- plugins/modules/ipasudorule.py | 9 +- .../test_sudorule_single_hostnames.yml | 151 ++++++++++++++++++ 2 files changed, 159 insertions(+), 1 deletion(-) create mode 100644 tests/sudorule/test_sudorule_single_hostnames.yml diff --git a/plugins/modules/ipasudorule.py b/plugins/modules/ipasudorule.py index 27a99aba..6ad791de 100644 --- a/plugins/modules/ipasudorule.py +++ b/plugins/modules/ipasudorule.py @@ -188,7 +188,7 @@ RETURN = """ from ansible.module_utils.ansible_freeipa_module import \ IPAAnsibleModule, compare_args_ipa, gen_add_del_lists, gen_add_list, \ - gen_intersection_list + gen_intersection_list, api_get_domain, ensure_fqdn def find_sudorule(module, name): @@ -374,6 +374,13 @@ def main(): # Connect to IPA API with ansible_module.ipa_connect(): + default_domain = api_get_domain() + + # Ensure host is not short hostname. + if host: + host = list( + {ensure_fqdn(value.lower(), default_domain) for value in host} + ) commands = [] diff --git a/tests/sudorule/test_sudorule_single_hostnames.yml b/tests/sudorule/test_sudorule_single_hostnames.yml new file mode 100644 index 00000000..38ccad9a --- /dev/null +++ b/tests/sudorule/test_sudorule_single_hostnames.yml @@ -0,0 +1,151 @@ +--- +- name: Test sudorule with single hostnames. + hosts: "{{ ipa_test_host | default('ipaserver') }}" + become: no + gather_facts: no + + tasks: + - block: + # setup test environment + - name: Get Domain from the server name + set_fact: + ipaserver_domain: "{{ ansible_facts['fqdn'].split('.')[1:] | join ('.') }}" + when: ipaserver_domain is not defined + + - name: Ensure test sudo rule is absent + ipasudorule: + ipaadmin_password: SomeADMINpassword + name: sudorule_for_hosts + state: absent + + - name: Ensure test host exist + ipahost: + ipaadmin_password: SomeADMINpassword + hosts: + - name: "host01.{{ ipaserver_domain }}" + force: yes + - name: "host02.{{ ipaserver_domain }}" + force: yes + + # start tests + - name: Ensure sudorule exist with host member using FQDN. + ipasudorule: + ipaadmin_password: SomeADMINpassword + name: sudorule_for_hosts + host: "host01.{{ ipaserver_domain }}" + register: result + failed_when: result.failed or not result.changed + + - name: Ensure sudorule host member using short hostname. + ipasudorule: + ipaadmin_password: SomeADMINpassword + name: sudorule_for_hosts + host: host01 + register: result + failed_when: result.failed or result.changed + + - name: Ensure sudorule exist with another host using short name. + ipasudorule: + ipaadmin_password: SomeADMINpassword + name: sudorule_for_hosts + host: host02 + register: result + failed_when: result.failed or not result.changed + + - name: Ensure sudorule exist with another host member using FQDN. + ipasudorule: + ipaadmin_password: SomeADMINpassword + name: sudorule_for_hosts + host: "host02.{{ ipaserver_domain }}" + register: result + failed_when: result.failed or result.changed + + - name: Ensure sudorule exist with another host member using FQDN. + ipasudorule: + ipaadmin_password: SomeADMINpassword + name: sudorule_for_hosts + host: "host02.{{ ipaserver_domain }}" + register: result + failed_when: result.failed or result.changed + + # cleanup for member tests. + - name: Ensure test sudo rule is absent + ipasudorule: + ipaadmin_password: SomeADMINpassword + name: sudorule_for_hosts + state: absent + + - name: Ensure test sudo rule is absent + ipasudorule: + ipaadmin_password: SomeADMINpassword + name: sudorule_for_hosts + state: absent + + # member tests + - name: Ensure test sudo rule is present + ipasudorule: + ipaadmin_password: SomeADMINpassword + name: sudorule_for_hosts + + - name: Ensure sudorule host member using FQDN. + ipasudorule: + ipaadmin_password: SomeADMINpassword + name: sudorule_for_hosts + host: "host01.{{ ipaserver_domain }}" + action: member + register: result + failed_when: result.failed or not result.changed + + - name: Ensure sudorule host member using short hostname. + ipasudorule: + ipaadmin_password: SomeADMINpassword + name: sudorule_for_hosts + host: host01 + action: member + register: result + failed_when: result.failed or result.changed + + - name: Ensure test sudo rule is absent + ipasudorule: + ipaadmin_password: SomeADMINpassword + name: sudorule_for_hosts + state: absent + + - name: Ensure test sudo rule is present + ipasudorule: + ipaadmin_password: SomeADMINpassword + name: sudorule_for_hosts + + - name: Ensure sudorule host member using FQDN. + ipasudorule: + ipaadmin_password: SomeADMINpassword + name: sudorule_for_hosts + host: "host01.{{ ipaserver_domain }}" + action: member + register: result + failed_when: result.failed or not result.changed + + - name: Ensure sudorule host member using short hostname. + ipasudorule: + ipaadmin_password: SomeADMINpassword + name: sudorule_for_hosts + host: host01 + action: member + register: result + failed_when: result.failed or result.changed + + always: + # cleanup + - name: Ensure test sudo rule is absent + ipasudorule: + ipaadmin_password: SomeADMINpassword + name: sudorule_for_hosts + state: absent + + - name: Ensure test host is absent + ipahost: + ipaadmin_password: SomeADMINpassword + name: + - "host01.{{ ipaserver_domain }}" + - "host02.{{ ipaserver_domain }}" + state: absent -- GitLab