diff --git a/kube-core/src/resource.rs b/kube-core/src/resource.rs index 1cf51bbb9..fbd352006 100644 --- a/kube-core/src/resource.rs +++ b/kube-core/src/resource.rs @@ -1,5 +1,8 @@ pub use k8s_openapi::apimachinery::pkg::apis::meta::v1::ObjectMeta; -use k8s_openapi::{api::core::v1::ObjectReference, apimachinery::pkg::apis::meta::v1::OwnerReference}; +use k8s_openapi::{ + api::core::v1::ObjectReference, + apimachinery::pkg::apis::meta::v1::{ManagedFieldsEntry, OwnerReference}, +}; use std::{borrow::Cow, collections::BTreeMap}; /// An accessor trait for a kubernetes Resource. @@ -170,6 +173,10 @@ pub trait ResourceExt: Resource { fn finalizers(&self) -> &[String]; /// Provides mutable access to the finalizers fn finalizers_mut(&mut self) -> &mut Vec; + /// Returns managed fields + fn managed_fields(&self) -> &[ManagedFieldsEntry]; + /// Provides mutable access to managed fields + fn managed_fields_mut(&mut self) -> &mut Vec; } // TODO: replace with ordinary static when BTreeMap::new() is no longer @@ -225,4 +232,12 @@ impl ResourceExt for K { fn finalizers_mut(&mut self) -> &mut Vec { self.meta_mut().finalizers.get_or_insert_with(Vec::new) } + + fn managed_fields(&self) -> &[ManagedFieldsEntry] { + self.meta().managed_fields.as_deref().unwrap_or_default() + } + + fn managed_fields_mut(&mut self) -> &mut Vec { + self.meta_mut().managed_fields.get_or_insert_with(Vec::new) + } } diff --git a/kube/src/lib.rs b/kube/src/lib.rs index 06e9b3951..31d3cc80b 100644 --- a/kube/src/lib.rs +++ b/kube/src/lib.rs @@ -339,6 +339,7 @@ mod test { .entry("kube.rs".to_string()) .or_insert_with(|| "hello".to_string()); pod.finalizers_mut().push("kube-finalizer".to_string()); + pod.managed_fields_mut().clear(); // NB: we are **not** pushing these back upstream - (Api::apply or Api::replace needed for it) } // check we can iterate over ObjectList normally - and check the mutations worked @@ -347,6 +348,7 @@ mod test { assert!(pod.labels().get("kube.rs").is_some()); assert!(pod.finalizers().contains(&"kube-finalizer".to_string())); assert!(pod.spec().containers.is_empty()); + assert!(pod.managed_fields().is_empty()); } Ok(()) }