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

如何在Ansible中根据名称从YAML文件获取指定数据

Ansible通过名称匹配获取列表字段值的方法

你的data.yml数据结构如下:

persons:
  - name: Jack
    hair_color: Black

  - name: Jill 
    hair_color: Blonde

要通过名称"Jack"匹配获取对应的头发颜色,有几种常用实现方式:

方法1:使用selectattr链式过滤器

直接通过过滤器组合筛选并提取目标值:

- debug:
    msg: "{{ data.persons | selectattr('name', 'equalto', 'Jack') | map(attribute='hair_color') | first }}"
  • selectattr('name', 'equalto', 'Jack'):筛选出name字段等于"Jack"的列表项
  • map(attribute='hair_color'):提取筛选结果中的hair_color字段
  • first:取第一个匹配结果(确保name唯一时可用)

方法2:将列表转换为字典后直接访问

先把列表转成以name为键、hair_color为值的字典,后续可直接通过键名访问:

- set_fact:
    persons_dict: "{{ data.persons | items2dict(key_name='name', value_name='hair_color') }}"

- debug:
    msg: "{{ persons_dict.Jack }}"

这种方式适合需要多次通过名称查询的场景,转换一次后可重复使用。

方法3:Jinja2模板中循环判断

如果是在模板文件里,可通过循环匹配:

{% for person in data.persons %}
{% if person.name == 'Jack' %}
{{ person.hair_color }}
{% endif %}
{% endfor %}

注意:如果存在重名的人员数据,selectattr会返回所有匹配项,first仅取第一个;items2dict则会用后出现的重名项覆盖前面的,确保name字段唯一能避免这类问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 03:16:05