Skip to content

Commit c573b7a

Browse files
committed
patchinator -> deep_merger
1 parent 0d6c134 commit c573b7a

5 files changed

Lines changed: 45 additions & 42 deletions

File tree

crates/stackable-operator/src/cluster_resources.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -38,11 +38,11 @@ use crate::{
3838
},
3939
},
4040
crd::listener,
41+
deep_merger::{self, ObjectOverrides, apply_object_overrides},
4142
kvp::{
4243
Label, LabelError, Labels,
4344
consts::{K8S_APP_INSTANCE_KEY, K8S_APP_MANAGED_BY_KEY, K8S_APP_NAME_KEY},
4445
},
45-
patchinator::{self, ObjectOverrides, apply_patches},
4646
utils::format_full_controller_name,
4747
};
4848

@@ -90,7 +90,7 @@ pub enum Error {
9090
},
9191

9292
#[snafu(display("failed to apply user-provided object overrides"))]
93-
ApplyObjectOverrides { source: patchinator::Error },
93+
ApplyObjectOverrides { source: deep_merger::Error },
9494
}
9595

9696
/// A cluster resource handled by [`ClusterResources`].
@@ -581,21 +581,21 @@ impl ClusterResources {
581581
let mut mutated = resource.maybe_mutate(&self.apply_strategy);
582582

583583
// We apply the object overrides of the user at the very end to offer maximum flexibility.
584-
apply_patches(&mut mutated, self.object_overrides.clone())
584+
apply_object_overrides(&mut mutated, self.object_overrides.clone())
585585
.context(ApplyObjectOverridesSnafu)?;
586586

587-
let patched_resource = self
587+
let merged_resource = self
588588
.apply_strategy
589589
.run(&self.manager, &mutated, client)
590590
.await?;
591591

592-
let resource_id = patched_resource.uid().context(MissingObjectKeySnafu {
592+
let resource_id = merged_resource.uid().context(MissingObjectKeySnafu {
593593
key: "metadata/uid",
594594
})?;
595595

596596
self.resource_ids.insert(resource_id);
597597

598-
Ok(patched_resource)
598+
Ok(merged_resource)
599599
}
600600

601601
/// Checks that the given `labels` contain the given `expected_label` with
File renamed without changes.

crates/stackable-operator/src/patchinator/mod.rs renamed to crates/stackable-operator/src/deep_merger/mod.rs

Lines changed: 37 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -18,56 +18,59 @@ pub enum Error {
1818
},
1919
}
2020

21-
// Takes an arbitrary Kubernetes object (`base`) and applies the given list of patches onto it.
21+
// Takes an arbitrary Kubernetes object (`base`) and applies the given list of deep merges onto it.
2222
//
23-
// Patches are only applied to objects that have the same apiVersion, kind, name
23+
// Merges are only applied to objects that have the same apiVersion, kind, name
2424
// and namespace.
25-
pub fn apply_patches<R>(base: &mut R, patches: ObjectOverrides) -> Result<(), Error>
25+
pub fn apply_object_overrides<R>(
26+
base: &mut R,
27+
object_overrides: ObjectOverrides,
28+
) -> Result<(), Error>
2629
where
2730
R: kube::Resource<DynamicType = ()> + DeepMerge + DeserializeOwned,
2831
{
29-
for patch in patches.object_overrides {
30-
apply_patch(base, patch)?;
32+
for object_override in object_overrides.object_overrides {
33+
apply_deep_merge(base, object_override)?;
3134
}
3235
Ok(())
3336
}
3437

35-
// Takes an arbitrary Kubernetes object (`base`) and applies the patch.
38+
// Takes an arbitrary Kubernetes object (`base`) and applies the deep merge.
3639
//
37-
// Patches are only applied to objects that have the same apiVersion, kind, name
40+
// Merges are only applied to objects that have the same apiVersion, kind, name
3841
// and namespace.
39-
pub fn apply_patch<R>(base: &mut R, patch: DynamicObject) -> Result<(), Error>
42+
pub fn apply_deep_merge<R>(base: &mut R, merge: DynamicObject) -> Result<(), Error>
4043
where
4144
R: kube::Resource<DynamicType = ()> + DeepMerge + DeserializeOwned,
4245
{
43-
let Some(patch_type) = &patch.types else {
46+
let Some(merge_type) = &merge.types else {
4447
return Ok(());
4548
};
46-
if patch_type.api_version != R::api_version(&()) || patch_type.kind != R::kind(&()) {
49+
if merge_type.api_version != R::api_version(&()) || merge_type.kind != R::kind(&()) {
4750
return Ok(());
4851
}
49-
let Some(patch_name) = &patch.metadata.name else {
52+
let Some(merge_name) = &merge.metadata.name else {
5053
return Ok(());
5154
};
5255

5356
// The name always needs to match
54-
if &base.name_any() != patch_name {
57+
if &base.name_any() != merge_name {
5558
return Ok(());
5659
}
5760

5861
// If there is a namespace on the base object, it needs to match as well
5962
// Note that it is not set for cluster-scoped objects.
60-
if base.namespace() != patch.metadata.namespace {
63+
if base.namespace() != merge.metadata.namespace {
6164
return Ok(());
6265
}
6366

64-
let deserialized_patch = patch
67+
let deserialized_merge = merge
6568
.try_parse()
6669
.with_context(|_| ParseDynamicObjectSnafu {
6770
target_api_version: R::api_version(&()),
6871
target_kind: R::kind(&()),
6972
})?;
70-
base.merge_from(deserialized_patch);
73+
base.merge_from(deserialized_merge);
7174

7275
Ok(())
7376
}
@@ -173,7 +176,7 @@ metadata:
173176
}
174177

175178
#[test]
176-
fn service_account_patched() {
179+
fn service_account_merged() {
177180
let mut sa = generate_service_account();
178181
let object_overrides: ObjectOverrides = serde_yaml::from_str(
179182
"
@@ -191,12 +194,12 @@ objectOverrides:
191194
.expect("test input is valid YAML");
192195

193196
assert_has_label(&sa, "app.kubernetes.io/name", "trino");
194-
apply_patches(&mut sa, object_overrides).unwrap();
197+
apply_object_overrides(&mut sa, object_overrides).unwrap();
195198
assert_has_label(&sa, "app.kubernetes.io/name", "overwritten");
196199
}
197200

198201
#[test]
199-
fn service_account_not_patched_as_different_name() {
202+
fn service_account_not_merged_as_different_name() {
200203
let mut sa = generate_service_account();
201204
let object_overrides: ObjectOverrides = serde_yaml::from_str(
202205
"
@@ -214,12 +217,12 @@ objectOverrides:
214217
.expect("test input is valid YAML");
215218

216219
let original = sa.clone();
217-
apply_patches(&mut sa, object_overrides).unwrap();
218-
assert_eq!(sa, original, "The patch shouldn't have changed anything");
220+
apply_object_overrides(&mut sa, object_overrides).unwrap();
221+
assert_eq!(sa, original, "The merge shouldn't have changed anything");
219222
}
220223

221224
#[test]
222-
fn service_account_not_patched_as_different_namespace() {
225+
fn service_account_not_merged_as_different_namespace() {
223226
let mut sa = generate_service_account();
224227
let object_overrides: ObjectOverrides = serde_yaml::from_str(
225228
"
@@ -237,12 +240,12 @@ objectOverrides:
237240
.expect("test input is valid YAML");
238241

239242
let original = sa.clone();
240-
apply_patches(&mut sa, object_overrides).unwrap();
241-
assert_eq!(sa, original, "The patch shouldn't have changed anything");
243+
apply_object_overrides(&mut sa, object_overrides).unwrap();
244+
assert_eq!(sa, original, "The merge shouldn't have changed anything");
242245
}
243246

244247
#[test]
245-
fn service_account_not_patched_as_different_api_version() {
248+
fn service_account_not_merged_as_different_api_version() {
246249
let mut sa = generate_service_account();
247250
let object_overrides: ObjectOverrides = serde_yaml::from_str(
248251
"
@@ -260,12 +263,12 @@ objectOverrides:
260263
.expect("test input is valid YAML");
261264

262265
let original = sa.clone();
263-
apply_patches(&mut sa, object_overrides).unwrap();
264-
assert_eq!(sa, original, "The patch shouldn't have changed anything");
266+
apply_object_overrides(&mut sa, object_overrides).unwrap();
267+
assert_eq!(sa, original, "The merge shouldn't have changed anything");
265268
}
266269

267270
#[test]
268-
fn statefulset_patched_multiple_patches() {
271+
fn statefulset_merged_multiple_merges() {
269272
let mut sts = generate_stateful_set();
270273
let object_overrides: ObjectOverrides = serde_yaml::from_str(
271274
"
@@ -325,7 +328,7 @@ objectOverrides:
325328
get_trino_container_image(&sts).as_deref(),
326329
Some("trino-image")
327330
);
328-
apply_patches(&mut sts, object_overrides).unwrap();
331+
apply_object_overrides(&mut sts, object_overrides).unwrap();
329332
assert_eq!(get_replicas(&sts), Some(3));
330333
assert_eq!(
331334
get_trino_container_image(&sts).as_deref(),
@@ -334,7 +337,7 @@ objectOverrides:
334337
}
335338

336339
#[test]
337-
fn configmap_patched() {
340+
fn configmap_merged() {
338341
let mut cm: ConfigMap = serde_yaml::from_str(
339342
"
340343
apiVersion: v1
@@ -377,7 +380,7 @@ objectOverrides:
377380
("log.properties".to_owned(), "=info".to_owned()),
378381
])
379382
);
380-
apply_patches(&mut cm, object_overrides).unwrap();
383+
apply_object_overrides(&mut cm, object_overrides).unwrap();
381384
assert_eq!(
382385
cm.data.as_ref().unwrap(),
383386
&BTreeMap::from([
@@ -395,7 +398,7 @@ objectOverrides:
395398
}
396399

397400
#[test]
398-
fn secret_patched() {
401+
fn secret_merged() {
399402
let mut secret: Secret = serde_yaml::from_str(
400403
"
401404
apiVersion: v1
@@ -433,7 +436,7 @@ objectOverrides:
433436
&BTreeMap::from([("raw".to_owned(), ByteString(b"bar\n".to_vec()))])
434437
);
435438

436-
apply_patches(&mut secret, object_overrides).unwrap();
439+
apply_object_overrides(&mut secret, object_overrides).unwrap();
437440
assert_eq!(
438441
secret.string_data.as_ref().unwrap(),
439442
&BTreeMap::from([("foo".to_owned(), "overwritten".to_owned()),])
@@ -445,7 +448,7 @@ objectOverrides:
445448
}
446449

447450
#[test]
448-
fn cluster_scoped_object_patched() {
451+
fn cluster_scoped_object_merged() {
449452
let mut storage_class: StorageClass = serde_yaml::from_str(
450453
"
451454
apiVersion: storage.k8s.io/v1
@@ -481,7 +484,7 @@ objectOverrides:
481484
.expect("test input is valid YAML");
482485

483486
assert_has_label(&storage_class, "foo", "original");
484-
apply_patches(&mut storage_class, object_overrides).unwrap();
487+
apply_object_overrides(&mut storage_class, object_overrides).unwrap();
485488
assert_has_label(&storage_class, "foo", "overwritten");
486489
}
487490

crates/stackable-operator/src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,14 @@ pub mod config;
1515
pub mod constants;
1616
pub mod cpu;
1717
pub mod crd;
18+
pub mod deep_merger;
1819
pub mod eos;
1920
pub mod helm;
2021
pub mod iter;
2122
pub mod kvp;
2223
pub mod logging;
2324
pub mod memory;
2425
pub mod namespace;
25-
pub mod patchinator;
2626
pub mod pod_utils;
2727
pub mod product_config_utils;
2828
pub mod product_logging;

crates/xtask/src/crd/dummy.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@ use serde::{Deserialize, Serialize};
22
use stackable_operator::{
33
commons::resources::{JvmHeapLimits, Resources},
44
config::fragment::Fragment,
5+
deep_merger::ObjectOverrides,
56
kube::CustomResource,
6-
patchinator::ObjectOverrides,
77
role_utils::Role,
88
schemars::JsonSchema,
99
status::condition::ClusterCondition,

0 commit comments

Comments
 (0)