diff --git a/utils/templates/ipamodule+member.py.in b/utils/templates/ipamodule+member.py.in index 1515ccc194ae5e10d66adcc9e408b571f3e8dd60..dc682cf9eeb7705fd3848a699171320a567e03b7 100644 --- a/utils/templates/ipamodule+member.py.in +++ b/utils/templates/ipamodule+member.py.in @@ -36,6 +36,7 @@ short description: Manage FreeIPA $name description: Manage FreeIPA $name and $name members extends_documentation_fragment: - ipamodule_base_docs + - ipamoudle_base_docs.delete_continue options: name: description: The list of $name name strings. @@ -152,6 +153,7 @@ def main(): choices=["present", "absent"]), ), supports_check_mode=True, + ipa_module_options=["delete_continue"] ) ansible_module._ansible_debug = True @@ -163,9 +165,14 @@ def main(): # present PARAMETER1 = ansible_module.params_get("PARAMETER1") - PARAMETER2 = ansible_module.params_get("PARAMETER2") + # Note: some parameters must be compared in a case insensitive way, + # or are transliterated into its lowercase version by IPA API. For + # these parameters, use IPAAnsibleModule.params_get_lowercase. + PARAMETER2 = ansible_module.params_get_lowercase("PARAMETER2") action = ansible_module.params_get("action") + delete_continue = ansible_module.params_get("delete_continue") + # state state = ansible_module.params_get("state") @@ -202,6 +209,9 @@ def main(): # Make sure $name exists res_find = find_$name(ansible_module, name) + # add/del lists + PARAMETER2_add, PARAMETER2_del = [], [] + # Create command if state == "present": @@ -228,19 +238,6 @@ def main(): PARAMETER2_add, PARAMETER2_del = gen_add_del_lists( PARAMETER2, res_find.get("member_PARAMETER2")) - # Add members - if len(PARAMETER2_add) > 0: - commands.append([name, "$name_add_member", - { - "PARAMETER2": PARAMETER2_add, - }]) - # Remove members - if len(PARAMETER2_del) > 0: - commands.append([name, "$name_remove_member", - { - "PARAMETER2": PARAMETER2_del, - }]) - elif action == "member": if res_find is None: ansible_module.fail_json( @@ -248,21 +245,17 @@ def main(): # Reduce add lists for PARAMETER2 # to new entries only that are not in res_find. - if PARAMETER2 is not None and \ - "API_PARAMETER2_NAME" in res_find: - PARAMETER2 = gen_add_list( - PARAMETER2, res_find["API_PARAMETER2_NAME"]) - if PARAMETER2 is not None: - commands.append([name, "$name_add_member", - { - "PARAMETER2": PARAMETER2, - }]) + PARAMETER2_add = gen_add_list( + PARAMETER2, res_find.get("member_PARAMETER2")) + elif state == "absent": if action == "$name": if res_find is not None: - commands.append([name, "$name_del", {}]) + commands.append( + [name, "$name_del", {"continue": delete_continue}] + ) elif action == "member": if res_find is None: @@ -272,18 +265,29 @@ def main(): # Reduce del lists of member_host and member_hostgroup, # to the entries only that are in res_find. if PARAMETER2 is not None: - PARAMETER2 = gen_intersection_list( - PARAMETER2, res_find.get("API_PARAMETER2_NAME")) - - if PARAMETER2 is not None: - commands.append([name, "$name_remove_member", - { - "PARAMETER2": PARAMETER2, - }]) + PARAMETER2_del = gen_intersection_list( + PARAMETER2, res_find.get("member_PARAMETER2")) else: ansible_module.fail_json(msg="Unkown state '%s'" % state) + # Member management + + # Add members + if PARAMETER2_add: + commands.append([name, "$name_add_member", + { + "PARAMETER2": PARAMETER2_add, + }]) + + # Remove members + + if PARAMETER2_del: + commands.append([name, "$name_remove_member", + { + "PARAMETER2": PARAMETER2_del, + "continue": delete_continue, + }]) # Execute commands diff --git a/utils/templates/ipamodule.py.in b/utils/templates/ipamodule.py.in index 00750f83b199e2f8bab163daf57c7ee9f80b5d75..07fe2ac470d2ed61bb351791bedabed41ff5b7f0 100644 --- a/utils/templates/ipamodule.py.in +++ b/utils/templates/ipamodule.py.in @@ -36,6 +36,7 @@ short description: Manage FreeIPA $name description: Manage FreeIPA $name extends_documentation_fragment: - ipamodule_base_docs + - ipamodule_base_docs.delete_continue options: name: description: The list of $name name strings. @@ -124,6 +125,7 @@ def main(): choices=["present", "absent"]), ), supports_check_mode=True, + ipa_module_options=["delete_continue"], ) ansible_module._ansible_debug = True @@ -135,7 +137,12 @@ def main(): # present PARAMETER1 = ansible_module.params_get("PARAMETER1") - PARAMETER2 = ansible_module.params_get("PARAMETER2") + # Note: some parameters must be compared in a case insensitive way, + # or are transliterated into its lowercase version by IPA API. For + # these parameters, use IPAAnsibleModule.params_get_lowercase. + PARAMETER2 = ansible_module.params_get_lowercase("PARAMETER2") + + delete_continue = ansible_module.params_get("delete_continue") # state state = ansible_module.params_get("state") @@ -188,7 +195,9 @@ def main(): elif state == "absent": if res_find is not None: - commands.append([name, "$name_del", {}]) + commands.append( + [name, "$name_del", {"continue": delete_continue}] + ) else: ansible_module.fail_json(msg="Unkown state '%s'" % state)