我试图为完全相同的问题找到解决方案,结果发现最好采用稍微不同的方法。
显式定义主目录,例如:
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"
(如果需要,特定于OS),并使用获取主目录"${home}/${username}"
。
编辑:使用哈希定义用户特定的主目录
最新的Puppet版本(> = 2.6)支持哈希。可以username => /path/to/home
为每个用户定义一个包含映射的哈希:
$home = {
normal_user => '/home/normal_user',
backup => '/var/backup',
mysql => '/var/lib/mysql'
}
对于任何用户名,使用即可轻松获得主目录$home['username']
。
具有备用的主目录哈希
在大多数情况下,如果用户不存在于哈希中,则最好有一个“后备默认值”。从理论上讲,这是可能的,尽管语法变得有点神秘和and肿:
$home = { ... }
$default_home = '/home'
user {$username:
home => has_key($home, $username) ? {
true => $home[$username],
false => "${default_home}/${username}"
}
# ...
}