Hinzufügen eines vorhandenen Benutzers zu einer Gruppe mit Marionette


16

Ist es möglich, einen vorhandenen Benutzer mit Puppet 2.7.18 zu einer Gruppe hinzuzufügen?

Wir haben zwei Module, von denen jedes eine Klasse definiert:

  • Modul "Benutzer" erstellt alle Benutzer, einschließlich Benutzer foo und Benutzerleiste.
  • Modul "Subversion" befasst sich mit verschiedenen Conf-Dateien und erstellt Gruppe svn.

Wir möchten Benutzer foo zur Gruppe svn im Modul "subversion" hinzufügen.

Ich habe den Mitgliedschaftsparameter wie in der vorhandenen Funktionsanforderung beschrieben ausprobiert :

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

Aber ich bekomme folgenden Fehler:

Fehler: Katalog konnte nicht vom Remote-Server abgerufen werden: Fehler 400 auf SERVER: Doppelte Deklaration: Benutzer [foo] ist bereits in der Datei /pathto/modules/subversion/manifests/init.pp in Zeile xx deklariert. kann unter /pathto/modules/users/manifests/init.pp:xxx auf dem Knoten myserver.example.com nicht erneut deklariert werden

Ist diese Funktion bereits implementiert? Wenn nicht, gibt es eine gute Lösung?

Antworten:


15

Wenn Sie Benutzer als virtuelle Ressourcen deklarieren , können Sie "realise" oder die Auflistungssyntax (Benutzer <| ... |>) verwenden. Hier ist ein Beispiel:

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

Stellen Sie dann fest, dass der virtuelle Benutzer die folgende Auflistungssyntax verwendet:

User <| title == foo |>

An anderer Stelle können Sie die Parameter für diese virtuelle Ressource mit plusignment hinzufügen:

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

Ich denke, es gibt

1
Es gibt einen Tippfehler oder ein Attribut, das zwischen Puppet-Versionen geändert wurde: Es handelt sich nicht um eine Gruppe, sondern um Gruppen (Plural). Using Puppet 3.2.2
Goran Miskovic

1
kann jemand dies mit einem kurzen beispiel erläutern.
Mschuett

21

Die virtuellen Ressourcen von Puppet sind der richtige Weg, dies zu tun. Wenn Sie jedoch die Benutzerdefinitionen nicht ändern können und in der Zwischenzeit eine Problemumgehung benötigen, ist Folgendes furchtbar und schwierig, funktioniert aber:

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

Im Wesentlichen überprüfen wir nur, ob eine Gruppe noch Benutzer foo enthält. Wenn nicht, verwenden Sie die normalen usermod-Befehle, um sie zusätzlich zu den vorhandenen Gruppen hinzuzufügen, zu denen foo gehört.


1
Puppet kann vollständig qualifizierte Pfade zu den ausführbaren Dateien erstellen. Bearbeitet, um dies widerzuspiegeln.
h7r

2
Schrecklich und abgedreht, aber sehr hilfreich. Ich hatte gehofft, kein neues Sprachkonstrukt lernen zu müssen, um etwas konzeptionell Einfaches wie das Hinzufügen eines Benutzers zu einer Gruppe zu tun.
BillMan

1
Vielleicht ist es besser (obwohl es natürlich immer noch hackig ist), getent group somegroup|cut -d: -f4|grep -q foodavon auszugehen, dass wir es verwenden /etc/group.
Falstro

Super hilfreich - danke. Ich musste das "wenn nicht" und "usermod" ändern, um den vollständigen Pfad wie folgt einzuschließen: wenn nicht => "/ user / bin / grep ..." command => "/ user / bin / usermod ..."
JNP Web Developer

Für @jnpWebDeveloper und solche, die sie mögen: Gemäß der Dokumentation können Sie auch einen pathParameter angeben . Ich schlage vor, einen globalen Standard für Ressourcen zu haben, der möglicherweise $PATHvon facter herrührt.
Cincodenada

2

Danke - hässlicher Hack sicher, aber es wird die Arbeit erledigt. Hier ist ein Beispiel mit Pfaden (kombiniert die obigen Kommentare), um 'nrpe' zur 'nagios'-Gruppe hinzuzufügen. Ich habe eine Paketanforderung verwendet, da der Benutzer hier nicht von einer Marionette, sondern von der Drehzahl abhängig ist.

  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'],
  }
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.