Yanıtlar:
Ş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.
<%= scope.function_template("sites/$domain/config.erb") %>
<%= scope.function_template("sites/#{domain}/config.erb") %>.
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
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.