Henüz var olmayan şeyleri nasıl Şefleştirebilirim?


9

Diyelim ki bazı Şef kodlarım var:

require 'mixlib/shellout'
yum_package 'somepackage'
myvar =  Mixlib::ShellOut.new('/bin/somecommand').run_command.stdout.strip

Nerede /bin/somecommandyüklü olmadığı için henüz mevcut değil somepackage. Bu, bu nedenle tarif derleme zamanında başarısız olur, ancak paketin başarıyla yüklenmesini sağlayarak yakınsama zamanında çalışacaktır (ve eğer açık değilse, tarif zaten başarısız olmuştur). Bu, paket önceden birlikte derlendiğinden, çalışma listesinde önceki bir tarif olarak yüklendiğinde de başarısız olur. Bir Şef tarifine, tarifin veya çalışma listesinin kendini yüklediği şeyleri nasıl ekleyebilirim?


Bu tür şeyler CFEngine'de bir sorun değil
Gaius

1
myvarGerçek bir cevabın kullanımı hakkında fikir sahibi olmadan , genellikle diğer kaynakları tanımlamak için çok gerekli olmadıkça, derleme zamanında harici komutlardan kod değerlendirmesini kullanmaktan kaçınırım. Kısacası, birruby_block 'set myvar' { node.run_state['myvar'] = Mixlib::ShellOut.[...] }
Tensibai

@Tensibai node.run_statetam olarak aradığım şeydi - teşekkürler. Bunu cevaplayın, kabul edeceğim!
Gaius

Bu yarına kadar beklemek zorunda kalacak :) telefonda doğru cevap yazmak için çok zor
Tensibai

Yanıtlar:


4

Ben gelirdim node.run_statebir vadede geçici bir değişken depolamak ve bir o tanımlamak için ruby_blockböyle, yakınsama anda bir şey olur böylece:

yum_package 'somepackage'

ruby_block 'set myvar' do
  block do
    node.run_state['my_var'] = Mixlib::ShellOut.new('/bin/somecommand').run_command.stdout.strip
  end
end

Bildiğim kadarıyla 'mixlib / shellout' gerekli değildir.


2

Özellikler kesin kullanım durumuna bağlıdır. Değer yalnızca başka bir kaynakta özellik olarak kullanılırsa, lazyyardımcı yöntemi kullanırsınız. Çıktıya ihtiyacınız yoksa, executekaynağı kullanırsınız . Bazı daha karmaşık durumlarda bir ruby_blockkaynak kullanabilir veya kendi özel kaynağınızı yazabilirsiniz.

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.