如何从 include 语句中过滤任务
How to filter tasks from include statement
目前,我会传递一个参数以在另一个文件中包含和使用该变量,以有条件地检查要执行哪个块。
例如,
- include: tasks/common.yml param=dns
tasks/common.yml:
---
- block:
- name: do something interesting
when: param == "dns"
- block:
- name: do another thing
when: param == "ip"
此方法有效,但在我的输出中,所有不符合条件的任务都显示为跳过。由于我有许多任务并尝试重用其中一些任务,因此我看到了很多跳过的任务。
有更好的方法吗?使用 ansible 2.2
剧本或 ansible 参数不支持该功能。一种方法是将您的 ansible 配置为不显示跳过的任务。
New in version 2.0.
This setting allows you to override the default stdout callback for
ansible-playbook:
stdout_callback = skippy
编辑您的 ansible 配置文件(通常是 /etc/ansible/ansible.cfg
)并在 defaults
部分下添加此行
stdout_callback = skippy
告诉ansible不要显示跳过的任务。
设置为skippy
之前
TASK [Run scripts] *************************************************************
changed: [localhost] => (item=1)
skipping: [localhost] => (item=2)
设置为skippy
后
TASK [Run scripts] *************************************************************
changed: [localhost] => (item=1)
目前,我会传递一个参数以在另一个文件中包含和使用该变量,以有条件地检查要执行哪个块。
例如,
- include: tasks/common.yml param=dns
tasks/common.yml:
---
- block:
- name: do something interesting
when: param == "dns"
- block:
- name: do another thing
when: param == "ip"
此方法有效,但在我的输出中,所有不符合条件的任务都显示为跳过。由于我有许多任务并尝试重用其中一些任务,因此我看到了很多跳过的任务。
有更好的方法吗?使用 ansible 2.2
剧本或 ansible 参数不支持该功能。一种方法是将您的 ansible 配置为不显示跳过的任务。
New in version 2.0.
This setting allows you to override the default stdout callback for ansible-playbook:
stdout_callback = skippy
编辑您的 ansible 配置文件(通常是 /etc/ansible/ansible.cfg
)并在 defaults
部分下添加此行
stdout_callback = skippy
告诉ansible不要显示跳过的任务。
设置为skippy
之前
TASK [Run scripts] *************************************************************
changed: [localhost] => (item=1)
skipping: [localhost] => (item=2)
设置为skippy
后
TASK [Run scripts] *************************************************************
changed: [localhost] => (item=1)