如何在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
相关产品推荐
相关产品推荐

