Une boucle sur plusieurs tâches possibles
j'ai créé un playbook qui crée une instance cloud et installe des programmes sur l'instance. Je veux lancer ce playbook plusieurs fois (sans utiliser de script bash). Est-il possible d'utiliser une boucle pour boucler ces deux tâches ensemble (c'est-à-dire une boucle pour deux tâches?). Tout ce que j'ai pu trouver jusqu'à présent est l'une boucle pour chaque tâche
3 réponses
non, ce n'est pas possible actuellement. with_items
utilisé pour travailler avec le include
déclaration dans les versions précédentes D'Ansible mais a malheureusement été abandonné.
bien qu'il sera ramené à Ansible 2.0, voir la diapositive 14/15 de Quoi de neuf à V2 - AnsibleFest London 2015
Vous pourriez essayer de travailler avec le branche v2 de github, la fonction devrait être disponible là-bas.
Ce que vous pouvez faire avec 1.9.1 est de déplacer vos tâches dans un rôle et de faire référence à ce rôle plusieurs fois dans votre playbook.
Une mise à jour:
dans 2.0 vous pouvez utiliser
with_
boucles et tâche inclut (mais pas playbook comprend), ce qui ajoute la possibilité d'une boucle sur l'ensemble des tâches d'un seul coup. Il y a quelques choses que vous devez garder à l'esprit, une tâche incluse qui a son proprewith_
boucle remplacer la valeur de l'élément spécial variable. Donc, si vous voulez accéder à la fois à l'inclure l'élément et la tâche actuelle de l'élément, vous devez utiliserset_fact
créer un alias à l'extérieur un.:- include: test.yml with_items: - 1 - 2 - 3
dans l'essai.yml:
- set_fact: outer_loop="{{item}}" - debug: msg="outer item={{outer_loop}} inner item={{item}}" with_items: - a - b - c
Source: Ansible Docs
j'ai réussi à le faire en incluant récursivement le même fichier yaml basé sur une condition. Voici l'essentiel:https://gist.github.com/ParagDoke/5ddfc3d5647ce9b0110d1b9790090092. Effectivement, dans votre playbook, incluez un fichier avec quelques vars:
- name: Invoke poller
vars:
some_condition: '"failed" not in response.content and response.json.status=="running"'
include_tasks: status-poller.yml
Puis status-poller.yml
, inclure lui-même:
- include_tasks: includes/status-poller.yml
when: some_condition