2015-04-29 8 views

risposta

26

Puoi fare th è molto ordinatamente, in modo che i normali strumenti git come git log e git diff possano vedere all'interno dei file vaulted, utilizzando un driver git diff personalizzato e .gitattributes.

  • Assicurarsi che la password vault è in .vault_password e che tale file non è commesso - si dovrebbe anche aggiungere al .gitignore.
  • Aggiungere un file .gitattributes che corrisponda a tutti i file nel repository crittografati con ansible-vault e assegnare loro l'attributo diff=ansible-vault. Ad esempio, ho:

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

    È inoltre possibile utilizzare i modelli con caratteri jolly - il primo elemento di ogni riga, il modello, segue le stesse regole .gitignore file. L'opzione merge=binary dice a git di non tentare di fare un'unione a tre vie di questi file.

  • poi si deve impostare il driver diff per i file con l'attributo diff=ansible-vault a ansible-vault view:

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

E che dovrebbe essere - quando git sta calcolando diff dei file tuo modello corrisponde, esso li decifreremo prima.

+0

È anche utile aggiungere il filtro 'merge = binary' per impedire git dall'unione a 3 vie di file crittografati e' git config diff.ansible-vault.cachetextconv false' per impedire la memorizzazione nella cache delle informazioni sensibili: https: // selivan. github.io/2016/11/29/ansible-human-readable-git-diff-for-vault.html –

+0

Il mio 'PAGER' era' most' invece di 'less'. L'esecuzione di un 'git diff' mi ha bloccato nel prompt' Vault password: '. Ho dovuto impostare il mio git cercapersone per usare 'cat' eseguendo il comando' git config --global core.pager cat' – GMaster

+0

@Selivanov Pavel Grazie per il suggerimento - Ho aggiornato la risposta. –

8

Quindi dopo alcuni scavi ho costruito la soluzione non banale.

Prima di tutto, memorizzare la password del Vault nel file (.gitignored) .vault_password.

Nell'esempio che segue un HEAD e HEAD~2 versioni del file inventory/group_vars/xyz/vault.yml sono 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)) 
Problemi correlati