You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 01:24:30