Kukla şablonundan Kukla işlevi çağrılsın mı?


13

0.24.8'den itibaren bir Kukla şablonu bir Kukla işlevini çağırabilir mi?

Manifestimdeki işlevi çağırarak, bir değişkene dönüş değerini atayarak ve sonra şablondaki lookupvar ('değişken') kullanarak benzer işlevler elde edebilirim, ancak orta adamı kesmek istiyorum.

Yanıtlar:


18

Şablonların içinde bir kapsam nesnesine erişebilirsiniz. Kukla bildirimlerde erişebileceğiniz tüm işlevlere aynı adla olmasa da bu kapsam nesnesi üzerinden erişilebilir. Başına ekle "function_"işlevi adının başına. Örneğin, burada bir şablonu diğerinin içine dahil ettim:<%= scope.function_template("template2.erb") %>

http://reductivelabs.com/trac/puppet/wiki/PuppetTemplating , şablonların içindeki kapsam nesnesi hakkında harika belgelere sahiptir. Şablonu ve işlevleri hakkında gerçekten derin bilgi için içeriye bakabilirsiniz lib/puppet/parser/templatewrapper.rbve lib/puppet/parser/functions.rb.


Çok teşekkürler. Bir şablonda template () işlevini kullanan herkese dikkat kelimesi: hala bir kukla bildiriminde yaptığınız gibi nitelendirmeniz gerekir (yani, scope.function_template ("module / template.erb")).
sh-beta

Şablon içindeki şablon işlev çağrısına yüklenecek şablon dosyasının adı için bir değişken kullanılabilir mi? Ör.<%= scope.function_template("sites/$domain/config.erb") %>
Gary

Kesinlikle. Kukla DSL'de değil Ruby'de çalıştığınıza dikkat edin, bu nedenle değişken adları (ve enterpolasyon kuralları) farklıdır. Dizeniz olmalı <%= scope.function_template("sites/#{domain}/config.erb") %>.
jgoldschrafe

3

Soruyu özel işlevlere de açıklayayım . Temel olarak, özel işlevleri yerleşik işlevlerle aynı şekilde çağırırsınız (işlev_ öneki kullanılarak), ancak bir dizideki tüm parametreleri ilettiğinizden emin olun:

module Puppet::Parser::Functions
  newfunction(:namegoeshere, :type => :rvalue) do |args|
    # ...
  end
end

<%= scope.function_namegoeshere(["one","two"]) %>

Lütfen bazı Kukla versiyonlarında köşeli parantez olmadan da çalıştığını unutmayın. Daha fazla bilgi: http://docs.puppetlabs.com/guides/custom_functions.html#referencing-custom-functions-in-templates

Bir başka önemli şey de, özel işlevlerin şablon kapsamına otomatik olarak yüklenmediği Puppet 2.6 veya daha eski sürümlerde bir hata (veya özellik) olmasıdır . Bunları manuel olarak yüklemeniz gerekir , aksi takdirde işlev bulunmaz!

<% Puppet::Parser::Functions::function('namegoeshere') %>

Daha fazla bilgi: http://projects.puppetlabs.com/issues/7991


-2

Bir Kukla işlevi ile ne demek istediğinizden tam olarak emin değilim, ancak kukla şablonları Ruby'ye gömülüdür, böylece Ruby'de şablonlarda istediğiniz her şeyi yapabilirsiniz.


Yerel kukla işlevleri, fqdn_rand (), sha1 (), etiketli () vb. Öğelerdir. Özel Kukla işlevleri, modüller / modül adı / eklentiler / kukla / ayrıştırıcı / işlevler / altında saklanır. Bunlar bir şablon içinden çağrılabilir mi?
sh-beta
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.