Ordenação de dependência de marionetes com garantia de ausência

2

O Puppet suporta o conceito de dependências de recursos em que um recurso não será sincronizado até que outro seja sincronizado primeiro. Por exemplo, o fragmento Puppet a seguir criará o usuário user1 e o grupo group1 , mas criará o grupo primeiro :

group { 'group1': 
  ensure => present
}

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

Minha pergunta é: como as dependências funcionam quando o parâmetro ensure é alterado de "presente" para "ausente":

group { 'group1': 
  ensure => absent
}

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

O que o Puppet faz em um caso como esse? Remove primeiro o grupo ou o usuário primeiro? Ou talvez a ordem não esteja definida?

Em geral, como você garantiria que um recurso não estivesse presente apenas quando algum outro recurso já não estivesse presente?

    
por user35042 05.04.2013 / 17:34

2 respostas

2

Você pode remover "require = > Group ['group1']" do recurso do usuário e os recursos ainda serão criados corretamente. Você pode usar uma condicional para alterar o relacionamento entre o usuário e o grupo ao tentar "garantir = > ausente".

$ensure = 'absent'

if $ensure == 'absent' {
    User[user1] -> Group[group1]
}

group { 'group1':
    ensure => $ensure
}

user { 'user1':
    ensure  => $ensure,
    gid     => 'group1',
}

Aqui está um relatório de bug existente:

link

    
por 05.04.2013 / 19:25
1

Tenho quase certeza de que remove o grupo primeiro.

Esse tipo de situação geralmente aparece em definições. O que eu normalmente faço é algo como:

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

É feio mas funciona. Pode haver uma maneira melhor.

Além disso, acredito que não importa se o Puppet remover o grupo primeiro nesse tipo de caso, então você pode deixar as dependências em paz e não se preocupar com isso. O usuário estará em um grupo inexistente enquanto ainda existir, o que não será longo. Provavelmente não muito mal feito.

    
por 05.04.2013 / 18:56