2014-03-31 18 views
15

Ansible期望python 2.在我的系统(Arch Linux)上,“python”是Python 3,所以我必须通过-e "ansible_python_interpreter=/usr/bin/python2"每个命令。系统特定的变量insible

ansible-playbook my-playbook.yml -e "ansible_python_interpreter=/usr/bin/python2" 

是否有设置以外ansible_python_interpreter全局我的系统上,所以我没有将它传递给每一个命令?我不想将它添加到我的剧本中,因为并非所有运行剧本的系统都有类似于我的设置。

回答

11

那么你可以通过三种方式

  1. http://docs.ansible.com/intro_inventory.html#list-of-behavioral-inventory-parametersansible_python_interpreter=/usr/bin/python2这将设置每个主机
  2. 将其设置host_vars/ansible_python_interpreter: "/usr/bin/python2"这将设置每个主机
  3. 集它所有节点设置在文件group_vars/all(您可能需要创建目录group_vars和文件all)为ansible_python_interpreter: "/usr/bin/python2"

希望帮助

+2

我不希望它在任何地方剧本,这就是:)使用剧本,我需要ansible python2我的机器上明确的事实不应该影响他人的地步。 –

+0

首先,上面只更改了剧本中的清单hosts_vars和groups_vars。但是你管理Arch Linux还是混合env? – DomaNitro

+0

这不是真的答案。我也在寻找一个不涉及剧本的解决方案,因为我使用Ansible Tower,当使用GIT项目时,它使用Ansible的Python 2.6加密错误,因为我的Ansible Tower有2.7 lib! – TecHunter

2

我选择使用Ansible的从目录源的库存能力。通过这种方式,我可以定义ansible_python_interpreter本地主机只有本地机器

inventory_dir/local

[local] 
localhost ansible_python_interpreter="/path/to/alternate/bin/python" 

,然后只用目录,你会清单文件。

ansible-playbook -i inventory_dir playbook.yml