Tôi đã cố gắng tìm một giải pháp cho cùng một vấn đề, và hóa ra cách tốt nhất là thực hiện một cách tiếp cận hơi khác.
Xác định rõ ràng thư mục nhà, ví dụ:
user { $username:
comment => "comment",
home => "/home/${username}",
managehome => false,
# ...
}
Khi managehome
sai, thư mục chính thậm chí không được tạo. Vì vậy, bạn phải xác định cụ thể nó. Thông thường tốt nhất là tạo một định nghĩa tùy chỉnh cho toàn bộ người dùng:
define custom_user($username, $password) {
user { $username:
home => "/home/${username}",
password => $password,
# etc.
}
file { "/home/${username}":
ensure => directory,
owner => $username,
require => User[$username],
# etc.
}
}
Bạn có thể thêm nhiều tham số, ví dụ $keyvalue
, và tạo một keyfile nếu tham số đó được đưa ra.
Bạn cũng có thể xác định một biến toàn cục $home = "/home"
(hệ điều hành cụ thể, nếu cần) và nhận thư mục về nhà với "${home}/${username}"
.
Chỉnh sửa: Sử dụng hàm băm để xác định thư mục nhà cụ thể của người dùng
Các phiên bản Puppet gần đây (> = 2.6) hỗ trợ băm. Có thể xác định hàm băm chứa username => /path/to/home
ánh xạ cho mỗi người dùng:
$home = {
normal_user => '/home/normal_user',
backup => '/var/backup',
mysql => '/var/lib/mysql'
}
Đối với bất kỳ tên người dùng, sau đó dễ dàng để có được thư mục nhà với $home['username']
.
Thư mục chính băm với dự phòng
Hầu hết thời gian, tốt nhất là có "mặc định dự phòng" nếu người dùng không tồn tại trong hàm băm. Về lý thuyết, điều này là có thể, mặc dù cú pháp trở nên hơi khó hiểu và cồng kềnh:
$home = { ... }
$default_home = '/home'
user {$username:
home => has_key($home, $username) ? {
true => $home[$username],
false => "${default_home}/${username}"
}
# ...
}