2015-04-29 2 views

ответ

26

Вы можете сделать очень аккуратно, так что обычные инструменты 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=ansible-vault в ansible-vault view:

    git config --global diff.ansible-vault.textconv "ansible-vault view" 
    

И это должно быть это - когда мерзавец рассчитывает посмотреть различия файлов спичек ваш шаблон, это Сначала дешифруем их.

+0

Также полезно добавить фильтр 'merge = binary', чтобы предотвратить git из трехстороннего слияния зашифрованных файлов и' git config diff.ansible-vault.cachetextconv false', чтобы предотвратить кеширование конфиденциальной информации: https: // selivan. github.io/2016/11/29/ansible-human-readable-git-diff-for-vault.html –

+0

Мой 'PAGER' был' most' вместо 'less'. Выполнение 'git diff' заставило меня застрять в подсказке' Vault password: '. Я должен был установить мой git-пейджер, чтобы использовать 'cat', выполнив команду' git config -global core.pager cat' – GMaster

+0

@Selivanov Pavel Спасибо за этот отзыв - я обновил ответ с этим. –

8

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

Прежде всего сохраните свой пароль хранилища в файле (.gitignored) .vault_password.

В приведенном ниже примере HEAD и HEAD~2 версии файла inventory/group_vars/xyz/vault.yml являются vimdiff-е изд:

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))