如何从 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 配置为不显示跳过的任务。

参见:stdout_callback

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)