Skip to content

Commit 39fcb0d

Browse files
committed
refactor: add ValidatedCluster::object_meta helper for child resource metadata
1 parent 6eb76b1 commit 39fcb0d

5 files changed

Lines changed: 43 additions & 49 deletions

File tree

rust/operator-binary/src/controller/build/resource/config_map.rs

Lines changed: 7 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,9 @@ use std::collections::BTreeMap;
44

55
use snafu::{OptionExt, ResultExt, Snafu};
66
use stackable_operator::{
7-
builder::{configmap::ConfigMapBuilder, meta::ObjectMetaBuilder},
8-
k8s_openapi::api::core::v1::ConfigMap,
9-
kvp::Labels,
10-
product_logging::framework::VECTOR_CONFIG_FILE,
11-
utils::cluster_info::KubernetesClusterInfo,
12-
v2::{
13-
builder::meta::ownerreference_from_resource, config_file_writer::to_java_properties_string,
14-
},
7+
builder::configmap::ConfigMapBuilder, k8s_openapi::api::core::v1::ConfigMap, kvp::Labels,
8+
product_logging::framework::VECTOR_CONFIG_FILE, utils::cluster_info::KubernetesClusterInfo,
9+
v2::config_file_writer::to_java_properties_string,
1510
};
1611

1712
use crate::{
@@ -188,11 +183,8 @@ pub fn build_rolegroup_config_map(
188183

189184
ConfigMapBuilder::new()
190185
.metadata(
191-
ObjectMetaBuilder::new()
192-
.name(&config_map_name)
193-
.namespace(cluster.namespace.to_string())
194-
.ownerreference(ownerreference_from_resource(cluster, None, Some(true)))
195-
.with_labels(recommended_labels.clone())
186+
cluster
187+
.object_meta(&config_map_name, recommended_labels.clone())
196188
.build(),
197189
)
198190
.data(data)
@@ -218,11 +210,8 @@ pub fn build_rolegroup_catalog_config_map(
218210
);
219211
ConfigMapBuilder::new()
220212
.metadata(
221-
ObjectMetaBuilder::new()
222-
.name(&catalog_config_map_name)
223-
.namespace(cluster.namespace.to_string())
224-
.ownerreference(ownerreference_from_resource(cluster, None, Some(true)))
225-
.with_labels(recommended_labels.clone())
213+
cluster
214+
.object_meta(&catalog_config_map_name, recommended_labels.clone())
226215
.build(),
227216
)
228217
.data(

rust/operator-binary/src/controller/build/resource/listener.rs

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,9 @@
11
use snafu::{ResultExt, Snafu};
22
use stackable_operator::{
3-
builder::{
4-
meta::ObjectMetaBuilder,
5-
pod::volume::{ListenerOperatorVolumeSourceBuilder, ListenerReference},
6-
},
3+
builder::pod::volume::{ListenerOperatorVolumeSourceBuilder, ListenerReference},
74
crd::listener::v1alpha1::{Listener, ListenerPort, ListenerSpec},
85
k8s_openapi::api::core::v1::PersistentVolumeClaim,
96
kvp::Labels,
10-
v2::builder::meta::ownerreference_from_resource,
117
};
128

139
use crate::{controller::ValidatedCluster, crd::TrinoRole};
@@ -30,11 +26,8 @@ pub fn build_group_listener(
3026
listener_group_name: String,
3127
) -> Listener {
3228
Listener {
33-
metadata: ObjectMetaBuilder::new()
34-
.name_and_namespace(cluster)
35-
.name(listener_group_name)
36-
.ownerreference(ownerreference_from_resource(cluster, None, Some(true)))
37-
.with_labels(recommended_labels)
29+
metadata: cluster
30+
.object_meta(listener_group_name, recommended_labels)
3831
.build(),
3932
spec: ListenerSpec {
4033
class_name: Some(listener_class),

rust/operator-binary/src/controller/build/resource/service.rs

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,8 @@
11
use std::collections::BTreeMap;
22

33
use stackable_operator::{
4-
builder::meta::ObjectMetaBuilder,
54
k8s_openapi::api::core::v1::{Service, ServicePort, ServiceSpec},
65
kvp::{Annotations, Labels},
7-
v2::builder::meta::ownerreference_from_resource,
86
};
97

108
use crate::{
@@ -23,16 +21,14 @@ pub fn build_rolegroup_headless_service(
2321
ports: Vec<ServicePort>,
2422
) -> Service {
2523
Service {
26-
metadata: ObjectMetaBuilder::new()
27-
.name_and_namespace(cluster)
28-
.name(
24+
metadata: cluster
25+
.object_meta(
2926
cluster
3027
.resource_names(role, role_group_name)
3128
.headless_service_name()
3229
.to_string(),
30+
recommended_labels.clone(),
3331
)
34-
.ownerreference(ownerreference_from_resource(cluster, None, Some(true)))
35-
.with_labels(recommended_labels.clone())
3632
.build(),
3733
spec: Some(ServiceSpec {
3834
// Internal communication does not need to be exposed
@@ -56,16 +52,14 @@ pub fn build_rolegroup_metrics_service(
5652
selector: BTreeMap<String, String>,
5753
) -> Service {
5854
Service {
59-
metadata: ObjectMetaBuilder::new()
60-
.name_and_namespace(cluster)
61-
.name(
55+
metadata: cluster
56+
.object_meta(
6257
cluster
6358
.resource_names(role, role_group_name)
6459
.metrics_service_name()
6560
.to_string(),
61+
recommended_labels.clone(),
6662
)
67-
.ownerreference(ownerreference_from_resource(cluster, None, Some(true)))
68-
.with_labels(recommended_labels.clone())
6963
.with_labels(prometheus_labels())
7064
.with_annotations(prometheus_annotations())
7165
.build(),

rust/operator-binary/src/controller/build/resource/statefulset.rs

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -31,10 +31,7 @@ use stackable_operator::{
3131
product_logging,
3232
shared::time::Duration,
3333
v2::{
34-
builder::{
35-
meta::ownerreference_from_resource, pod::container::EnvVarSet,
36-
statefulset::restarter_ignore_secret_annotations,
37-
},
34+
builder::{pod::container::EnvVarSet, statefulset::restarter_ignore_secret_annotations},
3835
product_logging::framework::{ValidatedContainerLogConfigChoice, vector_container},
3936
types::kubernetes::{ContainerName, VolumeName},
4037
},
@@ -438,11 +435,11 @@ pub fn build_rolegroup_statefulset(
438435
);
439436

440437
Ok(StatefulSet {
441-
metadata: ObjectMetaBuilder::new()
442-
.name_and_namespace(cluster)
443-
.name(resource_names.stateful_set_name().to_string())
444-
.ownerreference(ownerreference_from_resource(cluster, None, Some(true)))
445-
.with_labels(cluster.recommended_labels(trino_role, role_group_name))
438+
metadata: cluster
439+
.object_meta(
440+
resource_names.stateful_set_name().to_string(),
441+
cluster.recommended_labels(trino_role, role_group_name),
442+
)
446443
.with_label(RESTART_CONTROLLER_ENABLED_LABEL.to_owned())
447444
.with_annotations(annotations)
448445
.build(),

rust/operator-binary/src/controller/mod.rs

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
use std::{collections::BTreeMap, str::FromStr};
55

66
use stackable_operator::{
7+
builder::meta::ObjectMetaBuilder,
78
commons::{
89
affinity::StackableAffinity,
910
product_image_selection::ResolvedProductImage,
@@ -14,6 +15,7 @@ use stackable_operator::{
1415
shared::time::Duration,
1516
v2::{
1617
HasName, HasUid, NameIsValidLabelValue,
18+
builder::meta::ownerreference_from_resource,
1719
kvp::label::{recommended_labels, role_group_selector},
1820
role_group_utils::ResourceNames,
1921
types::{
@@ -216,6 +218,25 @@ impl ValidatedCluster {
216218
}
217219
}
218220

221+
/// Returns an [`ObjectMetaBuilder`] pre-filled with this cluster's namespace, an owner
222+
/// reference back to the cluster, the resource `name` and the given `recommended_labels`.
223+
///
224+
/// Consolidates the metadata chain repeated by the child-resource builders. Call sites that
225+
/// need extra labels/annotations chain them onto the returned builder.
226+
pub(crate) fn object_meta(
227+
&self,
228+
name: impl Into<String>,
229+
recommended_labels: Labels,
230+
) -> ObjectMetaBuilder {
231+
let mut builder = ObjectMetaBuilder::new();
232+
builder
233+
.name_and_namespace(self)
234+
.name(name)
235+
.ownerreference(ownerreference_from_resource(self, None, Some(true)))
236+
.with_labels(recommended_labels);
237+
builder
238+
}
239+
219240
/// A [`TrinoRole`] as a type-safe [`RoleName`].
220241
fn role_name(role: &TrinoRole) -> RoleName {
221242
RoleName::from_str(&role.to_string()).expect("a TrinoRole is a valid RFC 1123 role name")

0 commit comments

Comments
 (0)