我在这里寻求澄清。似乎用户定义类型的managehome属性仅在用户不存在时才有效。看看这个 DSL
user { 'artifactory':
ensure => 'present',
home => '/home/artifactory',
managehome => true,
}
file { '/home/artifactory/data':
ensure => link,
target => '/var/lib',
require => User['artifactory'],
}
Run Code Online (Sandbox Code Playgroud)
我第一次运行它时它工作正常,但是,如果我删除了artifactory用户的主目录,然后再次运行它,puppet barfs。
错误:无法在确保上设置“链接”:没有这样的文件或目录
我的第一个想法是真的?看一下文档
管理用户时是否管理家目录。这将在确保 => 存在时创建主目录
如果我删除用户并重试,它会起作用。那么这是设计使然还是错误?对我来说似乎很微妙。
从运行时的角度来看,puppet 检查系统上用户的状态并将其与清单进行比较。如果系统上不存在该用户,则 puppet 运行适当的useradd
命令来创建它。如果用户不应该存在,并且确实存在,那么它会运行适当的userdel
命令。如果用户的某些属性(例如组成员身份、uid、名称等)已更改,则它会发出相应的gpasswd
或usermod
命令。
不幸的是,关于用户类型的文档并不是最清楚的。该managehome
参数没有这么多拍一部关于该目录的语句,因为它是一个选项useradd
,usermod
或userdel
命令。因此,如果您设置managehome => true
和更改主目录的位置,那么它将被创建,如果您删除用户,它将被删除,如果您添加用户,它将被创建。但是,它并不能确保目录始终存在。
如果这是必需的,那么我建议您创建一个文件类型并设置适当的要求。像这样的东西:
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'];
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5452 次 |
最近记录: |