Kukla: Kaynağın tanımlı olup olmadığını test edin veya oluşturun


14

Bir kaynağın başka bir dosyada tanımlanmış olup olmadığını test etmenin bir yolunu bulmaya çalışıyorum ve oluşturmuyorsa? Kısa bir örnek:

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

Ancak - File[$local_container]her zaman doğru olarak değerlendirilir. Bunu yapmanın bir yolu var mı?

Yanıtlar:


10

Bunu yapmanın iyi bir yolu puppetlabs gelen ensure_resource fonksiyonu yararlanarak gereğidir stdlib

Bir kaynak türü, başlık ve bir kaynağı parametre olarak tanımlayan özniteliklerin bir listesini alır.

kaynağı henüz mevcut değilse oluşturmak için test durumunuz olduğunu varsayalım.

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

Bu, onay işaretini bu şekilde geçerek çok daha temiz görünüyor. Bahşiş için teşekkürler!
gnarf

15

Şunu mu demek istediniz: "bir kaynak önceden tanımlanmışsa test et "? Bir kaynak tanımlarsanız (yani, file {}vb.) Kukla, zaten yoksa (açıkladığınızı varsayarak) açıkladığınız şeyi yaratacaktır ensure => present.

Bir kaynağın katalogda önceden tanımlanıp tanımlanmadığını kontrol etmek için:

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

Not: defined()bir ayrıştırma amacıyla bağımlı .


5
Bu "ayrıştırma sırasına bağlıdır" kısmı neredeyse işe yaramaz hale getirir.
joerx

2

Veya....

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

Ve bu tırnak ve kıvırcık parantez göz kulak ....


-2

basitçe,

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

Hayır, "$local_container"dosya zaten başka bir yerde tanımlanmışsa (örneğin, izinleri / sahibi kontrol etmek isteyen bir şey gibi) aynı kaynağı iki kez tanımlayamazsınız.
gnarf
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.