
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 useradd
Befehl aus, um ihn zu erstellen. Wenn der Benutzer nicht vorhanden sein sollte, es aber ist, führt es den entsprechenden userdel
Befehl aus. Wenn sich ein Attribut des Benutzers, wie z. B. Gruppenmitgliedschaft, UID, Name usw., geändert hat, gibt es den entsprechenden gpasswd
Befehl aus usermod
.
Leider ist die Dokumentation zum Benutzertyp nicht besonders klar. Der managehome
Parameter 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 => true
den 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.