2015-04-29 10 views

Trả lời

26

Bạn có thể làm thứ rất gọn gàng, do đó các công cụ git thông thường như git loggit diff có thể thấy bên trong các tệp có vaulted, sử dụng trình điều khiển git diff tùy chỉnh và .gitattributes.

  • Hãy chắc chắn rằng mật khẩu của bạn là vault trong .vault_password và rằng tập tin đó là không cam - bạn cũng nên thêm nó vào .gitignore.
  • Thêm tệp .gitattributes khớp với bất kỳ tệp nào trong kho lưu trữ của bạn được mã hóa với két an toàn và cung cấp cho chúng thuộc tính diff=ansible-vault. Ví dụ, tôi có:

    env_vars/production.yml diff=ansible-vault merge=binary 
    env_vars/staging.yml diff=ansible-vault merge=binary 
    

    Bạn cũng có thể sử dụng các mẫu ký tự đại diện - phần tử đầu tiên của mỗi dòng, mô hình, theo quy tắc tương tự như .gitignore tập tin. Tùy chọn merge=binary yêu cầu git không cố gắng thực hiện hợp nhất ba cách của các tệp này.

  • Sau đó, bạn phải thiết lập các tài xế khác cho các tập tin với thuộc tính diff=ansible-vault để ansible-vault view:

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

Và đó nên được nó - khi git được tính diffs các file mẫu của bạn phù hợp, nó sẽ giải mã chúng trước.

+0

Bạn cũng nên thêm bộ lọc 'merge = binary' để ngăn git từ cách hợp nhất 3 tập tin được mã hóa và' git config diff.ansible-vault.cachetextconv false' để ngăn chặn việc lưu thông tin nhạy cảm: https: // selivan. github.io/2016/11/29/ansible-human-readable-git-diff-for-vault.html –

+0

My 'PAGER' là' most' thay vì 'less'. Việc thực thi 'git diff' khiến tôi bị kẹt trong lời nhắc' Vault password: '. Tôi đã phải thiết lập máy nhắn tin git của mình để sử dụng 'cat' bằng cách chạy lệnh' git config --global core.pager cat' – GMaster

+0

@Selivanov Pavel Cảm ơn lời khuyên đó - Tôi đã cập nhật câu trả lời với điều đó. –

8

Vì vậy, sau một số lần đào, tôi đã xây dựng giải pháp không tầm thường.

Trước hết, hãy lưu trữ mật khẩu của bạn vào tệp (.gitignored) .vault_password.

Trong ví dụ sau một HEADHEAD~2 phiên bản của tập tin inventory/group_vars/xyz/vault.yml là 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)) 
Các vấn đề liên quan