From 6e0cbc28a3ffd7f60bcbecc59e869e00dbb90e8b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabiano=20Fid=C3=AAncio?= Date: Wed, 11 Feb 2026 13:24:00 +0100 Subject: [PATCH] kata-deploy: fix node label removal MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When removing a node label, JSON merge patch semantics require setting the key to null; omitting the key leaves it unchanged. Fix label_node to send a patch with the label key set to null so the API server actually removes katacontainers.io/kata-runtime. Signed-off-by: Fabiano FidĂȘncio --- .../kata-deploy/binary/src/k8s/client.rs | 23 ++++++++++++------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/tools/packaging/kata-deploy/binary/src/k8s/client.rs b/tools/packaging/kata-deploy/binary/src/k8s/client.rs index 28d843ed37..6ee6a004e0 100644 --- a/tools/packaging/kata-deploy/binary/src/k8s/client.rs +++ b/tools/packaging/kata-deploy/binary/src/k8s/client.rs @@ -59,7 +59,7 @@ impl K8sClient { let labels = node.metadata.labels.get_or_insert_with(Default::default); - if let Some(value) = label_value { + let patch = if let Some(value) = label_value { if overwrite || !labels.contains_key(label_key) { labels.insert(label_key.to_string(), value.to_string()); info!( @@ -67,16 +67,23 @@ impl K8sClient { label_key, value, self.node_name ); } + Patch::Merge(json!({ + "metadata": { + "labels": labels + } + })) } else { labels.remove(label_key); info!("Removing label {} from node {}", label_key, self.node_name); - } - - let patch = Patch::Merge(json!({ - "metadata": { - "labels": labels - } - })); + // JSON merge patch: omit key = leave unchanged. To remove, set key to null. + let mut patch_labels = serde_json::Map::new(); + patch_labels.insert(label_key.to_string(), serde_json::Value::Null); + Patch::Merge(json!({ + "metadata": { + "labels": patch_labels + } + })) + }; let pp = PatchParams::default(); self.node_api