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

Ansible subelements循环处理用户密钥报错,求解决方案

Ansible subelements过滤器循环报错解决

问题场景

尝试运行以下测试代码,使用Ansible的subelements过滤器循环处理users变量中的用户名称、授权密钥文件及对应密钥:

- hosts: localhost
  gather_facts: no
  vars:
    users:
      - name: user1
        authorized_keys_file: authorized_keys_file_1.log
        authorized_keys:
          - key1
          - key2
      - name: user2
        authorized_keys_file: authorized_keys_file_2.log
        authorized_keys:
          - key1
  tasks:
    - name: List keys to add to authorized_key_file
      debug:
        msg: "User={{ item.0.name }} File={{ item.0.authorized_keys_file }} key={{ item.1 }}"
      loop:
        - "{{ users | subelements('authorized_keys') }}"

报错信息

The task includes an option with an undefined variable. The error was: 'list object' has no attribute 'name'

期望输出

User=user1 File=authorized_keys_file_1 key=key1
User=user1 File=authorized_keys_file_1 key=key2
User=user2 File=authorized_keys_file_2 key=key1

解决方案

错误原因是loop参数里多套了一层列表(- "{{ users | subelements('authorized_keys') }}"),导致item变成了整个subelements返回的列表,而非预期的元组。

修正后的代码只需去掉loop下的列表符号,直接使用subelements的结果:

- hosts: localhost
  gather_facts: no
  vars:
    users:
      - name: user1
        authorized_keys_file: authorized_keys_file_1.log
        authorized_keys:
          - key1
          - key2
      - name: user2
        authorized_keys_file: authorized_keys_file_2.log
        authorized_keys:
          - key1
  tasks:
    - name: List keys to add to authorized_key_file
      debug:
        msg: "User={{ item.0.name }} File={{ item.0.authorized_keys_file }} key={{ item.1 }}"
      loop: "{{ users | subelements('authorized_keys') }}"

运行修正后的代码,就能得到预期的循环输出,后续也可以直接把这个逻辑迁移到ansible.posix.authorized_key模块中使用。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 03:10:25