Aggiunta di un utente esistente a un gruppo con pupazzo


16

È possibile aggiungere un utente esistente a un gruppo con pupazzo 2.7.18?

Abbiamo due moduli, ognuno definisce una classe:

  • il modulo "user" crea tutti gli utenti, inclusi user foo e barra degli utenti.
  • il modulo "sovversione" si occupa di vari file conf e crea il gruppo svn.

Vorremmo aggiungere il foo dell'utente al gruppo svn all'interno del modulo "sovversione".

Ho provato il parametro di appartenenza come descritto nella richiesta di funzionalità esistente :

group {
"svn":
    ensure  => present,
    gid     => xxxxx;
}
user {
"foo":
    group      => ["svn"],
    membership => minimum;
}

Ma ottengo il seguente errore:

err: Impossibile recuperare il catalogo dal server remoto: errore 400 sul SERVER: dichiarazione duplicata: l'utente [pippo] è già stato dichiarato nel file /pathto/modules/subversion/manifests/init.pp alla riga xx; impossibile ripetere la dichiarazione in /pathto/modules/users/manifests/init.pp:xxx sul nodo myserver.example.com

Questa funzione è già implementata? In caso contrario, esiste una buona soluzione?

Risposte:


15

Se si dichiarano gli utenti come risorse virtuali , è quindi possibile utilizzare "realizza" o la sintassi della raccolta (Utente <| ... |>). Ecco un esempio:

@user { 'foo':
  groups     => ['somegroup'],
  membership => minimum,
}

Quindi rendi conto di quell'utente virtuale con la sintassi della raccolta:

User <| title == foo |>

E altrove puoi aggiungere ai parametri per quella risorsa virtuale usando plusignment:

User <| title == foo |> { groups +> "svn" }

Quindi immagino non ci siano alternative se non risorse virtuali in questo momento :( Grazie mille per la risposta.

1
C'è un errore di battitura o un attributo modificato tra le versioni di Puppet: non è gruppo ma gruppi (plurale). Usando Puppet 3.2.2
Goran Miskovic,

1
qualcuno può espandersi su questo con un breve esempio.
mschuett,

21

L'uso delle risorse virtuali Puppet è il modo giusto per farlo, ma se non è possibile modificare le definizioni utente e nel frattempo è necessaria una soluzione alternativa, il seguente è orribile e confuso, ma funzionerà:

exec { 'foo somegroup membership':
  unless  => '/bin/grep -q "somegroup\\S*foo" /etc/group',
  command => '/sbin/usermod -aG somegroup foo',
  require => User['foo'],
}

In sostanza, controlliamo solo se un gruppo contiene ancora foo utente ... in caso contrario, utilizzare i normali comandi usermod per aggiungerlo in aggiunta ai gruppi esistenti a cui appartiene foo.


1
Puppet potrebbe richiedere percorsi completi per gli eseguibili. Modificato per riflettere questo.
h7r

2
Orribile e confuso, ma davvero utile. Speravo di non dover imparare un nuovo costrutto linguistico per fare qualcosa di concettualmente semplice come aggiungere un utente a un gruppo.
BillMan,

1
Forse un modo più corretto (pur essendo ancora caotico ovviamente) sarebbe quello di usare getent group somegroup|cut -d: -f4|grep -q fooper non dare per scontato che stiamo usando /etc/group.
falstro,

Molto utile - grazie. Ho dovuto cambiare "a meno" e "usermod" per includere il percorso completo come segue: a meno => "/ user / bin / grep ..." command => "/ user / bin / usermod ..."
JNP Sviluppatore Web

Per @jnpWebDeveloper e quelli come loro: come da documentazione , puoi anche specificare un pathparametro. Suggerisco di avere un valore di default globale delle risorse, forse che $PATHarriva dal facter.
Cincodenada,

2

Grazie - brutto hack di sicuro, ma ottiene il lavoro fatto. Ecco un esempio di percorso (che combina i commenti sopra) per aggiungere 'nrpe' al gruppo 'nagios'. Ho usato un pacchetto richiesto poiché l'utente qui è RPM fornito piuttosto che da fantoccio.

  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'],
  }
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.