ansible -m ping -u ubuntu us-west-2a
35.166.197.222 | 失败的! => {
“改变”:假,
“失败”:真的,
"module_stderr": "到 35.166.197.222 的共享连接已关闭。\r\n",
"module_stdout": "/bin/sh: 1: /usr/bin/python: 未找到\r\n",
"msg": "模块故障"
}
请使用问题模板而不是删除它 - 这不是可操作或有用的错误报告。 我怀疑你正在运行 Ubuntu 16+ 或其他没有安装默认 python3 的东西,但如果没有完整的错误报告,我们就无法判断。
AWS 中的最新图像没有安装可用的 Python……您需要将其添加为前置任务:
pre_tasks:
- name: Refresh apt cache
become: no
local_action: shell ssh -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -o ConnectTimeout=5 {{ inventory_hostname }} sudo apt-get update
- name: Install Python-apt to pull in Python
become: no
local_action: shell ssh -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -o ConnectTimeout=5 {{ inventory_hostname }} sudo apt-get install --no-install-recommends --assume-yes python-apt
我必须在我的任务中使用它来让 AMI 与 Ansible 很好地工作。
是的,python解释器的路径可以在运行时给出
-e 'ansible_python_interpreter=/usr/local/bin/python' 运行脚本时。
但是在ansible配置文件中必须有某种方式我们可以在其中提及python解释器路径还是在那里?
如果不存在,则需要实施。
只需在您的库存文件中使用ansible_python_interpreter=/usr/bin/python3
@guruprasad85这个问题正在等待您的回复。 请回复,否则问题将被关闭。
@guruprasad85问候! 感谢您花时间打开这个问题。 为了让社区有效地处理您的问题,我们需要更多信息。
以下是我们在您的描述中找不到的项目:
请使用此模板设置此问题的描述:
https://raw.githubusercontent.com/ansible/ansible/devel/.github/ISSUE_TEMPLATE.md
由于我需要 python2,我添加了第一个任务:
- name: dependency provisioning
hosts: all
become: yes
become_method: sudo
gather_facts: false
tasks:
- name: install python2
raw: sudo apt-get -y install python-simplejson
更多信息在这里
@guruprasad85这个问题正在等待您的回复。 请回复,否则问题将被关闭。
以上解释足以解决这个问题。
一些补充阅读:
http://docs.ansible.com/ansible/faq.html#how -do-i-handle-python-pathing-not-have-a-python-2-x-in-usr-bin-python-on-远程机器
如果您有其他问题,请访问 IRC 或邮件列表:
您还可以禁用 _Gathering Facts_,将其放入您的书中
- hosts: anything
gather_facts: False
@bcoca @sivel有计划重温这个吗? 在我看来,如果/usr/bin/python
不可用,Ansible 至少应该尝试使用/usr/bin/python3
(或适当的/usr/bin/python2
)。
@SpamapS报告说,AWS 上的官方 Ubuntu AMI 仅随/usr/bin/python3
:
ubuntu@ip-172-16-178-247:~$ uname -a
Linux ip-172-16-178-247 4.4.0-1065-aws #75-Ubuntu SMP Fri Aug 10 11:14:32 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
ubuntu@ip-172-16-178-247:~$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 16.04.5 LTS
Release: 16.04
Codename: xenial
ubuntu@ip-172-16-178-247:~$ ls -al /usr/bin |grep python
lrwxrwxrwx 1 root root 26 May 18 2016 dh_pypy -> ../share/dh-python/dh_pypy
lrwxrwxrwx 1 root root 29 May 18 2016 dh_python3 -> ../share/dh-python/dh_python3
lrwxrwxrwx 1 root root 23 Nov 28 2017 pdb3.5 -> ../lib/python3.5/pdb.py
lrwxrwxrwx 1 root root 31 Mar 23 2016 py3versions -> ../share/python3/py3versions.py
lrwxrwxrwx 1 root root 26 May 18 2016 pybuild -> ../share/dh-python/pybuild
lrwxrwxrwx 1 root root 9 Mar 23 2016 python3 -> python3.5
-rwxr-xr-x 2 root root 4464400 Nov 28 2017 python3.5
-rwxr-xr-x 2 root root 4464400 Nov 28 2017 python3.5m
-rwxr-xr-x 1 root root 976 Nov 27 2015 python3-jsondiff
-rwxr-xr-x 1 root root 3662 Nov 27 2015 python3-jsonpatch
-rwxr-xr-x 1 root root 1342 Oct 24 2015 python3-jsonpointer
lrwxrwxrwx 1 root root 10 Mar 23 2016 python3m -> python3.5m
对于后代,这是 Ansible 的一个已知改进机会,并且正在考虑将其包含在 >=2.8 的路线图中
就我而言(ansible 2.7.0):
我的IP | 失败的! => {
“改变”:假,
"module_stderr": "",
"module_stdout": "/bin/sh: /usr/bin/python: 没有那个文件或目录\r\n",
"msg": "模块失败\n请参阅 stdout/stderr 了解确切的错误",
“rc”:127
}
$ll |grep 蟒蛇
lrwxrwxrwx 1 root root 32 Jun 5 15:44 kylinpy -> /usr/local/python2.7/bin/kylinpy
lrwxrwxrwx 1 root root 2016 年 11 月 16 日 34 日 python -> /usr/local/python2.7/bin/python2.7
lrwxrwxrwx 1 root root 6 Sep 8 2016 python2 -> python
-rwxr-xr-x 1 根 4864 2014 年 5 月 29 日 python2.6
-rwxr-xr-x 1 root root 1418 2014 年 5 月 29 日 python2.6-config
为什么软链接也不起作用?
就我而言(ansible 2.7.0):
我的IP | 失败的! => {
“改变”:假,
"module_stderr": "",
"module_stdout": "/bin/sh: /usr/bin/python: 没有那个文件或目录\r\n",
"msg": "模块失败\n请参阅 stdout/stderr 了解确切的错误",
“rc”:127
}$ll |grep 蟒蛇
lrwxrwxrwx 1 root root 32 Jun 5 15:44 kylinpy -> /usr/local/python2.7/bin/kylinpy
lrwxrwxrwx 1 root root 2016 年 11 月 16 日 34 日 python -> /usr/local/python2.7/bin/python2.7
lrwxrwxrwx 1 root root 6 Sep 8 2016 python2 -> python
-rwxr-xr-x 1 根 4864 2014 年 5 月 29 日 python2.6
-rwxr-xr-x 1 root root 1418 2014 年 5 月 29 日 python2.6-config为什么软链接也不起作用?
对不起,是我的错。使用软链接,它有效
一个简单的: ln -s /usr/bin/python3 /usr/bin/python解决了我的问题
只需在您的库存文件中使用
ansible_python_interpreter=/usr/bin/python3
谢谢,现在可以用了
这似乎与pyenv pyenv global <version>
有问题。
它应该填充它,但我猜 Ansible 是硬编码来查看/usr/bin/python
,而不是仅使用python
命令?
如果是这样,这可能会改变吗? 或者有我可以使用的解决方法吗?
如果是这样,这可能会改变吗?
不它不是。
如果要使用/usr/bin/python
以外的其他内容,则需要将ansible_python_interpreter
显式设置
在pyenv
的情况下,这可能只是到垫片( which python3.6
)或真正二进制文件( pyenv which python3.6
)的路径。 请注意,在许多情况下,您需要对其进行硬编码并且不能使用 shell 扩展。
最有用的评论
只需在您的库存文件中使用
ansible_python_interpreter=/usr/bin/python3