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

Ansible使用subelements循环报错:key item应指向字典

错误原因

报错由两处写法错误共同引发:

  1. subelements 过滤器的参数传入错误:该过滤器的作用是遍历列表元素下的指定子列表,参数只需要填写子列表对应的键名即可,你传入的sshkey.item属于多余拼接,过滤器会尝试查找每个用户字典下sshkey键对应的item属性,但sshkey本身是公钥组成的列表、不是字典,因此触发类型错误。
  2. 遍历取值逻辑错误:subelements 过滤器返回的遍历项是固定的二元元组结构,不是直接包含name、sshkey属性的单层字典,原写法中直接取item.name、item.sshkey即使修正过滤器参数也无法取到正确值。
修复方案

直接调整loop的过滤器参数、修正模块的取值路径即可,修正后的完整代码如下:

admins:
  - name: "{{ vault_admin_user1_name }}"
    sshkey:
      - "{{ vault_admin_user1_pubkeyA }}"
      - "{{ vault_admin_user1_pubkeyC }}"

- name: Set up multiple authorized keys for users
  ansible.posix.authorized_key:
    user: '{{ item.0.name }}'
    state: present
    key: '{{ item.1 }}'
  loop: "{{ admins | subelements('sshkey') }}"

关键调整点说明:

  • 将subelements的参数从sshkey.item改为sshkey,直接匹配用户条目下存储公钥列表的键名,过滤器会自动完成用户和其名下每个公钥的配对遍历
  • 遍历项的取值对应结构:item.0为外层admins列表中的用户字典,可通过item.0.name取到目标用户名;item.1为当前遍历到的单个公钥字符串,直接传给key参数即可完成单条公钥的授权配置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 04:18:22