Panggil fungsi Wayang dari template Wayang?


13

Pada 0.24.8, bisakah templat wayang memanggil fungsi wayang?

Saya bisa mendapatkan fungsionalitas yang sama dengan memanggil fungsi di manifes saya, menetapkan nilai kembali ke variabel, dan kemudian menggunakan lookupvar ('variabel') di templat, tapi saya ingin memotong perantara.

Jawaban:


18

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.rbdan lib/puppet/parser/functions.rb.


Terima kasih banyak. Kata peringatan kepada siapa pun yang menggunakan fungsi templat () dalam templat: Anda masih harus memenuhi syarat seperti yang Anda lakukan dalam manifes wayang (yaitu, scope.function_template ("module / template.erb")).
sh-beta

Dimungkinkan untuk menggunakan variabel untuk nama file template untuk memuat untuk panggilan fungsi template dalam template? Misalnya<%= scope.function_template("sites/$domain/config.erb") %>
Gary

Benar. Perlu diingat bahwa Anda bekerja di Ruby, bukan DSL Puppet, jadi nama variabel (dan aturan interpolasi) berbeda. Tali Anda seharusnya <%= scope.function_template("sites/#{domain}/config.erb") %>.
jgoldschrafe

3

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


-2

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.


Fungsi boneka asli adalah hal-hal seperti fqdn_rand (), sha1 (), tagged (), dll. Fungsi Boneka kustom disimpan di bawah modul / modulename / plugins / boneka / parser / fungsi /. Bisakah ini dipanggil dari dalam templat?
sh-beta
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.