Ansible循环when条件失效:仅为含pubkeys用户部署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
相关产品推荐
相关产品推荐

