From 2635195185e92eff02c90502f8e0210b544d3e27 Mon Sep 17 00:00:00 2001 From: Brendan Beveridge Date: Tue, 8 May 2012 09:43:51 +1000 Subject: [PATCH] Fixes issue #315 This adds some logic when usings groups possibly in combination with append if just specifying groups and the current groups do not match the list set groups if specifying groups with append and any group thats not in the current groups set groups with -a --- library/user | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/library/user b/library/user index 30fdda21123..efb4b36fde9 100755 --- a/library/user +++ b/library/user @@ -135,14 +135,28 @@ def user_mod(user, **kwargs): cmd.append('-g') cmd.append(kwargs[key]) elif key == 'groups' and kwargs[key] is not None: - defined_groups = kwargs[key].split(',') - for g in defined_groups: + current_groups = user_group_membership(user) + groups = kwargs[key].split(',') + for g in groups: if not group_exists(g): fail_json(msg="Group %s does not exist" % (g)) - existing_groups = user_group_membership(user) - if sorted(defined_groups) != sorted(existing_groups): + group_diff = set(sorted(current_groups)).symmetric_difference(set(sorted(groups))) + groups_need_mod = False + + if group_diff: + if kwargs['append'] is not None and kwargs['append'] == 'yes': + for g in groups: + if g in group_diff: + cmd.append('-a') + groups_need_mod = True + else: + debug("groups differ, trigger usemod") + groups_need_mod = True + + if groups_need_mod: cmd.append('-G') - cmd.append(kwargs[key]) + cmd.append(','.join(groups)) + elif key == 'comment': if kwargs[key] is not None and info[4] != kwargs[key]: cmd.append('-c')