Или Python или Ansible или Deban\Ubuntu не могут узнать, что была установлена нужная python-библиотека
Есть роль на ansible внутри которой надо сделать запрос к json через jmespath. "На моей машине всё работает" до тех пор, пока код не переносится на чистую убунту (докер или вбокс - не важно). Там по-умолчанию нет ни python-jmespath, ни python3-jmespath, ни pip install jmespath. Логичный шаг - поставить через стандартные модули, что я и делаю, но проблема в том, что вываливает: fatal: [localhost]: FAILED! => {"msg": "You need to install \"jmespath\" prior to running json_query filter"}
НО! Сразу при повторном запуске - всё начинает работать.
Собственно вопрос: как питону\ансиблу\убунте рассказать "поищи эту библиотеку внимательнее"? Гуглил PYTHONPATH, но там ничего интересного после любого способа установки.
ansible 2.9.12, Ubuntu 18.04.5
Ответы (1 шт):
Я нашёл решение. Проблема в закешированных фактах Ansible на стороне управляющей стороны - именно поэтому перезагрузка хоста, который настраивался - не всегда приводила к желаемому результату.
Нужно сначала почистить эти самые факты, а потом сделать setup.
В общем, на момент написания ответа (20-03-2021) с ansible 2.9.18 работает отлично (ставил на 7,8 centos, 18,20 ubuntu):
- name: Install python3-pip 4 Linux
when:
- ansible_system == 'Linux'
become: yes
package:
name:
- python3-pip
state: present
register: python3_pip_installed_status
- name: Install jmespath 4 Linux
when:
- ansible_system == 'Linux'
# become: yes
pip:
name:
- jmespath
state: present
# Because python3-pip
executable: pip3
register: jmespath_linux_installed_status
- name: Clear gathered facts from all currently targeted hosts
when:
- (python3_pip_installed_status is changed)
or (jmespath_linux_installed_status is changed)
block:
- meta: clear_facts
- setup: