wsl connection: import paramiko directly (#10531)

Import paramiko directly.
This commit is contained in:
Felix Fontein 2025-08-01 10:54:26 +02:00 committed by GitHub
commit d0b0aff5bc
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 15 additions and 6 deletions

View file

@ -0,0 +1,3 @@
bugfixes:
- "wsl connection plugin - avoid deprecated ansible-core paramiko import helper, import paramiko directly instead
(https://github.com/ansible-collections/community.general/issues/10515, https://github.com/ansible-collections/community.general/pull/10531)."

View file

@ -315,6 +315,7 @@ import pathlib
import shlex
import socket
import tempfile
import traceback
import typing as t
from ansible.errors import (
@ -323,9 +324,8 @@ from ansible.errors import (
AnsibleError,
)
from ansible_collections.community.general.plugins.module_utils._filelock import FileLock, LockTimeout
from ansible_collections.community.general.plugins.module_utils.version import LooseVersion
from ansible.module_utils.common.text.converters import to_bytes, to_native, to_text
from ansible.module_utils.compat.paramiko import PARAMIKO_IMPORT_ERR, paramiko
from ansible.module_utils.compat.version import LooseVersion
from ansible.playbook.play_context import PlayContext
from ansible.plugins.connection import ConnectionBase
from ansible.utils.display import Display
@ -333,8 +333,15 @@ from ansible.utils.path import makedirs_safe
from binascii import hexlify
from subprocess import list2cmdline
try:
import paramiko
PARAMIKO_IMPORT_ERR = None
except ImportError:
paramiko = None
PARAMIKO_IMPORT_ERR = traceback.format_exc()
if t.TYPE_CHECKING and paramiko:
if t.TYPE_CHECKING and PARAMIKO_IMPORT_ERR is None:
from paramiko import MissingHostKeyPolicy
from paramiko.client import SSHClient
from paramiko.pkey import PKey
@ -437,7 +444,7 @@ class Connection(ConnectionBase):
def _connect(self) -> Connection:
""" activates the connection object """
if paramiko is None:
if PARAMIKO_IMPORT_ERR is not None:
raise AnsibleError(f'paramiko is not installed: {to_native(PARAMIKO_IMPORT_ERR)}')
port = self.get_option('port')

View file

@ -12,7 +12,6 @@ from ansible_collections.community.general.plugins.connection.wsl import authent
from ansible_collections.community.general.plugins.module_utils._filelock import FileLock, LockTimeout
from ansible.errors import AnsibleError, AnsibleAuthenticationFailure, AnsibleConnectionFailure
from ansible.module_utils.common.text.converters import to_bytes
from ansible.module_utils.compat.paramiko import paramiko
from ansible.playbook.play_context import PlayContext
from ansible.plugins.loader import connection_loader
from io import StringIO
@ -20,7 +19,7 @@ from pathlib import Path
from ansible_collections.community.internal_test_tools.tests.unit.compat.mock import patch, MagicMock, mock_open
pytest.importorskip('paramiko')
paramiko = pytest.importorskip('paramiko')
@pytest.fixture