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 atributodiff=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ónmerge=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 laansible-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.