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

16
demandé sur AverageWorker 2015-06-11 18:36:37

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

enter image description here

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.

20
répondu udondan 2015-06-11 16:20:58

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 propre with_ 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 utiliser set_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

19
répondu Wtower 2016-02-01 10:45:39

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
0
répondu Parag Doke 2018-10-04 20:24:12