将 Ansible postgresql_user 与来自 VirtualEnv 的 psycopg2 一起使用
Using Ansible postgresql_user with psycopg2 from VirtualEnv
Ansible postgresql_user 模块需要安装 psycopg2:
http://docs.ansible.com/postgresql_user_module.html
如果这是安装在服务器上的VirtualEnv中,Ansible模块如何找到它?
其他 Ansible 模块似乎有明确的 VirtualEnv 支持,所以这只是一个缺失的功能吗?
如果您想使用 virtualenv 中的 psycopg2 模块,一种可能的解决方案是
遵循的步骤:
1) 创建了一个 ubuntu 16.04 vagrant 机器并安装了 postgresql。
2) 使用 ansible postgresql_db 模块创建新数据库失败并出现错误 FAILED! => {"changed": false, "failed": true, "msg": "the python psycopg2 module is required"}
3) 创建一个virtualenv并在virtualenv中安装psycopg2
virtualenv venv -p /usr/bin/python (Note: python2.7)
source venv/bin/activate
pip install psycopg2
4) 运行 ansible-playbook with ansible_python_interpreter 指向来自 virtualenv 的 python 解释器,数据库创建任务成功. ansible命令及内容如下,
---
- 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
ansible-playbook 命令
ansible-playbook playbook.yml -e "ansible_python_interpreter=/home/ubuntu/venv/bin/python"
Ansible postgresql_user 模块需要安装 psycopg2:
http://docs.ansible.com/postgresql_user_module.html
如果这是安装在服务器上的VirtualEnv中,Ansible模块如何找到它?
其他 Ansible 模块似乎有明确的 VirtualEnv 支持,所以这只是一个缺失的功能吗?
如果您想使用 virtualenv 中的 psycopg2 模块,一种可能的解决方案是
遵循的步骤:
1) 创建了一个 ubuntu 16.04 vagrant 机器并安装了 postgresql。
2) 使用 ansible postgresql_db 模块创建新数据库失败并出现错误 FAILED! => {"changed": false, "failed": true, "msg": "the python psycopg2 module is required"}
3) 创建一个virtualenv并在virtualenv中安装psycopg2
virtualenv venv -p /usr/bin/python (Note: python2.7)
source venv/bin/activate
pip install psycopg2
4) 运行 ansible-playbook with ansible_python_interpreter 指向来自 virtualenv 的 python 解释器,数据库创建任务成功. ansible命令及内容如下,
---
- 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
ansible-playbook 命令
ansible-playbook playbook.yml -e "ansible_python_interpreter=/home/ubuntu/venv/bin/python"