Ansible技术问询:如何从Vault传递密码至Unix脚本?
解决Ansible Vault变量未定义问题
核心错误原因
你的问题源于几个细节错误,导致oem_vault变量未被正确加载:
- 文件命名不统一,Vault文件未被正确读取
- YAML内容缩进错误,变量结构无效
- 执行playbook时未提供Vault解密密码
- (可选)playbook中变量文件加载顺序不合理
具体修复步骤
1. 统一Vault文件命名并修正内容缩进
你创建的文件是group_vars/all/oem_vault.yml,但编辑和playbook引用的是oem.yml,先统一文件名:
mv group_vars/all/oem_vault.yml group_vars/all/oem.yml
同时确保Vault文件的YAML缩进正确(YAML对缩进严格要求):
oem_vault: user: sysman password: XXXXXXXXXX
2. 执行playbook时提供Vault解密密码
因为oem.yml是加密的Vault文件,执行playbook必须提供解密密码才能读取变量:
ansible-playbook tgt-blackout-oem-on.yml --ask-vault-pass
如果是自动化场景,也可以用密码文件:
ansible-playbook tgt-blackout-oem-on.yml --vault-password-file /path/to/your-vault-pass.txt
3. 优化playbook变量加载(可选)
group_vars/all目录下的文件会被Ansible自动加载,无需在playbook中手动指定vars_files,可以简化playbook内容:
#!/usr/bin/env ansible-playbook --- - name: Turn blackout on for target clone hosts: hostapp01 any_errors_fatal: true remote_user: ansible become: yes become_user: oracle roles: - oraoem-blackout-on
4. 验证变量加载(可选)
可以在角色任务中添加debug步骤,确认变量是否正确加载:
- name: Verify oem_vault variable debug: var: oem_vault
完成以上步骤后,oem_vault.user和oem_vault.password就能正确传递给shell脚本执行。
内容的提问来源于stack exchange,提问作者AUser
相关产品推荐
相关产品推荐

