我们将所有用户声明为虚拟资源。例如:
@user { 'belmin':
uid => 2001
comment => 'Belmin Fernandez',
groups => ['sysadmins'],
}
有时我们暂时realize
将用户视为某个节点:
node web1 {
realize User['belmin']
(...)
}
我正在研究如何确保未在节点中实现的用户不存在于该服务器上。首先想到的方法是realize
删除临时文件时执行以下操作:
node web1 {
User <| title == 'belmin' |> {
ensure => absent,
}
}
但是,在删除临时文件时,很容易有人意外忽略这一点realize
。还有其他更优雅的建议吗?
答案1
Puppet 有办法删除所有未明确管理的用户。这包括未实现的虚拟用户。
resources {
'user':
purge => true
}
这会忽略 UID 低于 500(对于 Debian 和某些 BSD,则为 1000)的系统用户。通常这样做是正确的。不用说,应谨慎使用。
答案2
在写这个问题的时候,想到在课堂上做这样的事情:
class our_users {
user { 'belmin':
ensure => absent,
uid => 2001
comment => 'Belmin Fernandez',
groups => ['sysadmins'],
}
}
然后,在节点中:
node web1 {
include our_users
User <| title == 'belmin'|> {
ensure => present,
}
}
node web2 {
include our_users
}
然后,任何没有实现用户并ensure
覆盖属性的节点都将确保该用户为absent
。
我不完全确定这是否会起作用,但在测试时我会把它放在那里,以防我没有发现的弱点/问题。