Відповіді:
Всередині шаблонів у вас є доступ до об'єкта масштабу. До всіх функцій, до яких можна отримати доступ у маріонеткових маніфестах, можна отримати доступ через цей об'єкт, хоча не через те саме ім'я. Перейдіть "function_"
до початку імені функції. Наприклад, тут я включив один шаблон всередині іншого:<%= scope.function_template("template2.erb") %>
http://reductivelabs.com/trac/puppet/wiki/PuppetTemplating має чудову документацію про об’єкт сфери в шаблонах. Для отримання поглибленої інформації про шаблон та функції ви можете заглянути всередину lib/puppet/parser/templatewrapper.rb
та lib/puppet/parser/functions.rb
.
<%= scope.function_template("sites/$domain/config.erb") %>
<%= scope.function_template("sites/#{domain}/config.erb") %>
.
Дозвольте поширити питання також на спеціальні функції . В основному ви викликаєте власні функції так само, як і вбудовані функції (використовуючи префікс function_), але переконайтеся, що ви передаєте всі параметри в масив:
module Puppet::Parser::Functions
newfunction(:namegoeshere, :type => :rvalue) do |args|
# ...
end
end
<%= scope.function_namegoeshere(["one","two"]) %>
Зверніть увагу, він також працює без квадратних дужок на деяких версіях ляльок. Більше інформації: http://docs.puppetlabs.com/guides/custom_functions.html#referencing-custom-functions-in-templates
Ще одна важлива річ - помилка (або функція) у Puppet 2.6 або новіших версіях, коли спеціальні функції не завантажуються автоматично в область шаблону. Завантажувати їх потрібно вручну , інакше функція не знайдеться!
<% Puppet::Parser::Functions::function('namegoeshere') %>
Більше інформації: http://projects.puppetlabs.com/isissue/7991
Я не зовсім впевнений, що ви маєте на увазі під функцією Лялька, але шаблони ляльок вбудовані в Ruby, тож ви можете робити все, що в шаблонах Ruby.