trucos tag que name log hace commits commands comentarios codigos git diff ansible ansible-vault

git - tag - ¿Cómo diferenciar los cambios de bóveda?



que es git log (4)

Así que después de una excavación construí la solución no trivial.

En primer lugar, almacene su contraseña de bóveda en el archivo (.gitignored) .vault_password .

En el siguiente ejemplo, las versiones HEAD y HEAD~2 del inventory/group_vars/xyz/vault.yml archivos inventory/group_vars/xyz/vault.yml son 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))

Me gustaría ver los cambios reales de git commit en el archivo de bóveda ansible.

¿Hay una manera fácil de cómo lograr esto?


Para completar, vale la pena mencionar cómo configurar la diferencia para los archivos de bóveda de ansible en todo el mundo. Por ejemplo, trabajo con muchos repositorios ansible aquí y casi todos tienen algunos secretos ocultos. Entonces, lo que quiero es que mi configuración sea global y portátil de una máquina a otra.

En tu ~/.gitconfig agrega estas secciones:

[core] # The following line defines a global .gitattributes file attributesfile = ~/.gitattributes [diff "ansible-vault"] textconv = "ansible-vault view"

Para que esto funcione, necesita algún patrón de nombre para los archivos con bóveda de ansible, lo cual es algo bueno que debería hacer de todos modos. En mi caso, me gusta nombrarlos con la extensión .vault.yml . Así que mi archivo ~/.gitattributes ve así:

*.vault.yml diff=ansible-vault merge=binary

Finalmente, para evitar escribir la contraseña todo el tiempo, asegúrese de tener un archivo en un lugar conveniente en cada repositorio (normalmente algo como .vault , colocado en la raíz). Este archivo debe contener la contraseña en texto sin formato (correctamente .gitignore d, por supuesto) o un script ejecutable que genere dicha contraseña.

Teniendo eso en su lugar, adelante, dile a ansible que use el archivo .vault , agregando la siguiente línea al ansible.cfg global o local:

vault_password_file = .vault

Hecho. Ahora, ejecutar git diff producirá el diff legible que esperaría de archivos no almacenados :)



Puede hacerlo muy bien, para que las herramientas normales de git como git log y git diff puedan ver dentro de los archivos abovedados, utilizando un controlador git diff personalizado y .gitattributes .

  • Asegúrese de que la contraseña de su bóveda esté en .vault_password y que el archivo no esté confirmado; también debe agregarlo a .gitignore .
  • Agregue un archivo .gitattributes que coincida con cualquier archivo en su repositorio que esté cifrado con la bóveda de ansible y déles el atributo diff=ansible-vault . Por ejemplo, tengo:

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

    También puede usar patrones con caracteres comodín: el primer elemento de cada línea, el patrón, sigue las mismas reglas que los archivos .gitignore . La opción merge=binary le dice a git que no intente hacer una combinación de tres vías de estos archivos.

  • Luego, debe configurar el controlador de diferencias para los archivos con el atributo diff=ansible-vault en la ansible-vault view :

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

Y debería ser así: cuando git esté calculando los distintos archivos que coinciden con tu patrón, primero los descifra.