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

Ansible:使用map filter提取列表嵌套结构下的用户邮箱失败,求可行实现代码

Ansible:使用map filter提取列表嵌套结构下的用户邮箱失败,求可行实现代码

嗨~我来帮你搞定这个问题!

问题出在你改了employees的结构之后,sarav对应的不再是单个字典,而是一个包含字典的列表了!原来的map+extract写法只适用于直接嵌套字典的场景,现在多了一层列表,自然就拿不到值啦。

给你几个可行的实现方案,按需选就行:

方案1:适配map filter的通用写法(兼容多元素列表)

如果sarav下面可能有多个条目,或者想继续用map filter的思路,试试这个:

tasks:
  - name: 提取sarav的邮箱(适配列表嵌套结构)
    ansible.builtin.debug:
      msg: "{{ ['sarav'] | map('extract', employees) | flatten | map(attribute='email') | list }}"

我给你拆解开说哈:

  • 先通过map('extract', employees)把sarav对应的列表拿出来,这时候得到的是个嵌套的列表[[{...}]]
  • 用flatten把它打平成单层的列表[{...}]
  • 再用map(attribute='email')把每个字典里的email字段揪出来
  • 最后list转成正常的列表格式输出

方案2:直接索引提取(适合单元素列表场景)

如果你确定sarav下面永远只有一个条目,这个写法更简单直接,一步到位:

tasks:
  - name: 提取单个条目的sarav邮箱
    ansible.builtin.debug:
      msg: "{{ employees.sarav.0.email }}"

直接通过索引0定位列表里的第一个字典,再取email字段就行,省心又高效~

方案3:用json_query灵活提取

如果之后还要处理更复杂的结构查询,json_query是个好选择,语法也很直观:

tasks:
  - name: 用json_query提取sarav邮箱
    ansible.builtin.debug:
      msg: "{{ employees | json_query('sarav[*].email') }}"

这里sarav[*].email的意思就是:取出sarav列表下所有元素的email字段,不管列表里有几个元素都能搞定。

备注:内容来源于stack exchange,提问作者learnansibe

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.15 14:18:16