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

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

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

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

TASK [common : Update package manager] *************************************************************************************
An exception occurred during task execution. To see the full traceback, use -vvv. The error was: AttributeError: module 'lib
' has no attribute 'X509_V_FLAG_CB_ISSUER_CHECK'
fatal: [mr-bones]: FAILED! => changed=false
  module_stderr: |-
    Traceback (most recent call last):
      File "<stdin>", line 107, in <module>
      File "<stdin>", line 99, in _ansiballz_main
      File "<stdin>", line 47, in invoke_module
      File "/usr/lib/python3.8/runpy.py", line 207, in run_module
        return _run_module_code(code, init_globals, run_name, mod_spec)
      File "/usr/lib/python3.8/runpy.py", line 97, in _run_module_code
        _run_code(code, mod_globals, init_globals,
      File "/usr/lib/python3.8/runpy.py", line 87, in _run_code
        exec(code, run_globals)
      File "/tmp/ansible_apt_payload_vpe7xcy0/ansible_apt_payload.zip/ansible/modules/apt.py", line 346, in <module>
      File "<frozen importlib._bootstrap>", line 991, in _find_and_load
      File "<frozen importlib._bootstrap>", line 975, in _find_and_load_unlocked
      File "<frozen importlib._bootstrap>", line 655, in _load_unlocked
      File "<frozen importlib._bootstrap>", line 618, in _load_backward_compatible
      File "<frozen zipimport>", line 259, in load_module
      File "/tmp/ansible_apt_payload_vpe7xcy0/ansible_apt_payload.zip/ansible/module_utils/urls.py", line 115, in <module>
      File "/usr/local/lib/python3.8/dist-packages/urllib3/contrib/pyopenssl.py", line 50, in <module>
        import OpenSSL.SSL
      File "/usr/lib/python3/dist-packages/OpenSSL/__init__.py", line 8, in <module>
        from OpenSSL import crypto, SSL
      File "/usr/lib/python3/dist-packages/OpenSSL/crypto.py", line 1553, in <module>
        class X509StoreFlags(object):
      File "/usr/lib/python3/dist-packages/OpenSSL/crypto.py", line 1573, in X509StoreFlags
        CB_ISSUER_CHECK = _lib.X509_V_FLAG_CB_ISSUER_CHECK
    AttributeError: module 'lib' has no attribute 'X509_V_FLAG_CB_ISSUER_CHECK'
  module_stdout: ''
  msg: |-
    MODULE FAILURE
    See stdout/stderr for the exact error
  rc: 1

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

Кто-нибудь еще сталкивался с этим? Стоит ли мне сообщить об этом как об ошибке ребятам из ansible на github?

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

решение1

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

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

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

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

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

решение2

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

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

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

решение3

Для моей среды, использующей Python 3.8, обновление pyopensslдо версии at 22.0.0решило проблему.cryptography37.0.0

решение4

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

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

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

Связанный контент