我希望在ansible保险库文件中看到实际的git提交更改。
有一种简单的方法可以达到这个目的吗?
答案 0 :(得分:49)
你可以非常巧妙地做到这一点,这样普通的git工具,如git log
和git diff
,可以使用自定义git diff驱动程序和.gitattributes
在拱形文件中查看。
.vault_password
且该文件未已提交 - 您还应将其添加到.gitignore
。添加一个.gitattributes
文件,该文件与存储库中使用ansible-vault加密的任何文件相匹配,并为其提供属性diff=ansible-vault
。例如,我有:
env_vars/production.yml diff=ansible-vault merge=binary
env_vars/staging.yml diff=ansible-vault merge=binary
您还可以使用通配模式 - 每行的第一个元素(模式)遵循与.gitignore
文件相同的规则。 merge=binary
选项告诉git不要尝试对这些文件进行三向合并。
然后您必须为属性为diff=ansible-vault
的文件设置差异驱动程序为ansible-vault view
:
git config --global diff.ansible-vault.textconv "ansible-vault view"
应该是这样 - 当git计算你的模式匹配的文件的差异时,它会先解密它们。
答案 1 :(得分:9)
因此,经过一些挖掘,我构建了非平凡的解决方案。
首先将您的保管库密码存储到(.gitignored).vault_password
文件中。
在以下示例中,文件HEAD
的{{1}}和HEAD~2
版本为vimdiff-ed:
inventory/group_vars/xyz/vault.yml
答案 2 :(得分:8)
答案 3 :(得分:1)
为完整性起见,值得一提的是如何为全局文件存储配置文件的差异。例如,我在这里使用了很多无用的存储库,几乎所有存储库都有一些秘密的秘密。所以我想要的配置是全局的,并且可以从一台机器移植到另一台机器。
在您的~/.gitconfig
中添加以下部分:
[core]
# The following line defines a global .gitattributes file
attributesfile = ~/.gitattributes
[diff "ansible-vault"]
textconv = "ansible-vault view"
要使其正常工作,您需要为ansible-vaulted文件指定某种命名模式,无论如何这都是一件好事。就我而言,我想用扩展名.vault.yml
来命名它们。所以我的~/.gitattributes
文件看起来像这样:
*.vault.yml diff=ansible-vault merge=binary
最后,为避免始终输入密码,请确保在每个存储库中的某个方便位置放置一个文件(通常在根目录中放置.vault
之类的文件)。该文件必须包含纯文本密码(当然应为.gitignore
d)或生成该密码的可执行脚本。
通过将以下行添加到全局或本地.vault
,继续进行并告诉ansible使用ansible.cfg
文件:
vault_password_file = .vault
完成。现在运行git diff
将产生您希望从非Vault文件中读取的差异:)
答案 4 :(得分:1)
给 Windows 用户的提示:
在 Windows 上运行时会遇到问题,即 ansible-vault 不可用。但是你可以将它安装在你的 WSL 中。
在 WSL 中安装 ansible-vault 后,以下对我有用
.gitattributes
**/vault.yml diff=ansible-vault
.gitconfig
[core]
attributesfile = ~/.gitattributes
[diff "ansible-vault"]
textconv = sh -c 'cat $0 | wsl ansible-vault decrypt --output - --vault-password-file=~/.vault_pass'
保险库密码必须在 ~/.vault_pass 中的 wsl 内