Question

J'ai ce nœud.pp et je me demande comment Puppet va l'exécuter.

node 'agent.puppet.demo' {
    include ssh
    include postfix
    include mysql
    include apache
}

Sur le nœud d'agent, lorsque j'exécute ceci:

$ puppetd -t -d

La marionnette ne l'exécute pas de son sens séquentiellement, elle n'exécute pas d'abord SSH, puis postfix, ...

Est-ce que quelqu'un sait pourquoi c'est comme ça? Est-ce parce qu'il est appelé «langage déclaratif» où l'ordre d'exécution n'a pas vraiment d'importance?

Si tel est le cas, alors je peux juste une certaine manière, déclarer ce que je veux et Puppet déterminera comment l'exécuter?

Était-ce utile?

La solution

Avertissement: Je suis l'un des développeurs de Puppet.

Il l'exécutera dans un ordre cohérent mais imprévisible, à l'exception de toute dépendance explicite ou implicite dans le code. Les dépendances explicites sont des choses que vous spécifiez avec le subscribe ou require Metaparameters. Les dépendances implicites proviennent du automatique fonctionnalité, qui fait des choses comme appliquer automatiquement les ressources de fichiers dans un ordre raisonnable.

La raison de cela n'est pas tant que la langue est déclarative, mais plutôt la langue est déclarative car l'ordre n'a pas d'importance pour la plupart des choses dans l'espace de problème sous-jacent.

Par exemple, il n'y a vraiment pas beaucoup de lien entre la gestion de SSH et la gestion de PostFix pour la plupart des gens - vous pouvez faire le travail dans l'un ou l'autre ordre, ou même en même temps, et tout fonctionnerait de la même manière.

Cela nous libère pour améliorer les choses de beaucoup de façons que "tout est dans l'ordre linéaire". Nous travaillons, par exemple, pour accélérer les installations de packages tout en respectant les dépendances explicites à l'extérieur des packages.

Ainsi, l'ordre d'exécution et de dépendances suit le problème sous-jacent, et nous avons conservé cette propriété pour pouvoir faire plus de choses impressionnantes.

L'objectif est exactement ce que vous dites à la fin: que vous déclarez ce que vous voulez, et nous nous occupons de tous les détails pour y arriver. Avec le temps, nous espérons être beaucoup plus intelligents à propos des dépendances logiques, vous devez donc dire encore moins pour l'obtenir aussi.

Autres conseils

Avertissement: je suis encore assez nouveau dans Puppet :)

La clé est de penser à tout en termes de dépendances. Pour les dépendances de classe, j'aime utiliser la syntaxe de classe ['a'] -> class ['b']. Disons que vous avez une classe Tomcat qui nécessite une classe JDK qui télécharge / installe le Sun JDK d'Oracle. Dans votre classe Tomcat, vous pouvez spécifier cela avec

Classe ['jdk'] -> classe ['tomcat'

Alternativement, vous pouvez déclarer une classe avec un méta-paramètre exige plutôt que d'utiliser include.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top