Introducción
En un CI privado y repositorios de control de código fuente como Gitlab-ce, es posible copiar un ~ / .vault_pass.txt en el servidor y dejar que el CI lo use para descifrar archivos usando Ansible.
Problema
En los CI públicos y los repositorios de control de código fuente como Bitbucket, no es posible copiar un ~ / .vault_pass.txt en el servidor de CI.
Discusión
En Bitbucket es posible definir variables encriptadas, pero cuando este archivo está marcado, las únicas variables relacionadas con VAULT son:
ANSIBLE_ASK_VAULT_PASS
ANSIBLE_VAULT_PASSWORD_FILE
Estas variables no son una opción para resolver el problema, ya que cuando ANSIBLE_ASK_VAULT_PASS
se configura el sistema ansible-vault
todavía se solicita:
user@host $
Vault password:
Cuando se ingresa la misma contraseña, puede abrir el archivo cifrado, pero el objetivo es abrir el archivo sin necesidad de un archivo o ingresar una contraseña en un mensaje.
Se estaba ejecutando otro intento de resolver el problema export ANSIBLE_ASK_VAULT_PASS=<ansible-vault-password>
, pero el modo interactivo persiste.
Otra opción es export ANSIBLE_VAULT_PASSWORD_FILE=~/.vault_pass.txt
, pero luego este archivo debe enviarse al repositorio, pero los repositorios de control de origen no deben contener contraseñas.
Respuestas:
--vault-password-file
en su lugar, puede apuntar a un script ejecutable que escribe en stdout. Esta característica poco conocida debería resolver su problema.Primero, escriba un script simple y ejecutable que imprima una variable de entorno del sistema, y verifíquelo en su control de origen. Luego, use la función de variable cifrada de Bitbucket para establecer esa variable de entorno en su secreto ansible-vault. Finalmente, ejecuta así:
ansible-playbook site.yml --vault-password-file ./mypass.sh
.Referencias
http://docs.ansible.com/ansible/playbooks_vault.html#running-a-playbook-with-vault
https://groups.google.com/forum/#!topic/ansible-devel/1vFc3y6Ogto
fuente
echo $VAR
por ejemplo, y esta var se establecerá en la interfaz de usuario de BitBucket?([Errno 8] Exec format error). If this is not a script, remove the executable bit from the file.
Utilizando
resultó en:
Según esta publicación, se definió lo siguiente en bitbucket-pipelines:
fuente
Podría tener una configuración de prueba que no ejecute la producción y cargar archivos diferentes para ellos.
Cree un host_vars / localhost / vault que solo funcione para la instalación de prueba local.
De esa manera, podría usar una contraseña de bóveda abierta que funcione solo para esa bóveda de host local.
fuente