Условное использование контекста конкретного ANSIBLE_PYTHON_INTERPRETER на основе хостаPython

Программы на Python
Ответить
Anonymous
 Условное использование контекста конкретного ANSIBLE_PYTHON_INTERPRETER на основе хоста

Сообщение Anonymous »

Недавно я столкнулся с ошибкой, из-за которой мои ansible-игры перестали работать, потому что RedHat через запросы портировал патч CVE, который был несовместим с библиотекой python docker-py. Исправление было добавлено в версию 7.1.0 docker-py, для которой потребуется Python 3.8, но я не могу обновить системный Linux на сервере до версии 3.8, поскольку нам также нужен selinux для других задач, и этот пакет поддерживается только в Python 3.6. Итак, я пришел к выводу, что мне нужно использовать разные экземпляры Python для разных задач, достаточно просто, просто укажите интерпретатор для задачи:

Код: Выделить всё

- name: Fetch image info for preexisting copy of {{ fully_qualified_image }}
community.docker.docker_image_info:
name: "{{ fully_qualified_image }}"
register: preexisting_image_info
failed_when: false
vars:
# ansible_python_interpreter_docker points to a python venv containing the necessary
# docker lib
ansible_python_interpreter: "{{ ansible_python_interpreter_docker }}"
Но это не так для All моих хостов. На некоторых хостах мне нужно просто использовать интерпретатор по умолчанию ...
Поэтому я попытался сделать это в Group_vars/all/vars.yml :

Код: Выделить всё

ansible_python_interpreter_docker: "{{ ansible_python_interpreter }}"
и переопределить его на хост, который нуждается в специальном python. И это работает для всех хостов, которые используют специальный интерпретатор Docker. Однако для тех, кто этого не делает, я получаю бесконечную рекурсию: < /p>

Код: Выделить всё

...
Error was a , original message: An unhandled exception occurred while templating '{{ ansible_python_interpreter }}'.
Error was a , original message: An unhandled exception occurred while templating '{{ ansible_python_interpreter_docker }}'.
Error was a , original message: recursive loop detected in template string: {{ ansible_python_interpreter_docker }}"}
Эта маленькая тестовая игра демонстрирует обходной путь :

Код: Выделить всё

---
- hosts: host-with-system-docker,host-with-venv-docker
gather_facts: true

tasks:
- block:
- name: do a docker thing with system python
debug:
msg: "{{ ansible_python_interpreter }}"
when: ansible_python_interpreter_docker is not defined
- name: do a docker thing with docker specific python
debug:
msg: "{{ ansible_python_interpreter }}"
vars:
ansible_python_interpreter: "{{ ansible_python_interpreter_docker }}"
when: ansible_python_interpreter_docker is defined
- debug:
msg: "YAY"
Но должен быть лучший способ ...


Подробнее здесь: https://stackoverflow.com/questions/793 ... ed-on-host
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»