Solution 1 :
L'utilisation des ressources virtuelles Puppet est la bonne façon de le faire - mais si vous ne pouvez pas modifier les définitions d'utilisateur et que vous avez besoin d'une solution de contournement entre-temps, ce qui suit est horrible et hacky, mais fonctionnera :
exec { 'foo somegroup membership':
unless => '/bin/grep -q "somegroup\\S*foo" /etc/group',
command => '/sbin/usermod -aG somegroup foo',
require => User['foo'],
}
Essentiellement, nous vérifions simplement si un groupe contient déjà l'utilisateur foo... sinon, utilisez les commandes usermod normales pour l'ajouter en plus des groupes existants auxquels foo appartient.
Solution 2 :
Si vous déclarez des utilisateurs en tant que ressources virtuelles, vous pouvez alors utiliser 'realize' ou la syntaxe de collection ( User <| ... |>). Voici un exemple :
@user { 'foo':
groups => ['somegroup'],
membership => minimum,
}
Réalisez ensuite cet utilisateur virtuel avec la syntaxe de collecte :
User <| title == foo |>
Et ailleurs, vous pouvez ajouter aux paramètres de cette ressource virtuelle en utilisant plusignment :
User <| title == foo |> { groups +> "svn" }
Solution 3 :
Merci - hack moche à coup sûr, mais il fait le travail. Voici un exemple avec chemin (combinant les commentaires ci-dessus) pour ajouter 'nrpe' au groupe 'nagios'. J'ai utilisé un package require car l'utilisateur ici est RPM fourni plutôt que par marionnette.
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'],
}