如何修复“与 x.x.xx 的共享连接已关闭”Ansible 错误
在这篇短文中,我们将解释如何解决:“module_stderr”:“与 x.x.x.x 的共享连接已关闭。\r\n”、“module_stdout”:“/bin/sh: /usr/ bin/python: 运行 Ansible 命令时没有这样的文件或目录\r\n”。
以下屏幕截图显示了 Ansible 模块错误。我们在运行 Ansible 命令以在两台新部署的 CentOS 8 服务器上执行命令时遇到此错误。
从错误详细信息来看,连接失败,因为远程系统中的 shell 找不到 Python 解释器 (/usr/bin/python),如下所示该行:“module_stdout”:“/bin/sh:/usr/bin/python:没有这样的文件或目录\r\n”。
检查远程主机后,我们发现系统没有安装Python 2。
他们默认安装了Python 3,其二进制文件是/usr/bin/python3。
根据 Ansible 文档,Ansible(2.5 及更高版本)仅适用于 Python 版本 3 及更高版本。此外,Ansible 应该能够在许多附带的平台上自动检测和使用 Python 3。
但是,如果失败,您可以通过将组或主机级别的 ansible_python_interpreter 库存变量设置为 Python 3 解释器的位置来显式配置 Python 3 解释器,如下所述。
在命令行上将 Python 解释器传递给 Ansible
要暂时修复上述错误,您可以使用 -e
标志将 Python 3 解释器传递给 Ansible,如下所示。
ansible prod_servers -e 'ansible_python_interpreter=/usr/bin/python3' -a "systemctl status firewalld" -u root
在清单中设置 Ansible 的 Python 解释器
要永久修复该错误,请在清单 /etc/ansible/hosts 中设置 ansible_python_interpreter 库存变量。您可以使用 v/im 或 nano 文本编辑器打开它进行编辑,如图所示。
sudo vim /etc/ansible/hosts
OR
vim /etc/ansible/hosts
将以下行附加到组中的每个主机或主机:
ansible_python_interpreter=/usr/bin/python3
因此,您的主机的定义可以如下所示:
[prod_servers]
192.168.10.1 ansible_python_interpreter=/usr/bin/python3
192.168.10.20 ansible_python_interpreter=/usr/bin/python3.6
或者,为一组主机设置相同的 Python 解释器,如图所示。
[prod_servers]
192.168.10.1
192.168.10.20
[prod_servers:vars]
ansible_python_interpreter=/usr/bin/python3
在 Ansible 配置中设置默认 Python 解释器
要设置默认的Python解释器,您可以在Ansible的主配置文件/etc/ansible/ansible.cfg中设置ansible_python_interpreter库存变量。
sudo vim /etc/ansible/ansible.cfg
在 [defaults]
部分下添加以下行。
ansible_python_interpreter=/usr/bin/python3
保存文件并关闭它。
现在尝试再次运行 Ansible 命令:
ansible prod_servers -a "systemctl status firewalld" -u root
有关此主题的更多信息,请参阅 Ansible 官方文档中的 Python 3 支持。