diff --git a/plugins/modules/ipagroup.py b/plugins/modules/ipagroup.py index 137ef41111e41284df8654542c3466487d2ab2c8..0f7d2d06c034ee9b5879cd1eb949b6c4a4fa1d02 100644 --- a/plugins/modules/ipagroup.py +++ b/plugins/modules/ipagroup.py @@ -347,25 +347,12 @@ def main(): if res_find is None: ansible_module.fail_json(msg="No group '%s'" % name) - user_add = list( - set(user or []) - - set(res_find.get("member_user", []))) - group_add = list( - set(group or []) - - set(res_find.get("member_group", []))) - service_add = list( - set(service or []) - - set(res_find.get("member_service", []))) - - # Add members - if len(user_add) > 0 or len(group_add) > 0 or \ - len(service_add) > 0: - commands.append([name, "group_add_member", - { - "user": user, - "group": group, - "service": service, - }]) + commands.append([name, "group_add_member", + { + "user": user, + "group": group, + "service": service, + }]) elif state == "absent": if action == "group": @@ -376,26 +363,12 @@ def main(): if res_find is None: ansible_module.fail_json(msg="No group '%s'" % name) - # Remove intersection member - user_del = list( - set(user or []) & - set(res_find.get("member_user", []))) - group_del = list( - set(group or []) & - set(res_find.get("member_group", []))) - service_del = list( - set(service or []) & - set(res_find.get("member_service", []))) - - # Remove members - if len(user_del) > 0 or len(group_del) > 0 or \ - len(service_del) > 0: - commands.append([name, "group_remove_member", - { - "user": user, - "group": group, - "service": service, - }]) + commands.append([name, "group_remove_member", + { + "user": user, + "group": group, + "service": service, + }]) else: ansible_module.fail_json(msg="Unkown state '%s'" % state) @@ -403,11 +376,29 @@ def main(): for name, command, args in commands: try: - api_command(ansible_module, command, to_text(name), args) - changed = True + result = api_command(ansible_module, command, to_text(name), + args) + if "completed" in result and result["completed"] > 0: + changed = True except Exception as e: ansible_module.fail_json(msg="%s: %s: %s" % (command, name, str(e))) + # Get all errors + # All "already a member" and "not a member" failures in the + # result are ignored. All others are reported. + errors = [] + if "failed" in result and len(result["failed"]) > 0: + for item in result["failed"]: + failed_item = result["failed"][item] + for member_type in failed_item: + for member, failure in failed_item[member_type]: + if "already a member" in failure \ + or "not a member" in failure: + continue + errors.append("%s: %s %s: %s" % ( + command, member_type, member, failure)) + if len(errors) > 0: + ansible_module.fail_json(msg=", ".join(errors)) except Exception as e: ansible_module.fail_json(msg=str(e))