Marionette - Klassen

Marionettenklassen werden als eine Sammlung von Ressourcen definiert, die zusammen gruppiert werden, um einen Zielknoten oder eine Zielmaschine in einen gewünschten Zustand zu versetzen. Diese Klassen werden in Puppet-Manifestdateien definiert, die sich in Puppet-Modulen befinden. Der Hauptzweck der Verwendung einer Klasse besteht darin, die gleiche Codewiederholung in jeder Manifestdatei oder jedem anderen Puppet-Code zu reduzieren.

Das Folgende ist ein Beispiel für eine Puppenklasse.

[root@puppetmaster manifests]# cat site.pp  
class f3backup ( 
   $backup_home   = '/backup', 
   $backup_server = 'default', 
   $myname        = $::fqdn, 
   $ensure        = 'directory', 
) { 
   include '::f3backup::common' 
   if ( $myname == '' or $myname == undef ) { 
      fail('myname must not be empty') 
   }  
   @@file { "${backup_home}/f3backup/${myname}": 
      # To support 'absent', though force will be needed 
      ensure => $ensure, 
      owner  => 'backup', 
      group  => 'backup', 
      mode   => '0644', 
      tag    => "f3backup-${backup_server}", 
   }
}

Im obigen Beispiel haben wir zwei Clients, auf denen der Benutzer vorhanden sein muss. Wie zu bemerken ist, haben wir dieselbe Ressource zweimal wiederholt. Eine Möglichkeit, nicht dieselbe Aufgabe beim Kombinieren der beiden Knoten auszuführen.

[root@puppetmaster manifests]# cat site.pp 
node 'Brcleprod001','Brcleprod002' { 
   user { 'vipin': 
      ensure => present, 
      uid    => '101', 
      shell  => '/bin/bash', 
      home   => '/home/homer', 
   } 
}

Das Zusammenführen von Knoten auf diese Weise zur Durchführung der Konfiguration ist keine gute Vorgehensweise. Dies kann einfach erreicht werden, indem eine Klasse erstellt und die erstellte Klasse in Knoten eingeschlossen wird, was wie folgt dargestellt wird.

class vipin_g01063908 { 
   user { 'g01063908': 
      ensure => present, 
      uid    => '101', 
      shell  => '/bin/bash', 
      home   => '/home/g01063908', 
   } 
}  
node 'Brcleprod001' { 
   class {vipin_g01063908:} 
}  
node 'Brcleprod002' { 
   class {vipin_g01063908:} 
}

Zu beachten ist, wie die Klassenstruktur aussieht und wie wir mithilfe des Schlüsselworts class eine neue Ressource hinzugefügt haben. Jede Syntax in Puppet hat ihre eigene Funktion. Daher hängt die Syntax, die man wählt, von den Bedingungen ab.

Parametrisierte Klasse

Wie im obigen Beispiel haben wir gesehen, wie eine Klasse erstellt und in einen Knoten aufgenommen wird. Jetzt gibt es Situationen, in denen auf jedem Knoten unterschiedliche Konfigurationen erforderlich sind, z. B. wenn auf jedem Knoten unterschiedliche Benutzer dieselbe Klasse verwenden müssen. Diese Funktion wird in Puppet mithilfe einer parametrisierten Klasse bereitgestellt. Die Konfiguration für eine neue Klasse sieht wie im folgenden Beispiel aus.

[root@puppetmaster ~]# cat /etc/puppet/manifests/site.pp 
class user_account ($username){ 
   user { $username: 
      ensure => present, 
      uid    => '101', 
      shell  => '/bin/bash', 
      home   => "/home/$username", 
   } 
}  
node 'Brcleprod002' { 
   class { user_account: 
      username => "G01063908", 
   } 
} 
node 'Brcleprod002' { 
   class {user_account: 
      username => "G01063909", 
   } 
}

Wenn wir das obige site.pp-Manifest auf Knoten anwenden, sieht die Ausgabe für jeden Knoten wie folgt aus.

Brcleprod001

[root@puppetagent1 ~]# puppet agent --test 
Info: Retrieving pluginfacts 
Info: Retrieving plugin 
Info: Caching catalog for puppetagent1.testing.dyndns.org 
Info: Applying configuration version '1419452655' 

Notice: /Stage[main]/User_account/User[homer]/ensure: created 
Notice: Finished catalog run in 0.15 seconds 
[root@brcleprod001 ~]# cat /etc/passwd | grep "vipin" 
G01063908:x:101:501::/home/G01063909:/bin/bash

Brcleprod002

[root@Brcleprod002 ~]# puppet agent --test 
Info: Retrieving pluginfacts 
Info: Retrieving plugin 
Info: Caching catalog for puppetagent2.testing.dyndns.org 
Info: Applying configuration version '1419452725' 

Notice: /Stage[main]/User_account/User[bart]/ensure: created 
Notice: Finished catalog run in 0.19 seconds 
[root@puppetagent2 ~]# cat /etc/passwd | grep "varsha" 
G01063909:x:101:501::/home/G01063909:/bin/bash

Sie können auch den Standardwert eines Klassenparameters festlegen, wie im folgenden Code gezeigt.

[root@puppetmaster ~]# cat /etc/puppet/manifests/site.pp 
class user_account ($username = ‘g01063908'){ 
   user { $username: 
      ensure => present, 
      uid    => '101', 
      shell  => '/bin/bash', 
      home   => "/home/$username", 
   } 
}  
node 'Brcleprod001' { 
   class {user_account:} 
}  
node 'Brcleprod002' { 
   class {user_account: 
      username => "g01063909", 
   } 
}