Marionnette - Classes

Les classes de marionnettes sont définies comme une collection de ressources, qui sont regroupées afin d'obtenir un nœud ou une machine cible dans un état souhaité. Ces classes sont définies dans les fichiers manifestes Puppet qui se trouvent dans les modules Puppet. L'objectif principal de l'utilisation d'une classe est de réduire la même répétition de code dans n'importe quel fichier manifeste ou tout autre code Puppet.

Voici un exemple de classe Puppet.

[[email protected] 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}", 
   }
}

Dans l'exemple ci-dessus, nous avons deux clients où l'utilisateur doit exister. Comme on peut le remarquer, nous avons répété la même ressource deux fois. Une façon de ne pas faire la même tâche en combinant les deux nœuds.

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

La fusion des nœuds de cette manière pour effectuer la configuration n'est pas une bonne pratique. Ceci peut être simplement réalisé en créant une classe et en incluant la classe créée dans les nœuds, comme suit.

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

Le point à noter est à quoi ressemble la structure de classe et comment nous avons ajouté une nouvelle ressource à l'aide du mot-clé class. Chaque syntaxe de Puppet a sa propre fonctionnalité. Par conséquent, la syntaxe choisie dépend des conditions.

Classe paramétrée

Comme dans l'exemple ci-dessus, nous avons vu comment créer une classe et l'inclure dans un nœud. Maintenant, il y a des situations où nous devons avoir différentes configurations sur chaque nœud, par exemple lorsque l'on a besoin d'avoir différents utilisateurs sur chaque nœud utilisant la même classe. Cette fonctionnalité est fournie dans Puppet à l'aide d'une classe paramétrée. La configuration d'une nouvelle classe ressemblera à celle illustrée dans l'exemple suivant.

[[email protected] ~]# 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", 
   } 
}

Lorsque nous appliquons le manifeste site.pp ci-dessus sur les nœuds, la sortie de chaque nœud ressemblera à ce qui suit.

Brcleprod001

[[email protected] ~]# 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 
[[email protected] ~]# cat /etc/passwd | grep "vipin" 
G01063908:x:101:501::/home/G01063909:/bin/bash

Brcleprod002

[[email protected] ~]# 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 
[[email protected] ~]# cat /etc/passwd | grep "varsha" 
G01063909:x:101:501::/home/G01063909:/bin/bash

On peut également définir la valeur par défaut d'un paramètre de classe comme indiqué dans le code suivant.

[[email protected] ~]# 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", 
   } 
}