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

Ansible按条件分类Windows主机ping结果存入列表发送Slack问题

Ansible Windows连通性测试结果归集解决方案

问题根源

你之前使用groups.all遍历的是Ansible Tower全清单主机,未被选入本次测试的主机没有执行ping任务,ping_results.ping默认值为空,全部命中了不等于"pong"的条件,所以会混入nok_list。同时归集逻辑跑在每台目标主机上,每个主机只会生成自己维度的列表,无法得到全局统一的统计结果。

修复方案

调整playbook结构,拆分测试执行和结果归集两个环节,使用Ansible内置变量ansible_play_hosts_all获取本次测试的所有目标主机,归集逻辑统一跑在控制节点localhost上:

1. 连通性测试Play

- name: 测试Windows主机连通性
  hosts: all
  gather_facts: no
  # play级别配置忽略不可达,确保所有测试主机都纳入统计
  ignore_unreachable: true
  roles:
    - Hello-windows

角色内仅保留ping测试逻辑即可,删除原有的列表归集任务:

---
- name: get powershell version
  ignore_unreachable: true
  raw: $PSVersionTable
- name: ping
  win_ping:
  register: ping_results

2. 结果归集与Slack发送Play

- name: 归集测试结果并发送Slack
  hosts: localhost
  gather_facts: no
  vars:
    ok_list: []
    nok_list: []
  tasks:
    - name: 归集连通正常主机列表
      set_fact:
        ok_list: "{{ ok_list + [item] }}"
      when: hostvars[item].ping_results.ping | default('') == 'pong'
      # 仅遍历本次测试的目标主机
      loop: "{{ ansible_play_hosts_all }}"

    - name: 归集连通异常主机列表
      set_fact:
        nok_list: "{{ nok_list + [item] }}"
      when: hostvars[item].ping_results.ping | default('') != 'pong'
      loop: "{{ ansible_play_hosts_all }}"

    - name: 结果验证(可选)
      debug:
        msg:
          - "连通正常主机:{{ ok_list }}"
          - "连通异常主机:{{ nok_list }}"

    - name: 发送Slack通知
      community.general.slack:
        token: "你的Slack Bot令牌"
        channel: "#通知频道名称"
        msg: |
          Windows主机连通性测试完成
          测试主机总数:{{ ansible_play_hosts_all | length }}
          连通正常数:{{ ok_list | length }}
          连通异常数:{{ nok_list | length }}
          异常主机列表:{{ nok_list | join(', ') }}

核心优化点

  • 用ansible_play_hosts_all替代groups.all:该变量仅包含本次Job Template选中的测试主机,不会混入全清单其他无关主机
  • 归集逻辑跑在localhost:仅生成一份全局统一的统计列表,避免每个目标主机单独计算导致的结果分散
  • play级别配置ignore_unreachable: true:确保不可达主机不会被排除出遍历范围,统计结果完整

内容的提问来源于stack exchange,提问作者Y.H

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 01:09:03