Wprowadzenie
W prywatnych repozytoriach CI i Source Control, takich jak Gitlab-ce, można skopiować ~ / .vault_pass.txt na serwer i pozwolić, aby używał go do odszyfrowywania plików przy użyciu Ansible.
Problem
W publicznych repozytoriach CI i Source Control, takich jak Bitbucket, nie można skopiować pliku ~ / .vault_pass.txt na sam serwer CI.
Dyskusja
W Bitbucket można zdefiniować zaszyfrowane zmienne, ale po sprawdzeniu tego pliku jedynymi zmiennymi powiązanymi z VAULT są:
ANSIBLE_ASK_VAULT_PASS
ANSIBLE_VAULT_PASSWORD_FILE
Te zmienne nie są opcją rozwiązania problemu, ponieważ gdy ANSIBLE_ASK_VAULT_PASS
jest ustawiony, ansible-vault
nadal monituje:
user@host $
Vault password:
Po wprowadzeniu tego samego hasła można otworzyć zaszyfrowany plik, ale jego celem jest otwarcie pliku bez potrzeby podawania pliku lub wpisywania hasła w monicie.
Trwała kolejna próba rozwiązania problemu export ANSIBLE_ASK_VAULT_PASS=<ansible-vault-password>
, ale tryb interaktywny nadal występuje.
Inną opcją jest export ANSIBLE_VAULT_PASSWORD_FILE=~/.vault_pass.txt
, ale następnie plik ten musi zostać przekazany do repozytorium, ale repozytoria kontroli źródła nie powinny zawierać haseł.
Odpowiedzi:
--vault-password-file
zamiast tego może wskazywać na skrypt wykonywalny, który zapisuje na standardowe wyjście. Ta mało znana funkcja powinna rozwiązać Twój problem.Najpierw napisz prosty, wykonywalny skrypt, który wypisuje systemową zmienną środowiskową i sprawdź to w kontroli źródła. Następnie użyj funkcji zaszyfrowanej zmiennej Bitbucket, aby ustawić tę zmienną środowiskową na klucz tajny w ansible-vault. Na koniec wykonaj tak:
ansible-playbook site.yml --vault-password-file ./mypass.sh
.Bibliografia:
http://docs.ansible.com/ansible/playbooks_vault.html#running-a-playbook-with-vault
https://groups.google.com/forum/#!topic/ansible-devel/1vFc3y6Ogto
źródło
echo $VAR
na przykład, a ten var zostanie ustawiony w interfejsie BitBucket?([Errno 8] Exec format error). If this is not a script, remove the executable bit from the file.
Za pomocą
doprowadzony:
Na podstawie tego postu w bitbucket-pipelines zdefiniowano:
źródło
Możesz mieć zestaw testowy, który nie uruchamia produkcji, i ładować dla nich różne pliki.
Utwórz host_vars / localhost / vault, który działa tylko dla lokalnej instalacji testowej.
W ten sposób możesz użyć hasła do otwartego skarbca, które działa tylko dla tego lokalnego skarbca hosta.
źródło