Ansible执行mongodb_shell模块提示pymongo缺失问题排查咨询
问题根因定位
从报错信息可以直接看到,Ansible实际执行任务时用的是默认的/usr/bin/python(CentOS7自带的Python2),而你指定的Python3解释器没有生效,Python2环境下没有安装pymongo模块,因此触发导入错误。
排查解决步骤
- 第一步:修正Python解释器路径的格式错误
你当前任务中定义的ansible_python_interpreter值多了多余空格,错误写法为/ usr / bin / python3,正确写法应为:
路径中存在空格会导致Ansible无法识别有效Python3路径,自动回退到默认的Python2解释器。ansible_python_interpreter: /usr/bin/python3 - 第二步:调整解释器变量的作用范围
旧版本Ansible不支持任务级(task level)的ansible_python_interpreter变量,该变量需要在Play级别或者Inventory级别定义才能生效:
方案1:Play级别定义,直接在play的vars块中添加:
方案2:Inventory级别定义,在你的主机清单中对应主机/组下添加变量:- name: 部署MongoDB相关配置 hosts: mongodb vars: ansible_python_interpreter: /usr/bin/python3 tasks: # 你的原有任务放在这里[mongodb] mongodb-01 ansible_python_interpreter=/usr/bin/python3 mongodb-02 ansible_python_interpreter=/usr/bin/python3 - 第三步:验证解释器和模块有效性
可以在当前Play中添加两个调试任务,确认环境配置正确:
执行后如果打印的解释器路径为- name: 打印Ansible实际使用的Python解释器 debug: var: ansible_playbook_python - name: 验证Python3环境pymongo安装状态 shell: /usr/bin/python3 -c "import pymongo.errors; print('pymongo可用')"/usr/bin/python3,且第二个任务执行成功,说明配置已经生效。 - 第四步:排查变量覆盖问题
如果上述步骤执行后仍然报错,检查是否有更高优先级的变量覆盖了你的解释器配置,比如group_vars/host_vars目录下的变量文件、ansible.cfg中的interpreter_python配置项,优先级更高的配置会覆盖你在任务/Play中定义的值。
内容的提问来源于stack exchange,提问作者noze_potato
相关产品推荐
相关产品推荐

