Próbowałem znaleźć rozwiązanie dla dokładnie tego samego problemu i okazało się, że najlepiej jest zastosować nieco inne podejście.
Zdefiniuj katalog domowy jawnie, na przykład:
user { $username:
comment => "comment",
home => "/home/${username}",
managehome => false,
# ...
}
Kiedy managehome
ma wartość false, katalog domowy nawet nie jest tworzony. Więc musisz to szczegółowo zdefiniować. Często najlepiej jest stworzyć niestandardową definicję dla całego użytkownika:
define custom_user($username, $password) {
user { $username:
home => "/home/${username}",
password => $password,
# etc.
}
file { "/home/${username}":
ensure => directory,
owner => $username,
require => User[$username],
# etc.
}
}
Możesz na przykład dodać więcej parametrów $keyvalue
i utworzyć plik klucza, jeśli ten parametr zostanie podany.
Możesz także zdefiniować zmienną globalną $home = "/home"
(w razie potrzeby specyficzną dla systemu operacyjnego) i uzyskać katalog domowy za pomocą "${home}/${username}"
.
Edycja: Używanie skrótu do definiowania katalogów domowych specyficznych dla użytkownika
Nowsze wersje Puppet (> = 2.6) obsługują skróty. Możliwe byłoby zdefiniowanie skrótu zawierającego username => /path/to/home
mapowania dla każdego użytkownika:
$home = {
normal_user => '/home/normal_user',
backup => '/var/backup',
mysql => '/var/lib/mysql'
}
W przypadku dowolnej nazwy użytkownika łatwo jest uzyskać katalog domowy $home['username']
.
Skrót katalogu domowego z rezerwowym
Przez większość czasu najlepiej byłoby mieć „domyślne ustawienie rezerwowe”, jeśli użytkownik nie istnieje w haszowaniu. Teoretycznie jest to możliwe, chociaż składnia staje się nieco tajemnicza i rozdęta:
$home = { ... }
$default_home = '/home'
user {$username:
home => has_key($home, $username) ? {
true => $home[$username],
false => "${default_home}/${username}"
}
# ...
}