You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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 = default
    
  • Ansible 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. 自定义回调插件(灵活扩展)

如果需要更复杂的过滤逻辑,可自定义回调插件:

  1. 在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)}")
    
  2. 在ansible.cfg中启用该插件:
    [defaults]
    callback_whitelist = filter_recap
    

运行Playbook后,Play Recap就只会显示符合条件的主机,完美适配1000+主机的场景。

内容的提问来源于stack exchange,提问作者shelldude

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 22:13:37