1717 value . is_a? Integer
1818 end
1919
20- optional_commands :localadd => "lgroupadd" , :localdelete => "lgroupdel" , :localmodify => "lgroupmod"
21-
22- has_feature :manages_local_users_and_groups , :manages_members if Puppet . features . libuser?
23-
24- options :members , :flag => '-M' , :method => :mem
20+ optional_commands :localadd => "lgroupadd" , :localdelete => "lgroupdel" , :localmodify => "lgroupmod" , :purgemember => "usermod"
21+
22+ has_feature :manages_local_users_and_groups if Puppet . features . libuser?
23+ has_feature :manages_members if Puppet . features . libuser? ||
24+ ( Puppet . runtime [ :facter ] . value ( 'os.name' ) == "Fedora" &&
25+ Puppet . runtime [ :facter ] . value ( 'os.release.major' ) . to_i >= 40 )
26+
27+ # Libuser's modify command 'lgroupmod' requires '-M' flag for member additions.
28+ # 'groupmod' command requires the '-aU' flags for it.
29+ if Puppet . features . libuser?
30+ options :members , :flag => '-M' , :method => :mem
31+ else
32+ options :members , :flag => '-aU' , :method => :mem
33+ end
2534
2635 def exists?
2736 return !!localgid if @resource . forcelocal?
@@ -63,7 +72,8 @@ def create
6372 end
6473
6574 def addcmd
66- if @resource . forcelocal?
75+ # The localadd command (lgroupadd) must only be called when libuser is supported.
76+ if Puppet . features . libuser? && @resource . forcelocal?
6777 cmd = [ command ( :localadd ) ]
6878 @custom_environment = Puppet ::Util ::Libuser . getenv
6979 else
@@ -91,7 +101,8 @@ def validate_members(members)
91101 end
92102
93103 def modifycmd ( param , value )
94- if @resource . forcelocal? || @resource [ :members ]
104+ # The localmodify command (lgroupmod) must only be called when libuser is supported.
105+ if Puppet . features . libuser? && ( @resource . forcelocal? || @resource [ :members ] )
95106 cmd = [ command ( :localmodify ) ]
96107 @custom_environment = Puppet ::Util ::Libuser . getenv
97108 else
@@ -114,7 +125,8 @@ def modifycmd(param, value)
114125 end
115126
116127 def deletecmd
117- if @resource . forcelocal?
128+ # The localdelete command (lgroupdel) must only be called when libuser is supported.
129+ if Puppet . features . libuser? && @resource . forcelocal?
118130 @custom_environment = Puppet ::Util ::Libuser . getenv
119131 [ command ( :localdelete ) , @resource [ :name ] ]
120132 else
@@ -133,7 +145,16 @@ def members_to_s(current)
133145 end
134146
135147 def purge_members
136- localmodify ( '-m' , members_to_s ( members ) , @resource . name )
148+ # The groupadd provider doesn't have the ability currently to remove members from a group, libuser does.
149+ # Use libuser's lgroupmod command to achieve purging members if libuser is supported.
150+ # Otherwise use the 'usermod' command.
151+ if Puppet . features . libuser?
152+ localmodify ( '-m' , members_to_s ( members ) , @resource . name )
153+ else
154+ members . each do |member |
155+ purgemember ( '-rG' , @resource . name , member )
156+ end
157+ end
137158 end
138159
139160 private
0 commit comments