更新:
我已将配置组织到基于角色的目录结构中。其中一些角色具有包含加密文本的默认变量文件。这是一个经过简化且经过测试但失败的任务列表:
---
- name: 'Include some additional variables'
include_vars:
dir: "{{playbook_dir}}/roles/foo/defaults/vars"
tags: 'debug'
- name: 'Debug: display the variables'
debug:
msg: "{{item}}"
with_items:
- "{{encrypted_text_from_yml_file}}"
tags: 'debug'
- name: 'Deploy Foo plugins'
block:
- name: 'Transfer the folder to the application directory'
synchronize:
src: 'some_src_folder'
dest: "{{some_unencrypted_text_from_another_yml_file}}"
archive: false
recursive: true
tags: 'debug'
但是,在执行我的剧本时,我看到以下错误:
TASK [<some_app> : Transfer the <some_folder> folder to the application directory] **********************************************************************************
fatal: [<some_hostname>]: FAILED! => {"failed": true, "msg": "Decryption failed (no vault secrets would found t
hat could decrypt)"}
正在从密码文件中检索我的凭据。
我在变量包含之后立即抛出了一个调试任务,并显示了所有加密的变量。奇怪的是发生异常的任务块正在使用同步模块。甚至没有使用库中的变量...
知道如何解决这个问题吗?我将详细程度增加到
-vvvv
,但没有看到任何明显的东西。
使用:ansible 2.4.0.0
我解决了这个问题。我不小心截断了 group_vars/all 中的加密字符串。使用
-vvvvv
(注意第 5 个 v)实际上有助于揭示 HMAC 问题。
就我而言,错误是由特殊字符引起的。解密在我的开发机器(arch linux)上工作,但在我的 ci 机器(Gitlab)上运行时失败。我已将密码作为秘密变量注入,但由于密码包含
$
显然解密不起作用。
通过删除所有特殊字符来更改密码后,使用新密码重新输入保管库和加密字符串的密钥,问题就消失了,ci 可以成功解密保管库。
我使用分子测试命令遇到了同样的问题。我尝试使用 --ask-vault-pass 运行剧本,它起作用了,所以我认为问题来自 python 版本或分子,但就我而言,这只是我的Vault-password-file .vault 的名称它列在 .gitignore 文件中。我一改名就很好用了。
这是一种边缘情况,但至少在 Ansible Tower 中仍然可能是导致此错误的原因。
如果您已从凭证(菜单)中删除了 play 中使用的凭证,但没有更新 play,Ansible 仍将使用它,因为它尚未从 play 中删除。