Я намагався знайти рішення саме такої проблеми, і виявилося, що краще скористатися трохи іншим підходом.
Визначте домашній каталог чітко, наприклад:
user { $username:
comment => "comment",
home => "/home/${username}",
managehome => false,
# ...
}
Коли managehome
false, домашній каталог навіть не створений. Отже, ви повинні це конкретно визначити. Найчастіше найкраще зробити власне визначення для всього користувача:
define custom_user($username, $password) {
user { $username:
home => "/home/${username}",
password => $password,
# etc.
}
file { "/home/${username}":
ensure => directory,
owner => $username,
require => User[$username],
# etc.
}
}
Наприклад $keyvalue
, ви можете додати більше параметрів і створити файл з ключами, якщо цей параметр заданий.
Ви також можете визначити глобальну змінну $home = "/home"
(специфічну для ОС, якщо потрібно) та отримати домашній dir "${home}/${username}"
.
Редагувати: Використовуючи хеш для визначення домашніх каталогів конкретних користувачів
Більш недавні версії ляльок (> = 2.6) підтримують хеші. Можна було б визначити хеш, що містить username => /path/to/home
відображення для кожного користувача:
$home = {
normal_user => '/home/normal_user',
backup => '/var/backup',
mysql => '/var/lib/mysql'
}
Для будь-якого імені користувача легко отримати домашній каталог $home['username']
.
Хеш домашнього каталогу із резервним
У більшості випадків найкраще мати "резервний замовчування", якщо користувача не існує в хеші. Теоретично це можливо, хоча синтаксис стає трохи кричущим і роздутим:
$home = { ... }
$default_home = '/home'
user {$username:
home => has_key($home, $username) ? {
true => $home[$username],
false => "${default_home}/${username}"
}
# ...
}