diff --git a/plugins/modules/ipaidview.py b/plugins/modules/ipaidview.py index b7065155ee6e2667205f1a6f8a6dd719620d4e30..9a10eef9aa8aa3246798ad6228593af170871cef 100644 --- a/plugins/modules/ipaidview.py +++ b/plugins/modules/ipaidview.py @@ -127,7 +127,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, ipalib_errors from ansible.module_utils import six if six.PY3: @@ -144,6 +144,14 @@ def find_idview(module, name): return _result["result"] +def valid_host(module, name): + try: + module.ipa_command("host_show", name, {}) + except ipalib_errors.NotFound: + return False + return True + + def gen_args(description, domain_resolution_order): _args = {} if description is not None: @@ -327,6 +335,9 @@ def main(): # Add members if host_add: + for host in host_add: + if not valid_host(ansible_module, host): + ansible_module.fail_json("Invalid host '%s'" % host) commands.append([name, "idview_apply", {"host": host_add}]) # Remove members diff --git a/tests/idview/test_idview.yml b/tests/idview/test_idview.yml index 8e70dc6a34b828c726f8b9d2b71f810fbf4e852e..8ef75e097b96c140934195f88ac4551eb6223ab6 100644 --- a/tests/idview/test_idview.yml +++ b/tests/idview/test_idview.yml @@ -25,6 +25,7 @@ ansible.builtin.set_fact: host1_fqdn: "{{ 'host1.' + ipaserver_domain }}" host2_fqdn: "{{ 'host2.' + ipaserver_domain }}" + host3_fqdn: "{{ 'host3.' + ipaserver_domain }}" # CLEANUP TEST ITEMS @@ -182,6 +183,27 @@ register: result failed_when: result.changed or result.failed + - name: Ensure invalid host "{{ host3_fqdn }}" fails to applied to idview test1_idview + ipaidview: + name: test1_idview + host: + - "{{ host3_fqdn }}" + action: member + register: result + failed_when: result.changed or not result.failed or + "Invalid host" not in result.msg or + host3_fqdn not in result.msg + + - name: Ensure invalid host "{{ host3_fqdn }}" does not fail to unapply from idview test1_idview + ipaidview: + name: test1_idview + host: + - "{{ host3_fqdn }}" + action: member + state: absent + register: result + failed_when: result.changed or result.failed + - name: Ensure host "{{ host2_fqdn }}" is applied to idview test1_idview ipaidview: name: test1_idview