Je dispose d'un ensemble de fichiers de configuration qui doivent être déployés sur plusieurs emplacements sur chaque serveur, chacun avec un contenu différent, cependant ils partagent tous la même structure d'emplacement. J'essaie de réduire la quantité de réplication dans mes manifestes en créant une classe commune qui peut être utilisée plusieurs fois.
Voici un exemple simplifié des structures de fichiers:
/home/bob/config/files.cfg
/home/bob/config/settings.cfg
/home/sue/config/files.cfg
/home/sue/config/settings.cfg
/home/ann/config/files.cfg
/home/ann/config/settings.cfg
Et voici le manifeste que j'ai écrit.
class config-generic {
file { "/home/$name/config/files.cfg":
owner => $name,
group => $name,
source => "puppet://puppet.domain.com/files/home/$name/config/files.cfg",
mode => 644,
}
file { "/home/$name/config/settings.cfg":
owner => $name,
group => $name,
source => "puppet://puppet.domain.com/files/home/$name/config/settings.cfg",
mode => 644,
}
}
Lors de la première utilisation de la classe, cela fonctionne bien.
node "client1", "client2" {
class {'config-generic':
name => 'bob',
}
}
Cependant, lorsque je viens à utiliser la classe à nouveau, une erreur se produit car la classe est déjà définie.
(Erreur 400 sur le SERVEUR : La définition en double : La classe [config-generic] est déjà définie)
node "client1", "client2" {
class {'config-generic':
name => 'bob',
}
class {'config-generic':
name => 'sue',
}
}
Question: Je comprends le problème - cependant, quelle est une meilleure façon de réduire la réplication dans mes manifestes? J'essaie d'éviter de devoir définir une entrée 'fichier' pour chaque utilisateur pour chaque fichier.