Puppet - funções personalizadas
Conforme descrito no capítulo anterior, a função fornece ao usuário o privilégio de desenvolver funções personalizadas. O Puppet pode estender seu poder de interpretação usando funções personalizadas. A função personalizada ajuda a aumentar e estender o poder dos módulos do Puppet e arquivos de manifesto.
Escrevendo Função Personalizada
Existem algumas coisas que é preciso ter em mente antes de escrever uma função.
No Puppet, as funções são executadas por compiladores, o que significa que todas as funções são executadas no mestre Puppet e não precisam lidar com nenhum cliente do Puppet para o mesmo. As funções só podem interagir com os agentes, desde que as informações sejam na forma de fatos.
O Puppet master captura funções personalizadas, o que significa que é necessário reiniciar o Puppet master, se alguém fizer algumas alterações na função do Puppet.
A função será executada no servidor, o que significa que qualquer arquivo de que a função precisa deve estar presente no servidor, e não se pode fazer nada se a função requer acesso direto à máquina cliente.
Existem dois tipos diferentes de funções disponíveis, uma é a função Rvalue que retorna o valor e a função de instrução que não retorna nada.
O nome do arquivo que contém a função deve ser igual ao nome da função no arquivo. Caso contrário, ele não será carregado automaticamente.
Local para colocar a função personalizada
Todas as funções personalizadas são implementadas separadamente .rbarquivos e são distribuídos entre os módulos. É necessário colocar funções personalizadas em lib / puppet / parser / function. As funções podem ser carregadas de.rb arquivo dos seguintes locais.
- $libdir/puppet/parser/functions
- subdiretórios puppet / parser / functions em seu Ruby $ LOAD_PATH
Criação de uma nova função
Novas funções são criadas ou definidas usando o newfunction método dentro do puppet::parser::Functionsmódulo. É necessário passar o nome da função como um símbolo paranewfunctionmétodo e o código a ser executado como um bloco. O exemplo a seguir é uma função, que é usada para gravar uma string no arquivo dentro do diretório / user.
module Puppet::Parser::Functions
newfunction(:write_line_to_file) do |args|
filename = args[0]
str = args[1]
File.open(filename, 'a') {|fd| fd.puts str }
end
end
Uma vez que o usuário tenha a função declarada, ela pode ser usada no arquivo de manifesto conforme mostrado abaixo.
write_line_to_file('/user/vipin.txt, "Hello vipin!")