Ansible Faire Tâche Si Apt Paquet Est Manquant
Je suis à la recherche de faire une série de tâches si un paquet apt est manquant.
par exemple:
si graphite de carbone n'est PAS installé:
- apt: name=debconf-utils state=present
- shell: echo 'graphite-carbon/postrm_remove_databases boolean false' | debconf-set-selections
- apt: name=debconf-utils state=absent
un autre exemple:
si statsd n'est PAS installé:
- file: path=/tmp/build state=directory
- shell: cd /tmp/build ; git clone https://github.com/etsy/statsd.git ; cd statsd ; dpkg-buildpackage
- shell: dpkg -i /tmp/build/statsd*.deb
Comment je commence à craquer ce?
Je pense peut-être que je peux faire un -shell: dpkg -l|grep <package name>
et capturer le code de retour d'une certaine manière.
- Vous ne devez pas utiliser
shell
module tellement. Votre tablettes playbook ne sont pas idempotent. Au lieu de courir debconf de commande, vous devez utiliser son module approprié, comme le montre ici docs.ansible.com/debconf_module.html - Je vous remercie. Très utile info.
- Simplement de commutation à l'aide d'un module qui fait la même chose à ne pas faire de votre playbook idempotent; les deux choses ne sont pas liés. Il peut être préférable d'utiliser un module si l'on est disponible, mais ce raisonnement est faux.
Vous devez vous connecter pour publier un commentaire.
Il ressemble à ma solution est de travail.
Ceci est un exemple de la façon dont je avoir de travail:
Voici un autre exemple:
...et un de plus
Je pense que vous êtes sur la bonne voie avec la
dpkg | grep
, seulement que le code de retour sera0
en tout cas. Mais vous pouvez simplement cocher la sortie.Vous pouvez utiliser le package_facts module (nécessite Ansible 2.5):
Je suis un peu en retard pour cette partie, mais voici un autre exemple qui utilise les codes de sortie - assurez-vous explicitement à l'état voulu de texte dans le dpkg-les résultats de la requête: