From 9cce01a8dbf014737eb4ddf9399ede94971357fe Mon Sep 17 00:00:00 2001 From: Sebastian Wagner Date: Wed, 10 Nov 2021 17:19:53 +0100 Subject: [PATCH] mgr/cephadm: Add CephadmOrchestrator.wait_async() less typing Signed-off-by: Sebastian Wagner --- src/pybind/mgr/cephadm/module.py | 5 ++++- src/pybind/mgr/cephadm/ssh.py | 17 ++++++++++------- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/src/pybind/mgr/cephadm/module.py b/src/pybind/mgr/cephadm/module.py index aaa1610d9c9..ba28fa6e39b 100644 --- a/src/pybind/mgr/cephadm/module.py +++ b/src/pybind/mgr/cephadm/module.py @@ -11,7 +11,7 @@ from threading import Event import string from typing import List, Dict, Optional, Callable, Tuple, TypeVar, \ - Any, Set, TYPE_CHECKING, cast, NamedTuple, Sequence, Type + Any, Set, TYPE_CHECKING, cast, NamedTuple, Sequence, Type, Coroutine, Awaitable import datetime import os @@ -542,6 +542,9 @@ class CephadmOrchestrator(orchestrator.Orchestrator, MgrModule, serve = CephadmServe(self) serve.serve() + def wait_async(self, coro: Awaitable[T]) -> T: + return self.event_loop.get_result(coro) + def set_container_image(self, entity: str, image: str) -> None: self.check_mon_command({ 'prefix': 'config set', diff --git a/src/pybind/mgr/cephadm/ssh.py b/src/pybind/mgr/cephadm/ssh.py index 0c73b77b571..4c8574893ff 100644 --- a/src/pybind/mgr/cephadm/ssh.py +++ b/src/pybind/mgr/cephadm/ssh.py @@ -6,7 +6,7 @@ from threading import Thread from contextlib import contextmanager from io import StringIO from shlex import quote -from typing import TYPE_CHECKING, Optional, List, Tuple, Dict, Any, Iterator +from typing import TYPE_CHECKING, Optional, List, Tuple, Dict, Iterator, TypeVar, Awaitable from orchestrator import OrchestratorError try: @@ -18,6 +18,9 @@ if TYPE_CHECKING: from cephadm.module import CephadmOrchestrator from asyncssh.connection import SSHClientConnection +T = TypeVar('T') + + logger = logging.getLogger(__name__) asyncssh_logger = logging.getLogger('asyncssh') @@ -41,7 +44,7 @@ class EventLoopThread(Thread): super().__init__(target=self._loop.run_forever) self.start() - def get_result(self, coro) -> Any: # type: ignore + def get_result(self, coro: Awaitable[T]) -> T: return asyncio.run_coroutine_threadsafe(coro, self._loop).result() @@ -121,7 +124,7 @@ class SSHManager: host: str, addr: Optional[str] = None, ) -> "SSHClientConnection": - return self.mgr.event_loop.get_result(self._remote_connection(host, addr)) + return self.mgr.wait_async(self._remote_connection(host, addr)) async def _execute_command(self, host: str, @@ -151,7 +154,7 @@ class SSHManager: stdin: Optional[str] = None, addr: Optional[str] = None, ) -> Tuple[str, str, int]: - return self.mgr.event_loop.get_result(self._execute_command(host, cmd, stdin, addr)) + return self.mgr.wait_async(self._execute_command(host, cmd, stdin, addr)) async def _check_execute_command(self, host: str, @@ -172,7 +175,7 @@ class SSHManager: stdin: Optional[str] = None, addr: Optional[str] = None, ) -> str: - return self.mgr.event_loop.get_result(self._check_execute_command(host, cmd, stdin, addr)) + return self.mgr.wait_async(self._check_execute_command(host, cmd, stdin, addr)) async def _write_remote_file(self, host: str, @@ -213,7 +216,7 @@ class SSHManager: gid: Optional[int] = None, addr: Optional[str] = None, ) -> None: - self.mgr.event_loop.get_result(self._write_remote_file( + self.mgr.wait_async(self._write_remote_file( host, path, content, mode, uid, gid, addr)) async def _reset_con(self, host: str) -> None: @@ -224,7 +227,7 @@ class SSHManager: del self.cons[host] def reset_con(self, host: str) -> None: - self.mgr.event_loop.get_result(self._reset_con(host)) + self.mgr.wait_async(self._reset_con(host)) def _reset_cons(self) -> None: for host, conn in self.cons.items(): -- 2.39.5