Chamar a função Puppet do modelo Puppet?


13

A partir de 0.24.8, um modelo Puppet pode chamar uma função Puppet?

Posso obter funcionalidades semelhantes chamando a função no meu manifesto, atribuindo o valor de retorno a uma variável e, em seguida, usando a lookupvar ('variável') no modelo, mas gostaria de cortar o intermediário.

Respostas:


18

Nos modelos internos, você tem acesso a um objeto de escopo. Todas as funções que você pode acessar nos manifestos de fantoches podem ser acessadas por meio desse objeto de escopo, embora não pelo mesmo nome. Anexar "function_"ao início do nome da função. Por exemplo, aqui incluí um modelo dentro de outro:<%= scope.function_template("template2.erb") %>

http://reductivelabs.com/trac/puppet/wiki/PuppetTemplating possui excelente documentação sobre o objeto de escopo nos modelos. Para informações realmente profundas sobre modelos e funções, você pode procurar por dentro lib/puppet/parser/templatewrapper.rbe por lib/puppet/parser/functions.rb.


Ótimo, obrigado. Cuidado para quem usa a função template () em um modelo: você ainda precisa qualificá-lo como em um manifesto de fantoche (por exemplo, scope.function_template ("module / template.erb")).
sh-beta

É possível usar uma variável para o nome do arquivo de modelo carregar para a chamada de função do modelo dentro do modelo? Exemplo<%= scope.function_template("sites/$domain/config.erb") %>
Gary

Absolutamente. Lembre-se de que você está trabalhando no Ruby, não no DSL do Puppet, portanto os nomes das variáveis ​​(e regras de interpolação) são diferentes. Sua string deve ser <%= scope.function_template("sites/#{domain}/config.erb") %>.
precisa saber é o seguinte

3

Deixe-me estender a pergunta também para funções personalizadas . Basicamente, você chama funções personalizadas da mesma maneira que as funções internas (usando o prefixo da função_), mas certifique-se de passar todos os parâmetros em uma matriz:

module Puppet::Parser::Functions
  newfunction(:namegoeshere, :type => :rvalue) do |args|
    # ...
  end
end

<%= scope.function_namegoeshere(["one","two"]) %>

Observe que ele também funciona sem colchetes em algumas versões do Puppet. Mais informações: http://docs.puppetlabs.com/guides/custom_functions.html#referencing-custom-functions-in-templates

Outra coisa importante é que há um bug (ou recurso) no Puppet 2.6 ou mais antigo, em que funções personalizadas não são carregadas automaticamente no escopo do modelo. Você precisa carregá-los manualmente , caso contrário, a função não será encontrada!

<% Puppet::Parser::Functions::function('namegoeshere') %>

Mais informações: http://projects.puppetlabs.com/issues/7991


-2

Não tenho muita certeza do que você quer dizer com uma função Puppet, mas os modelos de fantoches são incorporados ao Ruby, para que você possa fazer qualquer coisa nos modelos que puder no Ruby.


Funções nativas de fantoches são coisas como fqdn_rand (), sha1 (), etiquetadas (), etc. As funções personalizadas de fantoches são armazenadas nos módulos / nome do módulo / plugins / fantoches / analisador / funções /. Eles podem ser chamados de dentro de um modelo?
sh-beta
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.