在这篇短文中,我们将解释如何解决:“ module_stderr “: “Shared Connection to xxxx returned.rn”, “module_stdout”: “/bin/sh: /usr/bin/python: No such file或目录rn”,同时运行 Ansible 命令。
以下屏幕截图显示了 Ansible 模块错误。我们在两台新部署的CentOS 8服务器上运行Ansible 命令执行命令时遇到此错误。
从错误详细信息来看,连接失败是因为远程系统中的 shell 找不到Python解释器 ( /usr/bin/python ),如以下行所示: “ module_stdout”: “/bin/sh: / usr/bin/python: 没有这样的文件或目录rn “.
检查远程主机后,我们发现系统没有安装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 状态防火墙” -u root
在清单中设置 Ansible 的 Python 解释器
要永久修复该错误,请在清单/etc/ansible/hosts中设置ansible_python_interpreter库存变量。您可以使用 v/im 或 nano 文本编辑器打开它进行编辑,如图所示。
$ sudo vim /etc/ansible/hosts 或者 # vim /etc/ansible/hosts
将以下行附加到组中的每个主机或主机:
ansible_python_interpreter=/usr/bin/python3
因此,您的主机的定义可以如下所示:
[产品服务器] 192.168.10.1 ansible_python_interpreter=/usr/bin/python3 192.168.10.20 ansible_python_interpreter=/usr/bin/python3.6
或者,为一组主机设置相同的 Python 解释器,如图所示。
[产品服务器] 192.168.10.1 192.168.10.20 [产品服务器:变量] 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状态防火墙”-u root
有关此主题的更多信息,请参阅Ansible 官方文档中的Python 3 支持。