Kukla'da şartlı olan bir dosya / dizin nasıl yapılır?


18

Ben failgeçirilen dizin yolu yoksa bir yapacak kukla bir işlev yazmaya çalışıyorum .

if File["/some/path"]her zaman if defined(File["/some/path"])true değerini döndürür ve yalnızca kaynak kuklada tanımlanmışsa, gerçekte olup olmadığına bakılmaksızın true değerini döndürür.

Bunu basit bir ififadeyle yapmanın bir yolu var mı ?

Teşekkürler


2
Unutmayın: tezahürler ustada derlenir. Müşteri hakkında sunduğu gerçekler dışında hiçbir şey bilmiyorlar. Yani ya bu bilgiye sahip bir gerçek yazın ya da geri adım atın ve aslında neyi çözmeye çalıştığınızı söyleyin, böylece bir if ifadesinden daha iyi bir yaklaşım bulabiliriz.
Dennis Kaarsemaker

Yanıtlar:


31

Bunun için geçici çözüm: bir exec "sınaması" nda onlyif kullanın ve yürütmek istediğiniz eyleminizde olmasını isteyin:

exec {"check_presence":
  command => '/bin/true',
  onlyif => '/usr/bin/test -e /path/must/be/available',
}

whatever {"foo...":
  .....
  require => Exec["check_presence"],
}

5
Ah bu kötü, hoşuma gitti :-)
Dennis Kaarsemaker

1
Daha da basit olabilir: exec {"test -e / path / must / be / available":}
Dennis Kaarsemaker

1
Teşekkürler. Bu tek bir dir kontrolü için harika çalışıyor. Ancak, dizinleri bir dizi doğrulamaya çalışıyorum ... Eğer bir işleve bu eklerseniz, 'redeclare edemez' hatası alıyorum.
ddario

6
Harika fikir, ancak bu, her Kukla çalışmasında "Exec [check_presence] / return: başarılı bir şekilde yürütüldü" bildirimi olacağı anlamına gelir, ki bu gerçekten sinir bozucu! Daha iyisi: exec {'check_presence': command => '/ bin / false', => '/ usr / bin / test -e / path / must / be / available',} Bu aynısını yapar, ancak yalnızca yol gerçekten mevcut olmadığında bir hata / bildirim oluşturur.
S0me0ne

2
"Gereksinim" in başarısız olmasına neden olan herhangi bir şey, ister bağımlı olsun ya da olmasın, bağımlılığı ne olursa olsun bir hata verecektir ... Bu yüzden teknik olarak çalışır, ancak kukla günlüklerinizde oturum açmış birçok hata alırsınız ...
David Gardner

0

Ben de bir dizin mevcut değilse bir modül çalışmasını tutmak için nasıl anlamaya zorluk yaşıyordu. Benim için işe yaradığını buldum.

exec { 'module_name':
   command => "command to run with variables", # Double quotes for Variable interpolation
   path   => "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:",
   onlyif => 'test -d /mydirectory',
   }

Yolu eklemek benim için gerçekten işe yarayan şeydi. Bazı nedenlerden dolayı, test komutunun yolunu /bin/testdüzgün çalışmadığı gibi eklesem bile.

Umarım bu aynı sorunu yaşayanlara yardımcı olur.


0

Bunun için yerleşik find_file () işlevini de kullanabilirsiniz ... dosya / yol olmadığında undef ve varsa bir dize döndürür.

https://puppet.com/docs/puppet/5.5/function.html#findfile


1
Bu sadece master üzerinde çalışır ve modüllerde dosya bulmak içindir.
bodgit

Teşekkürler, ancak bunu tam yolu sağlayarak işletim sistemindeki dosyaları bulmak için de kullanabilirsiniz.
Mike

Yalnızca kataloğun derlendiği makinede, yani master'da.
bodgit

Evet bu doğru.
Mike
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.