如何在Ansible中获取列表最大值的索引?
解决Ansible中获取列表最大值索引的问题
你遇到的报错是因为Ansible的Jinja2模板没有index过滤器,想要获取列表中最大值的索引,需要直接调用Python列表的index()方法,同时还可以优化你的Playbook写法,提升执行效率。
错误原因
{{ list_of_available_size | index(max_size) }}中的index并非Jinja2内置过滤器,导致模板解析失败。
解决方案
1. 修复索引获取逻辑
将获取索引的任务修改为直接调用列表的index()方法:
- name: index of max available size aggr set_fact: aggr_index_required: "{{ list_of_available_size.index(max_size) }}"
2. 优化列表生成(可选但推荐)
你当前通过循环set_fact构建两个列表的方式效率较低,可以用map过滤器一次性生成,简化代码:
# 替换原有的Available size check任务 - name: Generate list of available sizes set_fact: list_of_available_size: "{{ aggrdetails | map(attribute='space.block_storage.available') | map('int') | list }}" # 替换原有的aggregare listing任务 - name: Generate list of aggregate names set_fact: list_of_aggr_name: "{{ aggrdetails | map(attribute='name') | list }}"
完整修改后的Playbook
--- - hosts: exec-node collections: - netapp.ontap vars: list_of_available_size: [] list_of_aggr_name: [] vars_files: - secretvars.yaml tasks: - name: Gather aggregate info netapp.ontap.na_ontap_rest_info: hostname: "nas.foo.com" username: "{{ username }}" password: "{{ password }}" https: true fields: - 'space' validate_certs: false gather_subset: - storage/aggregates register: result - set_fact: aggrdetails: "{{ result['ontap_info']['storage/aggregates']['records'] }}" - debug: var=aggrdetails - name: Generate list of available sizes set_fact: list_of_available_size: "{{ aggrdetails | map(attribute='space.block_storage.available') | map('int') | list }}" - debug: var=list_of_available_size - name: Generate list of aggregate names set_fact: list_of_aggr_name: "{{ aggrdetails | map(attribute='name') | list }}" - debug: var=list_of_aggr_name - name: Max available size aggr set_fact: max_size: "{{ list_of_available_size | max }}" - debug: var=max_size - name: index of max available size aggr set_fact: aggr_index_required: "{{ list_of_available_size.index(max_size) }}" - debug: var=aggr_index_required
注意事项
- 如果列表中有多个相同的最大值,
index()方法只会返回第一个匹配项的索引。 - 确保
list_of_available_size中的元素都是整数类型(你已通过map('int')处理,无需额外操作)。
内容的提问来源于stack exchange,提问作者Ashish Kumar
相关产品推荐
相关产品推荐

