From d0132d16e5d7cf45646aaa907082582978469dd4 Mon Sep 17 00:00:00 2001 From: Dmitry Meyer Date: Wed, 25 Feb 2026 14:44:37 +0000 Subject: [PATCH] Fix SSH fleet with `proxy_jump` in-place update check Fixes: https://github.com/dstackai/dstack/issues/3611 --- src/dstack/_internal/server/services/fleets.py | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/dstack/_internal/server/services/fleets.py b/src/dstack/_internal/server/services/fleets.py index 8febbd126..c0483ebb6 100644 --- a/src/dstack/_internal/server/services/fleets.py +++ b/src/dstack/_internal/server/services/fleets.py @@ -1074,10 +1074,18 @@ def _calculate_ssh_hosts_changes( if isinstance(current_host, str) or isinstance(new_host, str): if current_host != new_host: changed_hosts.add(host) - elif diff_models( - current_host, new_host, reset={"identity_file": True, "proxy_jump": {"identity_file"}} - ): - changed_hosts.add(host) + else: + current_host = copy_model(current_host, reset={"identity_file"}) + new_host = copy_model(new_host, reset={"identity_file"}) + # XXX: cannot use copy_model() or diff_models() with + # `reset={..., "proxy_jump": {"identity_file"}}` + # as SSHProxyParams.identity_file has no default value + if current_host.proxy_jump is not None: + current_host.proxy_jump.identity_file = "" + if new_host.proxy_jump is not None: + new_host.proxy_jump.identity_file = "" + if diff_models(current_host, new_host): + changed_hosts.add(host) return added_hosts, removed_hosts, changed_hosts