木偶依赖sorting,确保不存在

Puppet支持资源依赖关系的概念,其中一个资源不会被同步,直到另一个资源首先同步。 例如,以下Puppet片段将创build用户user1和组group1但它将首先创build组:

 group { 'group1': ensure => present } user { 'user1': ensure => present, gid => 'group1', require => Group['group1'] } 

我的问题是:当ensure参数从“present”变为“absent”时,依赖关系如何工作:

 group { 'group1': ensure => absent } user { 'user1': ensure => absent, gid => 'group1', require => Group['group1'] } 

木偶在这样的情况下做什么? 它是首先删除组还是首先删除用户? 或者也许订单没有定义?

一般来说,如果一个资源不存在,那么如何确保一个资源不存在。

您可以从用户资源中删除“require => Group ['group1']”,资源仍然会正确创build。 在尝试“确保=>不存在”时,可以使用条件来更改用户和组之间的关系。

 $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

我相当确定它首先删除组。

这种情况通常出现在定义中。 我通常做的事情大致如下:

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

这是丑陋的,但它的作品。 可能有更好的办法。

另外,我认为在这种情况下,Puppet是否首先删除组并不重要,所以你可以单独放置依赖而不用担心。 只要用户仍然存在,用户将处于不存在的组中,这将不会太长。 可能没有太大的伤害。