Soluzione 1:
Usare le risorse virtuali di Puppet è il modo giusto per farlo, ma se non puoi modificare le definizioni utente e nel frattempo hai bisogno di una soluzione alternativa, quanto segue è orribile e confuso, ma funzionerà:
exec { 'foo somegroup membership':
unless => '/bin/grep -q "somegroup\\S*foo" /etc/group',
command => '/sbin/usermod -aG somegroup foo',
require => User['foo'],
}
Essenzialmente controlliamo solo se qualche gruppo contiene già l'utente foo... in caso contrario, usa i normali comandi usermod per aggiungerlo in aggiunta ai gruppi esistenti a cui appartiene foo.
Soluzione 2:
Se dichiari gli utenti come risorse virtuali , puoi utilizzare 'realize' o la sintassi della raccolta ( User <| ... |>). Ecco un esempio:
@user { 'foo':
groups => ['somegroup'],
membership => minimum,
}
Quindi realizza quell'utente virtuale con la sintassi di raccolta allora:
User <| title == foo |>
E altrove puoi aggiungere ai parametri per quella risorsa virtuale usando plusignment:
User <| title == foo |> { groups +> "svn" }
Soluzione 3:
Grazie - brutto trucco di sicuro, ma fa il suo lavoro. Ecco un esempio percorso (combinando i commenti precedenti) per aggiungere 'nrpe' al gruppo 'nagios'. Ho usato un pacchetto require in quanto l'utente qui è fornito da RPM piuttosto che da marionetta.
exec {"nrpe nagios membership":
unless => "/bin/getent group nagios|/bin/cut -d: -f4|/bin/grep -q nrpe",
command => "/usr/sbin/usermod -a -G nagios nrpe",
require => Package['nrpe'],
}