使用 Ensure 缺失的 Puppet 依赖排序

使用 Ensure 缺失的 Puppet 依赖排序

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',
}

以下是现有的错误报告:

http://projects.puppetlabs.com/issues/9622

答案2

我确信它会先删除该组。

这种情况通常出现在定义中。我通常会这样做:

user { 'user1':
  ensure  => $ensure,
  gid     => 'group1',
  require => $ensure ? {
    present => Group['group1'],
    absent  => undef,
  }
}

虽然不好看,但确实管用。也许还有更好的方法。

此外,我认为在这种情况下,Puppet 是否先删除组实际上并不重要,因此您可以不管依赖关系,而不必担心。只要用户仍然存在,他们就会处于不存在的组中,这不会持续很长时间。可能不会造成太大的伤害。

相关内容