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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 14:01:05