tl; dr: есть ли в Ansible переменная, содержащая текущий интерпретатор Python?

Как часть моей пьесы, я создаю скрипт Python на контроллере (для запуска другой командой), и я хочу, чтобы этот скрипт запускался интерпретатором Python, используемым Ansible. Для этого я пытаюсь установить переводчика в шебанге сценария.

Если бы мне пришлось установить интерпретатор вручную, я мог бы использовать переменную ansible_python_interpreter (и у меня она работала таким образом). Если я не установлю интерпретатор вручную, Ansible автоматически обнаружит интерпретатор, но я больше не могу использовать переменную ansible_python_interpreter, поскольку она не установлена.

Просматривая документацию, я не смог найти способ узнать, какой интерпретатор Ansible обнаружил автоматически. Я что-то пропустил?

(Ansible версия 2.9.10, Python 3.6)


Полная ситуация:

Я использую Ansible в AWX (Ansible Tower с открытым исходным кодом), используя пользовательскую виртуальную среду в качестве бегуна. Я использую Hashicorp Vault в качестве секретной системы управления, а не храню секреты в AWX. Для доступа к Vault я использую краткосрочные токены доступа, которые плохо работают со встроенной поддержкой AWX для извлечения секретов из Vault, поэтому вместо этого я делаю это вручную (чтобы я мог предоставить токен Vault во время запуска задания) , Это хорошо работает для меня, как правило.

В этом конкретном случае я запускаю ansible-vault (да, слишком много вещей, называемых «хранилищем») на контроллере, чтобы расшифровать секрет. Я использую аргумент --vault-password-file для предоставления пароля расшифровки через скрипт. Поскольку в используемой виртуальной среде уже установлен пакет hvac, я хотел бы просто использовать краткий скрипт Python, чтобы получить пароль из Hashicorp Vault. Все работает нормально, за исключением того, что я не могу понять, как настроить shebang в этом сценарии, чтобы он указывал на виртуальную среду, которую использует Ansible.

Если я не могу получить полезный ответ на этот вопрос, я полагаю, что я могу вместо этого перетащить пароль непосредственно в Ansible, а затем использовать флаг --ask-vault-pass для передачи пароля таким образом. Мне просто кажется, что Ansible действительно должен где-то разоблачить переводчика, поэтому я сначала попробую.

5
lxop 22 Июл 2020 в 00:57

2 ответа

Лучший ответ

Как описано в специальной переменной ansible_playbook_python содержит путь к интерпретатор python, используемый Ansible на контроллере.

5
Moon 22 Июл 2020 в 04:52

С gather_facts: yes вы сможете получить активный питон, используя переменную ansible_facts.python.

0
Magick 22 Июл 2020 в 00:44