web-dev-qa-db-fra.com

Ajout d'un utilisateur existant à un groupe avec la marionnette

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:

  • module "L'utilisateur" crée tous les utilisateurs, y compris l'utilisateur FOO et Barre utilisateur.
  • module "Subversion" traite de divers fichiers Conf et crée un groupe SVN.

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?

17
user130370

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" }
15
dotplus

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 à.

22
dodocaptain

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'],
  }
3
Bill McGonigle