想象一下这本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
和bar
标记的任务。这可能吗?
我尝试了这个,但它将运行所有3个任务:
ansible-playbook foo.yml -t foo,bar
答案 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)
如果同时给出了foo
和bar
(即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 ''}}"
如果您需要它在foo
或bar
或同时给出foo
和bar
的情况下运行(即ansible-playbook foo.yml -t foo
,ansible-playbook foo.yml -t bar
或ansible-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