Erro Ansible OpenSSL com módulo apt

Erro Ansible OpenSSL com módulo apt

Isso é bastante estranho, notei isso ontem em uma das minhas máquinas-alvo e hoje está acontecendo nas demais também. Também tentei executar o manual em uma máquina diferente e aconteceu a mesma coisa. Parece que esse problema ocorre após uma atualização adequada no Ubuntu 20.04. Na primeira vez que a atualização do apt é realizada, está tudo bem, mas depois disso o módulo começa a falhar.

A saída de erro é a seguinte:

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

Devo observar que comandos como sudo apt-get upgradefuncionam perfeitamente na máquina de destino sem ansible.

Mais alguém encontrou isso? Devo relatar isso como um bug para o pessoal do github?

EDITAR: Fiz mais pesquisas e aparentemente isso afeta outros módulos ansible como get_url, o que me leva à ideia de que este é um erro do Python/OpenSSL, e não algo relacionado ao apt

Responder1

Tive um problema semelhante hoje e as investigações apontaram na mesma direção.

Nós estamos usandopyOpenSSLe bloqueei para uma versão mais antiga. Está usando o mais recentecriptografiaversão da biblioteca com requisito cryptography>=2.8.

Então, a versão alterada inesperadamente foi a criptografia 36.0.2-> 37.0.0que aconteceu no dia 26 de abril (ontem). Usar o mais antigo 36.0.2corrigiu o problema no meu caso, já que bloquear para essa versão não era um problema.

Com base na mensagem de erro, o Ansible pode ter um problema semelhante, pois parece estar usando pyOpenSSL e a importação do OpenSSL está apresentando o erro como no meu caso.

Atualizar:
Conforme mencionado nos comentários, a versão mais recente do pyOpenSSL provavelmente não apresenta esse problema. Portanto, se você deseja apenas reverter rapidamente a alteração que causou o problema, reverta a atualização da biblioteca de criptografia de alguma forma. A melhor solução é atualizar o pyOpenSSL para a versão mais recente, se você tiver tempo para testá-lo corretamente.

Responder2

Os mantenedores do pacote implantaram a v37.0.1 que inclui (https://github.com/pyca/cryptography/commit/3fb93cfde75d073a91bc4a73a51f62962092501e):

  • Restaurou alguns símbolos legados para pyOpenSSLusuários mais antigos. Eles serão removidos novamente no futuro, portanto, pyOpenSSLos usuários ainda deverão atualizar para a versão mais recente desse pacote quando atualizarem o cryptography.

Portanto, a atualização para a criptografia v37.0.1 deve funcionar independentemente da sua versão pyOpenSSL, mas, conforme observado, essas alterações serão reintroduzidas posteriormente, como @Miika sugeriu, a atualização é o melhor caminho a seguir, se você puder.

Responder3

Para meu ambiente que usa python 3.8, atualizar pyopensslpara 22.0.0at cryptographycorrigiu 37.0.0o problema.

Responder4

Recebi este erro com AWX configurado com AWX-EE padrão (mais recente) com outro módulo.

O novo AWX-EE lançado hoje (27 de abril de 2022) gera o mesmo problema para alguns módulos (pelo menos um da minha parte)

Mudar o AWX-EE para a versão 0.6.0 resolveu o problema.

informação relacionada