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

Ansible:如何按序号打印所有清单主机名及Ping状态

如何用Ansible生成带序号的主机Ping状态CSV文件

你需要调整现有playbook,让它覆盖所有目标主机,收集每个主机的Ping状态,再通过Jinja模板生成符合要求的CSV文件。以下是完整实现步骤:

1. 修改后的Playbook

将原playbook调整为遍历所有目标主机,并添加收集状态、生成CSV的任务:

- name: 执行主机Ping并生成状态CSV
  hosts: all  # 可替换为你的目标主机组,比如web_servers
  gather_facts: true
  ignore_unreachable: true  # 可选:跳过不可达主机,避免中断执行
  become: false  # Ping操作无需提权,可移除原become配置

  tasks:
    - name: Ping目标主机
      ansible.builtin.ping:
      register: var_ping

    - name: 收集所有主机的Ping状态(仅在本地执行一次)
      ansible.builtin.set_fact:
        all_host_ping_results: "{{ ansible_play_hosts_all | map('extract', hostvars, ['inventory_hostname', 'var_ping', 'ping']) | list }}"
      delegate_to: localhost
      run_once: true

    - name: 通过模板生成CSV文件
      ansible.builtin.template:
        src: ping_status.csv.j2
        dest: ./ping_status.csv  # 生成的CSV会保存在本地当前目录
      delegate_to: localhost
      run_once: true

2. 创建Jinja模板文件

在Ansible的templates目录下(或指定完整路径)创建ping_status.csv.j2模板,内容如下:

sl.no,Hostname,Ping Status
{% for host in ansible_play_hosts_all %}
{{ loop.index }},{{ host }},{{ hostvars[host]['var_ping']['ping'] | default('Failed') }}
{% endfor %}
  • loop.index自动生成序号(sl.no)
  • hostvars[host]['var_ping']['ping']获取对应主机的Ping结果,成功会返回pong
  • default('Failed')处理Ping失败或主机不可达的情况

3. 执行与输出

运行playbook:

ansible-playbook ping_playbook.yml

生成的CSV文件内容示例:

sl.no,Hostname,Ping Status
1,web01,pong
2,db01,pong
3,app01,Failed

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 19:35:27