我们正在使用Ansible Vault在Ansible Playbook git存储库中存储密码,证书的私钥等。我们所有现有的私有数据都是文本形式的,因此我们可以将其存储在变量中。然后将它们用于模板或与content
复制模块的参数一起使用。
现在,我们有一个Java KeyStore文件,可悲的是它具有二进制格式。因此,它不能存储在变量中-至少我不知道该怎么做。将文件保存在git中但在运行时可用,最简单的方法是对其进行正确加密ansible-playbook
?
我已经尝试过但没有成功的东西:
- 在base64中对二进制文件进行编码,将编码后的数据存储在变量中,并使用带有的模板模块
{{base64_data | b64decode}}
。导致大量的EF BF BD
十六进制转储结果文件。这三个字节对UTF-8中的Unicode替换字符进行编码,因此将二进制数据解释为文本存在问题。 - 在base64中对二进制文件进行编码,将编码后的数据存储在变量中,然后将复制模块与一起使用
content="{{base64_data | b64decode}}"
。Ansible抱怨“一个变量在模块args中插入了一个新参数”。当使用单引号而不是双引号时,Ansible抱怨“错误解析参数字符串”,并将所有二进制数据的副本转储到终端...
从groups.google.com/d/topic/ansible-project/IinZK14FyX4中的讨论中,我得出结论,ansible不支持此功能,您必须自己做一些base64的工作,但是可能会有一些第三方的工作这样可以使它更容易。
—
Antonis Christofides 2015年
谢谢,这看起来不错。会尝试并举报…
—
丹尼尔(Daniel S)2015年
不,可惜它不起作用(请参阅已编辑的问题)。关于ansible的
—
Daniel Sith 2015年
您是否考虑过将其与GPG电话包装在一起?您可以将GPG私钥的ASCII表示形式存储在Ansible Vault中,并使用它来解密您的二进制文件,然后可以将其存储在git中而不会出现问题。
—
Christopher Karel
感谢您的建议,但是这种解决方法比我希望的要复杂得多。我已经考虑过将base64编码的KeyStore复制到目标计算机,并拥有一个在更新时对文件进行解码的处理程序,但是我更喜欢一个不会产生临时文件的解决方案。
—
丹尼尔(Daniel S)2015年