如何将多主机v_data合并为单个JSON并转换为表格
解决Ansible多主机数据合并为统一JSON的方案
核心实现思路
借助Ansible的hostvars变量遍历目标主机组,提取每台主机的inventory_hostname和对应v_data,将其整合成统一结构的数据集,最后输出为标准JSON文件,方便后续转CSV或表格。
具体任务代码示例
1. 聚合多主机数据
添加以下Ansible任务,将所有目标主机的v_data按主机名归类:
- name: 合并所有主机的v_data set_fact: merged_data: "{{ merged_data | default([]) + [{'hostname': item, 'data': hostvars[item]['v_data']}] }}" delegate_to: localhost run_once: true loop: "{{ groups['your_target_group'] }}"
注:把your_target_group替换为你实际用到的主机组名称,比如all或自定义组
2. 输出为JSON文件
将聚合后的数据写入本地JSON文件:
- name: 生成统一JSON文件 copy: content: "{{ merged_data | to_nice_json(indent=2) }}" dest: ./hosts_merged_data.json delegate_to: localhost run_once: true
自定义格式调整
如果你的v_data本身是表格行结构(比如列表型字典,每元素对应一行数据),可以直接给每行数据追加主机名字段,后续转CSV更便捷:
- name: 合并为带主机名的行数据 set_fact: merged_data: "{{ merged_data | default([]) + hostvars[item]['v_data'] | map('combine', {'hostname': item}) | list }}" delegate_to: localhost run_once: true loop: "{{ groups['your_target_group'] }}"
执行完成后,hosts_merged_data.json就是符合要求的统一格式数据,可直接用jq、Python脚本等工具转换为CSV或表格格式。
内容的提问来源于stack exchange,提问作者mahen1812
相关产品推荐
相关产品推荐

