Puppet: Teste se Resource está definido ou crie-o

14

Eu tenho tentado descobrir uma maneira de testar se um recurso já está definido em outro arquivo e, se não for, criá-lo? Um exemplo rápido:

  if File[$local_container] {
    alert("Testing - It existed $local_container")
  } else {
    file{ "$local_container":
      ensure => directory,
    }
  }

No entanto - File[$local_container]sempre parece avaliar como verdadeiro. Existe uma maneira de fazer isso?

gnarf
fonte

Respostas:

10

A melhor maneira de fazer isso é usando a função allow_resource do puppetlabs stdlib

É necessário um tipo de recurso, título e uma lista de atributos que descrevem um recurso como parâmetros.

digamos que você tenha um caso de teste para criar apenas o recurso se ele ainda não existir.

ensure_resource('package', 'test-pkg', {'ensure' => 'present'})
Utkarsh
fonte
Isso parece muito mais limpo, passando a marca de seleção dessa maneira. Obrigado pela dica!
Gnarf
15

Você quer dizer "testar se um recurso já está definido "? Se você definir um recurso (por exemplo file {}, etc), o Puppet criará o que você está descrevendo se ainda não existir (supondo que você passe ensure => present, é claro).

Para verificar se um recurso já está definido no catálogo ou não:

mark-draytons-macbook:~ mark$ cat test.pp 
file { "/tmp/foo": ensure => present }

if defined(File["/tmp/foo"]) {
  alert("/tmp/foo is defined")
} else {
  alert("/tmp/foo is not defined")
}

if defined(File["/tmp/bar"]) {
  alert("/tmp/bar is defined")
} else {
  alert("/tmp/bar is not defined")
}

mark-draytons-macbook:~ mark$ puppet test.pp 
alert: Scope(Class[main]): /tmp/foo is defined
alert: Scope(Class[main]): /tmp/bar is not defined
notice: //File[/tmp/foo]/ensure: created

Nota: defined()é dependente da ordem de análise .

markdrayton
fonte
5
Essa parte "depende da ordem de análise" torna quase inútil.
joerx
2

Ou....

unless File["${local_container}"] {
  file{ "${local_container}":
     ensure => directory,
  }
}

E fique de olho nessas citações e suspensórios ...

nzidol
fonte
-2

simplesmente,

file{ "$local_container":
  ensure => directory,
  replace => false,
}
guest_002
fonte
Não, se o "$local_container"arquivo já tiver sido definido em outro lugar (por exemplo, por algo que deseje controlar as permissões / proprietário), você não poderá definir o mesmo recurso duas vezes.
Gnarf