Solución 1:
El uso de los recursos virtuales de Puppet es la forma correcta de hacerlo, pero si no puede cambiar las definiciones de usuario y necesita una solución mientras tanto, lo siguiente es horrible y complicado, pero funcionará:
exec { 'foo somegroup membership':
unless => '/bin/grep -q "somegroup\\S*foo" /etc/group',
command => '/sbin/usermod -aG somegroup foo',
require => User['foo'],
}
Esencialmente, solo verificamos si algún grupo contiene al usuario foo todavía... si no, use los comandos normales de usermod para agregarlo además de los grupos existentes a los que pertenece foo.
Solución 2:
Si declara a los usuarios como recursos virtuales, puede usar 'realizar' o la sintaxis de la colección ( Usuario <| ... |>). He aquí un ejemplo:
@user { 'foo':
groups => ['somegroup'],
membership => minimum,
}
Luego, date cuenta de ese usuario virtual con la sintaxis de la colección:
User <| title == foo |>
Y en otro lugar, puede agregar a los parámetros para ese recurso virtual usando plussignment:
User <| title == foo |> { groups +> "svn" }
Solución 3:
Gracias, un truco feo seguro, pero hace el trabajo. Aquí hay un ejemplo con ruta (que combina los comentarios anteriores) para agregar 'nrpe' al grupo 'nagios'. Utilicé un paquete requerido ya que el usuario aquí es RPM proporcionado en lugar de una marioneta.
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'],
}