Jawaban:
Templat di dalam Anda memiliki akses ke objek lingkup. Semua fungsi yang dapat Anda akses di manifes wayang dapat diakses melalui objek lingkup itu, meskipun tidak melalui nama yang sama. Tambahkan "function_"
ke awal nama fungsi. Misalnya, di sini saya menyertakan satu templat di dalam yang lain:<%= scope.function_template("template2.erb") %>
http://reductivelabs.com/trac/puppet/wiki/PuppetTemplating memiliki dokumentasi yang bagus tentang objek lingkup di dalam templat. Untuk informasi yang sangat mendalam tentang template dan fungsi Anda dapat melihat ke dalam lib/puppet/parser/templatewrapper.rb
dan lib/puppet/parser/functions.rb
.
<%= scope.function_template("sites/$domain/config.erb") %>
<%= scope.function_template("sites/#{domain}/config.erb") %>
.
Izinkan saya memperluas pertanyaan juga ke fungsi khusus . Pada dasarnya, Anda memanggil fungsi kustom dengan cara yang sama seperti fungsi bawaan (menggunakan awalan function_), tetapi pastikan Anda melewatkan semua params dalam array:
module Puppet::Parser::Functions
newfunction(:namegoeshere, :type => :rvalue) do |args|
# ...
end
end
<%= scope.function_namegoeshere(["one","two"]) %>
Harap dicatat ini juga berfungsi tanpa kawat gigi persegi pada beberapa versi Wayang. Info lebih lanjut: http://docs.puppetlabs.com/guides/custom_functions.html#referencing-custom-functions-in-templates
Hal penting lainnya adalah ada bug (atau fitur) di Puppet 2.6 atau lebih tua di mana fungsi kustom tidak dimuat secara otomatis ke dalam lingkup templat. Anda perlu memuatnya secara manual , jika tidak berfungsi tidak akan ditemukan!
<% Puppet::Parser::Functions::function('namegoeshere') %>
Info lebih lanjut: http://projects.puppetlabs.com/issues/7991
Saya tidak sepenuhnya yakin apa yang Anda maksud dengan fungsi wayang, tetapi template wayang tertanam Ruby, sehingga Anda dapat melakukan apa pun di template yang Anda bisa di Ruby.