Puppet: Managehome für Benutzertyp funktioniert nur, wenn der Benutzer nicht existiert

Puppet: Managehome für Benutzertyp funktioniert nur, wenn der Benutzer nicht existiert

Ich suche hier nach einer Klarstellung. Es scheint, dass dieStartseiteAttribut desBenutzerDer definierte Typ funktioniert nur, wenn der Benutzer nicht existiert. Schauen Sie sich diese DSL an

user { 'artifactory':
        ensure     => 'present',
        home       => '/home/artifactory',
        managehome => true,
}

file { '/home/artifactory/data':
        ensure  => link,
        target  => '/var/lib',
        require => User['artifactory'],
}

Beim ersten Ausführen funktioniert es einwandfrei. Wenn ich jedoch dieartefaktHome-Verzeichnis des Benutzers, dann führen Sie es erneut aus, Puppet kotzt.

Fehler: „Link“ konnte nicht gesetzt werden, um sicherzustellen: Keine solche Datei oder kein solches Verzeichnis

Mein erster Gedanke istWirklich? Schauen Sie sich dieDokumentation

Ob das Home-Verzeichnis bei der Benutzerverwaltung verwaltet werden soll. Dadurch wird das Home-Verzeichnis erstellt, wenn Ensure => Present

Wenn ich den Benutzer lösche und es erneut versuche, funktioniert es. Ist das also so gewollt oder ein Fehler? Es scheint mir heikel.

Antwort1

Aus Laufzeitperspektive überprüft Puppet den Status des Benutzers auf dem System und vergleicht ihn mit dem Manifest. Wenn der Benutzer auf dem System nicht vorhanden ist, führt Puppet den entsprechenden useraddBefehl aus, um ihn zu erstellen. Wenn der Benutzer nicht vorhanden sein sollte, es aber ist, führt es den entsprechenden userdelBefehl aus. Wenn sich ein Attribut des Benutzers, wie z. B. Gruppenmitgliedschaft, UID, Name usw., geändert hat, gibt es den entsprechenden gpasswdBefehl aus usermod.

Leider ist die Dokumentation zum Benutzertyp nicht besonders klar. Der managehomeParameter gibt nicht so sehr eine Aussage über das Verzeichnis ab, sondern ist eher eine Option für den Befehl useradd, usermod, oder userdel. Wenn Sie also managehome => trueden Speicherort des Home-Verzeichnisses festlegen und ändern, wird es erstellt, wenn Sie den Benutzer löschen, wird es gelöscht und wenn Sie den Benutzer hinzufügen, wird es erstellt. Dies stellt jedoch nicht sicher, dass das Verzeichnis immer vorhanden ist.

Wenn dies erforderlich ist, empfehle ich Ihnen, einen Dateityp zu erstellen und eine entsprechende Anforderung festzulegen. Etwa so:

user { 'artifactory':
    ensure     => 'present',
    home       => '/home/artifactory',
    managehome => true,
}

file { 
  '/home/artifactory/data':
    ensure  => link,
    target  => '/var/lib',
    require => [ User['artifactory'], File['artifactoryhomedir'] ]; 
  '/home/artifactory':
    ensure => directory,
    alias => 'artifactoryhomedir',
    require => User['artifactory'];
}

Antwort2

Es ist einbekanntes Problem. Die geplante Lösung besteht darin, das aktuelle Verhalten beizubehalten, aberStartseiteZuStartseiteum es deutlicher zu machen.

verwandte Informationen