Puppet - Fonctions personnalisées

Comme décrit dans le chapitre précédent, la fonction fournit à l'utilisateur le privilège de développer des fonctions personnalisées. Puppet peut étendre son pouvoir d'interprétation en utilisant des fonctions personnalisées. La fonction personnalisée permet d'augmenter et d'étendre la puissance des modules Puppet et des fichiers manifestes.

Écriture d'une fonction personnalisée

Il y a peu de choses à garder à l'esprit avant d'écrire une fonction.

  • Dans Puppet, les fonctions sont exécutées par des compilateurs, ce qui signifie que toutes les fonctions s'exécutent sur Puppet master et qu'elles n'ont pas besoin de traiter avec le client Puppet pour la même chose. Les fonctions ne peuvent interagir qu'avec les agents, à condition que les informations soient sous forme de faits.

  • Le maître Puppet attrape des fonctions personnalisées, ce qui signifie qu'il faut redémarrer le maître Puppet, si l'on fait quelques changements dans la fonction Puppet.

  • La fonction sera exécutée sur le serveur, ce qui signifie que tout fichier dont la fonction a besoin doit être présent sur le serveur, et on ne peut rien faire si la fonction nécessite un accès direct à la machine cliente.

  • Il existe complètement deux types de fonctions différentes disponibles, l'une est la fonction Rvalue qui renvoie la valeur et la fonction d'instruction qui ne renvoie rien.

  • Le nom du fichier contenant la fonction doit être le même que le nom de la fonction dans le fichier. Sinon, il ne sera pas chargé automatiquement.

Emplacement pour mettre la fonction personnalisée

Toutes les fonctions personnalisées sont implémentées séparément .rbfichiers et sont répartis entre les modules. Il faut mettre des fonctions personnalisées dans lib / puppet / parser / function. Les fonctions peuvent être chargées depuis.rb fichier à partir des emplacements suivants.

  • $libdir/puppet/parser/functions
  • sous-répertoires puppet / parser / functions dans votre Ruby $ LOAD_PATH

Créer une nouvelle fonction

De nouvelles fonctions sont créées ou définies à l'aide du newfunction méthode à l'intérieur du puppet::parser::Functionsmodule. Il faut passer le nom de la fonction comme symbole ànewfunctionméthode et le code à exécuter en tant que bloc. L'exemple suivant est une fonction qui est utilisée pour écrire une chaîne dans le fichier à l'intérieur du répertoire / 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

Une fois que l'utilisateur a déclaré la fonction, elle peut être utilisée dans le fichier manifeste comme indiqué ci-dessous.

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