Marioneta - Funciones personalizadas

Como se describe en el capítulo anterior, la función proporciona al usuario el privilegio de desarrollar funciones personalizadas. Puppet puede ampliar su poder de interpretación mediante el uso de funciones personalizadas. La función personalizada ayuda a aumentar y extender el poder de los módulos Puppet y los archivos de manifiesto.

Función personalizada de escritura

Hay algunas cosas que hay que tener en cuenta antes de escribir una función.

  • En Puppet, las funciones son ejecutadas por compiladores, lo que significa que todas las funciones se ejecutan en Puppet master y no necesitan tratar con ninguno de los clientes Puppet para el mismo. Las funciones solo pueden interactuar con los agentes, siempre que la información sea en forma de hechos.

  • Puppet master detecta funciones personalizadas, lo que significa que es necesario reiniciar el Puppet master, si se hacen algunos cambios en la función Puppet.

  • La función se ejecutará en el servidor, lo que significa que cualquier archivo que necesite la función debe estar presente en el servidor, y no se puede hacer nada si la función requiere acceso directo a la máquina cliente.

  • Hay disponibles dos tipos de funciones completamente diferentes, una es la función Rvalue que devuelve el valor y la función de instrucción que no devuelve nada.

  • El nombre del archivo que contiene la función debe ser el mismo que el nombre de la función en el archivo. De lo contrario, no se cargará automáticamente.

Ubicación para poner función personalizada

Todas las funciones personalizadas se implementan por separado .rbarchivos y se distribuyen entre módulos. Es necesario poner funciones personalizadas en lib / puppet / parser / function. Las funciones se pueden cargar desde.rb archivo de las siguientes ubicaciones.

  • $libdir/puppet/parser/functions
  • subdirectorios puppet / parser / functions en su Ruby $ LOAD_PATH

Crear una nueva función

Las nuevas funciones se crean o definen utilizando el newfunction método dentro del puppet::parser::Functionsmódulo. Es necesario pasar el nombre de la función como símbolo anewfunctionmétodo y el código para ejecutar como un bloque. El siguiente ejemplo es una función, que se usa para escribir una cadena en el archivo dentro del directorio / 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

Una vez que el usuario ha declarado la función, se puede usar en el archivo de manifiesto como se muestra a continuación.

write_line_to_file('/user/vipin.txt, "Hello vipin!")