Skip to content

Commit bfe5726

Browse files
committed
refactor: add ValidatedCluster object meta helper
1 parent ddccabf commit bfe5726

6 files changed

Lines changed: 54 additions & 64 deletions

File tree

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

Lines changed: 5 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,10 @@ use std::collections::BTreeMap;
55

66
use snafu::{ResultExt, Snafu};
77
use stackable_operator::{
8-
builder::{configmap::ConfigMapBuilder, meta::ObjectMetaBuilder},
8+
builder::configmap::ConfigMapBuilder,
99
k8s_openapi::api::core::v1::ConfigMap,
1010
product_logging::framework::VECTOR_CONFIG_FILE,
11-
v2::{
12-
builder::meta::ownerreference_from_resource,
13-
types::operator::{RoleGroupName, RoleName},
14-
},
11+
v2::types::operator::{RoleGroupName, RoleName},
1512
};
1613

1714
use crate::{
@@ -62,20 +59,14 @@ pub fn build_rolegroup_config_map(
6259

6360
cm_builder
6461
.metadata(
65-
ObjectMetaBuilder::new()
66-
.name_and_namespace(validated_cluster)
67-
.name(
62+
validated_cluster
63+
.object_meta(
6864
validated_cluster
6965
.resource_names(role_name, role_group_name)
7066
.role_group_config_map()
7167
.to_string(),
68+
validated_cluster.recommended_labels_for(role_name, role_group_name),
7269
)
73-
.ownerreference(ownerreference_from_resource(
74-
validated_cluster,
75-
None,
76-
Some(true),
77-
))
78-
.with_labels(validated_cluster.recommended_labels_for(role_name, role_group_name))
7970
.build(),
8071
)
8172
.add_data(AIRFLOW_CONFIG_FILENAME, config_file);

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

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ use stackable_operator::{
1616
api::core::v1::{ConfigMap, PodTemplateSpec},
1717
},
1818
kvp::{Label, LabelError},
19-
v2::builder::{meta::ownerreference_from_resource, pod::container::new_container_builder},
19+
v2::builder::pod::container::new_container_builder,
2020
};
2121

2222
use crate::{
@@ -182,14 +182,14 @@ pub fn build_executor_template_config_map(
182182

183183
cm_builder
184184
.metadata(
185-
ObjectMetaBuilder::new()
186-
.name_and_namespace(cluster)
187-
.name(cluster.executor_template_configmap_name())
188-
.ownerreference(ownerreference_from_resource(cluster, None, Some(true)))
189-
.with_labels(cluster.recommended_labels_for(
190-
&executor_role_name(),
191-
&executor_template_role_group_name(),
192-
))
185+
cluster
186+
.object_meta(
187+
cluster.executor_template_configmap_name(),
188+
cluster.recommended_labels_for(
189+
&executor_role_name(),
190+
&executor_template_role_group_name(),
191+
),
192+
)
193193
.with_label(restarter_label)
194194
.build(),
195195
)

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

Lines changed: 11 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,6 @@
11
use stackable_operator::{
2-
builder::meta::ObjectMetaBuilder,
32
crd::listener,
4-
v2::{
5-
builder::meta::ownerreference_from_resource,
6-
types::kubernetes::{ListenerClassName, ListenerName},
7-
},
3+
v2::types::kubernetes::{ListenerClassName, ListenerName},
84
};
95

106
use crate::{
@@ -19,16 +15,16 @@ pub fn build_group_listener(
1915
listener_group_name: ListenerName,
2016
) -> listener::v1alpha1::Listener {
2117
listener::v1alpha1::Listener {
22-
metadata: ObjectMetaBuilder::new()
23-
.name_and_namespace(cluster)
24-
.name(listener_group_name)
25-
.ownerreference(ownerreference_from_resource(cluster, None, Some(true)))
26-
// The group listener is a role-level object, so a constant `none` role-group is used
27-
// as the role-group label value.
28-
.with_labels(cluster.recommended_labels_for(
29-
&role.role_name(),
30-
&"none".parse().expect("'none' is a valid role group name"),
31-
))
18+
metadata: cluster
19+
.object_meta(
20+
listener_group_name,
21+
// The group listener is a role-level object, so a constant `none` role-group is
22+
// used as the role-group label value.
23+
cluster.recommended_labels_for(
24+
&role.role_name(),
25+
&"none".parse().expect("'none' is a valid role group name"),
26+
),
27+
)
3228
.build(),
3329
spec: listener::v1alpha1::ListenerSpec {
3430
class_name: Some(listener_class.to_string()),

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

Lines changed: 7 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,7 @@
11
use stackable_operator::{
2-
builder::meta::ObjectMetaBuilder,
32
k8s_openapi::api::core::v1::{Service, ServicePort, ServiceSpec},
43
v2::{
5-
builder::{
6-
meta::ownerreference_from_resource,
7-
service::{Scheme, Scraping, prometheus_annotations, prometheus_labels},
8-
},
4+
builder::service::{Scheme, Scraping, prometheus_annotations, prometheus_labels},
95
types::operator::RoleGroupName,
106
},
117
};
@@ -23,16 +19,14 @@ pub fn build_rolegroup_headless_service(
2319
role_group_name: &RoleGroupName,
2420
) -> Service {
2521
Service {
26-
metadata: ObjectMetaBuilder::new()
27-
.name_and_namespace(cluster)
28-
.name(
22+
metadata: cluster
23+
.object_meta(
2924
cluster
3025
.resource_names(&role.role_name(), role_group_name)
3126
.headless_service_name()
3227
.to_string(),
28+
cluster.recommended_labels(role, role_group_name),
3329
)
34-
.ownerreference(ownerreference_from_resource(cluster, None, Some(true)))
35-
.with_labels(cluster.recommended_labels(role, role_group_name))
3630
.build(),
3731
spec: Some(ServiceSpec {
3832
// Internal communication does not need to be exposed
@@ -54,16 +48,14 @@ pub fn build_rolegroup_metrics_service(
5448
role_group_name: &RoleGroupName,
5549
) -> Service {
5650
Service {
57-
metadata: ObjectMetaBuilder::new()
58-
.name_and_namespace(cluster)
59-
.name(
51+
metadata: cluster
52+
.object_meta(
6053
cluster
6154
.resource_names(&role.role_name(), role_group_name)
6255
.metrics_service_name()
6356
.to_string(),
57+
cluster.recommended_labels(role, role_group_name),
6458
)
65-
.ownerreference(ownerreference_from_resource(cluster, None, Some(true)))
66-
.with_labels(cluster.recommended_labels(role, role_group_name))
6759
.with_labels(prometheus_labels(&Scraping::Enabled))
6860
.with_annotations(prometheus_annotations(
6961
&Scraping::Enabled,

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

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,9 @@ use stackable_operator::{
2222
kvp::{Annotation, Label, LabelError},
2323
utils::COMMON_BASH_TRAP_FUNCTIONS,
2424
v2::{
25-
builder::{
26-
meta::ownerreference_from_resource,
27-
pod::{
28-
container::new_container_builder,
29-
volume::{ListenerReference, listener_operator_volume_source_builder_build_pvc},
30-
},
25+
builder::pod::{
26+
container::new_container_builder,
27+
volume::{ListenerReference, listener_operator_volume_source_builder_build_pvc},
3128
},
3229
types::operator::RoleGroupName,
3330
},
@@ -95,11 +92,8 @@ fn build_rolegroup_metadata(
9592
prometheus_label: Label,
9693
name: String,
9794
) -> ObjectMeta {
98-
ObjectMetaBuilder::new()
99-
.name_and_namespace(cluster)
100-
.name(name)
101-
.ownerreference(ownerreference_from_resource(cluster, None, Some(true)))
102-
.with_labels(cluster.recommended_labels(role, role_group_name))
95+
cluster
96+
.object_meta(name, cluster.recommended_labels(role, role_group_name))
10397
.with_label(prometheus_label)
10498
.build()
10599
}

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

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
use std::{collections::BTreeMap, str::FromStr};
22

33
use stackable_operator::{
4+
builder::meta::ObjectMetaBuilder,
45
commons::product_image_selection::ResolvedProductImage,
56
crd::git_sync,
67
database_connections::drivers::{
@@ -11,6 +12,7 @@ use stackable_operator::{
1112
kvp::Labels,
1213
v2::{
1314
HasName, HasUid, NameIsValidLabelValue,
15+
builder::meta::ownerreference_from_resource,
1416
kvp::label::{recommended_labels, role_group_selector},
1517
product_logging::framework::{ValidatedContainerLogConfigChoice, VectorContainerLogConfig},
1618
role_group_utils::ResourceNames,
@@ -275,6 +277,21 @@ impl ValidatedCluster {
275277
) -> Labels {
276278
role_group_selector(self, &product_name(), &role.role_name(), role_group_name)
277279
}
280+
281+
/// Returns an [`ObjectMetaBuilder`] pre-filled with the namespace, the resource `name`, an owner
282+
/// reference back to this cluster, and the given recommended `labels`.
283+
///
284+
/// Consolidates the metadata chain repeated by the child-resource builders. Call sites that need
285+
/// extra labels or annotations chain them onto the returned builder before `.build()`.
286+
pub(crate) fn object_meta(&self, name: impl Into<String>, labels: Labels) -> ObjectMetaBuilder {
287+
let mut builder = ObjectMetaBuilder::new();
288+
builder
289+
.name_and_namespace(self)
290+
.name(name)
291+
.ownerreference(ownerreference_from_resource(self, None, Some(true)))
292+
.with_labels(labels);
293+
builder
294+
}
278295
}
279296

280297
/// The product name (`airflow`) as a type-safe label value.

0 commit comments

Comments
 (0)