Adding interval between ssh connection attempts

Signed-off-by: Andrey Berezin <a.berezin@yadro.com>
This commit is contained in:
Andrey Berezin 2023-09-19 11:59:05 +03:00 committed by Andrey Berezin
parent b039ee9940
commit fc1f373477

View file

@ -91,8 +91,9 @@ class SSHShell(Shell):
# to allow remote command to flush its output buffer # to allow remote command to flush its output buffer
DELAY_AFTER_EXIT = 0.2 DELAY_AFTER_EXIT = 0.2
SSH_CONNECTION_ATTEMPTS: ClassVar[int] = 3 SSH_CONNECTION_ATTEMPTS: ClassVar[int] = 4
CONNECTION_TIMEOUT = 90 SSH_ATTEMPTS_INTERVAL: ClassVar[int] = 10
CONNECTION_TIMEOUT = 60
def __init__( def __init__(
self, self,
@ -251,7 +252,9 @@ class SSHShell(Shell):
return (full_stdout.decode(errors="ignore"), full_stderr.decode(errors="ignore")) return (full_stdout.decode(errors="ignore"), full_stderr.decode(errors="ignore"))
def _create_connection(self, attempts: int = SSH_CONNECTION_ATTEMPTS) -> SSHClient: def _create_connection(
self, attempts: int = SSH_CONNECTION_ATTEMPTS, interval: int = SSH_ATTEMPTS_INTERVAL
) -> SSHClient:
for attempt in range(attempts): for attempt in range(attempts):
connection = SSHClient() connection = SSHClient()
connection.set_missing_host_key_policy(AutoAddPolicy()) connection.set_missing_host_key_policy(AutoAddPolicy())
@ -295,7 +298,10 @@ class SSHShell(Shell):
connection.close() connection.close()
can_retry = attempt + 1 < attempts can_retry = attempt + 1 < attempts
if can_retry: if can_retry:
logger.warn(f"Can't connect to host {self.host}, will retry. Error: {exc}") logger.warn(
f"Can't connect to host {self.host}, will retry after {interval}s. Error: {exc}"
)
sleep(interval)
continue continue
logger.exception(f"Can't connect to host {self.host}") logger.exception(f"Can't connect to host {self.host}")
raise HostIsNotAvailable(self.host) from exc raise HostIsNotAvailable(self.host) from exc