我在这里寻找澄清。 看来用户定义types的managehome属性只在用户不存在时才起作用。 看看这个DSL
user { 'artifactory': ensure => 'present', home => '/home/artifactory', managehome => true, } file { '/home/artifactory/data': ensure => link, target => '/var/lib', require => User['artifactory'], }
我第一次运行这个工作正常,但是,如果我删除artifactory用户的主目录,然后运行它,木偶barfs。
错误:无法设置“链接”确保:没有这样的文件或目录
我的第一个想法是真的吗? 看看文档
pipe理用户时是否pipe理主目录。 当确保=>存在时,这将创build主目录
如果我删除用户,然后再试一次就行了。 那么这是由devise还是一个错误? 这对我来说似乎很微妙。
从运行时angular度来看,puppet会检查系统上用户的状态,并将其与清单进行比较。 如果系统中不存在用户,则puppet运行相应的useradd命令来创build它。 如果用户不应该存在,那么它将运行相应的userdel命令。 如果用户的某些属性(例如组成员身份,uid,名称等)已更改,则会发出相应的gpasswd或usermod命令。
不幸的是,关于用户types的文档并不是最清楚的。 managehome参数没有太多关于该目录的声明,因为它是useradd , usermod或userdel命令的选项。 所以如果你设置了managehome => true并且改变主目录的位置,那么它将被创build,如果你删除了用户,它将被删除,并且如果添加用户,它将被创build。 但是,它并不确保该目录始终存在。
如果这是必需的,那么我会build议你创build一个文件types并设置一个合适的要求。 像这样的东西:
user { 'artifactory': ensure => 'present', home => '/home/artifactory', managehome => true, } file { '/home/artifactory/data': ensure => link, target => '/var/lib', require => [ User['artifactory'], File['artifactoryhomedir'] ]; '/home/artifactory': ensure => directory, alias => 'artifactoryhomedir', require => User['artifactory']; }
这是一个已知的问题 。 计划的解决scheme是保持当前的行为,但重命名managehome 创build家庭 ,使其更清晰。