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

如何在Ansible中遍历JSON输出并为结果添加序列索引

解决方案

核心错误原因

你原playbook中loop配置错误,将disk_info列表整体作为单个元素传入循环,因此始终只循环1次,索引固定为0,也无法遍历到单个磁盘对象。

修改后的playbook

- hosts: myhosts
  connection: local
  gather_facts: yes
  tasks:
    - name: set_fact 
      set_fact: 
        disk_info: "{{ disks | json_query('[*].{disk_size: disksize}')}}"

    - name: print set_fact
      debug:
        msg: "{{ disk_info }}"

    - name: 输出主机名开头
      debug:
        msg: "{{ inventory_hostname }}:"

    - name: 遍历磁盘信息并生成带序号的输出
      debug:
        msg: "disk_size{{ my_idx + 1 }}: {{ item.disk_size }}"
      loop: "{{ disk_info }}"
      loop_control:
        index_var: my_idx

优化方案(单条输出整台主机磁盘信息)

如果不想每条磁盘单独打印,可以用Jinja2一次性拼接输出,格式更贴合你的预期:

- name: 一次性输出主机所有磁盘信息
  debug:
    msg: |
      {{ inventory_hostname }}:
      {% for disk in disk_info %}
      disk_size{{ loop.index }}: {{ disk.disk_size }}
      {% endfor %}

执行后输出样例:

ok: [hostname1] => {
    "msg": "hostname1:\ndisk_size1: 200\ndisk_size2: 200\ndisk_size3: 200\n"
}

内容的提问来源于stack exchange,提问作者ayuuk ja'ay

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 00:06:03