Stellen Sie sich dieses Spielbuch vor:
- name: debug foo
debug: msg=foo
tags:
- foo
- name: debug bar
debug: msg=bar
tags:
- bar
- name: debug baz
debug: msg=baz
tags:
- foo
- bar
Wie kann ich nur die debug baz
-Aufgabe ausführen? Ich möchte nur Aufgaben ausführen, die mit foo
AND bar
markiert sind. Ist das möglich?
Ich habe es versucht, aber es werden alle 3 Aufgaben ausgeführt:
ansible-playbook foo.yml -t foo,bar
Ansible-Tags verwenden "oder" nicht "und" als Vergleich. Ihre Lösung zum Erstellen eines weiteren Tags ist die geeignete.
Ich glaube, die korrekte Syntax lautet:
- name: debug baz
debug: msg=baz
tags: foo, bar
Wenn Sie diesen Weg verwenden:
- name: debug baz
debug: msg=baz
tags:
- foo
- bar
Sie haben eine Operation durchgeführt ODER Wenn Sie also den Befehl verwenden:
ansible-playbook -i inventory test.yml --tags foo
oder
ansible-playbook -i inventory test.yml --tags bar
Führt diese Aufgabe aus.
Wenn du benutzt:
- name: debug baz
debug: msg=baz
tags:
- foo, bar
Sie haben eine Operation UND durchgeführt. Also nur der Befehl:
ansible-playbook -i inventory test.yml --tags foo, bar
Führt diese Aufgabe aus.
Versuchen Sie die Anweisung when
:
- name: debug foo
debug: msg=foo
tags:
- foo
- name: debug bar
debug: msg=bar
tags:
- bar
- name: debug baz
debug: msg=baz
when:
- '"foo" in ansible_run_tags'
- '"bar" in ansible_run_tags'