如何使用Ansible ad-hoc命令查看Ansible Vault内的加密变量值
问题原因
报错和变量是否被Ansible Vault加密没有直接关系:
--include_vars是Ansible Playbook里调用的模块名,根本不是ansible临时(ad-hoc)命令支持的命令行参数,所以会直接报未识别参数的错误。- 之前查普通变量能成功,是因为
datadog_agent_system_probe_enabled存放在Ansible默认会自动加载的host_vars/group_vars路径下,启动时自动读取了,不需要手动指定加载文件,和变量是否加密无关。
可用查询方法
方法1:直接解密Vault文件查原始值(效率最高)
如果只是要确认Vault文件里存储的这个key本身的值,不需要验证运行时的变量覆盖逻辑,直接用ansible-vault自带的view命令即可:
ansible-vault view inventory/common/vault-common-vars.yml
执行后输入你设置的Vault密码,就能直接看到解密后的完整文件内容,直接查找datadog_agent_api_key对应的取值即可。
方法2:用ad-hoc命令查运行时最终变量值
如果要确认Ansible对接目标主机时,经过所有变量优先级规则加载后,这个变量最终的生效值(排查有没有被其他更高优先级变量覆盖的场景),用-e(额外变量参数)加载指定变量文件,同时加上Vault解密参数即可,正确命令如下:
ansible myhost.domain.com -i inventory/hosts.ini --connection=local -m debug -a var=datadog_agent_api_key -e @inventory/common/vault-common-vars.yml --ask-vault-pass
关键参数说明:
-e @inventory/common/vault-common-vars.yml:加载指定路径的变量文件,前面的@是固定写法,标识后面传的是文件路径,明文、Vault加密的变量文件都支持用这种方式加载--ask-vault-pass:执行命令时交互式提示输入Vault密码;如果你的Vault密码存在本地权限严格控制的密码文件里,可以把这个参数替换为--vault-password-file=/你的/密码文件/路径,不需要手动输入密码就能执行。
补充:如果你把这个Vault文件放到inventory对应主机/主机组的group_vars、host_vars目录下,同时在ansible.cfg里配置好了默认的Vault密码文件路径,连
-e参数都不用加,直接跑debug命令就会自动解密加载变量。
内容的提问来源于stack exchange,提问作者Bill Ke
相关产品推荐
相关产品推荐

