꼭두각시 템플릿에서 꼭두각시 함수를 호출 하시겠습니까?


13

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

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

답변:


18

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

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


감사합니다 템플릿에서 template () 함수를 사용하는 사람에게주의 할 점 : 꼭두각시 매니페스트 (예 : scope.function_template ( "module / template.erb"))에서와 같이 자격을 부여해야합니다.
sh-beta

템플릿 파일 내에서 템플릿 함수 호출을 위해로드 할 템플릿 파일 이름에 변수를 사용할 수 있습니까? 예<%= scope.function_template("sites/$domain/config.erb") %>
게리

물론. Puppet의 DSL이 아니라 Ruby에서 작업하고 있으므로 변수 이름 (및 보간 규칙)이 다릅니다. 문자열은이어야합니다 <%= 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"]) %>

일부 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


-2

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


네이티브 퍼펫 함수는 fqdn_rand (), sha1 (), tagged () 등입니다. 사용자 정의 퍼펫 함수는 modules / modulename / plugins / puppet / parser / functions /에 저장됩니다. 템플릿 내에서 이들을 호출 할 수 있습니까?
sh-beta
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.