Marionnette - Type et fournisseur

Les types de marionnettes sont utilisés pour la gestion de la configuration individuelle. Puppet a différents types comme un type de service, un type de package, un type de fournisseur, etc. Dans lequel chaque type a des fournisseurs. Le fournisseur gère la configuration sur différentes plates-formes ou outils. Par exemple, le type de package a des fournisseurs aptitude, yum, rpm et DGM. Il existe de nombreux types et Puppet couvre un bon élément de gestion de la configuration du spectre qui doit être géré.

Puppet utilise Ruby comme langue de base. Tous les types et fournisseurs de marionnettes présents sont écrits en langage Ruby. Comme il suit le format d'encodage standard, on peut simplement les créer comme indiqué dans l'exemple pour repo qui gère les référentiels. Ici, nous allons créer un référentiel de types et des svn et git des fournisseurs. La première partie du type de référentiel est le type lui-même. Les types sont généralement stockés dans lib / puppet / type. Pour cela, nous allons créer un fichier appelérepo.rb.

$ touch repo.rb

Ajoutez le contenu suivant dans le fichier.

Puppet::Type.newtype(:repo) do  
@doc = "Manage repos"  
   Ensurable   
   newparam(:source) do 
      desc "The repo source"  
      
      validate do |value| 
         if value =~ /^git/ 
            resource[:provider] = :git 
         else 
            resource[:provider] = :svn 
         end 
      end 
      isnamevar 
   end  

   newparam(:path) do 
      desc "Destination path"  
      validate do |value| 
         unless value =~ /^\/[a-z0-9]+/ 
            raise ArgumentError , "%s is not a valid file path" % value 
         end 
      end 
   end 
end

Dans le script ci-dessus, nous avons créé un bloc "Puppet::Type.newtype(:repo) do"qui crée un nouveau type avec le nom repo. Ensuite, nous avons @doc qui aide à ajouter le niveau de détails que l'on veut ajouter. L'instruction suivante est Ensurable; elle crée une propriété de base assur. ensure propriété pour déterminer l'état de l'élément de configuration.

Exemple

service { "sshd": 
   ensure => present, 
}

L'instruction ensure indique à Puppet d'exclure trois méthodes: créer, détruire et exister dans le fournisseur. Ces méthodes fournissent les fonctionnalités suivantes -

  • Une commande pour créer une ressource
  • Une commande pour supprimer une ressource
  • Une commande pour vérifier l'existence d'une ressource

Il ne reste plus qu'à spécifier ces méthodes et leur contenu. Puppet crée l'infrastructure de soutien autour d'eux.

Ensuite, nous définissons un nouveau paramètre appelé source.

newparam(:source) do 
   desc "The repo source" 
   validate do |value| 
      if value =~ /^git/ 
         resource[:provider] = :git 
      else 
         resource[:provider] = :svn 
      end 
   end 
   isnamevar 
end

La source indiquera au type de référentiel où récupérer / cloner / extraire le référentiel source. En cela, nous utilisons également un hook appelé validate. Dans la section provider, nous avons défini git et svn qui vérifient la validité du référentiel que nous avons défini.

Enfin, dans le code, nous avons défini un autre paramètre appelé path.

newparam(:path) do 
   desc "Destination path" 
   validate do |value| 
      unless value =~ /^\/[a-z0-9]+/ 
         raise ArgumentError , "%s is not a valid file path" % value 
      end

Il s'agit du type de valeur qui spécifie où placer le nouveau code récupéré. Ici, utilisez à nouveau le crochet de validation pour créer un bloc qui vérifie la valeur de pertinence.

Cas d'utilisation du fournisseur Subversion

Commençons par le fournisseur de subversion en utilisant le type créé ci-dessus.

require 'fileutils' 
Puppet::Type.type(:repo).provide(:svn) do 
   desc "SVN Support"  
   
   commands :svncmd => "svn" 
   commands :svnadmin => "svnadmin"  
   
   def create 
      svncmd "checkout", resource[:name], resource[:path] 
   end  
   
   def destroy 
      FileUtils.rm_rf resource[:path] 
   end  
    
   def exists? 
      File.directory? resource[:path] 
   end 
end

Dans le code ci-dessus, nous avons défini à l'avance ce dont nous avons besoin fileutils bibliothèque, exiger 'fileutils' dont nous allons utiliser la méthode.

Ensuite, nous avons défini le fournisseur comme bloc Puppet :: Type.type (: repo) .provide (: svn) do qui indique à Puppet qu'il s'agit du fournisseur du type appelé repo.

Ensuite, nous avons ajouté descce qui permet d'ajouter de la documentation au fournisseur. Nous avons également défini la commande que ce fournisseur utilisera. Dans la ligne suivante, nous vérifions les fonctionnalités des ressources telles que créer, supprimer et exister.

Créer une ressource

Une fois que tout ce qui précède est fait, nous créerons une ressource qui sera utilisée dans nos classes et nos fichiers manifestes comme indiqué dans le code suivant.

repo { "wp": 
   source => "http://g01063908.git.brcl.org/trunk/", 
   path => "/var/www/wp", 
   ensure => present, 
}