Skip to content

Commit 038c993

Browse files
committed
refactor: extract objectMeta, recommendeclabels, chache product version
1 parent c92a1df commit 038c993

6 files changed

Lines changed: 123 additions & 155 deletions

File tree

rust/operator-binary/src/controller.rs

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,7 @@ use stackable_operator::{
2222
},
2323
v2::{
2424
cluster_resources::cluster_resources_new,
25-
kvp::label::recommended_labels,
26-
types::operator::{
27-
ControllerName, OperatorName, ProductName, ProductVersion, RoleGroupName,
28-
},
25+
types::operator::{ControllerName, OperatorName, ProductName, RoleGroupName},
2926
},
3027
};
3128
use strum::{EnumDiscriminants, IntoStaticStr};
@@ -292,14 +289,8 @@ pub async fn reconcile_druid(
292289
{
293290
let role_group_listener = build_group_listener(
294291
&validated_cluster,
295-
recommended_labels(
296-
&validated_cluster,
297-
&product_name(),
298-
&ProductVersion::from_str(&validated_cluster.image.app_version_label_value)
299-
.expect("a valid product version"),
300-
&operator_name(),
301-
&controller_name(),
302-
&druid_role.to_role_name(),
292+
validated_cluster.recommended_labels(
293+
druid_role,
303294
&RoleGroupName::from_str("none").expect("a valid role group name"),
304295
),
305296
listener_class.to_string(),

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

Lines changed: 8 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -11,20 +11,15 @@
1111
//! The builder does not read the raw [`v1alpha1::DruidCluster`] at all: everything it needs is
1212
//! carried on `ValidatedCluster` (resolved during the validate step).
1313
14-
use std::{collections::BTreeMap, str::FromStr};
14+
use std::collections::BTreeMap;
1515

1616
use snafu::{ResultExt, Snafu};
1717
use stackable_operator::{
18-
builder::{configmap::ConfigMapBuilder, meta::ObjectMetaBuilder},
18+
builder::configmap::ConfigMapBuilder,
1919
crd::s3,
2020
k8s_openapi::api::core::v1::{ConfigMap, EnvVar},
2121
product_logging::framework::VECTOR_CONFIG_FILE,
22-
v2::{
23-
builder::meta::ownerreference_from_resource,
24-
config_file_writer::to_java_properties_string,
25-
kvp::label::recommended_labels,
26-
types::operator::{ProductVersion, RoleGroupName},
27-
},
22+
v2::{config_file_writer::to_java_properties_string, types::operator::RoleGroupName},
2823
};
2924

3025
use crate::{
@@ -37,7 +32,6 @@ use crate::{
3732
runtime_properties, security_properties,
3833
},
3934
},
40-
controller_name, operator_name, product_name,
4135
validate::{DruidRoleGroupConfig, ValidatedCluster},
4236
},
4337
crd::{
@@ -322,20 +316,12 @@ pub fn build_rolegroup_config_map(
322316

323317
let mut config_map_builder = ConfigMapBuilder::new();
324318
config_map_builder.metadata(
325-
ObjectMetaBuilder::new()
326-
.name_and_namespace(cluster)
327-
.name(resource_names.role_group_config_map().to_string())
328-
.ownerreference(ownerreference_from_resource(cluster, None, Some(true)))
329-
.with_labels(recommended_labels(
330-
cluster,
331-
&product_name(),
332-
&ProductVersion::from_str(&cluster.image.app_version_label_value)
333-
.expect("a valid product version"),
334-
&operator_name(),
335-
&controller_name(),
336-
&role.to_role_name(),
319+
cluster
320+
.object_meta(
321+
resource_names.role_group_config_map().to_string(),
322+
role,
337323
role_group_name,
338-
))
324+
)
339325
.build(),
340326
);
341327

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

Lines changed: 8 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -5,20 +5,13 @@ use std::str::FromStr;
55

66
use snafu::{ResultExt, Snafu};
77
use stackable_operator::{
8-
builder::{configmap::ConfigMapBuilder, meta::ObjectMetaBuilder},
9-
crd::listener::v1alpha1::Listener,
10-
k8s_openapi::api::core::v1::ConfigMap,
11-
v2::{
12-
builder::meta::ownerreference_from_resource,
13-
kvp::label::recommended_labels,
14-
types::operator::{ProductVersion, RoleGroupName},
15-
},
8+
builder::configmap::ConfigMapBuilder, crd::listener::v1alpha1::Listener,
9+
k8s_openapi::api::core::v1::ConfigMap, v2::types::operator::RoleGroupName,
1610
};
1711

1812
use crate::{
1913
controller::{
20-
build::resource::listener::build_listener_connection_string, controller_name,
21-
operator_name, product_name, validate::ValidatedCluster,
14+
build::resource::listener::build_listener_connection_string, validate::ValidatedCluster,
2215
},
2316
crd::DruidRole,
2417
};
@@ -63,19 +56,12 @@ fn build_discovery_configmap(
6356

6457
ConfigMapBuilder::new()
6558
.metadata(
66-
ObjectMetaBuilder::new()
67-
.name_and_namespace(cluster)
68-
.ownerreference(ownerreference_from_resource(cluster, None, Some(true)))
69-
.with_labels(recommended_labels(
70-
cluster,
71-
&product_name(),
72-
&ProductVersion::from_str(&cluster.image.app_version_label_value)
73-
.expect("a valid product version"),
74-
&operator_name(),
75-
&controller_name(),
76-
&DruidRole::Router.to_role_name(),
59+
cluster
60+
.object_meta(
61+
cluster.name.to_string(),
62+
&DruidRole::Router,
7763
&RoleGroupName::from_str("discovery").expect("a valid role group name"),
78-
))
64+
)
7965
.build(),
8066
)
8167
.add_data("DRUID_ROUTER", router_host)

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

Lines changed: 20 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,11 @@
1-
use std::str::FromStr;
2-
31
use stackable_operator::{
4-
builder::meta::ObjectMetaBuilder,
52
k8s_openapi::api::core::v1::{Service, ServicePort, ServiceSpec},
63
kvp::{Annotations, Labels},
7-
v2::{
8-
builder::meta::ownerreference_from_resource,
9-
kvp::label::{recommended_labels, role_group_selector},
10-
types::operator::{ProductVersion, RoleGroupName},
11-
},
4+
v2::types::operator::RoleGroupName,
125
};
136

147
use crate::{
15-
controller::{controller_name, operator_name, product_name, validate::ValidatedCluster},
8+
controller::validate::ValidatedCluster,
169
crd::{DruidRole, METRICS_PORT, METRICS_PORT_NAME},
1710
};
1811

@@ -23,33 +16,16 @@ pub fn build_rolegroup_headless_service(
2316
druid_role: &DruidRole,
2417
role_group_name: &RoleGroupName,
2518
) -> Service {
26-
let object_labels = recommended_labels(
27-
cluster,
28-
&product_name(),
29-
&ProductVersion::from_str(&cluster.image.app_version_label_value)
30-
.expect("a valid product version"),
31-
&operator_name(),
32-
&controller_name(),
33-
&druid_role.to_role_name(),
34-
role_group_name,
35-
);
36-
let selector = role_group_selector(
37-
cluster,
38-
&product_name(),
39-
&druid_role.to_role_name(),
40-
role_group_name,
41-
);
4219
Service {
43-
metadata: ObjectMetaBuilder::new()
44-
.name_and_namespace(cluster)
45-
.name(
20+
metadata: cluster
21+
.object_meta(
4622
cluster
4723
.resource_names(druid_role, role_group_name)
4824
.headless_service_name()
4925
.to_string(),
26+
druid_role,
27+
role_group_name,
5028
)
51-
.ownerreference(ownerreference_from_resource(cluster, None, Some(true)))
52-
.with_labels(object_labels)
5329
.build(),
5430
spec: Some(ServiceSpec {
5531
// Internal communication does not need to be exposed
@@ -61,7 +37,11 @@ pub fn build_rolegroup_headless_service(
6137
.druid_tls_security
6238
.service_ports(druid_role),
6339
),
64-
selector: Some(selector.into()),
40+
selector: Some(
41+
cluster
42+
.role_group_selector(druid_role, role_group_name)
43+
.into(),
44+
),
6545
publish_not_ready_addresses: Some(true),
6646
..ServiceSpec::default()
6747
}),
@@ -75,33 +55,16 @@ pub fn build_rolegroup_metrics_service(
7555
druid_role: &DruidRole,
7656
role_group_name: &RoleGroupName,
7757
) -> Service {
78-
let object_labels = recommended_labels(
79-
cluster,
80-
&product_name(),
81-
&ProductVersion::from_str(&cluster.image.app_version_label_value)
82-
.expect("a valid product version"),
83-
&operator_name(),
84-
&controller_name(),
85-
&druid_role.to_role_name(),
86-
role_group_name,
87-
);
88-
let selector = role_group_selector(
89-
cluster,
90-
&product_name(),
91-
&druid_role.to_role_name(),
92-
role_group_name,
93-
);
9458
Service {
95-
metadata: ObjectMetaBuilder::new()
96-
.name_and_namespace(cluster)
97-
.name(
59+
metadata: cluster
60+
.object_meta(
9861
cluster
9962
.resource_names(druid_role, role_group_name)
10063
.metrics_service_name()
10164
.to_string(),
65+
druid_role,
66+
role_group_name,
10267
)
103-
.ownerreference(ownerreference_from_resource(cluster, None, Some(true)))
104-
.with_labels(object_labels)
10568
.with_labels(prometheus_labels())
10669
.with_annotations(prometheus_annotations())
10770
.build(),
@@ -110,7 +73,11 @@ pub fn build_rolegroup_metrics_service(
11073
type_: Some("ClusterIP".to_string()),
11174
cluster_ip: Some("None".to_string()),
11275
ports: Some(metrics_service_ports()),
113-
selector: Some(selector.into()),
76+
selector: Some(
77+
cluster
78+
.role_group_selector(druid_role, role_group_name)
79+
.into(),
80+
),
11481
publish_not_ready_addresses: Some(true),
11582
..ServiceSpec::default()
11683
}),

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

Lines changed: 10 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,7 @@ use stackable_operator::{
2323
kube::ResourceExt,
2424
product_logging,
2525
v2::{
26-
builder::{
27-
meta::ownerreference_from_resource,
28-
pod::container::{EnvVarSet, new_container_builder},
29-
},
30-
kvp::label::{recommended_labels, role_group_selector},
26+
builder::pod::container::{EnvVarSet, new_container_builder},
3127
product_logging::framework::{ValidatedContainerLogConfigChoice, vector_container},
3228
role_group_utils::ResourceNames,
3329
types::{
@@ -46,7 +42,6 @@ use crate::{
4642
group_listener_name, secret_volume_listener_scope,
4743
},
4844
},
49-
controller_name, operator_name, product_name,
5045
validate::{DruidRoleGroupConfig, ValidatedCluster},
5146
},
5247
crd::{
@@ -296,13 +291,9 @@ pub fn build_rolegroup_statefulset(
296291
// Used for PVC templates that cannot be modified once they are deployed
297292
// A version value is required, and we do want to use the "recommended" format for the
298293
// other desired labels, hence the "none" product version.
299-
let unversioned_recommended_labels = recommended_labels(
300-
cluster,
301-
&product_name(),
294+
let unversioned_recommended_labels = cluster.recommended_labels_for(
295+
role,
302296
&ProductVersion::from_str("none").expect("a valid product version"),
303-
&operator_name(),
304-
&controller_name(),
305-
&role.to_role_name(),
306297
role_group_name,
307298
);
308299

@@ -313,16 +304,7 @@ pub fn build_rolegroup_statefulset(
313304
}
314305

315306
let metadata = ObjectMetaBuilder::new()
316-
.with_labels(recommended_labels(
317-
cluster,
318-
&product_name(),
319-
&ProductVersion::from_str(&resolved_product_image.app_version_label_value)
320-
.expect("a valid product version"),
321-
&operator_name(),
322-
&controller_name(),
323-
&role.to_role_name(),
324-
role_group_name,
325-
))
307+
.with_labels(cluster.recommended_labels(role, role_group_name))
326308
.build();
327309

328310
pb.image_pull_secrets_from_product_image(resolved_product_image)
@@ -352,35 +334,19 @@ pub fn build_rolegroup_statefulset(
352334
pod_template.merge_from(rg.pod_overrides.clone());
353335

354336
Ok(StatefulSet {
355-
metadata: ObjectMetaBuilder::new()
356-
.name_and_namespace(cluster)
357-
.name(resource_names.stateful_set_name().to_string())
358-
.ownerreference(ownerreference_from_resource(cluster, None, Some(true)))
359-
.with_labels(recommended_labels(
360-
cluster,
361-
&product_name(),
362-
&ProductVersion::from_str(&resolved_product_image.app_version_label_value)
363-
.expect("a valid product version"),
364-
&operator_name(),
365-
&controller_name(),
366-
&role.to_role_name(),
337+
metadata: cluster
338+
.object_meta(
339+
resource_names.stateful_set_name().to_string(),
340+
role,
367341
role_group_name,
368-
))
342+
)
369343
.with_label(RESTART_CONTROLLER_ENABLED_LABEL.to_owned())
370344
.build(),
371345
spec: Some(StatefulSetSpec {
372346
pod_management_policy: Some("Parallel".to_string()),
373347
replicas: Some(i32::from(rg.replicas)),
374348
selector: LabelSelector {
375-
match_labels: Some(
376-
role_group_selector(
377-
cluster,
378-
&product_name(),
379-
&role.to_role_name(),
380-
role_group_name,
381-
)
382-
.into(),
383-
),
349+
match_labels: Some(cluster.role_group_selector(role, role_group_name).into()),
384350
..LabelSelector::default()
385351
},
386352
service_name: Some(resource_names.headless_service_name().to_string()),

0 commit comments

Comments
 (0)