如何修改Ansible Playbook从na_ontap_rest_info输出提取指定ONTAP版本?
提取ONTAP节点版本信息的Ansible Playbook修改方案
问题背景
使用netapp.ontap.na_ontap_rest_info模块收集ONTAP集群节点信息时,输出包含大量冗余内容,仅需要提取version.full字段中冒号前的版本字符串(如NetApp Release 9.12.1P4)。
解决方案
通过两步修改Playbook实现需求:
- 将模块执行结果保存到变量
- 使用Ansible字符串过滤器提取目标内容
修改后的完整Playbook
--- - hosts: localhost collections: - netapp.ontap tasks: - name: 收集ONTAP集群节点信息 netapp.ontap.na_ontap_rest_info: hostname: "{{ lookup('env', 'ClusterName') }}" username: "{{ lookup('env', 'ontap_admin_usr') }}" password: "{{ lookup('env', 'ontap_admin_pwd') }}" use_rest: always https: true validate_certs: false gather_subset: - cluster_node_info fields: - 'version' register: ontap_node_info # 将模块输出保存到变量 - name: 提取并显示节点版本信息 debug: msg: "节点 {{ item.name }} 的版本: {{ item.version.full.split(':')[0] }}" loop: "{{ ontap_node_info.ontap_info['cluster/nodes'].records }}"
关键说明
register: ontap_node_info:把na_ontap_rest_info模块的输出结果存储到指定变量,方便后续处理item.version.full.split(':')[0]:使用split(':')将version.full字符串按冒号分割成列表,取列表第一个元素(即冒号前的版本内容)loop:遍历所有节点记录,逐个处理并输出版本信息
示例输出
ok: [localhost] => (item={'_links': {'self': {'href': '/api/cluster/nodes/578658e0-87fc-11e9-b8bd-00a098f2ea00'}}, 'name': 'node2', 'uuid': '578658e0-87fc-11e9-b8bd-00a098f2ea00', 'version': {'full': 'NetApp Release 9.12.1P4: Tue Jun 06 20:41:34 UTC 2023', 'generation': 9, 'major': 12, 'minor': 1}}) => { "msg": "节点 node2 的版本: NetApp Release 9.12.1P4" } ok: [localhost] => (item={'_links': {'self': {'href': '/api/cluster/nodes/6aae0abe-a410-11e9-ae1d-00a098f2ea72'}}, 'name': 'node1', 'uuid': '6aae0abe-a410-11e9-ae1d-00a098f2ea72', 'version': {'full': 'NetApp Release 9.12.1P4: Tue Jun 06 20:41:34 UTC 2023', 'generation': 9, 'major': 12, 'minor': 1}}) => { "msg": "节点 node1 的版本: NetApp Release 9.12.1P4" }
内容的提问来源于stack exchange,提问作者George
相关产品推荐
相关产品推荐

