2015-06-11 13 views
15

Ich habe ein Ansible-Playbook erstellt, das eine Cloud-Instanz erstellt und anschließend einige Programme auf der Instanz installiert. Ich möchte dieses Playbook mehrmals ausführen (ohne ein Bash-Skript zu verwenden). Ist es möglich, eine Schleife zu verwenden, um diese beiden Aufgaben zusammen zu durchlaufen (I. E. Eine Schleife für zwei Aufgaben?). Alles, was ich bisher finden konnte, ist eine Schleife für jede einzelne AufgabeEine Schleife über mehrere Ansible-Aufgaben

+0

Es ist schade, dass man 'with_items' nicht mit [blocks] (http://docs.ansible.com/ansible/latest/playbooks_blocks.html) verwenden kann, was so aussieht, als wäre es ein idiomatischer Weg um dies zu tun. –

Antwort

17

Nein, das ist derzeit nicht möglich. with_items verwendet, um mit der include Anweisung in früheren Versionen von Ansible zu arbeiten, wurde aber leider gelöscht.

Obwohl es wird wieder in ansible 2.0 gebracht werden, siehe Folie 14/15 von What's New in v2 - AnsibleFest London 2015

enter image description here

Sie könnten versuchen, mit dem v2 branch from github zu arbeiten, sollte die Funktion dort zur Verfügung stehen.

Was Sie mit 1.9.1 tun können, ist Ihre Aufgaben in eine Rolle zu verschieben und diese Rolle mehrmals in Ihrem Playbook zu referenzieren.

18

Ein Update:

In 2.0 Sie sind in der Lage with_ Schleifen zu verwenden und Aufgabe umfasst (aber nicht Textbuch enthält), fügt dieser die Möglichkeit, eine Schleife über den Satz von Aufgaben in einem Schuss. Es gibt ein paar Dinge, die Sie im Auge behalten müssen, eine enthaltene Aufgabe, die ihre eigeneSchleife hat, wird den Wert der speziellen Elementvariable überschreiben. Also, wenn Sie den Zugriff auf beide wollen gehören das Stück und die Sache der aktuellen Aufgabe, die Sie set_fact verwenden sollten einen Alias ​​zum äußeren erstellen .:

- include: test.yml 
    with_items: 
    - 1 
    - 2 
    - 3 

in test.yml:

- set_fact: outer_loop="{{item}}" 
- debug: msg="outer item={{outer_loop}} inner item={{item}}" 
    with_items: 
    - a 
    - b 
    - c 

Quelle: Ansible Docs

+5

Dies wurde in 2.1 verbessert, mit einer Funktion zur Angabe eines anderen Variablennamens für die äußere Schleife - siehe [Schleifensteuerungsabschnitt] (http://docs.ansible.com/ansible/playbooks_loops.html#loop-control) von Ansible Dokumente Es gibt verwandte Verbesserungen in 2.2 in demselben Abschnitt. – RichVel