Marionette - Typ und Anbieter

Puppentypen werden für das individuelle Konfigurationsmanagement verwendet. Puppet hat verschiedene Typen wie einen Diensttyp, einen Pakettyp, einen Anbietertyp usw. Wobei jeder Typ Anbieter hat. Der Anbieter übernimmt die Konfiguration auf verschiedenen Plattformen oder Tools. Beispielsweise hat der Pakettyp Eignungs-, Yum-, U / min- und DGM-Anbieter. Es gibt viele Typen und Puppet deckt ein gutes Element zur Verwaltung der Spektrumkonfiguration ab, das verwaltet werden muss.

Puppet verwendet Ruby als Basissprache. Alle vorhandenen Puppentypen und Anbieter sind in Ruby-Sprache geschrieben. Da es dem Standardcodierungsformat folgt, können Sie sie einfach wie im Beispiel für Repo gezeigt erstellen, das Repositorys verwaltet. Hier erstellen wir Type Repo und Provider's SVN und Git. Der erste Teil des Repo-Typs ist der Typ selbst. Die Typen werden normalerweise in lib / puppet / type gespeichert. Dazu erstellen wir eine Datei namensrepo.rb.

$ touch repo.rb

Fügen Sie der Datei den folgenden Inhalt hinzu.

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

Im obigen Skript haben wir einen Block erstellt "Puppet::Type.newtype(:repo) do", das einen neuen Typ mit dem Namen repo erstellt. Dann haben wir @doc, das beim Hinzufügen der gewünschten Detailebene hilft. Die nächste Anweisung lautet" Sicherstellbar ". Es wird eine grundlegende Eigenschaft" Sicherstellen "erstellt. Der Puppentyp wird verwendet ensure Eigenschaft, um den Status des Konfigurationselements zu bestimmen.

Beispiel

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

Die Sicherstellungsanweisung weist Puppet an, drei Methoden auszuschließen: Erstellen, Zerstören und Vorhandensein im Anbieter. Diese Methoden bieten die folgenden Funktionen:

  • Ein Befehl zum Erstellen einer Ressource
  • Ein Befehl zum Löschen einer Ressource
  • Ein Befehl zum Überprüfen der Existenz einer Ressource

Dann müssen wir nur noch diese Methoden und ihren Inhalt angeben. Puppet erstellt die unterstützende Infrastruktur um sie herum.

Als nächstes definieren wir einen neuen Parameter namens 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

Die Quelle teilt dem Repo-Typ mit, wo das Quell-Repository abgerufen / geklont / ausgecheckt werden soll. In diesem Fall verwenden wir auch einen Hook namens validate. Im Provider-Bereich haben wir git und svn definiert, die die Gültigkeit des von uns definierten Repositorys überprüfen.

Schließlich haben wir im Code einen weiteren Parameter namens path definiert.

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

Dies ist der Werttyp, der angibt, wo der neu abgerufene Code abgelegt werden soll. Verwenden Sie auch hier erneut den Validierungs-Hook, um einen Block zu erstellen, der den Wert der Angemessenheit überprüft.

Anwendungsfall des Subversion-Anbieters

Beginnen wir mit dem Subversion-Anbieter, der den oben erstellten Typ verwendet.

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

Im obigen Code haben wir im Voraus definiert, dass wir brauchen fileutils Bibliothek benötigen 'fileutils' von denen wir Methode verwenden werden.

Als nächstes haben wir den Anbieter als Block Puppet :: Type.type (: repo) .provide (: svn) do definiert, der Puppet mitteilt, dass dies der Anbieter für den Typ repo ist.

Dann haben wir hinzugefügt descDadurch kann dem Anbieter eine Dokumentation hinzugefügt werden. Wir haben auch den Befehl definiert, den dieser Anbieter verwenden wird. In der nächsten Zeile überprüfen wir die Funktionen von Ressourcen wie Erstellen, Löschen und Vorhandensein.

Eine Ressource erstellen

Sobald alle oben genannten Schritte ausgeführt sind, erstellen wir eine Ressource, die in unseren Klassen und Manifestdateien verwendet wird, wie im folgenden Code gezeigt.

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