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', }
这是一个现有的错误报告:
我相当确定它首先删除组。
这种情况通常出现在定义中。 我通常做的事情大致如下:
user { 'user1': ensure => $ensure, gid => 'group1', require => $ensure ? { present => Group['group1'], absent => undef, } }
这是丑陋的,但它的作品。 可能有更好的办法。
另外,我认为在这种情况下,Puppet是否首先删除组并不重要,所以你可以单独放置依赖而不用担心。 只要用户仍然存在,用户将处于不存在的组中,这将不会太长。 可能没有太大的伤害。