꼭두각시 템플릿에서 꼭두각시 함수를 호출 하시겠습니까? 수 있습니까? 매니페스트에서 함수를 호출하고 반환

0.24.8부터 Puppet 템플릿이 Puppet 함수를 호출 할 수 있습니까?

매니페스트에서 함수를 호출하고 반환 값을 변수에 할당 한 다음 템플릿에서 lookupvar ( ‘variable’)을 사용하여 비슷한 기능을 얻을 수 있지만 중간 사람을 잘라 내고 싶습니다.



답변

내부 템플릿에서는 범위 개체에 액세스 할 수 있습니다. 퍼펫 매니페스트에서 액세스 할 수있는 모든 함수는 동일한 이름이 아닌 해당 범위 개체를 통해 액세스 할 수 있습니다. "function_"함수 이름 앞에 추가 하십시오. 예를 들어, 여기에 하나의 템플릿을 다른 템플릿 안에 포함 시켰습니다.<%= scope.function_template("template2.erb") %>

http://reductivelabs.com/trac/puppet/wiki/PuppetTemplating 에는 템플릿 내부의 범위 개체에 대한 훌륭한 설명서가 있습니다 . 템플릿과 기능에 대한 정말 깊은 정보는 내부 볼 수 lib/puppet/parser/templatewrapper.rblib/puppet/parser/functions.rb.


답변

질문을 사용자 정의 함수로 확장하겠습니다 . 기본적으로, 내장 함수와 같은 방식으로 (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') %>

추가 정보 : http://projects.puppetlabs.com/issues/7991


답변

꼭두각시 함수가 무엇을 의미하는지 잘 모르겠지만 꼭두각시 템플릿에는 Ruby가 포함되어 있으므로 Ruby에서 할 수있는 템플릿에서 무엇이든 할 수 있습니다.