Skip to content

Commit 9513480

Browse files
committed
move label-related functions out of controller into a separate module
1 parent 16a5394 commit 9513480

8 files changed

Lines changed: 116 additions & 76 deletions

File tree

rust/operator-binary/src/controller.rs

Lines changed: 0 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ use stackable_operator::{
2525
core::{DeserializeGuard, error_boundary},
2626
runtime::{controller::Action, reflector::ObjectRef},
2727
},
28-
kvp::Labels,
2928
logging::controller::ReconcilerError,
3029
shared::time::Duration,
3130
status::condition::{
@@ -35,7 +34,6 @@ use stackable_operator::{
3534
v2::{
3635
HasName, HasUid, NameIsValidLabelValue,
3736
cluster_resources::cluster_resources_new,
38-
kvp::label::{recommended_labels, role_group_selector},
3937
role_group_utils::ResourceNames,
4038
types::{
4139
kubernetes::{ConfigMapName, ListenerName, NamespaceName, Uid},
@@ -250,53 +248,6 @@ impl ValidatedCluster {
250248
))
251249
.expect("the bootstrap listener name is a valid Listener name")
252250
}
253-
254-
/// Recommended labels for a role-group resource, using the given product version.
255-
fn recommended_labels_for(
256-
&self,
257-
product_version: &ProductVersion,
258-
role: &KafkaRole,
259-
role_group_name: &RoleGroupName,
260-
) -> Labels {
261-
recommended_labels(
262-
self,
263-
&product_name(),
264-
product_version,
265-
&operator_name(),
266-
&controller_name(),
267-
&Self::role_name(role),
268-
role_group_name,
269-
)
270-
}
271-
272-
/// Recommended labels for a role-group resource.
273-
pub fn recommended_labels(&self, role: &KafkaRole, role_group_name: &RoleGroupName) -> Labels {
274-
self.recommended_labels_for(&self.product_version, role, role_group_name)
275-
}
276-
277-
/// Recommended labels without a version, for PVC templates that cannot be modified once
278-
/// deployed.
279-
pub fn unversioned_recommended_labels(
280-
&self,
281-
role: &KafkaRole,
282-
role_group_name: &RoleGroupName,
283-
) -> Labels {
284-
// A version value is required, and we do want to use the "recommended" format for the
285-
// other desired labels.
286-
let none_version =
287-
ProductVersion::from_str("none").expect("'none' is a valid product version");
288-
self.recommended_labels_for(&none_version, role, role_group_name)
289-
}
290-
291-
/// Selector labels matching the pods of a role group.
292-
pub fn role_group_selector(&self, role: &KafkaRole, role_group_name: &RoleGroupName) -> Labels {
293-
role_group_selector(
294-
self,
295-
&product_name(),
296-
&Self::role_name(role),
297-
role_group_name,
298-
)
299-
}
300251
}
301252

302253
impl HasName for ValidatedCluster {
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
//! Recommended-label and selector construction for the KafkaCluster build step.
2+
//!
3+
//! These build Kubernetes labels/selectors from a [`ValidatedCluster`]. They live here rather
4+
//! than as methods on [`ValidatedCluster`] so the validated model only exposes views on its
5+
//! properties, not build-step helpers.
6+
7+
use std::str::FromStr;
8+
9+
use stackable_operator::{
10+
kvp::Labels,
11+
v2::{kvp::label, types::operator::ProductVersion},
12+
};
13+
14+
use crate::{
15+
controller::{RoleGroupName, ValidatedCluster, controller_name, operator_name, product_name},
16+
crd::role::KafkaRole,
17+
};
18+
19+
/// Recommended labels for a role-group resource, using the given product version.
20+
fn recommended_labels_for(
21+
cluster: &ValidatedCluster,
22+
product_version: &ProductVersion,
23+
role: &KafkaRole,
24+
role_group_name: &RoleGroupName,
25+
) -> Labels {
26+
label::recommended_labels(
27+
cluster,
28+
&product_name(),
29+
product_version,
30+
&operator_name(),
31+
&controller_name(),
32+
&ValidatedCluster::role_name(role),
33+
role_group_name,
34+
)
35+
}
36+
37+
/// Recommended labels for a role-group resource.
38+
pub fn recommended_labels(
39+
cluster: &ValidatedCluster,
40+
role: &KafkaRole,
41+
role_group_name: &RoleGroupName,
42+
) -> Labels {
43+
recommended_labels_for(cluster, &cluster.product_version, role, role_group_name)
44+
}
45+
46+
/// Recommended labels without a version, for PVC templates that cannot be modified once
47+
/// deployed.
48+
pub fn unversioned_recommended_labels(
49+
cluster: &ValidatedCluster,
50+
role: &KafkaRole,
51+
role_group_name: &RoleGroupName,
52+
) -> Labels {
53+
// A version value is required, and we do want to use the "recommended" format for the
54+
// other desired labels.
55+
let none_version = ProductVersion::from_str("none").expect("'none' is a valid product version");
56+
recommended_labels_for(cluster, &none_version, role, role_group_name)
57+
}
58+
59+
/// Selector labels matching the pods of a role group.
60+
pub fn role_group_selector(
61+
cluster: &ValidatedCluster,
62+
role: &KafkaRole,
63+
role_group_name: &RoleGroupName,
64+
) -> Labels {
65+
label::role_group_selector(
66+
cluster,
67+
&product_name(),
68+
&ValidatedCluster::role_name(role),
69+
role_group_name,
70+
)
71+
}

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ pub mod command;
44
pub mod graceful_shutdown;
55
pub mod jvm;
66
pub mod kerberos;
7+
pub mod labels;
78
pub mod properties;
89
pub mod resource;
910
pub mod security;

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

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ use crate::{
1414
controller::{
1515
RoleGroupName, ValidatedCluster, ValidatedRoleGroupConfig,
1616
build::{
17+
labels,
1718
properties::{
1819
ConfigFileName, config_file_name, product_logging::role_group_config_map_data,
1920
},
@@ -133,7 +134,11 @@ pub fn build_rolegroup_config_map(
133134
None,
134135
Some(true),
135136
))
136-
.with_labels(validated_cluster.recommended_labels(&role, role_group_name))
137+
.with_labels(labels::recommended_labels(
138+
validated_cluster,
139+
&role,
140+
role_group_name,
141+
))
137142
.build(),
138143
)
139144
.add_data(

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

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ use stackable_operator::{
99
};
1010

1111
use crate::{
12-
controller::{RoleGroupName, ValidatedCluster},
12+
controller::{RoleGroupName, ValidatedCluster, build::labels},
1313
crd::role::KafkaRole,
1414
};
1515

@@ -57,13 +57,12 @@ pub fn build_discovery_configmap(
5757
None,
5858
Some(true),
5959
))
60-
.with_labels(
61-
validated_cluster.recommended_labels(
62-
&KafkaRole::Broker,
63-
&RoleGroupName::from_str("discovery")
64-
.expect("'discovery' is a valid role group name"),
65-
),
66-
)
60+
.with_labels(labels::recommended_labels(
61+
validated_cluster,
62+
&KafkaRole::Broker,
63+
&RoleGroupName::from_str("discovery")
64+
.expect("'discovery' is a valid role group name"),
65+
))
6766
.build(),
6867
)
6968
.add_data("KAFKA", bootstrap_servers)

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

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,9 @@ use stackable_operator::{
44
};
55

66
use crate::{
7-
controller::{RoleGroupName, ValidatedCluster, security::ValidatedKafkaSecurity},
7+
controller::{
8+
RoleGroupName, ValidatedCluster, build::labels, security::ValidatedKafkaSecurity,
9+
},
810
crd::role::{KafkaRole, broker::BrokerConfig},
911
};
1012

@@ -28,7 +30,11 @@ pub fn build_broker_rolegroup_bootstrap_listener(
2830
None,
2931
Some(true),
3032
))
31-
.with_labels(validated_cluster.recommended_labels(role, role_group_name))
33+
.with_labels(labels::recommended_labels(
34+
validated_cluster,
35+
role,
36+
role_group_name,
37+
))
3238
.build(),
3339
spec: listener::v1alpha1::ListenerSpec {
3440
class_name: Some(merged_config.bootstrap_listener_class.to_string()),

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

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,9 @@ use stackable_operator::{
88
};
99

1010
use crate::{
11-
controller::{RoleGroupName, ValidatedCluster, security::ValidatedKafkaSecurity},
11+
controller::{
12+
RoleGroupName, ValidatedCluster, build::labels, security::ValidatedKafkaSecurity,
13+
},
1214
crd::{METRICS_PORT, METRICS_PORT_NAME, role::KafkaRole},
1315
};
1416

@@ -35,15 +37,17 @@ pub fn build_rolegroup_headless_service(
3537
None,
3638
Some(true),
3739
))
38-
.with_labels(validated_cluster.recommended_labels(role, role_group_name))
40+
.with_labels(labels::recommended_labels(
41+
validated_cluster,
42+
role,
43+
role_group_name,
44+
))
3945
.build(),
4046
spec: Some(ServiceSpec {
4147
cluster_ip: Some("None".to_string()),
4248
ports: Some(headless_ports(kafka_security)),
4349
selector: Some(
44-
validated_cluster
45-
.role_group_selector(role, role_group_name)
46-
.into(),
50+
labels::role_group_selector(validated_cluster, role, role_group_name).into(),
4751
),
4852
publish_not_ready_addresses: Some(true),
4953
..ServiceSpec::default()
@@ -72,7 +76,11 @@ pub fn build_rolegroup_metrics_service(
7276
None,
7377
Some(true),
7478
))
75-
.with_labels(validated_cluster.recommended_labels(role, role_group_name))
79+
.with_labels(labels::recommended_labels(
80+
validated_cluster,
81+
role,
82+
role_group_name,
83+
))
7684
.with_labels(prometheus_labels(&Scraping::Enabled))
7785
.with_annotations(prometheus_annotations(
7886
&Scraping::Enabled,
@@ -87,9 +95,7 @@ pub fn build_rolegroup_metrics_service(
8795
cluster_ip: Some("None".to_string()),
8896
ports: Some(metrics_ports()),
8997
selector: Some(
90-
validated_cluster
91-
.role_group_selector(role, role_group_name)
92-
.into(),
98+
labels::role_group_selector(validated_cluster, role, role_group_name).into(),
9399
),
94100
publish_not_ready_addresses: Some(true),
95101
..ServiceSpec::default()

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

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ use crate::{
5252
},
5353
graceful_shutdown::add_graceful_shutdown_config,
5454
kerberos::add_kerberos_pod_config,
55+
labels,
5556
properties::product_logging::MAX_KAFKA_LOG_FILES_SIZE,
5657
security::{
5758
add_broker_volume_and_volume_mounts, add_controller_volume_and_volume_mounts,
@@ -152,10 +153,11 @@ pub fn build_broker_rolegroup_statefulset(
152153
let resolved_product_image = &validated_cluster.image;
153154
let merged_config = &validated_rg.config.config;
154155
let resource_names = validated_cluster.resource_names(kafka_role, role_group_name);
155-
let recommended_labels = validated_cluster.recommended_labels(kafka_role, role_group_name);
156+
let recommended_labels =
157+
labels::recommended_labels(validated_cluster, kafka_role, role_group_name);
156158
// Used for PVC templates that cannot be modified once they are deployed
157159
let unversioned_recommended_labels =
158-
validated_cluster.unversioned_recommended_labels(kafka_role, role_group_name);
160+
labels::unversioned_recommended_labels(validated_cluster, kafka_role, role_group_name);
159161

160162
let kcat_prober_container_name = BrokerContainer::KcatProber.to_string();
161163
let mut cb_kcat_prober =
@@ -419,8 +421,7 @@ pub fn build_broker_rolegroup_statefulset(
419421
replicas: validated_rg.replicas.map(i32::from),
420422
selector: LabelSelector {
421423
match_labels: Some(
422-
validated_cluster
423-
.role_group_selector(kafka_role, role_group_name)
424+
labels::role_group_selector(validated_cluster, kafka_role, role_group_name)
424425
.into(),
425426
),
426427
..LabelSelector::default()
@@ -446,7 +447,8 @@ pub fn build_controller_rolegroup_statefulset(
446447
let resolved_product_image = &validated_cluster.image;
447448
let merged_config = &validated_rg.config.config;
448449
let resource_names = validated_cluster.resource_names(kafka_role, role_group_name);
449-
let recommended_labels = validated_cluster.recommended_labels(kafka_role, role_group_name);
450+
let recommended_labels =
451+
labels::recommended_labels(validated_cluster, kafka_role, role_group_name);
450452

451453
let kafka_container_name = ControllerContainer::Kafka.to_string();
452454
let mut cb_kafka =
@@ -649,8 +651,7 @@ pub fn build_controller_rolegroup_statefulset(
649651
replicas: validated_rg.replicas.map(i32::from),
650652
selector: LabelSelector {
651653
match_labels: Some(
652-
validated_cluster
653-
.role_group_selector(kafka_role, role_group_name)
654+
labels::role_group_selector(validated_cluster, kafka_role, role_group_name)
654655
.into(),
655656
),
656657
..LabelSelector::default()

0 commit comments

Comments
 (0)