Ich habe versucht, eine Lösung für genau dasselbe Problem zu finden, und es stellte sich heraus, dass es am besten ist, einen etwas anderen Ansatz zu wählen.
Definieren Sie das Basisverzeichnis explizit, zum Beispiel:
user { $username:
comment => "comment",
home => "/home/${username}",
managehome => false,
# ...
}
Wenn managehome
false ist, wird nicht einmal das Basisverzeichnis erstellt. Sie müssen es also spezifisch definieren. Es ist oft am besten, eine benutzerdefinierte Definition für den gesamten Benutzer zu erstellen:
define custom_user($username, $password) {
user { $username:
home => "/home/${username}",
password => $password,
# etc.
}
file { "/home/${username}":
ensure => directory,
owner => $username,
require => User[$username],
# etc.
}
}
Sie können beispielsweise weitere Parameter hinzufügen $keyvalue
und eine Schlüsseldatei erstellen, wenn dieser Parameter angegeben ist.
Sie können auch eine globale Variable definieren $home = "/home"
(betriebssystemspezifisch, falls erforderlich) und das Home-Verzeichnis mit verwenden "${home}/${username}"
.
Bearbeiten: Verwenden von Hash, um benutzerspezifische Basisverzeichnisse zu definieren
Neuere Puppet-Versionen (> = 2.6) unterstützen Hashes. Es wäre möglich, einen Hash-Inhalt zu definierenusername => /path/to/home
Zuordnungen für jeden Benutzer :
$home = {
normal_user => '/home/normal_user',
backup => '/var/backup',
mysql => '/var/lib/mysql'
}
Für jeden Benutzernamen ist es dann einfach, das Home-Verzeichnis mit zu bekommen $home['username']
.
Home-Verzeichnis-Hash mit Fallback
In den meisten Fällen ist es am besten, einen "Fallback-Standard" zu verwenden, wenn der Benutzer im Hash nicht vorhanden ist. Theoretisch ist dies möglich, obwohl die Syntax ein wenig kryptisch und aufgedunsen ist:
$home = { ... }
$default_home = '/home'
user {$username:
home => has_key($home, $username) ? {
true => $home[$username],
false => "${default_home}/${username}"
}
# ...
}