Я пытался выполнить простую команду, используя python --version
анзибль, и она не работала независимо от того, как я попробовал: через shell
модуль, с помощью command
модуля, с помощью script
модуля, с помощью playbook или ad-hoc.анзибль - как ansible_env.PATH установлен в SSH сессии
Я всегда получаю сообщение об ошибке:
unknown option
Например, сборник пьес:
---
- name: testing
hosts: myhost
sudo: False
tasks:
- name: python version
shell: python --version
Тогда я понял, что это связано с тем, как анзибль загружает среду в SSH сессии. Эффективно ошибка не исходила из синтаксического анализа Ansible или команды, а из версии 2.4 Python, которая каким-то образом попадает в PATH (/usr/local/bin
).
Похоже, Python 2.4 не знал флага --version
.
Самая интересная часть заключается в том, что когда я выполняю SSH на том же хосте, что и тот же пользователь, что и Ansible, я получаю PATH
элементов в правильном порядке, и первое место, где существует Python, является правильным с Python 3 , а /usr/local/bin
похоронен глубоко в PATH
.
Но когда я добавил which python
задачу в сборник пьес я видел, что анзибль решает Python из /usr/local/bin
и что это старый (v2.4)
Когда я исполняю ansible myhost -m setup
я могу видеть, что переменная ansible_env.PATH
путь короче, чем PATH
. Я получаю вход в систему напрямую.
Было бы неплохо понять правила того, как это делается.
Точно такой же вопрос был задан здесь:
http://grokbase.com/t/gg/ansible-project/1479n0d0qp/ansible-env-path-how-is-it-set
, но не было никакого определенного ответа.
Вы правы, ansible_python_interpreter не решает проблему PATH. Путаница исходит из того факта, что нет способа сказать, как установлен параметр ansible_env.PATH, и я не единственно путаюсь: http://grokbase.com/t/gg/ansible-project/1479n0d0qp/ анзибль-ENV-путь-как-это-это набор –