如何只使用多个标签运行ansible任务?

时间:2015-05-04 17:23:58

标签: ansible ansible-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

如何只运行debug baz任务?我想说只运行使用foobar标记的任务。这可能吗?

我尝试了这个,但它将运行所有3个任务:

ansible-playbook foo.yml -t foo,bar

4 个答案:

答案 0 :(得分:23)

Ansible标签使用“或”而非“和”作为比较。您创建另一个标记的解决方案是合适的。

答案 1 :(得分:1)

尝试使用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'

答案 2 :(得分:0)

我相信正确的语法是:

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

答案 3 :(得分:0)

如果同时给出了foobar(即ansible-playbook foo.yml -t foo,bar

,请使用以下命令运行任务)
- debug:
    msg: "(foo and bar)"
  tags:
    - "{{ 'always' if 'foo' in ansible_run_tags and 'bar' in ansible_run_tags else ''}}"

如果您需要它在foobar或同时给出foobar的情况下运行(即ansible-playbook foo.yml -t fooansible-playbook foo.yml -t baransible-playbook foo.yml -t foo,bar),然后使用以下命令:

- debug:
    msg: "(foo and bar) or foo or bar"
  tags:
    - "{{ 'always' if 'foo' in ansible_run_tags and 'bar' in ansible_run_tags else ''}}"
    - foo
    - bar