Как отличить измененные изменения хранилища?

Я бы хотел увидеть фактические изменения git commit в файле unsible vault.

Есть ли простой способ достижения этого?

Ответы

Ответ 1

Вы можете сделать это очень аккуратно, чтобы обычные инструменты 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 вычисляет разности файлов, которые соответствует вашему шаблону, он сначала расшифровывает их.

Ответ 2

Итак, после некоторого рытья я построил нетривиальное решение.

Прежде всего сохраните свой пароль хранилища в файле (.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))