Solusi 1:
Hm, saya pikir di sana Anda memerlukan modul facter untuk melakukan itu dan file manifes peretasan kecil...
modul facter:Ini akan mendaftarkan variabel facter untuk semua pengguna. seperti "home_root" atau "home_apache".
require 'etc'
Etc.passwd { |user|
Facter.add("home_#{user.name}") do
setcode do
user.dir
end
end
}
dan kemudian Anda dapat menggunakannya di dalam file manifes Anda seperti ini:
$username = "root"
$home = "home_$username"
$home_path = inline_template("<%= scope.lookupvar('::$home') %>")
file { "$home_path/test.txt":
content => "huhu",
}
Mungkin ada cara yang lebih baik, tapi sayangnya tidak.
Solusi 2:
Saya mencoba menemukan solusi untuk masalah yang persis sama, dan ternyata sebaiknya mengambil pendekatan yang sedikit berbeda.
Tentukan 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 adalah 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 buat keyfile jika parameter itu diberikan.
Anda juga dapat mendefinisikan variabel global $home = "/home"
(khusus OS, jika perlu) dan dapatkan home dir dengan "${home}/${username}"
.
Edit:Menggunakan hash untuk menentukan direktori home khusus pengguna
Versi Wayang yang lebih baru (>=2.6) mendukung hash. Dimungkinkan untuk mendefinisikan hash yang berisi username => /path/to/home
pemetaan untuk setiap pengguna:
$home = {
normal_user => '/home/normal_user',
backup => '/var/backup',
mysql => '/var/lib/mysql'
}
Untuk nama pengguna apa pun, mudah untuk mendapatkan direktori home dengan $home['username']
.
Hash direktori rumah dengan fallback
Sebagian besar waktu, akan lebih baik untuk memiliki "default fallback" jika pengguna tidak ada di hash. Dalam 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}"
}
# ...
}