我在 Python3 和 Enterprise Linux 8 (Rocky Linux 8) 之上使用 Ansible。
当我尝试使用json_query
时,出现以下错误:
fatal: [ansible]: FAILED! => {"msg": "You need to install \"jmespath\" prior to running json_query filter"}
但是 Python 模块似乎已经安装:
# dnf install python3-jmespath
Last metadata expiration check: 1:44:38 ago on Mi 02 Nov 2022 12:54:28 CET.
Package python3-jmespath-0.9.0-11.el8.noarch is already installed.
Dependencies resolved.
Nothing to do.
Complete!
# pip3 install jmespath
WARNING: Running pip install with root privileges is generally not a good idea. Try `pip3 install --user` instead.
Requirement already satisfied: jmespath in /usr/lib/python3.6/site-packages
我jmespath
在交互式 Python 解释器中进行了测试,它运行正常,没有错误。这似乎可以确认 Python 模块已安装并且可以正常工作。
似乎只有在使用 Ansible 时才会出现此问题。
这是我用于测试的剧本:
---
- name: test json_query
hosts: ansible
vars:
data:
list1:
one:
name: "hello"
two:
name: "world"
tasks:
- name: search variable
ansible.builtin.debug:
var: item
loop: "{{ data | community.general.json_query('list1[*].name') }}"
我错过了什么?
我能够弄清楚。
解释:
本系统安装了两个版本的python3:
python3.6 似乎是该系统上的默认 Python 版本:
看起来:
jmespath
需要分别为两个版本安装该模块。运行上述
pip3.8
命令后,错误消失了。Ansible 任务在远程服务器上执行。您需要确保在那里安装了所需的模块。