我如何才能 运行 只执行具有多个标签的任务?
How can I run only ansible tasks with multiple tags?
想象一下这个 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
Ansible 标签使用 "or" 而不是 "and" 作为比较。您创建另一个标签的解决方案是合适的。
我认为正确的语法是:
- name: debug baz
debug: msg=baz
tags: foo, bar
尝试 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'
如果你这样使用:
- name: debug baz
debug: msg=baz
tags:
- foo
- bar
您进行了手术或手术。所以,如果你使用命令:
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
您进行了一次操作 AND。所以只有命令:
ansible-playbook -i inventory test.yml --tags foo, bar
将执行此任务。
如果 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
想象一下这个 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
Ansible 标签使用 "or" 而不是 "and" 作为比较。您创建另一个标签的解决方案是合适的。
我认为正确的语法是:
- name: debug baz
debug: msg=baz
tags: foo, bar
尝试 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'
如果你这样使用:
- name: debug baz
debug: msg=baz
tags:
- foo
- bar
您进行了手术或手术。所以,如果你使用命令:
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
您进行了一次操作 AND。所以只有命令:
ansible-playbook -i inventory test.yml --tags foo, bar
将执行此任务。
如果 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