为什么将“ ansible_python_interpreter” conf选项设置为“ / usr / bin / python3”

时间:2019-01-10 13:05:30

标签: ansible ansible-inventory

我想在受管节点上使用带有Ansible的python 3.6(我想控制节点可以使用任何东西)。

在其official doc上,它说要在受管节点上启用python 3.6,我必须将ansible_python_interpreter配置选项设置为/usr/bin/python3。此选项是inventory option。我知道即使使用动态广告资源也可以设置此广告资源变量,但是我只是不希望设置变量那么复杂。

所以我没有设置此选项,而是:

  1. 使用ec2_module自动设置aws ec2 ubuntu18.04(/usr/bin/python3上的python 3.6附带)(如果不存在,我也可以使用raw模块来安装它)
  2. 使用raw模块创建从/usr/bin/python/usr/bin/python3的符号链接

我尝试过,并且似乎只要将/usr/bin/python设置为可接受的python版本(>= 2.7>= 3.6),它就应该可以工作...

问题:那么将ansible_python_interpreter配置选项设置为/usr/bin/python3有什么意义?

1 个答案:

答案 0 :(得分:0)

  

问题:那么将ansible_python_interpreter配置选项设置为/ usr / bin / python3有什么意义?

默认情况下,Ansible将始终在远程系统上使用/usr/bin/python。如果希望使用ansible_python_interpreter来代替 /usr/bin/python,请设置/usr/bin/python。当然,您可以创建一个符号链接,但是:

  • 这比设置库存变量还容易吗?
  • 在许多发行版中,/usr/bin/python已经存在并且是Python 2,并且是系统工具所必需的。更换它会损坏东西。
  • 即使在默认情况下未随附Python 2的系统上,通过创建从/usr/bin/python3/usr/bin/python的符号链接,您也有可能破坏了所有希望#!/usr/bin/env python3.6 import glob import asyncio async def run(shell_command): p = await asyncio.create_subprocess_shell(shell_command) await p.communicate() async def main(shell_commands): for f in asyncio.as_completed([run(c) for c in shell_commands]): await f commands = [] for i in (glob.glob("PATH/SUB/*.csv")): file = i.split('\\')[1] commands.append("scrapy crawl quotes -a file=%s -o /OUTPUT/%s.csv &" % (file, file)) loop = asyncio.ProactorEventLoop() loop.run_until_complete(main(commands)) loop.close() 为Python 2的内容。那可能现在不会咬你,但将来可能会让你感到惊讶。