Ansible循环任务条件判断失效求助:仅为含ssh_pubkey用户追加公钥
问题分析
从错误日志能看到,实际执行的判断条件是item.username.ssh_pubkey is defined,但你的role_users_user_details变量里,每个用户条目的ssh_pubkey是直接属于item的属性(并非item.username的子属性),这就导致条件永远不成立,任务被错误跳过。
解决方案
1. 修正条件表达式与缩进
确保when是任务级属性(和loop缩进级别一致),并且条件正确指向item的ssh_pubkey字段:
- name: Append user pubkey in authorized_keys ansible.builtin.lineinfile: dest: /home/{{ item.username }}/.ssh/authorized_keys line: "{{ item.ssh_pubkey }}" state: present insertafter: EOF loop: "{{ role_users_user_details }}" when: item.ssh_pubkey is defined
2. 可选:增强条件判断(排除空值)
如果需要避免ssh_pubkey存在但为空字符串的情况,可以把条件改成:
when: item.ssh_pubkey is defined and item.ssh_pubkey | trim | length > 0
3. 确认变量结构正确性
你的vars.yml里的变量结构是正确的,ssh_pubkey直接嵌套在用户条目下,无需修改:
role_users_user_details: - username: "{{ role_users_remote_username }}" group: "{{ role_users_remote_username }}" ssh_pubkey: "test-entry" - username: ansible_usr group: ansible_usr
验证效果
修正后,带有ssh_pubkey的用户条目会执行追加公钥任务,无该字段的用户条目会被跳过,完全符合需求。
内容的提问来源于stack exchange,提问作者Jawor
相关产品推荐
相关产品推荐

