From 5dd2454c1915ffb7c2271eba003025b91e96817f Mon Sep 17 00:00:00 2001 From: dv Date: Mon, 4 May 2026 15:52:21 +0300 Subject: [PATCH] =?UTF-8?q?=D1=84=D0=B8=D0=BA=D1=81=20=D0=B4=D0=BB=D1=8F?= =?UTF-8?q?=20=D0=B1=D0=B4=20=D0=BB=D0=BE=D0=BA=D0=B0=D0=BB=D1=85=D0=BE?= =?UTF-8?q?=D1=81=D1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/app/services/discovery/orchestrator.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/backend/app/services/discovery/orchestrator.py b/backend/app/services/discovery/orchestrator.py index 3db1811..3f3c075 100644 --- a/backend/app/services/discovery/orchestrator.py +++ b/backend/app/services/discovery/orchestrator.py @@ -38,6 +38,7 @@ from .ssh_client import ( from .types import DeviceAction, DiscoveredDevice, DiscoveryResult, ProgressCallback logger = logging.getLogger(__name__) +_LOCAL_DB_HOSTS = {"localhost", "127.0.0.1", "::1"} # ── Public entry point ──────────────────────────────────────────────────────── @@ -249,6 +250,20 @@ def _embedded_ssh_ports(obj: Object) -> list[int]: return ports +def _normalize_db_host(db_host: str | None, server_ip: str | None) -> str | None: + """Replace localhost-like DB hosts with object server IP for remote discovery.""" + if not db_host: + return db_host + host = db_host.strip() + if host.lower() in _LOCAL_DB_HOSTS and server_ip: + logger.info( + "[discovery] DB host '%s' mapped to object server_ip '%s'", + host, server_ip, + ) + return server_ip + return host + + async def _resolve_db_connection( obj: Object, ssh_port: int, @@ -275,6 +290,7 @@ async def _resolve_db_connection( except Exception: result.errors.append("Failed to decrypt DB password") return None + db_host = _normalize_db_host(db_host, obj.server_ip) elif obj.server_ip: await _emit("disc_action", {"message": f"Чтение конфигурации сервера {obj.server_ip}..."}) try: @@ -293,6 +309,7 @@ async def _resolve_db_connection( return None db_host = detected["host"] + db_host = _normalize_db_host(db_host, obj.server_ip) db_port = detected["port"] db_user = detected["user"] db_password = detected["password"]