Comment puis-je exécuter uniquement des tâches ansible avec plusieurs balises?

Imaginez ce playbook 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 seulement exécuter des tâches qui sont étiquetées avec foo et bar. Est-ce possible?

J'ai essayé ceci, mais il exécutera toutes les tâches 3:

ansible-playbook foo.yml -t foo,bar
27
demandé sur chmac 2015-05-04 20:23:57

4 réponses

Les balises Ansible utilisent " ou " not " et " comme comparaison. Votre solution pour créer encore une autre balise est la solution appropriée.

22
répondu Bruce P 2015-05-05 16:52:08

Je crois que la syntaxe correcte est:

- name: debug baz
  debug: msg=baz
  tags: foo, bar
0
répondu foofunner 2016-04-18 08:54:20

Essayez when directive:

- 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'
0
répondu H0WARD 2018-08-12 05:46:28

Si vous utilisez cette façon:

- 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

Exécutera cette tâche.

Si vous utilisez:

- name: debug baz
  debug: msg=baz
  tags:
    - foo, bar

Vous avez fait une opération et. Donc, seule la commande:

ansible-playbook -i inventory test.yml --tags foo, bar

Exécutera cette tâche.

0
répondu Carlos Alberto P. Moura Jr. 2018-09-14 12:32:22