Это довольно странно, я заметил это вчера на одной из моих целевых машин, и сегодня это происходит на остальных. Я также попробовал запустить плейбук с другой машины, и произошло то же самое. Похоже, что эта проблема возникает после обновления 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
решило проблему.cryptography
37.0.0
решение4
Я получил эту ошибку с AWX, настроенным с AWX-EE по умолчанию (последняя версия) с другим модулем.
Новый AWX-EE, выпущенный сегодня (27 апреля 2022 г.), вызывает ту же проблему для некоторых модулей (по крайней мере, одного на моей стороне)
Изменение AWX-EE до версии 0.6.0 решило проблему.