2 votes

Placement des variables dans le module Puppet

J'ai un module Puppet pour configurer plusieurs PU Gigaspaces. Chacune d'entre elles a un certain nombre de variables à placer dans les modèles de fichiers de configuration. Nous utilisons également plusieurs environnements différents, de sorte que ces variables sont répétées plusieurs fois pour contenir les valeurs de chaque environnement.

Ma question est de savoir quel est le meilleur endroit pour stocker ces variables ? Une classe qui leur est propre, un .pp externe que j'importe, ou autre chose ?

2voto

eric sorenson Points 971

Je suis un grand fan de l'utilisation d'un classificateur de nœuds externes pour le réglage variable=value au niveau de la lunette supérieure. De cette façon, vous pouvez utiliser un vrai magasin de données et une logique de programmation pour déterminer ce que les valeurs devraient être pour un noeud donné, plutôt que d'empiler un tas de conditionnels en langage Puppet dans un fichier de type variables.pp le type de fichier. L'héritage et le scoping sont deux domaines importants de Puppet qui ne fonctionnent pas comme beaucoup de gens l'espèrent, et qui ont leurs propres réserves et problèmes même si vous savez à quoi vous attendre ; sans nœuds externes, vous aurez besoin de l'un ou des deux.

La façon dont un classificateur de nœuds externe fonctionne est que vous configurez le Puppet.conf de votre puppetmaster pour l'exécuter :

[master]
node_terminus = exec
external_nodes = /path/to/my/classifier.rb

Le maître l'exécute chaque fois qu'un client se connecte avec comme argument de ligne de commande le nom du certificat du client qui se connecte. Votre code fait tout ce dont vous avez besoin et renvoie YAML avec une liste de classes: qui doit être inclus pour le nœud et une liste de parameters: qui sont définies comme des variables de premier plan à utiliser dans les manifestes et les modèles.

Il y a quelques exemples de classificateurs dans le répertoire ext/ de la distribution source. C'est une excellente façon de résoudre le problème des "valeurs par défaut raisonnables, plus des surcharges là où j'en ai besoin".

1voto

freiheit Points 14144

Une grande partie de ce que vous demandez relève plus de la convention que des exigences linguistiques strictes... Le langage est suffisamment souple pour permettre de faire les choses de plusieurs manières différentes.

Si tous les serveurs sont configurés de la même manière, il devrait être possible d'avoir une seule classe "gigaspace" avec les variables définies en haut.

Si vos besoins sont plus complexes qu'une simple classe de serveur, je créerais un module "gigaspace" avec une classe commune contenant des variables héritées par les classes ayant besoin de ces variables. Dans gigaspace/manifests, il y aurait un "init.pp" contenant " class gigaspace {...} ", et ensuite un "common.pp" contenant " class gigaspace::common {...} ". Ensuite, dans toutes les classes où j'ai besoin d'accéder à ces variables, j'hérite de la classe commune, comme " class gigaspace::master inherits gigaspace::common { ... } ".

Si vous n'héritez pas de l'autre classe, il est difficile d'accéder aux variables d'une autre classe, surtout à partir d'un modèle. Avec une inclusion directe, vous pouvez cependant obtenir un accès en lecture seule en spécifiant le nom entier.

1voto

Kasper Holdum Points 4173

Il y a deux recommandations que je vois couramment pour cela. La première consiste à utiliser un classificateur de nœuds externe, comme l'a suggéré Eric Sorenson. L'autre est d'utiliser extlookup. Extlookup est facile à utiliser et est inclus avec Puppet à partir de la version 2.6.1. J'en suis satisfait.

0voto

Riguez Points 3734

Vous pouvez avoir un manifeste variables.pp à l'intérieur de votre module qui est appelé par vos autres modules. C'est la chose la plus courante que j'ai vue. Pour les variables d'environnement, je jetterais un coup d'œil à certains faits de facter et verrais si vous pouvez les utiliser. Si vous pouvez poster un exemple de votre module, je pourrai peut-être vous donner plus de détails.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X