web-dev-qa-db-fra.com

Comment puis-je exécuter uniquement des tâches ansibles avec plusieurs tags?

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
28
chmac

Les balises Ansible utilisent "ou" pas "et" à titre de comparaison. Votre solution pour créer encore une autre balise est la bonne.

23
Bruce P

Je crois que la syntaxe correcte est la suivante:

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

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'
0
H0WARD