मैंने ठीक उसी समस्या के लिए एक समाधान खोजने की कोशिश की, और यह थोड़ा अलग दृष्टिकोण लेने के लिए सबसे अच्छा है।
घरेलू निर्देशिका को स्पष्ट रूप से परिभाषित करें, उदाहरण के लिए:
user { $username:
comment => "comment",
home => "/home/${username}",
managehome => false,
# ...
}
जब managehome
गलत है, होम डायरेक्टरी भी नहीं बनाई गई है। इसलिए आपको इसे विशेष रूप से परिभाषित करना होगा। संपूर्ण उपयोगकर्ता के लिए कस्टम परिभाषा बनाना अक्सर सर्वोत्तम होता है:
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"
(ओएस विशिष्ट, यदि आवश्यक हो) को परिभाषित कर सकते हैं और घर के साथ प्राप्त कर सकते हैं "${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}"
}
# ...
}