File: //usr/lib/ruby/site_ruby/1.8/puppet/provider/group/groupadd.rb
require 'puppet/provider/nameservice/objectadd'
require 'puppet/util/libuser'
Puppet::Type.type(:group).provide :groupadd, :parent => Puppet::Provider::NameService::ObjectAdd do
desc "Group management via `groupadd` and its ilk. The default for most platforms.
"
commands :add => "groupadd", :delete => "groupdel", :modify => "groupmod"
has_feature :system_groups unless %w{HP-UX Solaris}.include? Facter.value(:operatingsystem)
verify :gid, "GID must be an integer" do |value|
value.is_a? Integer
end
optional_commands :localadd => "lgroupadd"
has_feature :libuser if Puppet.features.libuser?
def exists?
return !!localgid if @resource.forcelocal?
super
end
def gid
return localgid if @resource.forcelocal?
get(:gid)
end
def findgroup(key, value)
group_file = "/etc/group"
group_keys = ['group_name', 'password', 'gid', 'user_list']
index = group_keys.index(key)
File.open(group_file) do |f|
f.each_line do |line|
group = line.split(":")
if group[index] == value
f.close
return group
end
end
end
false
end
def localgid
group = findgroup('group_name', resource[:name])
return group[2] if group
false
end
def check_allow_dup
# We have to manually check for duplicates when using libuser
# because by default duplicates are allowed. This check is
# to ensure consistent behaviour of the useradd provider when
# using both useradd and luseradd
if not @resource.allowdupe? and @resource.forcelocal?
if @resource.should(:gid) and findgroup('gid', @resource.should(:gid).to_s)
raise(Puppet::Error, "GID #{@resource.should(:gid).to_s} already exists, use allowdupe to force group creation")
end
elsif @resource.allowdupe? and not @resource.forcelocal?
return ["-o"]
end
[]
end
def addcmd
if @resource.forcelocal?
cmd = [command(:localadd)]
@custom_environment = Puppet::Util::Libuser.getenv
else
cmd = [command(:add)]
end
if gid = @resource.should(:gid)
unless gid == :absent
cmd << flag(:gid) << gid
end
end
cmd += check_allow_dup
cmd << "-r" if @resource.system? and self.class.system_groups?
cmd << @resource[:name]
cmd
end
end