在RedHat/CentOS 7上用Python3运行Ansible遇python3-dnf问题求方案
在RHEL 7上使用Python 3作为Ansible解释器的解决方案
我之前碰到过一模一样的问题!在RHEL 7上确实没有python3-dnf包——毕竟DNF是从RHEL 8才开始成为默认包管理器的,RHEL 7一直用的是YUM。下面是我当时解决这个问题的完整步骤:
1. 安装Python 3及对应包管理绑定
首先得确保RHEL 7上有Python 3,以及让Python 3能和YUM交互的绑定包:
- 先检查是否有EPEL仓库(RHEL 7默认没有Python 3的官方源),如果没有的话先安装:
sudo yum install epel-release - 接着安装Python 3和
python3-yum(这就是RHEL 7上对应RHEL 8python3-dnf的替代包):sudo yum install python3 python3-yum
2. 配置Ansible使用Python 3作为解释器
有几种方式可以指定,你可以根据自己的环境选最方便的:
- 方式一:在Playbook中直接指定
在你的Playbook开头添加变量,明确指定解释器路径:- hosts: your_rhel7_hosts vars: ansible_python_interpreter: /usr/bin/python3 tasks: # 这里写你的具体任务 - 方式二:在Inventory文件中按组配置
如果你的RHEL 7主机是一个单独的组,可以在Inventory里给这个组统一设置:[rhel7_servers] server1.example.com server2.example.com [rhel7_servers:vars] ansible_python_interpreter=/usr/bin/python3 - 方式三:全局配置(适用于混合环境)
编辑ansible.cfg文件,添加自动检测的配置,让Ansible优先选Python 3:
这个配置会让Ansible自动探测目标主机的Python版本,优先用Python 3,找不到再 fallback 到Python 2,对同时管理RHEL7和RHEL8的环境特别友好。[defaults] interpreter_python = auto_silent
3. 验证配置是否生效
执行一条简单的命令来确认Python版本:
ansible your_rhel7_hosts -m setup -a "filter=ansible_python_version"
如果返回结果显示的是Python 3.x的版本,就说明配置成功了!
内容的提问来源于stack exchange,提问作者Astin Gengo
相关产品推荐
相关产品推荐

