답변:
내부 템플릿에서는 범위 개체에 액세스 할 수 있습니다. 퍼펫 매니페스트에서 액세스 할 수있는 모든 함수는 동일한 이름이 아닌 해당 범위 개체를 통해 액세스 할 수 있습니다. "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"]) %>
일부 Puppet 버전에서는 대괄호 없이도 작동합니다. 추가 정보 : http://docs.puppetlabs.com/guides/custom_functions.html#referencing-custom-functions-in-templates
또 다른 중요한 점은 Puppet 2.6 이상 에 사용자 지정 함수가 템플릿 범위에 자동으로로드되지 않는 버그 (또는 기능) 가 있다는 것입니다 . 수동으로 로드해야합니다 . 그렇지 않으면 기능을 찾을 수 없습니다!
<% Puppet::Parser::Functions::function('namegoeshere') %>
꼭두각시 함수가 무엇을 의미하는지 잘 모르겠지만 꼭두각시 템플릿에는 Ruby가 포함되어 있으므로 Ruby에서 할 수있는 템플릿에서 무엇이든 할 수 있습니다.