J'ai créé un playbook Ansible qui crée une instance cloud, puis installe certains programmes sur l'instance. Je veux exécuter ce playbook plusieurs fois (sans utiliser de script bash). Est-il possible d'utiliser une boucle pour boucler sur ces deux tâches ensemble (I.E. Une boucle pour deux tâches?). Tout ce que j'ai pu trouver jusqu'à présent, c'est une boucle pour chaque tâche individuelle
Non, ce n'est actuellement pas possible. with_items
fonctionnait avec l'instruction include
dans les versions précédentes d'Ansible mais a malheureusement été abandonné.
Bien qu'il soit ramené dans Ansible 2.0, voir la diapositive 14/15 de Quoi de neuf dans v2 - AnsibleFest London 2015
Vous pouvez essayer de travailler avec la branche v2 de github , la fonctionnalité devrait y être disponible.
Ce que vous pouvez faire avec 1.9.1 est de déplacer vos tâches dans un rôle et de référencer ce rôle plusieurs fois dans votre playbook.
Une mise à jour:
Dans 2.0, vous pouvez utiliser
with_
boucles et tâches incluent (mais pas les playbooks inclus), cela ajoute la possibilité de parcourir l'ensemble des tâches en une seule fois. Il y a deux ou trois choses que vous devez garder à l'esprit, une tâche incluse qui a sa proprewith_
loop remplacera la valeur de la variable d'élément spéciale. Par conséquent, si vous souhaitez accéder à la fois à l'élément inclus et à l'élément de la tâche en cours, vous devez utiliserset_fact
pour créer un alias vers l'extérieur:- include: test.yml with_items: - 1 - 2 - 3
dans test.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 en fonction d'une condition. Voici l'essentiel: https://Gist.github.com/ParagDoke/5ddfc3d5647ce9b0110d1b9790090092 . En effet, 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 dans status-poller.yml
, comprend lui-même:
- include_tasks: includes/status-poller.yml
when: some_condition