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

Ansible生成多主机安装包报告遇不可达主机报错

问题原因

当存在不可达主机时,Ansible无法在对应主机上执行package_facts采集任务,即使给任务加了ignore_errors: true也无法覆盖连接不可达的场景——不可达主机会直接跳过所有任务执行步骤,hostvars中不会生成ansible_facts.packages字段,Jinja2模板强行访问不存在的键就会触发undefined变量报错,导致整个playbook执行失败。

修复方案

对原有playbook做3处核心调整即可:

  • 在play层级添加ignore_unreachable: yes配置,让单台主机不可达时不中断其他主机的任务执行流程
  • 调整setup模块的采集子集,明确指定采集发行版信息,避免!all配置下漏采OS版本字段
  • 在报告模板中增加主机状态判断:仅对成功采集到包信息的主机遍历包列表,不可达/采集失败的主机直接标记状态,不强行访问不存在的字段;同时兼容Python3环境替换废弃的iteritems()为items(),修正原有拼写错误。

修复后的完整playbook如下:

---
- name: main
  hosts: all
  gather_facts: no
  become: true
  ignore_unreachable: yes
  tasks:
  - name: Gather minimal system facts
    setup:
      gather_subset:
        - '!all'
        - 'distribution'

  - name: Gather installed packages
    package_facts:
      manager: auto
    ignore_errors: true

  - name: Generate summary report on control node
    local_action:
      module: copy
      content: |
        {% for h in groups.all %}
        {{h}}; OS: {{hostvars[h]['ansible_distribution']|default('N/A')}}; Release: {{hostvars[h]['ansible_distribution_version']|default('N/A')}}
        {% if 'packages' in hostvars[h].get('ansible_facts', {}) %}
        List of installed packages:
        #==============================================
        {% for k,v in hostvars[h].ansible_facts.packages.items() %}
        package {{ k.rjust(24) }}      version {{ v[0].version }}
        {% endfor %}
        #==============================================
        {% else %}
        Status: Host unreachable or package info collection failed, skipped.
        {% endif %}

        {% endfor %}
      dest: '/reports/OS_info.txt'

执行命令无需调整,仍使用原命令即可:

ansible-playbook -i rh_inventory  -u ansuser02  os_extract_info.yml

修复后运行效果:

  • 所有可达主机的已安装软件包、OS版本信息会正常汇总到报告中
  • 不可达/采集失败的主机会在报告中明确标记跳过状态,不会触发变量未定义报错
  • 全程不需要修改inventory配置,也不需要提前筛除不可达主机,执行效率和原逻辑一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 19:54:16