Est-il possible d'ajouter un utilisateur existant à un groupe avec la marionnette 2.7.18?
Nous avons deux modules, chacun définit une classe:
Nous aimerions ajouter l'utilisateur FOO au groupe SVN SVN Intérieur "Subversion".
J'ai essayé le paramètre d'adhésion comme décrit dans la demande de fonctionnalité existante :
group {
"svn":
ensure => present,
gid => xxxxx;
}
user {
"foo":
group => ["svn"],
membership => minimum;
}
Mais j'obtiens l'erreur suivante:
eRR: Impossible de récupérer le catalogue à partir du serveur distant: Erreur 400 sur le serveur: DÉCLARATION DUPLIQUE: L'utilisateur [FOO] est déjà déclaré dans le fichier /pathto/modules/subversion/manifest/init.pp à la ligne XX; ne peut pas redéclaré à /pathto/modules/users/manifest/init.pp:xxx sur node myserver.example.com
Cette fonctionnalité est-elle déjà mise en œuvre? Sinon, y a-t-il une bonne solution de contournement?
Si vous déclarez des utilisateurs comme ressources virtuelles , vous pouvez ensuite utiliser "réaliser" ou la syntaxe de collection (utilisateur <| ... |>). Voici un exemple:
@user { 'foo':
groups => ['somegroup'],
membership => minimum,
}
Ensuite, réalisez que l'utilisateur virtuel avec la syntaxe de collecte:
User <| title == foo |>
Et ailleurs, vous pouvez ajouter aux paramètres pour cette ressource virtuelle à l'aide de PlusInment:
User <| title == foo |> { groups +> "svn" }
L'utilisation des ressources virtuelles de marionnettes est la bonne façon de le faire - mais si vous ne pouvez pas modifier les définitions de l'utilisateur et besoin d'une solution de contournement, 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 venons de vérifier si quelque groupe contient l'utilisateur FOO encore ... sinon, utilisez les commandes d'UseMOD normales pour l'ajouter en plus des groupes existants qui appartiennent à.
Merci - Ugly Hack à coup sûr, mais cela fait le travail. Voici un exemple traité (combinant les commentaires ci-dessus) pour ajouter "NRPE" au groupe "Nagios". J'ai utilisé un package requis lorsque l'utilisateur ici est une toupie fournie plutôt que par la 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'],
}