class Chef::Provider::Group::Pw
Public Instance Methods
Source
# File lib/chef/provider/group/pw.rb, line 40 def create_group command = [ "pw", "groupadd", set_options ] unless new_resource.members.empty? # pw group[add|mod] -M is used to set the full membership list on a # new or existing group. Because pw groupadd does not support the -m # and -d options used by manage_group, we treat group creation as a # special case and use -M. logger.debug("#{new_resource} setting group members: #{new_resource.members.join(",")}") command += [ "-M", new_resource.members.join(",") ] end shell_out!(command) end
Create the group
Source
# File lib/chef/provider/group/pw.rb, line 29 def define_resource_requirements super requirements.assert(:all_actions) do |a| a.assertion { ::File.exist?("/usr/sbin/pw") } a.failure_message Chef::Exceptions::Group, "Could not find binary /usr/sbin/pw for #{new_resource}" # No whyrun alternative: this component should be available in the base install of any given system that uses it end end
Calls superclass method
Chef::Provider::Group#define_resource_requirements
Source
# File lib/chef/provider/group/pw.rb, line 25 def load_current_resource super end
Calls superclass method
Chef::Provider::Group#load_current_resource
Source
# File lib/chef/provider/group/pw.rb, line 55 def manage_group member_options = set_members_options if member_options.empty? shell_out!("pw", "groupmod", set_options) else member_options.each do |option| shell_out!("pw", "groupmod", set_options, option) end end end
Manage the group when it already exists
Source
# File lib/chef/provider/group/pw.rb, line 67 def remove_group shell_out!("pw", "groupdel", new_resource.group_name) end
Remove the group
Source
# File lib/chef/provider/group/pw.rb, line 86 def set_members_options opts = [ ] members_to_be_added = [ ] members_to_be_removed = [ ] 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? new_resource.members.each do |member| members_to_be_added << member unless current_resource.members.include?(member) end end if new_resource.excluded_members && !new_resource.excluded_members.empty? new_resource.excluded_members.each do |member| members_to_be_removed << member if current_resource.members.include?(member) end end else # Append is not set so we're resetting the membership of # the group to the given members. members_to_be_added = new_resource.members.dup 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? logger.debug("#{new_resource} adding group members: #{members_to_be_added.join(",")}") opts << [ "-m", members_to_be_added.join(",") ] end unless members_to_be_removed.empty? logger.debug("#{new_resource} removing group members: #{members_to_be_removed.join(",")}") opts << [ "-d", members_to_be_removed.join(",") ] end opts end
Set the membership option depending on the current resource states
Source
# File lib/chef/provider/group/pw.rb, line 75 def set_options opts = [ new_resource.group_name ] if new_resource.gid && (current_resource.gid != new_resource.gid) logger.trace("#{new_resource}: current gid (#{current_resource.gid}) doesn't match target gid (#{new_resource.gid}), changing it") opts << "-g" opts << new_resource.gid end opts end
Little bit of magic as per Adam’s useradd provider to pull and assign the command line flags
Returns¶ ↑
- <string>
-
A string containing the option and then the quoted value