Jeśli chcesz użyć modułu psycopg2 z virtualenv, jednym z możliwych rozwiązań byłoby
Kroki następuje:
1) Utworzony ubuntu 16,04 Vagrant maszynę i zainstalowane PostgreSQL.
2) Używane do ansibl moduł postgresql_db aby utworzyć nową bazę danych i nie powiodło się z powodu błędu FAILED! => {"changed": false, "failed": true, "msg": "the python psycopg2 module is required"}
3) Tworzenie virtualenv i zainstalować psycopg2 w virtualenv
virtualenv venv -p /usr/bin/python (Note: python2.7)
source venv/bin/activate
pip install psycopg2
4) Uruchom ansibl-playbook z ansible_python_interpreter, aby wskazać interpreter python z virtualenv, a zadanie tworzenia bazy danych powiodło się. Ansibl polecenia i zawartość są następujące
---
- hosts: vagrant
sudo: true
pre_tasks:
- raw: test -e /usr/bin/python || (apt -y update && apt install -y python-minimal)
- setup:
tasks:
- name: db create
postgresql_db:
name: acme
become_user: postgres
ansibl-PlayBook komenda
ansible-playbook playbook.yml -e "ansible_python_interpreter=/home/ubuntu/venv/bin/python"
Korzystanie z parametru „ansible_python_interpreter” jest wielkim wskazówka. Przed zaakceptowaniem odpowiedzi: czy nie byłoby bardziej sensowne ustawienie jej w konfiguracji magazynu, jak to opisano tutaj: http://docs.ansible.com/ansible/intro_inventory.html? –
@ PeterTröger Istnieje wiele sposobów określania zmiennej ansible_python_interpreter, zależy to od moich preferencji użytkownika. Jeśli chcesz stałe podejście, możesz ustawić go w ekwipunku lub jako zmienną środowiskową na poziomie gry w sekcji gospodarzy. – tux