2014-03-31 19 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