Imaginez ce livre de jeu ansible:
- 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
Comment puis-je exécuter uniquement la tâche debug baz
? Je veux dire que seules les tâches d’exécution portant la balise foo
AND bar
. Est-ce possible?
J'ai essayé cela, mais il va exécuter les 3 tâches:
ansible-playbook foo.yml -t foo,bar
Les balises Ansible utilisent "ou" pas "et" à titre de comparaison. Votre solution pour créer encore une autre balise est la bonne.
Je crois que la syntaxe correcte est la suivante:
- name: debug baz
debug: msg=baz
tags: foo, bar
Si vous utilisez cette manière:
- name: debug baz
debug: msg=baz
tags:
- foo
- bar
Vous avez fait une opération OU. Donc, si vous utilisez la commande:
ansible-playbook -i inventory test.yml --tags foo
ou
ansible-playbook -i inventory test.yml --tags bar
Va exécuter cette tâche.
Si tu utilises:
- name: debug baz
debug: msg=baz
tags:
- foo, bar
Vous avez fait une opération ET. Donc seulement la commande:
ansible-playbook -i inventory test.yml --tags foo, bar
Va exécuter cette tâche.
Essayez la directive 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'