diff --git a/plugins/modules/ipasudorule.py b/plugins/modules/ipasudorule.py index 27a99abafe968cbf85f324d1364b517327171bbc..6ad791ded0bbfb9f7bbdff53b7ec8ce9f6bf8292 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 0000000000000000000000000000000000000000..38ccad9a508216bdfc5c13a39607685610e47990 --- /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