Skip to content

Commit 5834a49

Browse files
committed
refactor: add objectmeta helper & PLACEHOLDER_LISTENER_ROLE_GROUP
1 parent 026367c commit 5834a49

7 files changed

Lines changed: 65 additions & 58 deletions

File tree

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,10 @@
22
//!
33
//! [`ValidatedCluster`]: crate::controller::ValidatedCluster
44
5+
use std::str::FromStr;
6+
57
use snafu::Snafu;
8+
use stackable_operator::v2::types::operator::RoleGroupName;
69

710
use crate::{crd::storage::NifiRepository, security::oidc};
811

@@ -14,6 +17,10 @@ pub mod properties;
1417
pub mod proxy_hosts;
1518
pub mod resource;
1619

20+
// Placeholder role-group name for role-level resources (e.g. the per-role `Listener`), which have
21+
// no associated role group. Preserves the historical `app.kubernetes.io/role-group: none` label.
22+
stackable_operator::constant!(pub(crate) PLACEHOLDER_LISTENER_ROLE_GROUP: RoleGroupName = "none");
23+
1724
/// Errors that can occur while building the NiFi product configuration files.
1825
#[derive(Snafu, Debug)]
1926
#[snafu(visibility(pub(crate)))]

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

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,9 @@
22
33
use snafu::{ResultExt, Snafu};
44
use stackable_operator::{
5-
builder::{configmap::ConfigMapBuilder, meta::ObjectMetaBuilder},
6-
k8s_openapi::api::core::v1::ConfigMap,
7-
product_logging::framework::VECTOR_CONFIG_FILE,
8-
utils::cluster_info::KubernetesClusterInfo,
9-
v2::{builder::meta::ownerreference_from_resource, types::operator::RoleGroupName},
5+
builder::configmap::ConfigMapBuilder, k8s_openapi::api::core::v1::ConfigMap,
6+
product_logging::framework::VECTOR_CONFIG_FILE, utils::cluster_info::KubernetesClusterInfo,
7+
v2::types::operator::RoleGroupName,
108
};
119

1210
use crate::controller::{
@@ -72,16 +70,14 @@ pub fn build_rolegroup_config_map(
7270

7371
cm_builder
7472
.metadata(
75-
ObjectMetaBuilder::new()
76-
.name_and_namespace(cluster)
77-
.name(
73+
cluster
74+
.object_meta(
7875
cluster
7976
.resource_names(&rg.name)
8077
.role_group_config_map()
8178
.to_string(),
79+
&rg.name,
8280
)
83-
.ownerreference(ownerreference_from_resource(cluster, None, Some(true)))
84-
.with_labels(cluster.recommended_labels(&rg.name))
8581
.build(),
8682
)
8783
.add_data(

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

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,19 @@
11
use std::str::FromStr;
22

33
use stackable_operator::{
4-
builder::meta::ObjectMetaBuilder,
54
crd::listener::v1alpha1::{Listener, ListenerPort, ListenerSpec},
65
k8s_openapi::api::core::v1::PersistentVolumeClaim,
76
kvp::Labels,
87
v2::{
9-
builder::{
10-
meta::ownerreference_from_resource,
11-
pod::volume::{ListenerReference, listener_operator_volume_source_builder_build_pvc},
8+
builder::pod::volume::{
9+
ListenerReference, listener_operator_volume_source_builder_build_pvc,
1210
},
1311
types::kubernetes::{ListenerClassName, ListenerName, PersistentVolumeClaimName},
1412
},
1513
};
1614

1715
use crate::{
18-
controller::ValidatedCluster,
16+
controller::{ValidatedCluster, build::PLACEHOLDER_LISTENER_ROLE_GROUP},
1917
crd::{HTTPS_PORT, HTTPS_PORT_NAME},
2018
};
2119

@@ -28,11 +26,11 @@ pub fn build_group_listener(
2826
listener_group_name: ListenerName,
2927
) -> Listener {
3028
Listener {
31-
metadata: ObjectMetaBuilder::new()
32-
.name_and_namespace(cluster)
33-
.name(listener_group_name.to_string())
34-
.ownerreference(ownerreference_from_resource(cluster, None, Some(true)))
35-
.with_labels(cluster.recommended_labels_role_level())
29+
metadata: cluster
30+
.object_meta(
31+
listener_group_name.to_string(),
32+
&PLACEHOLDER_LISTENER_ROLE_GROUP,
33+
)
3634
.build(),
3735
spec: ListenerSpec {
3836
class_name: Some(listener_class.to_string()),

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

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -192,11 +192,11 @@ fn build_reporting_task_service(cluster: &ValidatedCluster) -> Result<Service> {
192192
);
193193

194194
Ok(Service {
195-
metadata: ObjectMetaBuilder::new()
196-
.name_and_namespace(cluster)
197-
.name(build_reporting_task_service_name(&nifi_cluster_name))
198-
.ownerreference(ownerreference_from_resource(cluster, None, Some(true)))
199-
.with_labels(cluster.recommended_labels(&reporting_task_role_group()))
195+
metadata: cluster
196+
.object_meta(
197+
build_reporting_task_service_name(&nifi_cluster_name),
198+
&reporting_task_role_group(),
199+
)
200200
.build(),
201201
spec: Some(ServiceSpec {
202202
ports: Some(vec![ServicePort {
@@ -327,11 +327,8 @@ fn build_reporting_task_job(
327327
pod_template.merge_from(cluster.cluster_config.reporting_task_pod_overrides.clone());
328328

329329
let job = Job {
330-
metadata: ObjectMetaBuilder::new()
331-
.name_and_namespace(cluster)
332-
.name(job_name)
333-
.ownerreference(ownerreference_from_resource(cluster, None, Some(true)))
334-
.with_labels(cluster.recommended_labels(&reporting_task_role_group()))
330+
metadata: cluster
331+
.object_meta(job_name, &reporting_task_role_group())
335332
.build(),
336333
spec: Some(JobSpec {
337334
backoff_limit: Some(100),

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

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
use stackable_operator::{
2-
builder::meta::ObjectMetaBuilder,
32
k8s_openapi::api::core::v1::{Service, ServicePort, ServiceSpec},
43
kvp::{Annotations, Labels},
5-
v2::{builder::meta::ownerreference_from_resource, types::operator::RoleGroupName},
4+
v2::types::operator::RoleGroupName,
65
};
76

87
use crate::{
@@ -17,16 +16,14 @@ pub fn build_rolegroup_headless_service(
1716
role_group_name: &RoleGroupName,
1817
) -> Service {
1918
Service {
20-
metadata: ObjectMetaBuilder::new()
21-
.name_and_namespace(cluster)
22-
.name(
19+
metadata: cluster
20+
.object_meta(
2321
cluster
2422
.resource_names(role_group_name)
2523
.headless_service_name()
2624
.to_string(),
25+
role_group_name,
2726
)
28-
.ownerreference(ownerreference_from_resource(cluster, None, Some(true)))
29-
.with_labels(cluster.recommended_labels(role_group_name))
3027
.build(),
3128
spec: Some(ServiceSpec {
3229
// Internal communication does not need to be exposed
@@ -48,16 +45,14 @@ pub fn build_rolegroup_metrics_service(
4845
) -> Service {
4946
let product_version = &cluster.image.product_version;
5047
Service {
51-
metadata: ObjectMetaBuilder::new()
52-
.name_and_namespace(cluster)
53-
.name(
48+
metadata: cluster
49+
.object_meta(
5450
cluster
5551
.resource_names(role_group_name)
5652
.metrics_service_name()
5753
.to_string(),
54+
role_group_name,
5855
)
59-
.ownerreference(ownerreference_from_resource(cluster, None, Some(true)))
60-
.with_labels(cluster.recommended_labels(role_group_name))
6156
.with_labels(prometheus_labels())
6257
.with_annotations(prometheus_annotations(product_version))
6358
.build(),

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

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -38,10 +38,7 @@ use stackable_operator::{
3838
},
3939
utils::{COMMON_BASH_TRAP_FUNCTIONS, cluster_info::KubernetesClusterInfo},
4040
v2::{
41-
builder::{
42-
meta::ownerreference_from_resource,
43-
pod::container::{EnvVarSet, new_container_builder},
44-
},
41+
builder::pod::container::{EnvVarSet, new_container_builder},
4542
product_logging::framework::{STACKABLE_LOG_DIR, vector_container},
4643
types::kubernetes::{ContainerName, VolumeName},
4744
},
@@ -556,7 +553,7 @@ pub(crate) async fn build_node_rolegroup_statefulset(
556553
.context(AddAuthVolumesSnafu)?;
557554

558555
let metadata = ObjectMetaBuilder::new()
559-
.with_labels(recommended_object_labels.clone())
556+
.with_labels(recommended_object_labels)
560557
.build();
561558

562559
let requested_secret_lifetime = merged_config
@@ -655,11 +652,8 @@ pub(crate) async fn build_node_rolegroup_statefulset(
655652
pod_template.merge_from(rg.pod_overrides.clone());
656653

657654
Ok(StatefulSet {
658-
metadata: ObjectMetaBuilder::new()
659-
.name_and_namespace(cluster)
660-
.name(resource_names.stateful_set_name().to_string())
661-
.ownerreference(ownerreference_from_resource(cluster, None, Some(true)))
662-
.with_labels(recommended_object_labels)
655+
metadata: cluster
656+
.object_meta(resource_names.stateful_set_name().to_string(), &rg.name)
663657
.with_label(RESTART_CONTROLLER_ENABLED_LABEL.to_owned())
664658
.build(),
665659
spec: Some(StatefulSetSpec {

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

Lines changed: 26 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -231,13 +231,33 @@ impl ValidatedCluster {
231231
role_selector(self, &product_name(), &Self::role_name())
232232
}
233233

234-
/// Recommended labels for a role-level resource (the per-role [`Listener`]), which has no
235-
/// associated role group. Uses the placeholder role-group `none`, preserving the historical
234+
/// Returns an [`ObjectMetaBuilder`](stackable_operator::builder::meta::ObjectMetaBuilder)
235+
/// pre-filled with the namespace, an owner reference back to this cluster, and the recommended
236+
/// labels for a resource named `name` in `role_group_name`.
237+
///
238+
/// Consolidates the metadata chain repeated by the child-resource builders. Call sites that
239+
/// need extra labels/annotations chain them onto the returned builder. Role-level resources
240+
/// (e.g. the per-role [`Listener`](stackable_operator::crd::listener::v1alpha1::Listener)) pass
241+
/// the placeholder role-group `none`, preserving the historical
236242
/// `app.kubernetes.io/role-group: none` label.
237-
pub fn recommended_labels_role_level(&self) -> Labels {
238-
let role_group =
239-
RoleGroupName::from_str("none").expect("'none' is a valid role-group name");
240-
self.recommended_labels(&role_group)
243+
pub(crate) fn object_meta(
244+
&self,
245+
name: impl Into<String>,
246+
role_group_name: &RoleGroupName,
247+
) -> stackable_operator::builder::meta::ObjectMetaBuilder {
248+
let mut builder = stackable_operator::builder::meta::ObjectMetaBuilder::new();
249+
builder
250+
.name_and_namespace(self)
251+
.name(name)
252+
.ownerreference(
253+
stackable_operator::v2::builder::meta::ownerreference_from_resource(
254+
self,
255+
None,
256+
Some(true),
257+
),
258+
)
259+
.with_labels(self.recommended_labels(role_group_name));
260+
builder
241261
}
242262
}
243263

0 commit comments

Comments
 (0)