我正在创建一个用户如下
user { $username:
comment => "$name",
shell => "$shell",
managehome => false,
password => "$password",
groups => $groups
}
现在你可以看到我正在做一个 managehome is false 现在稍后我需要将文件推送到用户的主目录。
$key = "${homedir}/${name}/file"
file { $key:
ensure => present,
owner => $username,
group => $username,
mode => 600,
content => "$keyvalue",
subscribe => User[$username],
}
我怎样才能得到用户的主目录呢?
嗯,我想你需要一个 facter modul 来做到这一点和一些 hacky 清单文件......
facter 模块:这将为所有用户注册 facter 变量。像“home_root”或“home_apache”。
然后你可以像这样在清单文件中使用它们:
也许有更好的方法,但恐怕没有。
我试图为完全相同的问题找到解决方案,结果证明最好采用稍微不同的方法。
明确定义主目录,例如:
为假时
managehome
,甚至不创建主目录。所以你必须专门定义它。通常最好为整个用户进行自定义定义:您可以添加更多参数,例如
$keyvalue
,如果给定了该参数,则可以创建一个密钥文件。您还可以定义一个全局变量
$home = "/home"
(特定于操作系统,如果需要)并使用"${home}/${username}"
.编辑:使用散列定义用户特定的主目录
更新的 Puppet 版本 (>= 2.6) 支持散列。可以
username => /path/to/home
为每个用户定义一个包含映射的散列:对于任何用户名,都可以很容易地使用
$home['username']
.具有后备功能的主目录哈希
大多数时候,如果哈希中不存在用户,最好有一个“后备默认值”。理论上这是可能的,尽管语法变得有点晦涩和臃肿:
这个问题很旧,但仍然相关。其实现在有更好的办法。添加自定义事实到[module]/lib/facter/home_dirs.rb包含以下内容:
然后您可以访问清单中的数据:
请记住,这仅在用户在人偶运行之前已经存在的情况下才有效。如果用户是在运行期间创建的,则主目录应该是已知的或至少是可预测的。毕竟,Puppet 旨在创造秩序。
希望这对某人有帮助。
当帐户模块可用并且所有帐户都通过 hiera 创建时,下面的块会在每个用户主目录中创建一个文件,假设您不关心除 root 之外的系统用户帐户。
对于
$user_home_dir
所有用户来说应该是正确的accounts
,present
home
目录。