如何将Ansible采集的ONTAP节点版本信息导出为CSV
提取NetApp ONTAP节点版本并导出CSV(支持转置)
假设你的ontap_version_info变量结构类似下面的示例(不同集群下包含节点列表及版本信息):
ontap_version_info: - cluster: cluster01 nodes: - name: node01-cluster01 version: full: "9.10.1P5" - name: node02-cluster01 version: full: "9.10.1P5" - cluster: cluster02 nodes: - name: node01-cluster02 version: full: "9.9.1P8"
1. 提取目标字段
使用Ansible的json_query过滤器快速提取所有节点的name和version.full字段:
- name: 提取节点名称与完整版本号 set_fact: filtered_node_data: "{{ ontap_version_info | json_query('[].nodes[].{node_name: name, os_version: version.full}') }}"
执行后filtered_node_data会是一个包含所有节点信息的列表,格式为:
[ {"node_name": "node01-cluster01", "os_version": "9.10.1P5"}, {"node_name": "node02-cluster01", "os_version": "9.10.1P5"}, {"node_name": "node01-cluster02", "os_version": "9.9.1P8"} ]
2. 生成CSV内容
常规格式(每行一个节点)
直接拼接表头与数据,若字段含逗号可添加双引号包裹:
- name: 生成常规格式CSV内容 set_fact: csv_normal_content: | Node Name,OS Version {% for item in filtered_node_data %} "{{ item.node_name }}","{{ item.os_version }}" {% endfor %}
转置格式(节点名为表头,版本为对应列值)
先将数据转换为字典,再生成转置后的CSV:
- name: 生成转置格式CSV内容 set_fact: node_version_map: "{{ filtered_node_data | items2dict(key_name='node_name', value_name='os_version') }}" csv_transposed_content: | Item,{{ node_version_map.keys() | join(',') }} OS Version,{{ node_version_map.values() | join(',') }}
转置后的CSV表头为所有节点名称,仅一行数据对应各节点的版本号。
3. 导出CSV文件
用copy模块将生成的内容写入本地文件:
- name: 导出常规格式CSV copy: content: "{{ csv_normal_content }}" dest: "/tmp/ontap_node_versions.csv" mode: '0644' - name: 导出转置格式CSV copy: content: "{{ csv_transposed_content }}" dest: "/tmp/ontap_node_versions_transposed.csv" mode: '0644'
注意事项
- 如果
ontap_version_info的结构与示例不同,只需调整json_query的路径即可适配。 - 若版本号或节点名包含特殊字符(如逗号、双引号),可在模板中添加转义逻辑处理。
内容的提问来源于stack exchange,提问作者George
相关产品推荐
相关产品推荐

