Error de Ansible OpenSSL con el módulo apt

Error de Ansible OpenSSL con el módulo apt

Esto es bastante extraño, lo noté ayer en una de mis máquinas objetivo y hoy también está sucediendo en el resto de ellas. También intenté ejecutar el libro de jugadas desde una máquina diferente y sucedió lo mismo. Parece que este problema ocurre después de una actualización adecuada en Ubuntu 20.04. La primera vez que se realiza la actualización apt, todo está bien, pero después el módulo comienza a fallar.

La salida del error es la siguiente:

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

Debo tener en cuenta que comandos como sudo apt-get upgradefuncionan bien en la máquina de destino sin ansible.

¿Alguien más ha encontrado esto? ¿Debo informar esto como un error a la gente de ansible en github?

EDITAR: Investigué un poco más y aparentemente esto afecta a otros módulos ansibles como get_url, lo que me lleva a la idea de que se trata de un error de Python/OpenSSL, en lugar de algo que tenga que ver con apt.

Respuesta1

Tuve un problema similar hoy y las investigaciones apuntaron en la misma dirección.

Estamos usandopyOpenSSLy he bloqueado la versión anterior. Está usando lo últimocriptografíaversión de biblioteca con requisito cryptography>=2.8.

Entonces, la versión cambiada inesperadamente fue la criptografía 36.0.2-> 37.0.0eso sucedió el 26 de abril (ayer). El uso de la versión anterior 36.0.2solucionó el problema en mi caso, ya que bloquear esa versión no fue un problema.

Según el mensaje de error, Ansible podría tener un problema similar, ya que parece estar usando pyOpenSSL y la importación de OpenSSL genera el error como en mi caso.

Actualizar:
Como se mencionó en los comentarios, es probable que la última versión de pyOpenSSL no tenga este problema. Por lo tanto, si sólo desea revertir rápidamente el cambio que causó el problema, revierta la actualización de la biblioteca de criptografía de alguna manera. Una mejor solución es actualizar pyOpenSSL a la última versión, si tiene tiempo para probarlo correctamente.

Respuesta2

Los mantenedores de paquetes han implementado v37.0.1 que incluye (https://github.com/pyca/cryptography/commit/3fb93cfde75d073a91bc4a73a51f62962092501e):

  • Se restauraron algunos símbolos heredados para pyOpenSSLusuarios mayores. Estos se eliminarán nuevamente en el futuro, por lo que pyOpenSSLlos usuarios aún deben actualizar a la última versión de ese paquete cuando actualicen cryptography.

Por lo tanto, la actualización a criptografía v37.0.1 debería funcionar independientemente de su versión de pyOpenSSL, pero como se indicó, estos cambios se reintroducirán en una fecha posterior, por lo que, como sugirió @Miika, la actualización es la mejor manera de hacerlo si puede.

Respuesta3

Para mi entorno que usa Python 3.8, la actualización pyopenssla 22.0.0at cryptographysolucionó 37.0.0el problema.

Respuesta4

Recibí este error con AWX configurado con AWX-EE (más reciente) predeterminado con otro módulo.

El nuevo AWX-EE lanzado hoy (27 de abril de 2022) genera el mismo problema para algunos módulos (al menos uno de mi lado)

Cambiar AWX-EE a la versión 0.6.0 resolvió el problema.

información relacionada