web-dev-qa-db-ja.com

複数のタグを持つansibleタスクのみを実行するにはどうすればよいですか?

この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

debug bazタスクのみを実行するにはどうすればよいですか? foo AND barでタグ付けされたタスクのみを実行したい。それは可能ですか?

私はこれを試しましたが、3つのタスクすべてを実行します。

ansible-playbook foo.yml -t foo,bar
30
chmac

Ansibleタグは、比較として「and」ではなく「or」を使用します。さらに別のタグを作成するソリューションが適切です。

25
Bruce P

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

正しい構文は次のとおりです。

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

この方法を使用する場合:

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

操作を行いましたOR。したがって、次のコマンドを使用する場合:

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

または

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

このタスクを実行します。

使用する場合:

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

操作を行いました。したがって、コマンドのみ:

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

このタスクを実行します。