将Ansible从Python2.x升级到Python3.x的步骤和故障排除方法

概况

2020年1月1日起,Python 2.7 的支持将正式结束。因此,在这个时机上,我们也会将 Ansible 的执行环境迁移到 3.x 系列。我想保留下迁移的步骤。

步骤

    1. 安装Python3.x

根据不同的平台进行安装

例如(Centos)
> yum install -y python36 python36-pip python36-devel

确认pip3是否可用,并升级pip
如果只有pip-3.x而没有pip3,请在执行以下升级命令后才能使用pip3

> pip-3.x install –upgrade pip

安装Python3.x的Ansible

如果已经使用Ansible,请先删除Python2.x的Ansible,然后安装Python3.x的Ansible

> pip uninstall ansible
> pip3 install ansible

如果要引入新的Ansible

> pip3 install ansible

版本确认
请确认Python版本为3.x

> ansible –version

ansible 2.8.5
config file = /root/.ansible.cfg
configured module search path = [‘/root/.ansible/plugins/modules’, ‘/usr/share/ansible/plugins/modules’]
ansible python module location = /usr/local/lib/python3.6/site-packages/ansible
executable location = /usr/local/bin/ansible
python version = 3.6.8 (default, Aug 2 2019, 17:42:44) [GCC 4.8.5 20150623 (Red Hat 4.8.5-28)]

指定Ansible使用的Python
使用whereis python3命令查找python3命令的位置
有以下三种方法:

在ansible.cfg的[defaults]部分中设置interpreter_python=/usr/bin/python3
设置变量ansible_python_interpreter=/usr/bin/python3
设置环境变量INTERPRETER_PYTHON=/usr/bin/python3

若要设置以上配置,则Ansible将使用Python3对操作主机进行操作。如果只想在Ansible运行环境中应用Python3,可以在host_vars或group_vars中创建local.yml文件,并设置ansible_python_interpreter: /usr/bin/python3。

故障排除

我将介绍以下错误出现时的对应解决方法。如果有其他未在下面列出的错误等情况,请您告知,我将进行追加。

属性错误: 模块 ‘enum’ 没有 ‘IntFlag’ 属性。

> pip3 uninstall enum34

有关Ansible Tower和AWX的信息

需要创建Python3.x的虚拟环境,并安装Ansible以及其他Tower/AWX所需的模块等。
默认路径是/var/lib/awx/venv/xxx。

我們按照公式的步驟來進行操作。

AWX 6.1.0的中文本地化版本。

在AWX 6.1.0中,根据上述公式步骤无法成功进行设置。。。

只需要一种选择:

虚拟环境路径是/var/lib/awx/venv,分别已设置好了/var/lib/awx/venv/ansible(Python2.x)和/var/lib/awx/venv/awx(Python3.x)。
在AWX的默认设置中,使用的是/var/lib/awx/venv/ansible。
在配置界面的“Custom virtual environment paths”中设置了/var/lib/awx/venv,但是无法检测到/var/lib/awx/venv/awx(可以在api/v2/config/custom_virtualenvs中确认),即使进行PATCH操作也无法修复。

/var/lib/awx/venv/awx is not a valid virtualenv in /var/lib/awx/venv

给出了错误。。。

也许只有在/var/lib/awx/venv之外创建venv才能被认可吗?

可以考虑

    • Ansible2.8の新機能1 – Interpreter Discovery

 

    • [Ansible] 利用する Python をタスクごとに切り替える方法(ansible_python_interpreter をタスク変数で指定)

 

    python_3_support
广告
将在 10 秒后关闭
bannerAds