]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
mgr/cephadm: Add CephadmOrchestrator.wait_async()
authorSebastian Wagner <sewagner@redhat.com>
Wed, 10 Nov 2021 16:19:53 +0000 (17:19 +0100)
committerSebastian Wagner <sewagner@redhat.com>
Thu, 18 Nov 2021 15:16:09 +0000 (16:16 +0100)
less typing

Signed-off-by: Sebastian Wagner <sewagner@redhat.com>
src/pybind/mgr/cephadm/module.py
src/pybind/mgr/cephadm/ssh.py

index aaa1610d9c9e6b54b79360fbff5ecbf7c8878c54..ba28fa6e39bec5574d308802de50e06bf6ffb61e 100644 (file)
@@ -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',
index 0c73b77b571e9ecb45bd68928b08f013ef384749..4c8574893ffb9714df6ea3fb48aef63c9293fa15 100644 (file)
@@ -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():