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

Ansible循环when条件失效:仅为含pubkeys用户部署authorized_key

修复Ansible authorized_key任务的条件判断问题

错误原因

循环provisioning_user列表时,部分用户字典未定义pubkeys字段,直接在when条件中访问item.pubkeys会触发属性不存在的错误。

修复方案

修改when条件,先判断用户字典是否包含pubkeys字段,再验证字段内容非空,确保任务自动跳过无公钥配置的用户。

完整任务代码

- name: 部署用户公钥到authorized_keys
  ansible.posix.authorized_key:
    user: "{{ item.name }}"
    key: "{{ item.pubkeys }}"
    state: present
  loop: "{{ provisioning_user }}"
  when: "'pubkeys' in item and item.pubkeys | default([]) | length > 0"

条件说明

  • 'pubkeys' in item:检查当前循环的用户字典中是否存在pubkeys字段,避免直接访问不存在的键触发错误
  • item.pubkeys | default([]) | length > 0:确保pubkeys字段有实际内容(非空列表/字符串),避免添加空公钥

另一种等价写法

使用dict.get()方法安全获取字段,不存在时返回None,再判断非空:

when: item.get('pubkeys') | default([]) | length > 0

测试验证

当provisioning_user列表包含如下内容时:

provisioning_user:
  - name: testuser1
    pubkeys:
      - "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ..."
  - name: testuser2
    # 未配置pubkeys字段

任务会自动为testuser1部署公钥,跳过testuser2,且不会触发错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 06:35:45