Ansible中group_vars定义的ansible_ssh_pass配合delegate_to失效
问题分析
通过delegate_to委托任务到DRAC接口时,Ansible默认沿用当前play目标主机(hypervisors组)的连接凭据,不会自动加载被委托主机(oobs组)的group_vars中定义的ansible_ssh_pass。哪怕hostvars里能查到被委托主机的凭据,连接建立阶段也不会自动切换使用,最终导致密码验证失败。
解决方法
在委托任务里显式指定要使用的被委托主机凭据:
- name: test oob delegation hosts: hypervisors gather_facts: false tasks: - name: Get DRAC sysinfo raw: getsvctag register: svctag_res delegate_to: "{{ oob_interface }}" vars: # 直接引用被委托主机的SSH密码 ansible_ssh_pass: "{{ hostvars[oob_interface].ansible_ssh_pass }}" # 如果oobs组还定义了ansible_user,也要加上这行 # ansible_user: "{{ hostvars[oob_interface].ansible_user }}"
额外说明
- 这种任务级别的变量覆盖,能精准指定委托目标的连接凭据,确保Hashi Vault中取出的密码被正确使用。
- 如果有多组类似的委托任务,可以把凭据引用逻辑封装成变量文件,避免重复编写。
内容的提问来源于stack exchange,提问作者Matt Trimboli
相关产品推荐
相关产品推荐

