diff options
author | sersut <serdar@opscode.com> | 2013-11-14 16:31:37 -0800 |
---|---|---|
committer | sersut <serdar@opscode.com> | 2013-11-14 16:31:37 -0800 |
commit | 0876fcfb6641e7393155aac9f4ebbfbefa2898cf (patch) | |
tree | e0df0d4f1d37a22ec62702341e6e007d066b7760 /lib/chef/provider/group | |
parent | d1854c850a71167f4aad27782fdd77c28a97819d (diff) | |
download | chef-0876fcfb6641e7393155aac9f4ebbfbefa2898cf.tar.gz |
exluded_members support in pw group provider.
Diffstat (limited to 'lib/chef/provider/group')
-rw-r--r-- | lib/chef/provider/group/pw.rb | 50 |
1 files changed, 41 insertions, 9 deletions
diff --git a/lib/chef/provider/group/pw.rb b/lib/chef/provider/group/pw.rb index 66da8281be..2ba117d872 100644 --- a/lib/chef/provider/group/pw.rb +++ b/lib/chef/provider/group/pw.rb @@ -72,18 +72,50 @@ class Chef # Set the membership option depending on the current resource states def set_members_option opt = "" - unless @new_resource.members.empty? - opt << " -M #{@new_resource.members.join(',')}" - Chef::Log.debug("#{@new_resource} setting group members to #{@new_resource.members.join(', ')}") + + if @new_resource.append + # Append is set so we will only add members given in the + # members list and remove members given in the + # excluded_members list. + if @new_resource.members && !@new_resource.members.empty? + members_to_be_added = [ ] + @new_resource.members.each do |member| + members_to_be_added << member if !@current_resource.members.include?(member) + end + end + + if @new_resource.excluded_members && !@new_resource.excluded_members.empty? + members_to_be_removed = [ ] + @new_resource.excluded_members.each do |member| + members_to_be_removed << member if @current_resource.members.include?(member) + end + end else - # New member list is empty so we should delete any old group members - unless @current_resource.members.empty? - opt << " -d #{@current_resource.members.join(',')}" - Chef::Log.debug("#{@new_resource} removing group members #{@current_resource.members.join(', ')}") - else - Chef::Log.debug("#{@new_resource} not changing group members, the group has no members") + # Append is not set so we're resetting the membership of + # the group to the given members. + members_to_be_added = @new_resource.members + members_to_be_removed = [ ] + @current_resource.members.each do |member| + # No need to re-add a member if it's present in the new + # list of members + if members_to_be_added.include? member + members_to_be_added.delete member + else + members_to_be_removed << member + end end end + + unless members_to_be_added.empty? + Chef::Log.debug("#{@new_resource} adding group members: #{members_to_be_added.join(',')}") + opt << " -M #{members_to_be_added.join(',')}" + end + + unless members_to_be_removed.empty? + Chef::Log.debug("#{@new_resource} removing group members: #{members_to_be_removed.join(',')}") + opt << " -d #{members_to_be_removed.join(',')}" + end + opt end |