introduction
Sur un CI privé et des référentiels de contrôle de source comme Gitlab-ce, il est possible de copier un ~ / .vault_pass.txt sur le serveur et de le laisser utiliser par le CI pour déchiffrer des fichiers à l'aide d'Ansible.
Problème
Sur les CI publics et les référentiels de contrôle de source comme Bitbucket, il n'est pas possible de copier un ~ / .vault_pass.txt sur le serveur CI lui-même.
Discussion
Dans Bitbucket, il est possible de définir des variables chiffrées, mais lorsque ce fichier est vérifié, les seules variables liées à VAULT sont:
ANSIBLE_ASK_VAULT_PASS
ANSIBLE_VAULT_PASSWORD_FILE
Ces variables ne sont pas une option pour résoudre le problème, car lorsque le ANSIBLE_ASK_VAULT_PASS
paramètre est défini, vous êtes ansible-vault
toujours invité:
user@host $
Vault password:
Lorsque le même mot de passe est entré, il peut ouvrir le fichier crypté, mais le but est d'ouvrir le fichier sans avoir besoin d'un fichier ou entrer un mot de passe dans une invite.
Une autre tentative de résolution du problème était en cours d'exécution export ANSIBLE_ASK_VAULT_PASS=<ansible-vault-password>
, mais le mode interactif persiste.
Une autre option est export ANSIBLE_VAULT_PASSWORD_FILE=~/.vault_pass.txt
, mais ce fichier doit être poussé vers le référentiel, mais les référentiels de contrôle source ne doivent pas contenir de mots de passe.
Réponses:
--vault-password-file
peut plutôt pointer vers un script exécutable qui écrit sur stdout. Cette fonctionnalité peu connue devrait résoudre votre problème.Tout d'abord, écrivez un script exécutable simple qui imprime une variable d'environnement système et vérifiez-le dans votre contrôle de code source. Ensuite, utilisez la fonction de variable cryptée de Bitbucket pour définir cette variable d'environnement sur votre secret ansible-vault. Enfin, exécutez comme suit:
ansible-playbook site.yml --vault-password-file ./mypass.sh
.Les références:
http://docs.ansible.com/ansible/playbooks_vault.html#running-a-playbook-with-vault
https://groups.google.com/forum/#!topic/ansible-devel/1vFc3y6Ogto
la source
echo $VAR
par exemple et cette var sera définie dans l'interface utilisateur BitBucket?([Errno 8] Exec format error). If this is not a script, remove the executable bit from the file.
En utilisant
a donné lieu à:
Sur la base de ce post, les éléments suivants ont été définis dans bitbucket-pipelines:
la source
Vous pouvez avoir une configuration de test qui n'exécute pas la production et charger différents fichiers pour ceux-ci.
Créez un host_vars / localhost / vault qui ne fonctionne que pour l'installation de test locale.
De cette façon, vous pouvez utiliser un mot de passe de coffre ouvert qui ne fonctionne que pour ce coffre hôte local.
la source