Nếu bạn muốn sử dụng các mô-đun psycopg2 từ virtualenv, một giải pháp khả thi sẽ là
bước sau:
1) Tạo một ubuntu 16,04 máy lang thang và postgresql cài đặt.
2) sử dụng các mô-đun postgresql_db ansible để tạo ra một cơ sở dữ liệu mới và thất bại với lỗi FAILED! => {"changed": false, "failed": true, "msg": "the python psycopg2 module is required"}
3) Tạo một virtualenv và cài đặt psycopg2 trong virtualenv
virtualenv venv -p /usr/bin/python (Note: python2.7)
source venv/bin/activate
pip install psycopg2
4) Chạy ansible-playbook với ansible_python_interpreter để trỏ đến trình thông dịch python từ virtualenv và tác vụ tạo cơ sở dữ liệu đã thành công. Các lệnh và nội dung ansible như sau,
---
- 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
các ansible-playbook lệnh
ansible-playbook playbook.yml -e "ansible_python_interpreter=/home/ubuntu/venv/bin/python"
Sử dụng "ansible_python_interpreter" tham số là một gợi ý tuyệt vời. Trước khi chấp nhận câu trả lời: Sẽ không có ý nghĩa hơn khi đặt nó trong cấu hình khoảng không quảng cáo, như được mô tả ở đây: http://docs.ansible.com/ansible/intro_inventory.html? –
@ PeterTröger Có nhiều cách để xác định biến ansible_python_interpreter, nó phụ thuộc vào sở thích của người dùng mà tôi tin tưởng. Nếu bạn muốn một cách tiếp cận liên tục, bạn có thể đặt nó trong khoảng không quảng cáo hoặc dưới dạng biến môi trường ở cấp độ phát trong phần máy chủ lưu trữ. – tux