Виклик функції ляльки з шаблону ляльок?


13

Чи може 0.24.8 шаблон лялечки викликати функцію лялька?

Я можу отримати подібний функціонал, викликавши функцію в своєму маніфесті, призначивши повернене значення змінній, а потім використовуючи lookupvar ('змінну') у шаблоні, але я хотів би вирізати середню людину.

Відповіді:


18

Всередині шаблонів у вас є доступ до об'єкта масштабу. До всіх функцій, до яких можна отримати доступ у маріонеткових маніфестах, можна отримати доступ через цей об'єкт, хоча не через те саме ім'я. Перейдіть "function_"до початку імені функції. Наприклад, тут я включив один шаблон всередині іншого:<%= scope.function_template("template2.erb") %>

http://reductivelabs.com/trac/puppet/wiki/PuppetTemplating має чудову документацію про об’єкт сфери в шаблонах. Для отримання поглибленої інформації про шаблон та функції ви можете заглянути всередину lib/puppet/parser/templatewrapper.rbта lib/puppet/parser/functions.rb.


Щиро дякую. Будьте обережні для всіх, хто використовує функцію template () у шаблоні: ви все одно маєте кваліфікувати його, як ви робите в маріонетковому маніфесті (тобто, domain.function_template ("модуль / template.erb")).
sh-beta

Чи можна використовувати змінну для імені файлу шаблону, щоб завантажити для виклику функції шаблону всередині шаблону? Напр.<%= scope.function_template("sites/$domain/config.erb") %>
Гері

Абсолютно. Зауважте, що ви працюєте в Ruby, а не в DSL-програмі Puppet, тому імена змінних (і правила інтерполяції) різні. Ваш рядок повинен бути <%= scope.function_template("sites/#{domain}/config.erb") %>.
jgoldschrafe

3

Дозвольте поширити питання також на спеціальні функції . В основному ви викликаєте власні функції так само, як і вбудовані функції (використовуючи префікс 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


-2

Я не зовсім впевнений, що ви маєте на увазі під функцією Лялька, але шаблони ляльок вбудовані в Ruby, тож ви можете робити все, що в шаблонах Ruby.


Рідні функції ляльок - це такі, як fqdn_rand (), sha1 (), тег () тощо. Спеціальні функції ляльок зберігаються під модулями / ім'ям модуля / плагінів / лялькових / аналізаторів / функцій /. Чи можна їх викликати всередині шаблону?
sh-beta
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.