我有一个可靠的角色:
---
- import_tasks: foo.yml
when: ShouldRunFoo
如果ShouldRunFoo == false
,则跳过该文件,但控制台显示其任务(显示为"跳过"(。
我可以使用display_skipped_hosts = no
配置选项,但它隐藏了剧本中跳过的所有内容,而不仅仅是foo.yml
。
有办法做到这一点吗?我希望看到跳过的任务,只是不希望看到foo.yml
中的任务(如果跳过的话(。
不久前,我曾与之斗争过,使用不同的来源,我发现了一种方法,虽然不太干净,但它确实有效。(我假设你知道display_skipped_hosts=no
,但你仍然想打印一些跳过的(
您可以使用Jinja表达式进行循环,从调试输出中删除消息(任务的标题将始终显示(:
---
- hosts: all
tasks:
- name: task to skip and display
debug:
msg: "HELLO WORLD"
when: "'SOMETHING' in group_names"
- name: task to skip and not display
debug:
msg: "HELLO WORLD"
loop: "{% if 'SOMETHING' in group_names%} {{debug_list}}{% else %}[]{% endif %}"
如果在特定用例中,您可以使用import_tasks
或include_tasks
,则执行以下操作:
$ cat playbook.yml
:
---
- hosts: localhost
tasks:
- name: subtasks will be printed
import_tasks: tasks.yml
when: false
- name: subtasks will not be printed
include_tasks: tasks.yml # <----------
when: false
$ cat tasks.yml
:
---
- debug: msg=1
- debug: msg=2
- debug: msg=3
$ ansible-playbook playbook.yml
:
PLAY [localhost] **************************************************************
TASK [Gathering Facts] ********************************************************
ok: [localhost]
TASK [debug] ******************************************************************
skipping: [localhost]
TASK [debug] ******************************************************************
skipping: [localhost]
TASK [debug] ******************************************************************
skipping: [localhost]
TASK [subtasks will not be printed] *******************************************
skipping: [localhost]
PLAY RECAP ********************************************************************
localhost : ok=1 changed=0 unreachable=0 failed=0 skipped=4 rescued=0 ignored=0
我想这并不总是适用的,所以这不是一个完美的解决方案。