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

如何在Ansible列表中按名称精准获取指定项的值?

问题描述

我有如下Ansible变量列表:

awx_credentials:
  - name: "user1"
    password: "123"
  - name: "user2"
    password: "123"
  - name: "user3"
    password: "123"
  - name: "user4"
    password: "123"

原本我通过索引awx_credentials[1].name的方式获取user2的name值,任务代码如下:

- name: "My test"
  awx.awx.execution_environment:
    name: "My EE"
    image: "quay.io/ansible"
    credential: "{{ awx_credentials[1].name }}"

但如果调整列表顺序,这种索引方式就会失效。请问怎么通过搜索user2这个具体值来获取对应的name字段?

解决方案

你可以用Ansible的selectattr过滤器做精准匹配,不管列表顺序怎么变都能找到目标,修改后的任务代码如下:

- name: "My test"
  awx.awx.execution_environment:
    name: "My EE"
    image: "quay.io/ansible"
    credential: "{{ awx_credentials | selectattr('name', 'equalto', 'user2') | map(attribute='name') | first }}"

过滤器说明:

  • selectattr('name', 'equalto', 'user2'):从列表里筛选出name字段等于user2的条目
  • map(attribute='name'):把筛选出来的条目里的name值单独提取出来
  • first:取第一个匹配结果(因为你的列表里每个name都是唯一的,所以只会有一个匹配项)

另外,如果你的awx_credentials里每个name都是唯一的,还可以先把列表转成字典,后续调用更简洁:

# 先把列表转换成字典(可以放在playbook的vars部分或者单独的变量文件里)
awx_credentials_dict: "{{ awx_credentials | items2dict(key_name='name', value_name='name') }}"

# 任务中直接通过字典键调用
- name: "My test"
  awx.awx.execution_environment:
    name: "My EE"
    image: "quay.io/ansible"
    credential: "{{ awx_credentials_dict['user2'] }}"

这种方式适合需要多次调用不同用户name的场景,代码可读性更高。

内容的提问来源于stack exchange,提问作者Costales

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 13:25:24