Odpowiedzi:
Wewnątrz szablonów masz dostęp do obiektu zakresu. Do wszystkich funkcji, do których można uzyskać dostęp w manifestach marionetkowych, można uzyskać dostęp za pośrednictwem tego obiektu zakresu, chociaż nie pod tą samą nazwą. Przejdź "function_"
na początek nazwy funkcji. Na przykład tutaj umieściłem jeden szablon w innym:<%= scope.function_template("template2.erb") %>
http://reductivelabs.com/trac/puppet/wiki/PuppetTemplating ma świetną dokumentację dotyczącą obiektu zasięgu w szablonach. Aby uzyskać naprawdę głębokie informacje o szablonie i funkcjach, możesz zajrzeć do środka lib/puppet/parser/templatewrapper.rb
i lib/puppet/parser/functions.rb
.
<%= scope.function_template("sites/$domain/config.erb") %>
<%= scope.function_template("sites/#{domain}/config.erb") %>
.
Pozwolę sobie rozszerzyć pytanie również na funkcje niestandardowe . Zasadniczo wywołujesz funkcje niestandardowe w taki sam sposób, jak funkcje wbudowane (używając prefiksu function_), ale upewnij się, że przekazałeś wszystkie parametry w tablicy:
module Puppet::Parser::Functions
newfunction(:namegoeshere, :type => :rvalue) do |args|
# ...
end
end
<%= scope.function_namegoeshere(["one","two"]) %>
Pamiętaj, że działa również bez kwadratowych nawiasów klamrowych w niektórych wersjach Puppet. Więcej informacji: http://docs.puppetlabs.com/guides/custom_functions.html#referencing-custom-functions-in-templates
Inną ważną rzeczą jest błąd (lub funkcja) w Puppet 2.6 lub starszym, w którym funkcje niestandardowe nie są automatycznie ładowane do zakresu szablonu. Musisz załadować je ręcznie , w przeciwnym razie funkcja nie zostanie znaleziona!
<% Puppet::Parser::Functions::function('namegoeshere') %>
Więcej informacji: http://projects.puppetlabs.com/issues/7991
Nie jestem do końca pewien, co masz na myśli przez funkcję marionetki, ale szablony marionetek są osadzone w Ruby, więc możesz zrobić wszystko w szablonach, co możesz w Ruby.