kata-deploy: fix node label removal

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 <ffidencio@nvidia.com>
This commit is contained in:
Fabiano Fidêncio
2026-02-11 13:24:00 +01:00
parent 510d2a69ae
commit 6e0cbc28a3

View File

@@ -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