Chamar a função Puppet do template Puppet?

11

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

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

    
por sh-beta 01.07.2009 / 20:30

3 respostas

18

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

O

link tem uma ótima documentação sobre o objeto de escopo dentro dos modelos. Para informações realmente profundas sobre modelos e funções, você pode consultar lib/puppet/parser/templatewrapper.rb e lib/puppet/parser/functions.rb .

    
por 01.07.2009 / 23:47
2

Deixe-me estender a pergunta também para funções personalizadas . Basicamente, você chama funções customizadas da mesma maneira que funções internas (usando function_ prefixo), 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"]) %>

Por favor, note que também funciona sem as chaves quadradas em algumas versões do Puppet. Mais informações: link

Outra coisa importante é que existe um bug (ou recurso) no Puppet 2.6 ou mais antigo em que as funções personalizadas não são carregadas automaticamente o 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: link

    
por 26.04.2012 / 14:35
-2

Eu não tenho certeza do que você quer dizer com a função Puppet, mas os templates de bonecos são incorporados ao Ruby, então você pode fazer qualquer coisa nos templates que puder em Ruby.

    
por 01.07.2009 / 21:29

Tags