LINUX.ORG.RU

Ansible 2.9 + Mitogen

 , , ,


1

1

Использую Arch.

Хочу собрать последний Ansible 2.9 с Mitogen для ускорения работы плейбуков. Mitogen работает только с Ansible до 2.9(или до 2.10, не суть). Судя по документации, Ansible 2.9 это что-то типа LTS-релиза.

Собрал пакет в AUR для ansible 2.9 на основе архивного PKGBUILD. Накатил также mitogen из AUR.

В переменных окружениях указал:

ANSIBLE_STRATEGY_PLUGINS=/usr/lib/python3.10/site-packages/ansible_mitogen/plugins/strategy/

Получаю такую ошибку при запуске плейбуков:

PLAY [apply common configuration to all nodes] *******************************************************************************************************************************
ERROR! Unexpected Exception, this is probably a bug: name 'ansible' is not defined
the full traceback was:

Traceback (most recent call last):
  File "/usr/bin/ansible-playbook", line 123, in <module>
    exit_code = cli.run()
  File "/usr/lib/python3.10/site-packages/ansible/cli/playbook.py", line 128, in run
    results = pbex.run()
  File "/usr/lib/python3.10/site-packages/ansible/executor/playbook_executor.py", line 169, in run
    result = self._tqm.run(play=play)
  File "/usr/lib/python3.10/site-packages/ansible/executor/task_queue_manager.py", line 261, in run
    strategy = strategy_loader.get(new_play.strategy, self)
  File "/usr/lib/python3.10/site-packages/ansible/plugins/loader.py", line 552, in get
    self._module_cache[path] = self._load_module_source(name, path)
  File "/usr/lib/python3.10/site-packages/ansible/plugins/loader.py", line 525, in _load_module_source
    spec.loader.exec_module(module)
  File "<frozen importlib._bootstrap_external>", line 883, in exec_module
  File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed
  File "/usr/lib/python3.10/site-packages/ansible_mitogen/plugins/strategy/mitogen_linear.py", line 55, in <module>
    import ansible_mitogen.loaders
  File "/usr/lib/python3.10/site-packages/ansible_mitogen/loaders.py", line 86, in <module>
    assert_supported_release()
  File "/usr/lib/python3.10/site-packages/ansible_mitogen/loaders.py", line 73, in assert_supported_release
    raise ansible.errors.AnsibleError(
NameError: name 'ansible' is not defined

Полагаю, что проблема в том, что mitogen не работает с python 3.10 и нужно собирать ansible c python 3.7, а также все сопутствующие библиотеки. Mitogen так же. И это уже что-то пугает, потому что зависимостей там дофига, и сопровождать десяток мелких пакетов это так себе.

Есть какие-то простые пути получить желаемое?

странная ошибка. там по идее не установлен модуль, но как тогда может быть raised ansible.errors.AnsibleError?

tz4678 ★★ ()
Ответ на: комментарий от permafrost

полагаю, что проблема в том, что mitogen не работает с python 3.10 и нужно собирать ansible c python 3.7

python 3.7

В Arch’е актуальный Python, на данный момент 3.10 и никак ты не даунгрейднишся.

По этому либо собирай Python с prefix’ом в /opt, либо используй pyenv

IIIypuk ★★★ ()
Ответ на: комментарий от tz4678

Я сейчас собрал python3.7 со встроенным pip и setuptools, поправив чуток этот PKGBUILD

С помощью него собрал свой ansible2.9 c python3.7, но столкнулся с тем, что модулей нет для python3.7

ansible --version
Traceback (most recent call last):
  File "/usr/bin/ansible", line 62, in <module>
    import ansible.constants as C
  File "/usr/lib/python3.7/site-packages/ansible/constants.py", line 12, in <module>
    from jinja2 import Template
ModuleNotFoundError: No module named 'jinja2'

Надо пересобирать их, видимо, для python3.7

Но вопрос как pip эти зависимости подтягивает. Где у него объявляются эти зависимости?

permafrost ★★ ()
Последнее исправление: permafrost (всего исправлений: 1)
Ответ на: комментарий от permafrost

системный питон нельзя трогать/заменять. не нужно дополнительные ставить. см выше asdf/pyenv. google it. еще можно через pipx ставить. он создает виртуальное окружение, ставит в него пакет и в ~/.local/bin создает симлинкИ на executables

tz4678 ★★ ()
Последнее исправление: tz4678 (всего исправлений: 1)
Ответ на: комментарий от tz4678

Его никто не трогает/заменяет.

По-умолчанию python это python3.10

Если тебе нужно вызвать python3.7 ты пишешь python3.7

permafrost ★★ ()
Последнее исправление: permafrost (всего исправлений: 1)

Таки всё понимаю. Но, почему не юзаете mitogen 0.3.2 на ansible-core 2.12? Если что, релиз 0.3.2 ещё в январе был, см. https://mobile.twitter.com/mitogen_hq

Просто, так как в проекте были организационные изменения, на их сайте до сих пор ничего нового, и изменений в старой репе не видно, разработка перешла в новую репу mitogen_hq, а на сайте и в старой репе обновы до сих пор не выложили.

P.S.: Сам юзаю mitogen на арчике, и долго приходилось делать всё через одно место с virtualenv, но теперь проблема решена, и так извращаться не надо.

lucentcode ★★★★★ ()
Ответ на: комментарий от lucentcode

Я пробовал ставить ansible из реп + mitogen из AUR, и оно не работало почему-то.

А вы как ставили эту связку?

permafrost ★★ ()
Ответ на: комментарий от permafrost

Работает, да. Я с Ansible из реп, и mitogen из AUR юзал, и mitogen 0.3.2 из pip – оба варианта работали нормально без допила.

lucentcode ★★★★★ ()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.