From 9be21b54bd5031a34760704c0ef17aa890db191e Mon Sep 17 00:00:00 2001 From: mbecker20 Date: Sun, 14 Dec 2025 00:06:12 -0800 Subject: [PATCH] fix deployment / stack toml when swarm attached --- bin/core/src/sync/resources.rs | 19 +++++++++++++++---- bin/core/src/sync/toml.rs | 22 ++++++++++++++++++++++ 2 files changed, 37 insertions(+), 4 deletions(-) diff --git a/bin/core/src/sync/resources.rs b/bin/core/src/sync/resources.rs index aecb3464b..4b93f8fa2 100644 --- a/bin/core/src/sync/resources.rs +++ b/bin/core/src/sync/resources.rs @@ -63,14 +63,19 @@ impl ResourceSyncTrait for Deployment { update: Self::PartialConfig, ) -> anyhow::Result { let resources = all_resources_cache().load(); - // need to replace the server id with name + + original.swarm_id = resources + .swarms + .get(&original.swarm_id) + .map(|s| s.name.clone()) + .unwrap_or_default(); + original.server_id = resources .servers .get(&original.server_id) .map(|s| s.name.clone()) .unwrap_or_default(); - // need to replace the build id with name if let DeploymentImage::Build { build_id, version } = &original.image { @@ -96,13 +101,19 @@ impl ResourceSyncTrait for Stack { update: Self::PartialConfig, ) -> anyhow::Result { let resources = all_resources_cache().load(); - // Need to replace server id with name + + original.swarm_id = resources + .swarms + .get(&original.swarm_id) + .map(|s| s.name.clone()) + .unwrap_or_default(); + original.server_id = resources .servers .get(&original.server_id) .map(|s| s.name.clone()) .unwrap_or_default(); - // Replace linked repo with name + original.linked_repo = resources .repos .get(&original.linked_repo) diff --git a/bin/core/src/sync/toml.rs b/bin/core/src/sync/toml.rs index 7c41b43df..34c07ca86 100644 --- a/bin/core/src/sync/toml.rs +++ b/bin/core/src/sync/toml.rs @@ -214,6 +214,15 @@ impl ToToml for Swarm { impl ToToml for Stack { fn replace_ids(resource: &mut Resource) { let all = all_resources_cache().load(); + + resource.config.swarm_id.clone_from( + all + .swarms + .get(&resource.config.swarm_id) + .map(|s| &s.name) + .unwrap_or(&String::new()), + ); + resource.config.server_id.clone_from( all .servers @@ -221,6 +230,7 @@ impl ToToml for Stack { .map(|s| &s.name) .unwrap_or(&String::new()), ); + resource.config.linked_repo.clone_from( all .repos @@ -239,6 +249,7 @@ impl ToToml for Stack { .map(|(key, value)| { #[allow(clippy::single_match)] match key.as_str() { + "swarm_id" => return Ok((String::from("swarm"), value)), "server_id" => return Ok((String::from("server"), value)), _ => {} } @@ -251,6 +262,15 @@ impl ToToml for Stack { impl ToToml for Deployment { fn replace_ids(resource: &mut Resource) { let all = all_resources_cache().load(); + + resource.config.swarm_id.clone_from( + all + .swarms + .get(&resource.config.swarm_id) + .map(|s| &s.name) + .unwrap_or(&String::new()), + ); + resource.config.server_id.clone_from( all .servers @@ -258,6 +278,7 @@ impl ToToml for Deployment { .map(|s| &s.name) .unwrap_or(&String::new()), ); + if let DeploymentImage::Build { build_id, .. } = &mut resource.config.image { @@ -279,6 +300,7 @@ impl ToToml for Deployment { .into_iter() .map(|(key, mut value)| { match key.as_str() { + "swarm_id" => return Ok((String::from("swarm"), value)), "server_id" => return Ok((String::from("server"), value)), "image" => { if let Some(DeploymentImage::Build { version, .. }) =