Puppet: verifica se la risorsa è definita o creala


14

Ho cercato di capire un modo per verificare se una risorsa è già definita in un altro file e se non crearla? Un rapido esempio:

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

Tuttavia, File[$local_container]sembra sempre valutare vero. C'è un modo per fare questo?

Risposte:


10

Il modo migliore per farlo è usare la funzione sure_resource da puppetlabs stdlib

Prende un tipo di risorsa, un titolo e un elenco di attributi che descrivono una risorsa come parametri.

supponiamo che tu abbia un caso di prova per creare la risorsa solo se non esiste già-

ensure_resource('package', 'test-pkg', {'ensure' => 'present'})

Sembra molto più pulito, passando il segno di spunta in questo modo. Grazie per il consiglio!
Gnarf,

15

Intendi "test se una risorsa è già definita "? Se definisci una risorsa (es. file {}, Ecc.) Puppet creerà ciò che stai descrivendo se non esiste già (supponendo che passi ensure => present, ovviamente).

Per verificare se una risorsa è già definita nel catalogo o meno:

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()è dipendente da ordine di parsing .


5
Quella parte "dipende dall'ordine di analisi" la rende quasi inutile.
Joerx,

2

O....

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

E tieni d'occhio quelle citazioni e parentesi graffe ....


-2

semplicemente,

file{ "$local_container":
  ensure => directory,
  replace => false,
}

No, se il "$local_container"file era già stato definito da qualche altra parte (come dire qualcosa che voleva controllare le autorizzazioni / il proprietario) non è possibile definire due volte la stessa risorsa.
Gnarf,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.