class Chef::Provider::Group

Attributes

change_desc[RW]
group_exists[RW]

Public Class Methods

new(new_resource, run_context) click to toggle source
Calls superclass method Chef::Provider::new
# File lib/chef/provider/group.rb, line 28
def initialize(new_resource, run_context)
  super
  @group_exists = true
end

Public Instance Methods

compare_group() click to toggle source

Check to see if a group needs any changes. Populate @change_desc with a description of why a change must occur

Returns

<true>

If a change is required

<false>

If a change is not required

# File lib/chef/provider/group.rb, line 79
def compare_group
  @change_desc = [ ]
  unless group_gid_match?
    @change_desc << "change gid #{current_resource.gid} to #{new_resource.gid}"
  end

  if new_resource.append
    missing_members = []
    new_resource.members.each do |member|
      next if has_current_group_member?(member)

      validate_member!(member)
      missing_members << member
    end
    unless missing_members.empty?
      @change_desc << "add missing member(s): #{missing_members.join(", ")}"
    end

    members_to_be_removed = []
    new_resource.excluded_members.each do |member|
      if has_current_group_member?(member)
        members_to_be_removed << member
      end
    end
    unless members_to_be_removed.empty?
      @change_desc << "remove existing member(s): #{members_to_be_removed.join(", ")}"
    end
  elsif !group_members_match?
    @change_desc << "replace group members with new list of members: #{new_resource.members.join(", ")}"
  end

  !@change_desc.empty?
end
create_group() click to toggle source
# File lib/chef/provider/group.rb, line 175
def create_group
  raise NotImplementedError, "subclasses of Chef::Provider::Group should define #create_group"
end
define_resource_requirements() click to toggle source
# File lib/chef/provider/group.rb, line 54
def define_resource_requirements
  requirements.assert(:modify) do |a|
    a.assertion { @group_exists }
    a.failure_message(Chef::Exceptions::Group, "Cannot modify #{new_resource} - group does not exist!")
    a.whyrun("Group #{new_resource} does not exist. Unless it would have been created earlier in this run, this attempt to modify it would fail.")
  end

  requirements.assert(:all_actions) do |a|
    # Make sure that the resource doesn't contain any common
    # user names in the members and exclude_members properties.
    if !new_resource.members.nil? && !new_resource.excluded_members.nil?
      common_members = new_resource.members & new_resource.excluded_members
      a.assertion { common_members.empty? }
      a.failure_message(Chef::Exceptions::ConflictingMembersInGroup, "Attempting to both add and remove users from a group: '#{common_members.join(", ")}'")
      # No why-run alternative
    end
  end
end
group_gid_match?() click to toggle source
# File lib/chef/provider/group.rb, line 113
def group_gid_match?
  new_resource.gid.to_s == current_resource.gid.to_s
end
group_members_match?() click to toggle source
# File lib/chef/provider/group.rb, line 117
def group_members_match?
  [new_resource.members].flatten.sort == [current_resource.members].flatten.sort
end
has_current_group_member?(member) click to toggle source
# File lib/chef/provider/group.rb, line 121
def has_current_group_member?(member)
  current_resource.members.include?(member)
end
load_current_resource() click to toggle source
# File lib/chef/provider/group.rb, line 33
def load_current_resource
  @current_resource = Chef::Resource::Group.new(new_resource.name)
  current_resource.group_name(new_resource.group_name)

  group_info = nil
  begin
    group_info = Etc.getgrnam(new_resource.group_name)
  rescue ArgumentError
    @group_exists = false
    logger.trace("#{new_resource} group does not exist")
  end

  if group_info
    new_resource.gid(group_info.gid) unless new_resource.gid
    current_resource.gid(group_info.gid)
    current_resource.members(group_info.mem)
  end

  current_resource
end
manage_group() click to toggle source
# File lib/chef/provider/group.rb, line 179
def manage_group
  raise NotImplementedError, "subclasses of Chef::Provider::Group should define #manage_group"
end
remove_group() click to toggle source
# File lib/chef/provider/group.rb, line 183
def remove_group
  raise NotImplementedError, "subclasses of Chef::Provider::Group should define #remove_group"
end
validate_member!(member) click to toggle source
# File lib/chef/provider/group.rb, line 125
def validate_member!(member)
  # Sub-classes can do any validation if needed
  # and raise an error if validation fails
  true
end