diff options
author | Phil Dibowitz <phil@ipom.com> | 2014-08-05 13:04:58 -0700 |
---|---|---|
committer | Claire McQuin <claire@getchef.com> | 2014-08-07 09:53:01 -0700 |
commit | 2a4f1d1df70294939ccbc08388cee01c56f0aa57 (patch) | |
tree | 21cd1d2492886022bb6d52c68492782b4a26a08e /lib | |
parent | 1b33710ff6c58d1f734d760620400a7613dbccfd (diff) | |
download | chef-2a4f1d1df70294939ccbc08388cee01c56f0aa57.tar.gz |
Merge pull request #1747 from jaymzh/macosx_groups_11
Fix OSX Group provider to be properly idempotent
Conflicts:
CHANGELOG.md
RELEASE_NOTES.md
Diffstat (limited to 'lib')
-rw-r--r-- | lib/chef/provider/group/dscl.rb | 36 |
1 files changed, 27 insertions, 9 deletions
diff --git a/lib/chef/provider/group/dscl.rb b/lib/chef/provider/group/dscl.rb index c204c09321..04ca9bc929 100644 --- a/lib/chef/provider/group/dscl.rb +++ b/lib/chef/provider/group/dscl.rb @@ -39,11 +39,33 @@ class Chef return result[2] end - # This is handled in providers/group.rb by Etc.getgrnam() - # def group_exists?(group) - # groups = safe_dscl("list /Groups") - # !! ( groups =~ Regexp.new("\n#{group}\n") ) - # end + def load_current_resource + @current_resource = Chef::Resource::Group.new(@new_resource.name) + @current_resource.group_name(@new_resource.name) + group_info = nil + begin + group_info = safe_dscl("read /Groups/#{@new_resource.name}") + rescue Chef::Exceptions::Group + @group_exists = false + Chef::Log.debug("#{@new_resource} group does not exist") + end + + if group_info + group_info.each_line do |line| + key, val = line.split(': ') + val.strip! if val + case key.downcase + when 'primarygroupid' + @new_resource.gid(val) unless @new_resource.gid + @current_resource.gid(val) + when 'groupmembership' + @current_resource.members(val.split(' ')) + end + end + end + + @current_resource + end # get a free GID greater than 200 def get_free_gid(search_limit=1000) @@ -115,10 +137,6 @@ class Chef end end - def load_current_resource - super - end - def create_group dscl_create_group set_gid |