使用Ansible Playbook计算列表变量中的存储使用率
Ansible处理聚合体使用率输出方案
场景1:通过命令行文本输出处理(以NetApp aggr show命令为例)
如果你的聚合体信息是通过执行命令获取的文本输出,可使用以下Playbook提取并计算:
--- - name: 处理聚合体使用率数据 hosts: your_target_hosts gather_facts: no tasks: - name: 获取聚合体基础信息(TSV格式便于字段分割) command: aggr show -fields name,size,used -output tsv register: aggr_raw_output - name: 解析数据并生成目标格式 debug: msg: "aggr_name: {{ parts[0] }};aggr_used%: {{ (parts[2]|int / parts[1]|int * 100)|int }} ==> ({{ (parts[2]|int / parts[1]|int * 100)|int }}%)" loop: "{{ aggr_raw_output.stdout_lines[1:] }}" vars: parts: "{{ item.split('\t') }}"
关键说明:
-output tsv让命令输出以制表符分隔,避免空格分割的歧义stdout_lines[1:]跳过第一行表头,只处理数据行- 强制转换
size和used为整数后计算使用率,最后取整得到整数百分比
场景2:通过NetApp官方模块获取结构化JSON数据
如果使用NetApp的Ansible集合,可直接调用模块获取结构化数据,处理更简单:
--- - name: 处理聚合体使用率数据 hosts: netapp_clusters gather_facts: no collections: - netapp.ontap tasks: - name: 获取聚合体结构化信息 na_ontap_aggregate: state: info hostname: "{{ inventory_hostname }}" username: "{{ netapp_user }}" password: "{{ netapp_pass }}" https: true validate_certs: false register: aggr_structured_data - name: 输出目标格式结果 debug: msg: "aggr_name: {{ item.name }};aggr_used%: {{ (item.space.used / item.space.size * 100)|int }} ==> ({{ (item.space.used / item.space.size * 100)|int }}%)" loop: "{{ aggr_structured_data.aggregates }}"
前置准备:
- 安装NetApp集合:
ansible-galaxy collection install netapp.ontap - 确保目标主机可通过Ansible访问,且NetApp账户有足够权限
内容的提问来源于stack exchange,提问作者rseepana
相关产品推荐
相关产品推荐

