如何将Ansible获取的NetApp ONTAP证书结果转为指定表头表格?
实现NetApp证书信息转置为指定表头的表格
完全可行,以下是修改后的Ansible剧本,能够汇总所有集群的证书数据,并输出你需要的表格格式(支持控制台直接显示Markdown表格,也可选生成CSV报告):
--- - name: NetApp证书过期报告 hosts: localhost gather_facts: no collections: - netapp.ontap vars: pp_ontap_clusters: - cls1 - cls2 - cls3 - cls4 - cls5 - cls6 - cls7 all_certificates: [] tasks: - name: 获取各ONTAP集群的证书信息 netapp.ontap.na_ontap_rest_info: hostname: "{{ item }}" username: "{{ lookup('env', 'ontap_admin_usr') }}" password: "{{ lookup('env', 'ontap_admin_pwd') }}" use_rest: always https: true validate_certs: false gather_subset: - security/certificates fields: - 'common_name' - 'serial_number' - 'ca' - 'type' - 'expiry_time' - 'scope' parameters: type: server loop: "{{ pp_ontap_clusters }}" register: cert_results - name: 汇总所有证书记录(附带集群标识) set_fact: all_certificates: "{{ all_certificates + item.ontap_info['security/certificates'].records | json_query('[].{cluster: \"{{ item.item }}\", common_name: common_name, serial_number: serial_number, ca: ca, type: type, expiry_time: expiry_time, scope: scope}') }}" loop: "{{ cert_results.results }}" - name: 在控制台输出Markdown格式证书表格 debug: msg: | | 集群名称 | common_name | serial_number | ca | type | expiry_time | scope | |----------|-------------|---------------|----|------|-------------|-------| {% for cert in all_certificates %} | {{ cert.cluster }} | {{ cert.common_name }} | {{ cert.serial_number }} | {{ cert.ca }} | {{ cert.type }} | {{ cert.expiry_time }} | {{ cert.scope }} | {% endfor %} - name: 生成CSV格式证书报告(可选) copy: content: | 集群名称,common_name,serial_number,ca,type,expiry_time,scope {% for cert in all_certificates %} {{ cert.cluster }},{{ cert.common_name }},{{ cert.serial_number }},{{ cert.ca }},{{ cert.type }},{{ cert.expiry_time }},{{ cert.scope }} {% endfor %} dest: ./netapp_cert_report.csv
关键说明
- 数据汇总:通过
set_fact任务把每个集群返回的证书记录合并成一个统一列表,同时添加了集群名称字段,方便区分不同集群的证书(如果不需要可以去掉该字段)。 - Markdown表格输出:利用Jinja2模板遍历汇总后的列表,直接在控制台输出标准Markdown表格,复制就能用。
- CSV报告生成:可选任务,生成CSV文件,适合用Excel、Numbers等工具打开分析。
如果不需要集群名称,只保留你指定的6个字段,修改json_query部分即可:
'[].{common_name: common_name, serial_number: serial_number, ca: ca, type: type, expiry_time: expiry_time, scope: scope}'
同时调整表格表头和CSV的第一行即可。
内容的提问来源于stack exchange,提问作者George
相关产品推荐
相关产品推荐

