Saya mencoba mencari solusi untuk masalah yang persis sama, dan ternyata yang terbaik adalah mengambil pendekatan yang sedikit berbeda.
Tetapkan direktori home secara eksplisit, misalnya:
user { $username:
comment => "comment",
home => "/home/${username}",
managehome => false,
# ...
}
Ketika managehome
salah, direktori home bahkan tidak dibuat. Jadi, Anda harus mendefinisikannya secara spesifik. Seringkali yang terbaik untuk membuat definisi khusus untuk seluruh pengguna:
define custom_user($username, $password) {
user { $username:
home => "/home/${username}",
password => $password,
# etc.
}
file { "/home/${username}":
ensure => directory,
owner => $username,
require => User[$username],
# etc.
}
}
Anda dapat menambahkan lebih banyak parameter, misalnya $keyvalue
, dan membuat keyfile jika parameter itu diberikan.
Anda juga dapat menentukan variabel global $home = "/home"
(spesifik OS, jika perlu) dan mendapatkan dir home "${home}/${username}"
.
Sunting: Menggunakan hash untuk mendefinisikan direktori home khusus pengguna
Versi boneka terbaru (> = 2.6) mendukung hash. Dimungkinkan untuk mendefinisikan username => /path/to/home
pemetaan yang berisi hash untuk setiap pengguna:
$home = {
normal_user => '/home/normal_user',
backup => '/var/backup',
mysql => '/var/lib/mysql'
}
Untuk setiap nama pengguna, mudah untuk mendapatkan direktori home $home['username']
.
Direktori rumah hash dengan fallback
Sebagian besar waktu, akan lebih baik untuk memiliki "fallback default" jika pengguna tidak ada di hash. Secara teori ini mungkin, meskipun sintaks menjadi sedikit samar dan membengkak:
$home = { ... }
$default_home = '/home'
user {$username:
home => has_key($home, $username) ? {
true => $home[$username],
false => "${default_home}/${username}"
}
# ...
}