Я бы хотел увидеть фактические изменения git commit в файле unsible vault.
Есть ли простой способ достижения этого?
Я бы хотел увидеть фактические изменения git commit в файле unsible vault.
Есть ли простой способ достижения этого?
Вы можете сделать это очень аккуратно, чтобы обычные инструменты git, такие как git log
и git diff
, могли видеть внутри сводчатых файлов, используя специальный драйвер git diff и .gitattributes
.
.vault_password
и что этот файл не был зафиксирован - вы также должны добавить его в .gitignore
.Добавьте файл .gitattributes
, который соответствует любым файлам вашего репозитория, которые зашифрованы с помощью скрытого хранилища и дают им атрибут 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 для файлов с атрибутом diff=ansible-vault
на ansible-vault view
:
git config --global diff.ansible-vault.textconv "ansible-vault view"
И это должно быть - когда git вычисляет разности файлов, которые соответствует вашему шаблону, он сначала расшифровывает их.
Итак, после некоторого рытья я построил нетривиальное решение.
Прежде всего сохраните свой пароль хранилища в файле (.gitignored) .vault_password
.
В следующем примере версии HEAD
и HEAD~2
файла inventory/group_vars/xyz/vault.yml
являются vimdiff-ed:
vimdiff \
<(ansible-vault view --vault-password-file=.vault_password \
<(git show HEAD:inventory/group_vars/xyz/vault.yml)) \
<(ansible-vault view --vault-password-file=.vault_password \
<(git show HEAD~2:inventory/group_vars/xyz/vault.yml))
Вы можете использовать утилиту atk-git-diff
из https://github.com/dellis23/ansible-toolkit