Ansible Playbook未调用Vault加密值,仍使用group_vars默认值
问题解决指南
关键问题与修复步骤
1. 加密文件为隐藏文件,Ansible不会自动加载
Ansible默认仅自动读取group_vars/[组名]/下不以.开头的非隐藏文件,你创建的.local_vault.yml属于隐藏文件,会被系统直接跳过。
修复操作:
重命名加密文件,去掉文件名开头的.:
mv group_vars/local/.local_vault.yml group_vars/local/local_vault.yml
2. 运行Playbook时未指定解密用的vault-id
创建加密文件时你指定了--vault-id local@.vault-secret,但运行Playbook时如果不提供该参数,Ansible无法解密文件,自然不会加载里面的变量。
修复操作:
运行Playbook时加上vault-id参数:
ansible-playbook local_playbook.yml --vault-id local@.vault-secret
也可以在ansible.cfg中配置默认vault-id,避免每次手动输入:
[defaults] vault_id = local@.vault-secret
3. 变量优先级与命名检查
- 确认加密文件里定义的变量是
var_myvar(和Playbook、roles中引用的变量名完全一致);如果加密文件里写的是myvar,会和local.yml里的myvar产生冲突——Ansible会按文件名字母顺序加载group_vars下的文件,后加载的文件变量会覆盖先加载的。如果想让加密文件的变量覆盖默认值,可以给加密文件起一个字母顺序靠后的名字(比如z_local_vault.yml)。 - 若不需要
local.yml里的默认值,直接删除local.yml中的myvar: <FIXME>即可,彻底避免变量冲突。
内容的提问来源于stack exchange,提问作者khteh
相关产品推荐
相关产品推荐

