class Chef::Provider::Group::Groupmod
Public Instance Methods
add_group_members(members)
click to toggle source
Adds a list of usernames to the group using ‘user mod`
# File lib/chef/provider/group/groupmod.rb, line 86 def add_group_members(members) logger.debug("#{new_resource} adding members #{members.join(", ")}") unless members.empty? members.each do |user| shell_out!("user", "mod", "-G", new_resource.group_name, user) end end
create_group()
click to toggle source
Create the group
# File lib/chef/provider/group/groupmod.rb, line 34 def create_group shell_out!("group", "add", set_options) add_group_members(new_resource.members) end
load_current_resource()
click to toggle source
Calls superclass method
Chef::Provider::Group#load_current_resource
# File lib/chef/provider/group/groupmod.rb, line 26 def load_current_resource super %w{group user}.each do |binary| raise Chef::Exceptions::Group, "Could not find binary /usr/sbin/#{binary} for #{new_resource}" unless ::TargetIO::File.exist?("/usr/sbin/#{binary}") end end
manage_group()
click to toggle source
Manage the group when it already exists
# File lib/chef/provider/group/groupmod.rb, line 41 def manage_group if new_resource.append members_to_be_added = [ ] if new_resource.excluded_members && !new_resource.excluded_members.empty? # First find out if any member needs to be removed members_to_be_removed = [ ] new_resource.excluded_members.each do |member| members_to_be_removed << member if current_resource.members.include?(member) end unless members_to_be_removed.empty? # We are using a magic trick to remove the groups. reset_group_membership # Capture the members we need to add in # members_to_be_added to be added later on. current_resource.members.each do |member| members_to_be_added << member unless members_to_be_removed.include?(member) end end end 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 logger.debug("#{new_resource} not changing group members, the group has no members to add") if members_to_be_added.empty? add_group_members(members_to_be_added) else # We are resetting the members of a group so use the same trick reset_group_membership logger.debug("#{new_resource} setting group members to: none") if new_resource.members.empty? add_group_members(new_resource.members) end end
remove_group()
click to toggle source
Remove the group
# File lib/chef/provider/group/groupmod.rb, line 81 def remove_group shell_out!("group", "del", new_resource.group_name) end
reset_group_membership()
click to toggle source
This is tricky, but works: rename the existing group to “<name>_bak”, create a new group with the same GID and “<name>”, then set correct members on that group
# File lib/chef/provider/group/groupmod.rb, line 96 def reset_group_membership shell_out!("group", "mod", "-n", "#{new_resource.group_name}_bak", new_resource.group_name) shell_out!("group", "add", set_options(overwrite_gid: true)) shell_out!("group", "del", "#{new_resource.group_name}_bak") end
set_options(overwrite_gid = false)
click to toggle source
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
# File lib/chef/provider/group/groupmod.rb, line 108 def set_options(overwrite_gid = false) opts = [] if overwrite_gid || new_resource.gid && (current_resource.gid != new_resource.gid) opts << "-g" opts << new_resource.gid end if overwrite_gid opts << "-o" end opts << new_resource.group_name opts end