diff options
author | sersut <serdar@opscode.com> | 2013-11-14 13:12:58 -0800 |
---|---|---|
committer | sersut <serdar@opscode.com> | 2013-11-14 13:12:58 -0800 |
commit | 63e6555c13ad4c9ad498fd9072759e1f553d4c48 (patch) | |
tree | 11d0e9bcf73b33e372a85308fc10072362649638 /lib/chef | |
parent | ef6b7ff631d76d6402b5719f56257405772bf44d (diff) | |
download | chef-63e6555c13ad4c9ad498fd9072759e1f553d4c48.tar.gz |
Support for excluded_members property in Suse, Groupadd Gpasswd providers. Required unsupported error messages in Usermod provider.
Diffstat (limited to 'lib/chef')
-rw-r--r-- | lib/chef/provider/group/gpasswd.rb | 43 | ||||
-rw-r--r-- | lib/chef/provider/group/groupadd.rb | 41 | ||||
-rw-r--r-- | lib/chef/provider/group/suse.rb | 29 | ||||
-rw-r--r-- | lib/chef/provider/group/usermod.rb | 40 |
4 files changed, 94 insertions, 59 deletions
diff --git a/lib/chef/provider/group/gpasswd.rb b/lib/chef/provider/group/gpasswd.rb index c28a3db19a..a65a7ffd53 100644 --- a/lib/chef/provider/group/gpasswd.rb +++ b/lib/chef/provider/group/gpasswd.rb @@ -39,40 +39,21 @@ class Chef end end - def modify_group_members - if(@new_resource.append) - 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 - members_to_be_added.each do |member| - Chef::Log.debug("#{@new_resource} appending member #{member} to group #{@new_resource.group_name}") - shell_out!("gpasswd -a #{member} #{@new_resource.group_name}") - 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 - - members_to_be_removed.each do |member| - Chef::Log.debug("#{@new_resource} removing member #{member} from group #{@new_resource.group_name}") - shell_out!("gpasswd -d #{member} #{@new_resource.group_name}") - end - end + def set_members(members) + unless members.empty? + shell_out!("gpasswd -M #{members.join(',')} #{@new_resource.group_name}") else - unless @new_resource.members.empty? - Chef::Log.debug("#{@new_resource} setting group members to #{@new_resource.members.join(', ')}") - shell_out!("gpasswd -M #{@new_resource.members.join(',')} #{@new_resource.group_name}") - else - Chef::Log.debug("#{@new_resource} setting group members to: none") - shell_out!("gpasswd -M \"\" #{@new_resource.group_name}") - end + shell_out!("gpasswd -M \"\" #{@new_resource.group_name}") end end + + def add_member(member) + shell_out!("gpasswd -a #{member} #{@new_resource.group_name}") + end + + def remove_member(member) + shell_out!("gpasswd -d #{member} #{@new_resource.group_name}") + end end end end diff --git a/lib/chef/provider/group/groupadd.rb b/lib/chef/provider/group/groupadd.rb index 45ae308612..eb1972d96e 100644 --- a/lib/chef/provider/group/groupadd.rb +++ b/lib/chef/provider/group/groupadd.rb @@ -65,8 +65,47 @@ class Chef end def modify_group_members - raise Chef::Exceptions::Group, "you must override modify_group_members in #{self.to_s}" + if(@new_resource.append) + 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 + members_to_be_added.each do |member| + Chef::Log.debug("#{@new_resource} appending member #{member} to group #{@new_resource.group_name}") + add_member(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 + + members_to_be_removed.each do |member| + Chef::Log.debug("#{@new_resource} removing member #{member} from group #{@new_resource.group_name}") + remove_member(member) + end + end + else + Chef::Log.debug("#{@new_resource} setting group members to: #{@new_resource.members.join(", ")}") + set_members(@new_resource.members) + end + end + + def add_member(member) + raise Chef::Exceptions::Group, "you must override add_member in #{self.to_s}" + end + + def remove_member(member) + raise Chef::Exceptions::Group, "you must override remove_member in #{self.to_s}" + end + + def set_members(members) + raise Chef::Exceptions::Group, "you must override set_members in #{self.to_s}" end + # Little bit of magic as per Adam's useradd provider to pull the assign the command line flags # # ==== Returns diff --git a/lib/chef/provider/group/suse.rb b/lib/chef/provider/group/suse.rb index 4c343bddf9..14380f1705 100644 --- a/lib/chef/provider/group/suse.rb +++ b/lib/chef/provider/group/suse.rb @@ -39,21 +39,24 @@ class Chef end end - def modify_group_members - unless @new_resource.members.empty? - if(@new_resource.append) - @new_resource.members.each do |member| - Chef::Log.debug("#{@new_resource} appending member #{member} to group #{@new_resource.group_name}") - shell_out!("groupmod -A #{member} #{@new_resource.group_name}") - end - else - Chef::Log.debug("#{@new_resource} setting group members to #{@new_resource.members.join(', ')}") - shell_out!("groupmod -A #{@new_resource.members.join(',')} #{@new_resource.group_name}") - end - else - Chef::Log.debug("#{@new_resource} not changing group members, the group has no members") + def set_members(members) + unless @current_resource.members.empty? + shell_out!("groupmod -R #{@current_resource.members.join(',')} #{@new_resource.group_name}") end + + unless members.empty? + shell_out!("groupmod -A #{members.join(',')} #{@new_resource.group_name}") + end + end + + def add_member(member) + shell_out!("groupmod -A #{member} #{@new_resource.group_name}") end + + def remove_member(member) + shell_out!("groupmod -R #{member} #{@new_resource.group_name}") + end + end end end diff --git a/lib/chef/provider/group/usermod.rb b/lib/chef/provider/group/usermod.rb index 5788ac8fad..4863c6ee4a 100644 --- a/lib/chef/provider/group/usermod.rb +++ b/lib/chef/provider/group/usermod.rb @@ -41,27 +41,39 @@ class Chef a.failure_message Chef::Exceptions::Group, "setting group members directly is not supported by #{self.to_s}, must set append true in group" # No whyrun alternative - this action is simply not supported. end + + requirements.assert(:all_actions) do |a| + a.assertion { @new_resource.excluded_members.empty? } + a.failure_message Chef::Exceptions::Group "excluded_members is not supported by #{self.to_s}" + # No whyrun alternative - this action is simply not supported. + end end - def modify_group_members + def set_members(members) + # This provider only supports adding members with + # append. This function should never be called. + raise UnsupportedAction, "Setting members directly is not supported by #{self.to_s}" + end + + def add_member(member) + shell_out!("usermod #{append_flags} #{@new_resource.group_name} #{member}") + end + + def remove_member(member) + # This provider only supports adding members with + # append. This function should never be called. + raise UnsupportedAction, "Removing members members is not supported by #{self.to_s}" + end + + def append_flags case node[:platform] when "openbsd", "netbsd", "aix", "solaris2", "smartos" - append_flags = "-G" + "-G" when "solaris", "suse", "opensuse" - append_flags = "-a -G" - end - - unless @new_resource.members.empty? - if(@new_resource.append) - @new_resource.members.each do |member| - Chef::Log.debug("#{@new_resource} appending member #{member} to group #{@new_resource.group_name}") - run_command(:command => "usermod #{append_flags} #{@new_resource.group_name} #{member}" ) - end - end - else - Chef::Log.debug("#{@new_resource} not changing group members, the group has no members") + "-a -G" end end + end end end |