如何在Ansible中执行Playbook后过滤Play Recap结果
解决Ansible Play Recap仅显示Changed/Failed主机的问题
问题原因
你修改的display_ok_hosts=False和display_skipped_hosts=False参数在不同Ansible版本中生效逻辑不同,大概率是版本不匹配导致配置未生效:
- Ansible 2.10~2.12:需要配合
callback_whitelist=default才能让默认回调加载这些参数 - Ansible 2.13+:这两个参数已被废弃,改用
display_recap统一控制显示状态
解决方案
1. 适配版本修改ansible.cfg(永久生效)
Ansible 2.10~2.12:
在ansible.cfg的[defaults]段添加:[defaults] display_ok_hosts = False display_skipped_hosts = False callback_whitelist = defaultAnsible 2.13+:
改用display_recap指定要显示的状态,支持逗号分隔多个状态(比如changed,failed,unreachable):[defaults] display_recap = changed,failed
2. 命令行临时覆盖(单次生效)
如果不想修改配置文件,运行Playbook时直接通过-e传递变量:
- Ansible 2.10~2.12:
ansible-playbook your_playbook.yml -e 'display_ok_hosts=False' -e 'display_skipped_hosts=False' - Ansible 2.13+:
ansible-playbook your_playbook.yml -e 'display_recap=changed,failed'
3. 自定义回调插件(灵活扩展)
如果需要更复杂的过滤逻辑,可自定义回调插件:
- 在Playbook目录下创建
callback_plugins文件夹,新建filter_recap.py:from ansible.plugins.callback import CallbackBase class CallbackModule(CallbackBase): def v2_playbook_on_stats(self, stats): super().v2_playbook_on_stats(stats) self._display.banner("PLAY RECAP") # 遍历所有主机,仅输出有变更、失败或不可达的主机 for host in sorted(stats.processed.keys()): summary = stats.summarize(host) if summary['changed'] > 0 or summary['failed'] > 0 or summary['unreachable'] > 0: self._display.display(f"{host} : {self._get_summary_line(summary)}") - 在
ansible.cfg中启用该插件:[defaults] callback_whitelist = filter_recap
运行Playbook后,Play Recap就只会显示符合条件的主机,完美适配1000+主机的场景。
内容的提问来源于stack exchange,提问作者shelldude
相关产品推荐
相关产品推荐

