community.postgresql.postgresql_query raises `在YYY的Python XXX/ansible-venv/bin/python3.7上导入所需的Python库(psycopg 2)失败`

dba5bblo  于 2023-06-22  发布在  PostgreSQL
关注(0)|答案(1)|浏览(131)

我正在运行Ansible Playbook,虚拟环境ansible_venv激活。
我的剧本在这里被击中了

collect data from DB

  localhost failed | msg: Failed to import the required Python library (psycopg2) on YYY's Python XXX/ansible-venv/bin/python3.7. Please read the module documentation and install it in the appropriate location. If the required library is installed, but Ansible is using the wrong Python interpreter, please consult the documentation on ansible_python_interpreter

其中XXX是隐藏路径。
任务collect data from DB是:

- name: collect data from DB
  community.postgresql.postgresql_query:
  
    login_host: '{{ db_host }}'
    login_user: '{{ db_username }}'
    login_password: '{{ db_password }}'
    db: '{{ db_database }}'
    port: '{{ db_database_port }}'
    
    query: "SELECT EXISTS (SELECT 1 FROM information_schema.tables WHERE table_name = '{{ my_table }}')"
  
  register: qres

运行此playbook的机器无法访问互联网,因此我在机器上手动安装了这些软件包:

/home/myuser/XXX/ansible-venv/lib/python3.7/site-packages/psycopg2
/home/myuser/XXX/ansible-venv/lib/python3.7/site-packages/psycopg2_binary-2.9.6.dist-info    
/home/myuser/XXX/ansible-venv/lib/python3.7/site-packages/psycopg2_binary.libs

为了做到这一点,我已经下载了这些软件包到另一台可以直接访问互联网的机器上,通过使用终端命令pip install psycopg2-binary,然后将文件复制到“ansible机器”。
他们的权限和用户与安装在那里的其他模块相同。
在路径/home/myuser/XXX/ansible-venv/lib/中,除了python3.7之外,我没有任何其他解释器。
但是,我仍然犯了同样的错误。

更新

该错误仅在localhost上引发(在我的示例中为YYY)。
在其他机器上使用community.postgresql.postgresql_query的任务工作。

gtlvzcf8

gtlvzcf81#

我通过在一台可以直接访问互联网的机器(machine 2)上重新构建ansible虚拟环境,然后将其移动到不能直接访问互联网的机器(machine 1)上来解决这个问题。
在机器1上:

pip freeze > requirements.txt

机器上1

virtualenv ansible_venv

source ansible_venv/bin/activate

已重新安装模块

cat requirements.txt | xargs -n 1 pip install

已安装psycopg 2-binary

pip install psycopg2-binary

通过rsync压缩并将ansible_venv文件夹移动到machine 1

相关问题