Je veux exécuter mysql_tzinfo_to_sql
chaque fois que le paquet tzinfo (sur Ubuntu Server) change. J'ai pensé que Puppet pouvait s'en occuper.
Je pensais que Puppet réagirait à un changement dans la version du package, ou sinon, à un changement d'horodatage d'un fichier contenu dans le package.
La seule façon pour moi de le faire est d'avoir une ressource sans action directe et d'avoir un exécutable en fonction.
Mes questions sont les suivantes:
- Est-il possible de définir un fichier qui n'est utilisé que pour notifier une autre ressource (telle que exec )?
- Est-il possible de définir une ressource de package de sorte qu'une autre ressource (telle que exec ) soit activée lorsque le package change ou se met à jour?
- Est-il possible de définir une ressource exec qui exécute une ligne de commande shell (avec des pipes et redirection par exemple) au lieu d'une commande du système de fichiers?
Dans l'ensemble, cela semble écrasant.
SUIVI : réponses fantastiques! Dans un souci d'exhaustivité (et pour mémoire), je dois noter ce qui suit:
- La commande shell complète d'intérêt est
mysql_tzinfo_to_sql | mysql -u root -p password
(elle charge tzinfo dans une base de données MySQL pour MySQL). - L'audit de
/etc/tzinfo
serait inutile car il s'agit simplement de la configuration du fuseau horaire local; l'objectif est de surveiller les changements dans les données tzinfo elles-mêmes (donc l'observation de/usr/share/zoneinfo
). - De même, le contenu ne serait pas la bonne chose à regarder - car il est probable qu'il ne changera pas; le mieux serait de regarder le mtime ou tout car les filetimes devraient changer après chaque mise à jour de tzinfo.
En outre, James Turnbull a tout écrit sur l'audit lors de son introduction. La référence du métaparamètre contient une brève description du fonctionnement du audit
paramètre.
Réponses:
Utilisez l'attribut d'audit pour suivre le contenu du fichier ou le numéro de version du package et déclencher la modification en vous abonnant à la ressource de package. Quelques problèmes avec cela, cela ne fonctionne pas avec --noop car le fichier state.yaml mettra à jour la version du fichier md5 checksum / package en mode --noop. Je ne sais pas s'il s'agit d'un bogue en attente, car je ne peux pas le retrouver pour le moment.
Une méthode plus fiable consiste simplement à dupliquer le fichier ailleurs et à l'utiliser pour déclencher des mises à jour (l'emplacement n'est pas important, nous suivons simplement le tzinfo d'origine comme source).
Bien entendu, la deuxième méthode ne fonctionne pas avec les packages, mais vous éviteriez les problèmes --noop et state.yaml.
En ce qui concerne la troisième question, oui, vous pouvez utiliser des tuyaux et des redirections (utilisez un titre et mettez la commande dans l'attribut de commande):
la source
Oui, vous devriez pouvoir le faire.
* exemple de code théorique
Oui, via le méta-paramètre notifier. Cependant, je ne suis pas sûr à 100% que la nouvelle fonctionnalité d'audit de puppet 2.6 déclenchera une notification si la version du package change en dehors du contrôle de puppet.
Oui, avec refreshonly => true
Oui, voyez mon exemple. Puppet exécute des commandes exec en dehors d'un shell interactif pour plus de simplicité et de sécurité. Vous pouvez demander à marionnette d'utiliser bash en mode sous-shell avec le commutateur -c, mais faites attention aux guillemets.
la source
bash -c
pour faire une redirection?bash -c
est requis pour la redirection du shell dans cet exemple. Puppet n'utilise pas de shell interactif pourexec
.je crois que j'ai pu faire fonctionner cela. voici les morceaux pertinents de mon manifeste de marionnettes:
après la première mise à jour, l'exec mysql_tzinfo est ignoré. testé en touchant / usr / share / zoneinfo / Etc / UTC, ce qui a incité mysql_tzinfo exec à s'exécuter lors de la prochaine étape.
la source
Cette question est ancienne, mais je l'ai parcourue à la recherche de quelque chose d'autre et j'ai voulu ajouter une autre réponse pour examen.
Il n'utilise pas de marionnette: Puisque nous voulons déclencher sur une installation / mise à jour RPM, pourquoi ne pas utiliser un déclencheur RPM? Il tire parti du système même utilisé pour l'installation, en l'étendant correctement de la manière pour laquelle il a été conçu.
Construire le RPM de déclenchement est très simple, et bien que ce ne soit pas amusant d'apprendre, une fois que le premier est fait, il peut être répété très facilement pour d'autres applications et conditions - ainsi, les coûts ne sont pas nuls mais les avantages l'emportent rapidement et largement sur ceux frais.
Pendant que nous sommes ici pour Puppet, et que le problème est résolu avec puppet, je crains qu'il ne tire parti d'une partie faible d'un outil pour répondre mal à une condition qui est beaucoup plus facile à déclencher avec un outil qui est déjà sur l'hôte et un outil dans lequel la plupart des admins sur la boîte auraient dû tremper leur orteil. Désolé de suggérer une solution en dehors des lignes, mais si vous vous promenez dans ce message à l'avenir comme je l'ai fait, et que le déclencheur RPM est une option pour vous, veuillez en tenir compte.
la source