Рейтинг:3

Ошибка Ansible OpenSSL с модулем apt

флаг pt

Это довольно странно, я заметил это вчера на одной из моих целевых машин, и сегодня это происходит и на остальных. Я также попытался запустить playbook с другой машины, и произошло то же самое. Похоже, эта проблема возникает после удачного обновления Ubuntu 20.04. Первый раз проходит apt upgrade, все хорошо, но после этого модуль начинает глючить.

Вывод ошибки следующий:

ЗАДАЧА [общая: Менеджер пакетов обновлений] ************************************************ *************************************************
Исключение произошло во время выполнения задачи. Чтобы увидеть полную трассировку, используйте -vvv. Ошибка была: AttributeError: модуль 'lib
' не имеет атрибута 'X509_V_FLAG_CB_ISSUER_CHECK'
фатальный: [м-р-кости]: ПРОШЛО! => изменено = ложь
  module_stderr: |-
    Traceback (последний последний вызов):
      Файл "<stdin>", строка 107, в <module>
      Файл "<stdin>", строка 99, в _ansiballz_main
      Файл "<stdin>", строка 47, в invoke_module
      Файл "/usr/lib/python3.8/runpy.py", строка 207, в run_module
        вернуть _run_module_code (код, init_globals, run_name, mod_spec)
      Файл "/usr/lib/python3.8/runpy.py", строка 97, в _run_module_code
        _run_code(код, mod_globals, init_globals,
      Файл "/usr/lib/python3.8/runpy.py", строка 87, в _run_code
        exec(код, run_globals)
      Файл "/tmp/ansible_apt_payload_vpe7xcy0/ansible_apt_payload.zip/ansible/modules/apt.py", строка 346, в <module>
      Файл "<frozen importlib._bootstrap>", строка 991, в _find_and_load
      Файл "<frozen importlib._bootstrap>", строка 975, в _find_and_load_unlocked
      Файл "<frozen importlib._bootstrap>", строка 655, в _load_unlocked
      Файл "<frozen importlib._bootstrap>", строка 618, в _load_backward_compatible
      Файл "<замороженный zipimport>", строка 259, в load_module
      Файл "/tmp/ansible_apt_payload_vpe7xcy0/ansible_apt_payload.zip/ansible/module_utils/urls.py", строка 115, в <module>
      Файл "/usr/local/lib/python3.8/dist-packages/urllib3/contrib/pyopenssl.py", строка 50, в <module>
        импортировать OpenSSL.SSL
      Файл "/usr/lib/python3/dist-packages/OpenSSL/__init__.py", строка 8, в <module>
        из OpenSSL импортировать криптографию, SSL
      Файл "/usr/lib/python3/dist-packages/OpenSSL/crypto.py", строка 1553, в <module>
        класс X509StoreFlags (объект):
      Файл "/usr/lib/python3/dist-packages/OpenSSL/crypto.py", строка 1573, в X509StoreFlags
        CB_ISSUER_CHECK = _lib.X509_V_FLAG_CB_ISSUER_CHECK
    AttributeError: модуль «lib» не имеет атрибута «X509_V_FLAG_CB_ISSUER_CHECK»
  модуль_stdout: ''
  сообщение: |-
    ОТКАЗ МОДУЛЯ
    См. stdout/stderr для точной ошибки
  рк: 1

Я должен отметить, что такие команды, как sudo apt-получить обновление отлично работают на целевой машине без ansible.

кто-нибудь еще сталкивался с этим? Должен ли я сообщить об этом как об ошибке людям на github?

РЕДАКТИРОВАТЬ: я еще немного покопался и, по-видимому, это влияет на другие модули ansible, такие как get_url, что наводит меня на мысль, что это ошибка Python/OpenSSL, а не что-то связанное с apt

флаг pt
Похоже, запуск `sudo pip3 install --force-reinstall pyopenssl` на целевой машине решил проблему. Тем не менее, я также запускал его на хост-компьютере до этого без видимого эффекта (поэтому гипотетически возможно, что вы должны сделать это на обоих)
Рейтинг:3
флаг in

Сопровождающие пакеты развернули v37.0.1, которая включает (https://github.com/pyca/cryptography/commit/3fb93cfde75d073a91bc4a73a51f62962092501e):

  • Восстановлены некоторые устаревшие символы для более старых pyOpenSSL пользователи. Это будет удалены снова в будущем, поэтому pyOpenSSL пользователи все равно должны обновить до последней версии этого пакета при обновлении криптография.

Таким образом, обновление до криптографии v37.0.1 должно работать независимо от вашей версии pyOpenSSL, но, как уже отмечалось, эти изменения будут повторно введены позднее, поэтому, как предложил @Miika, обновление — лучший способ, если вы в состоянии.

флаг pt
Ах, мило. Спасибо за подтверждение.
Рейтинг:3
флаг cn

Сегодня у меня была аналогичная проблема, и исследования указывали на то же направление.

мы используем pyOpenSSL и заблокировали старую версию. Он использует последнюю криптография версия библиотеки с требованием криптография>=2,8.

Итак, неожиданно измененной версией стала криптография 36.0.2 -> 37.0.0 это произошло 26 апреля (вчера). Использование более старых 36.0.2 исправил проблему в моем случае, так как привязка к этой версии не была проблемой.

Судя по сообщению об ошибке, у Ansible может быть аналогичная проблема, поскольку, похоже, он использует pyOpenSSL, а импорт OpenSSL выдает ошибку, как в моем случае.

Обновлять:
Как упоминалось в комментариях, последняя версия pyOpenSSL, скорее всего, не имеет этой проблемы. Итак, если вы просто хотите быстро отменить изменение, вызвавшее проблему, каким-либо образом отмените обновление библиотеки криптографии. Лучшее решение — обновить pyOpenSSL до последней версии, если у вас есть время, чтобы протестировать его должным образом.

флаг pt
Да, это похоже на решение. Или, по крайней мере, достаточно хорошо, в моем случае переустановка pyopenssl, похоже, тоже сделала это.
флаг ru
Для меня на python 3.8 обновление pyopenssl до 22.0.0 исправило это.
Рейтинг:1
флаг ru

Для моей среды, использующей Python 3.8, обновление pyopenssl к 22.0.0 с криптография в 37.0.0 исправил проблему.

Рейтинг:0
флаг bw

Python3.7 в виртуальной среде

pip установить криптографию == 37.0.0

Изменение за решение проблемы

pip установить криптографию == 36.0.0
Рейтинг:0
флаг in

Я получил эту ошибку с AWX, настроенным по умолчанию AWX-EE (последняя версия) с другим модулем.

Новый AWX-EE, выпущенный сегодня (27 апреля 2022 г.), вызывает ту же проблему для некоторых модулей (по крайней мере, один на моей стороне).

Изменение AWX-EE на версию 0.6.0 решило проблему.

флаг pt
Я не использую AWX, но похоже, что где-то возникла проблема с недавним обновлением...

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.