Lösung 1:
Die Verwendung virtueller Puppet-Ressourcen ist der richtige Weg, dies zu tun - aber wenn Sie die Benutzerdefinitionen nicht ändern können und in der Zwischenzeit einen Workaround-Fix benötigen, ist das Folgende schrecklich und hacky, wird aber funktionieren:
exec { 'foo somegroup membership':
unless => '/bin/grep -q "somegroup\\S*foo" /etc/group',
command => '/sbin/usermod -aG somegroup foo',
require => User['foo'],
}
Im Wesentlichen überprüfen wir nur, ob eine Gruppe den Benutzer foo enthält... wenn nicht, verwenden Sie die normalen usermod-Befehle, um ihn zusätzlich zu den bestehenden Gruppen hinzuzufügen, denen foo angehört.
Lösung 2:
Wenn Sie Benutzer als virtuelle Ressourcen deklarieren, können Sie dann 'realize' oder die Sammlungssyntax ( User <| ... |>) verwenden. Hier ist ein Beispiel:
@user { 'foo':
groups => ['somegroup'],
membership => minimum,
}
Realisieren Sie dann diesen virtuellen Benutzer mit der Sammlungssyntax:
User <| title == foo |>
Und an anderer Stelle können Sie die Parameter für diese virtuelle Ressource mit Pluszeichen ergänzen:
User <| title == foo |> { groups +> "svn" }
Lösung 3:
Danke - hässlicher Hack mit Sicherheit, aber es erledigt die Arbeit. Hier ist ein gepfadetes Beispiel (das die obigen Kommentare kombiniert), um „nrpe“ zur Gruppe „nagios“ hinzuzufügen. Ich habe ein Paket require verwendet, da der Benutzer hier RPM erhält und nicht von Puppet.
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'],
}