Или 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 шт):

Автор решения: don Rumata

Я нашёл решение. Проблема в закешированных фактах 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:
→ Ссылка