@@ -18,28 +18,15 @@ pub enum Error {
1818 } ,
1919}
2020
21- // Takes an arbitrary Kubernetes object (`base`) and applies the given list of deep merges onto it.
22- //
23- // Merges are only applied to objects that have the same apiVersion, kind, name
24- // and namespace.
25- pub fn apply_object_overrides < R > (
26- base : & mut R ,
27- object_overrides : ObjectOverrides ,
28- ) -> Result < ( ) , Error >
29- where
30- R : kube:: Resource < DynamicType = ( ) > + DeepMerge + DeserializeOwned ,
31- {
32- for object_override in object_overrides. object_overrides {
33- apply_deep_merge ( base, object_override) ?;
34- }
35- Ok ( ( ) )
36- }
37-
38- // Takes an arbitrary Kubernetes object (`base`) and applies the deep merge.
39- //
40- // Merges are only applied to objects that have the same apiVersion, kind, name
41- // and namespace.
42- pub fn apply_deep_merge < R > ( base : & mut R , merge : DynamicObject ) -> Result < ( ) , Error >
21+ /// Takes an arbitrary Kubernetes object (`base`) and applies the deep merge.
22+ ///
23+ /// Merges are only applied to objects that have the same apiVersion, kind, name
24+ /// and namespace.
25+ ///
26+ /// In case the merge matches the base object, it will get cloned prior to merging.
27+ /// We modeled it this way, as most of the time it won't match, so we don't need to proactively
28+ /// clone.
29+ pub fn apply_deep_merge < R > ( base : & mut R , merge : & DynamicObject ) -> Result < ( ) , Error >
4330where
4431 R : kube:: Resource < DynamicType = ( ) > + DeepMerge + DeserializeOwned ,
4532{
6552 }
6653
6754 let deserialized_merge = merge
55+ // We only clone if needed, most cases the deep merges don't actually apply
56+ . to_owned ( )
6857 . try_parse ( )
6958 . with_context ( |_| ParseDynamicObjectSnafu {
7059 target_api_version : R :: api_version ( & ( ) ) ,
@@ -192,7 +181,9 @@ mod tests {
192181 . expect ( "test YAML is valid" ) ;
193182
194183 assert_has_label ( & sa, "app.kubernetes.io/name" , "trino" ) ;
195- apply_object_overrides ( & mut sa, object_overrides) . unwrap ( ) ;
184+ object_overrides
185+ . apply_to ( & mut sa)
186+ . expect ( "merging onto test object works" ) ;
196187 assert_has_label ( & sa, "app.kubernetes.io/name" , "overwritten" ) ;
197188 }
198189
@@ -213,7 +204,9 @@ mod tests {
213204 . expect ( "test YAML is valid" ) ;
214205
215206 let original = sa. clone ( ) ;
216- apply_object_overrides ( & mut sa, object_overrides) . unwrap ( ) ;
207+ object_overrides
208+ . apply_to ( & mut sa)
209+ . expect ( "merging onto test object works" ) ;
217210 assert_eq ! ( sa, original, "The merge shouldn't have changed anything" ) ;
218211 }
219212
@@ -234,7 +227,9 @@ mod tests {
234227 . expect ( "test YAML is valid" ) ;
235228
236229 let original = sa. clone ( ) ;
237- apply_object_overrides ( & mut sa, object_overrides) . unwrap ( ) ;
230+ object_overrides
231+ . apply_to ( & mut sa)
232+ . expect ( "merging onto test object works" ) ;
238233 assert_eq ! ( sa, original, "The merge shouldn't have changed anything" ) ;
239234 }
240235
@@ -255,7 +250,9 @@ mod tests {
255250 . expect ( "test YAML is valid" ) ;
256251
257252 let original = sa. clone ( ) ;
258- apply_object_overrides ( & mut sa, object_overrides) . unwrap ( ) ;
253+ object_overrides
254+ . apply_to ( & mut sa)
255+ . expect ( "merging onto test object works" ) ;
259256 assert_eq ! ( sa, original, "The merge shouldn't have changed anything" ) ;
260257 }
261258
@@ -318,7 +315,9 @@ mod tests {
318315 get_trino_container_image( & sts) . as_deref( ) ,
319316 Some ( "trino-image" )
320317 ) ;
321- apply_object_overrides ( & mut sts, object_overrides) . unwrap ( ) ;
318+ object_overrides
319+ . apply_to ( & mut sts)
320+ . expect ( "merging onto test object works" ) ;
322321 assert_eq ! ( get_replicas( & sts) , Some ( 3 ) ) ;
323322 assert_eq ! (
324323 get_trino_container_image( & sts) . as_deref( ) ,
@@ -366,7 +365,9 @@ mod tests {
366365 ( "log.properties" . to_owned( ) , "=info" . to_owned( ) ) ,
367366 ] )
368367 ) ;
369- apply_object_overrides ( & mut cm, object_overrides) . unwrap ( ) ;
368+ object_overrides
369+ . apply_to ( & mut cm)
370+ . expect ( "merging onto test object works" ) ;
370371 assert_eq ! (
371372 cm. data. as_ref( ) . unwrap( ) ,
372373 & BTreeMap :: from( [
@@ -418,7 +419,9 @@ mod tests {
418419 & BTreeMap :: from( [ ( "raw" . to_owned( ) , ByteString ( b"bar\n " . to_vec( ) ) ) ] )
419420 ) ;
420421
421- apply_object_overrides ( & mut secret, object_overrides) . unwrap ( ) ;
422+ object_overrides
423+ . apply_to ( & mut secret)
424+ . expect ( "merging onto test object works" ) ;
422425 assert_eq ! (
423426 secret. string_data. as_ref( ) . unwrap( ) ,
424427 & BTreeMap :: from( [ ( "foo" . to_owned( ) , "overwritten" . to_owned( ) ) , ] )
@@ -462,7 +465,9 @@ mod tests {
462465 . expect ( "test YAML is valid" ) ;
463466
464467 assert_has_label ( & storage_class, "foo" , "original" ) ;
465- apply_object_overrides ( & mut storage_class, object_overrides) . unwrap ( ) ;
468+ object_overrides
469+ . apply_to ( & mut storage_class)
470+ . expect ( "merging onto test object works" ) ;
466471 assert_has_label ( & storage_class, "foo" , "overwritten" ) ;
467472 }
468473
0 commit comments