Puppet 支持资源依赖的概念,即一个资源只有在另一个资源先同步后才会同步。例如,以下 Puppet 片段将创建用户user1
和组group1
,但它将创建组第一的:
group { 'group1':
ensure => present
}
user { 'user1':
ensure => present,
gid => 'group1',
require => Group['group1']
}
ensure
我的问题是:当参数从“存在”更改为“不存在”时,依赖关系如何工作:
group { 'group1':
ensure => absent
}
user { 'user1':
ensure => absent,
gid => 'group1',
require => Group['group1']
}
在这种情况下,Puppet 会做什么?它会先删除组,还是先删除用户?或者顺序可能没有定义?
一般来说,仅当其他资源不存在时,如何确保一种资源才不存在。
答案1
您可以从用户资源中删除“require => Group['group1']”,资源仍将正确创建。然后,您可以在尝试“ensure => impossible”时使用条件来更改用户和组之间的关系。
$ensure = 'absent'
if $ensure == 'absent' {
User[user1] -> Group[group1]
}
group { 'group1':
ensure => $ensure
}
user { 'user1':
ensure => $ensure,
gid => 'group1',
}
以下是现有的错误报告:
答案2
我确信它会先删除该组。
这种情况通常出现在定义中。我通常会这样做:
user { 'user1':
ensure => $ensure,
gid => 'group1',
require => $ensure ? {
present => Group['group1'],
absent => undef,
}
}
虽然不好看,但确实管用。也许还有更好的方法。
此外,我认为在这种情况下,Puppet 是否先删除组实际上并不重要,因此您可以不管依赖关系,而不必担心。只要用户仍然存在,他们就会处于不存在的组中,这不会持续很长时间。可能不会造成太大的伤害。