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,
}