Skip to content

Commit 6a60deb

Browse files
committed
refactor: use v2 types
1 parent 7fd1204 commit 6a60deb

8 files changed

Lines changed: 44 additions & 46 deletions

File tree

rust/operator-binary/src/controller.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -291,7 +291,7 @@ pub async fn reconcile_druid(
291291
{
292292
let role_group_listener = build_group_listener(
293293
&validated_cluster,
294-
listener_class.to_string(),
294+
listener_class,
295295
listener_group_name,
296296
druid_role,
297297
);

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

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ use stackable_operator::{
99
builder::pod::volume::{
1010
ListenerReference, listener_operator_volume_source_builder_build_pvc,
1111
},
12-
types::kubernetes::{ListenerName, PersistentVolumeClaimName},
12+
types::kubernetes::{ListenerClassName, ListenerName, PersistentVolumeClaimName},
1313
},
1414
};
1515

@@ -24,7 +24,7 @@ use crate::{
2424
},
2525
};
2626

27-
pub const LISTENER_VOLUME_NAME: &str = "listener";
27+
stackable_operator::constant!(pub LISTENER_VOLUME_NAME: PersistentVolumeClaimName = "listener");
2828
pub const LISTENER_VOLUME_DIR: &str = "/stackable/listener";
2929

3030
#[derive(Snafu, Debug)]
@@ -41,7 +41,7 @@ pub enum Error {
4141

4242
pub fn build_group_listener(
4343
cluster: &ValidatedCluster,
44-
listener_class: String,
44+
listener_class: &ListenerClassName,
4545
listener_group_name: ListenerName,
4646
druid_role: &DruidRole,
4747
) -> Listener {
@@ -56,7 +56,7 @@ pub fn build_group_listener(
5656
)
5757
.build(),
5858
spec: listener::v1alpha1::ListenerSpec {
59-
class_name: Some(listener_class),
59+
class_name: Some(listener_class.to_string()),
6060
ports: Some(listener_ports(
6161
&cluster.cluster_config.druid_tls_security,
6262
druid_role,
@@ -74,8 +74,7 @@ pub fn build_group_listener_pvc(
7474
listener_operator_volume_source_builder_build_pvc(
7575
&ListenerReference::Listener(group_listener_name.clone()),
7676
unversioned_recommended_labels,
77-
&PersistentVolumeClaimName::from_str(LISTENER_VOLUME_NAME)
78-
.expect("a valid persistent volume claim name"),
77+
&LISTENER_VOLUME_NAME,
7978
)
8079
}
8180

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

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,6 @@
1-
use std::str::FromStr;
2-
31
use stackable_operator::{
4-
commons::pdb::PdbConfig,
5-
k8s_openapi::api::policy::v1::PodDisruptionBudget,
6-
v2::{builder::pdb::pod_disruption_budget_builder_with_role, types::operator::RoleName},
2+
commons::pdb::PdbConfig, k8s_openapi::api::policy::v1::PodDisruptionBudget,
3+
v2::builder::pdb::pod_disruption_budget_builder_with_role,
74
};
85

96
use crate::{
@@ -30,7 +27,7 @@ pub fn build_pdb(
3027
let pdb = pod_disruption_budget_builder_with_role(
3128
cluster,
3229
&product_name(),
33-
&RoleName::from_str(&role.to_string()).expect("a DruidRole is a valid role name"),
30+
&role.to_role_name(),
3431
&operator_name(),
3532
&controller_name(),
3633
)

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

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,7 @@ use stackable_operator::{
2828
STACKABLE_LOG_DIR, ValidatedContainerLogConfigChoice, vector_container,
2929
},
3030
role_group_utils::ResourceNames,
31-
types::{
32-
kubernetes::{ContainerName, VolumeName},
33-
operator::RoleGroupName,
34-
},
31+
types::{kubernetes::VolumeName, operator::RoleGroupName},
3532
},
3633
};
3734

@@ -128,12 +125,10 @@ pub fn build_rolegroup_statefulset(
128125
let druid_tls_security = &cluster.cluster_config.druid_tls_security;
129126
let druid_auth_config = &cluster.cluster_config.druid_auth_config;
130127
// prepare container builder
131-
let prepare_container_name = ContainerName::from_str(&Container::Prepare.to_string())
132-
.expect("'prepare' is a valid container name");
128+
let prepare_container_name = Container::Prepare.to_container_name();
133129
let mut cb_prepare = new_container_builder(&prepare_container_name);
134130
// druid container builder
135-
let druid_container_name = ContainerName::from_str(&Container::Druid.to_string())
136-
.expect("'druid' is a valid container name");
131+
let druid_container_name = Container::Druid.to_container_name();
137132
let mut cb_druid = new_container_builder(&druid_container_name);
138133
// init pod builder
139134
let mut pb = PodBuilder::new();
@@ -304,7 +299,7 @@ pub fn build_rolegroup_statefulset(
304299

305300
if let Some(group_listener_name) = group_listener_name(cluster, role) {
306301
cb_druid
307-
.add_volume_mount(LISTENER_VOLUME_NAME, LISTENER_VOLUME_DIR)
302+
.add_volume_mount(&*LISTENER_VOLUME_NAME, LISTENER_VOLUME_DIR)
308303
.context(AddVolumeMountSnafu)?;
309304

310305
// Used for PVC templates that cannot be modified once they are deployed
@@ -334,8 +329,7 @@ pub fn build_rolegroup_statefulset(
334329
// config volume; the validated aggregator address comes from the up-front `ValidatedLogging`.
335330
if let Some(vector_log_config) = &merged_rolegroup_config.logging.vector_container {
336331
pb.add_container(vector_container(
337-
&ContainerName::from_str(&Container::Vector.to_string())
338-
.expect("'vector' is a valid container name"),
332+
&Container::Vector.to_container_name(),
339333
resolved_product_image,
340334
vector_log_config,
341335
&resource_names,

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

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
//! properties, volumes and mounts, keystore commands, probes). They live in the build step so the
55
//! validated [`DruidTlsSecurity`] type carries no rendering logic.
66
7-
use std::collections::BTreeMap;
7+
use std::{collections::BTreeMap, str::FromStr};
88

99
use snafu::{ResultExt, Snafu};
1010
use stackable_operator::{
@@ -26,7 +26,7 @@ use stackable_operator::{
2626
apimachinery::pkg::util::intstr::IntOrString,
2727
},
2828
shared::time::Duration,
29-
v2::types::common::Port,
29+
v2::types::{common::Port, kubernetes::VolumeName},
3030
};
3131

3232
use crate::crd::{
@@ -92,8 +92,8 @@ const TLS_STORE_TYPE: &str = "pkcs12";
9292
const STACKABLE_MOUNT_TLS_DIR: &str = "/stackable/mount_tls";
9393

9494
// volume names
95-
const TLS_VOLUME_NAME: &str = "tls";
96-
const TLS_MOUNT_VOLUME_NAME: &str = "tls-mount";
95+
stackable_operator::constant!(TLS_VOLUME_NAME: VolumeName = "tls");
96+
stackable_operator::constant!(TLS_MOUNT_VOLUME_NAME: VolumeName = "tls-mount");
9797

9898
pub fn container_ports(tls: &DruidTlsSecurity, role: &DruidRole) -> Vec<ContainerPort> {
9999
exposed_ports(tls, role)
@@ -170,7 +170,7 @@ pub fn add_tls_volume_and_volume_mounts(
170170
}
171171

172172
pod.add_volume(
173-
VolumeBuilder::new(TLS_MOUNT_VOLUME_NAME)
173+
VolumeBuilder::new(&*TLS_MOUNT_VOLUME_NAME)
174174
.ephemeral(
175175
secret_volume_source_builder
176176
.build()
@@ -180,24 +180,24 @@ pub fn add_tls_volume_and_volume_mounts(
180180
)
181181
.context(AddVolumeSnafu)?;
182182
prepare
183-
.add_volume_mount(TLS_MOUNT_VOLUME_NAME, STACKABLE_MOUNT_TLS_DIR)
183+
.add_volume_mount(&*TLS_MOUNT_VOLUME_NAME, STACKABLE_MOUNT_TLS_DIR)
184184
.context(AddVolumeMountSnafu)?;
185185
druid
186-
.add_volume_mount(TLS_MOUNT_VOLUME_NAME, STACKABLE_MOUNT_TLS_DIR)
186+
.add_volume_mount(&*TLS_MOUNT_VOLUME_NAME, STACKABLE_MOUNT_TLS_DIR)
187187
.context(AddVolumeMountSnafu)?;
188188

189189
pod.add_volume(
190-
VolumeBuilder::new(TLS_VOLUME_NAME)
190+
VolumeBuilder::new(&*TLS_VOLUME_NAME)
191191
.with_empty_dir(Option::<&str>::None, None)
192192
.build(),
193193
)
194194
.context(AddVolumeSnafu)?;
195195

196196
prepare
197-
.add_volume_mount(TLS_VOLUME_NAME, STACKABLE_TLS_DIR)
197+
.add_volume_mount(&*TLS_VOLUME_NAME, STACKABLE_TLS_DIR)
198198
.context(AddVolumeMountSnafu)?;
199199
druid
200-
.add_volume_mount(TLS_VOLUME_NAME, STACKABLE_TLS_DIR)
200+
.add_volume_mount(&*TLS_VOLUME_NAME, STACKABLE_TLS_DIR)
201201
.context(AddVolumeMountSnafu)?;
202202
}
203203
Ok(())

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

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ use stackable_operator::{
3030
role_group_utils::ResourceNames,
3131
types::{
3232
kubernetes::{ListenerClassName, NamespaceName, Uid},
33-
operator::{ClusterName, ProductVersion, RoleGroupName, RoleName},
33+
operator::{ClusterName, ProductVersion, RoleGroupName},
3434
},
3535
},
3636
};
@@ -250,8 +250,7 @@ impl ValidatedCluster {
250250
) -> ResourceNames {
251251
ResourceNames {
252252
cluster_name: self.name.clone(),
253-
role_name: RoleName::from_str(&role.to_string())
254-
.expect("a DruidRole is a valid role name"),
253+
role_name: role.to_role_name(),
255254
role_group_name: role_group_name.clone(),
256255
}
257256
}

rust/operator-binary/src/crd/authentication.rs

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ use stackable_operator::{
55
client::Client,
66
crd::authentication::{core, ldap, oidc, tls},
77
kube::{ResourceExt, runtime::reflector::ObjectRef},
8+
v2::types::kubernetes::SecretClassName,
89
};
910
use tracing::info;
1011

@@ -52,7 +53,7 @@ pub enum Error {
5253
))]
5354
TlsAuthenticationClassSecretClassDiffersFromDruidServerTls {
5455
auth_class_name: String,
55-
server_and_internal_secret_class: String,
56+
server_and_internal_secret_class: SecretClassName,
5657
},
5758
#[snafu(display("invalid OIDC configuration"))]
5859
OidcConfigurationInvalid {
@@ -128,19 +129,19 @@ impl AuthenticationClassesResolved {
128129
.context(AuthenticationClassRetrievalFailedSnafu)?;
129130

130131
let auth_class_name = auth_class.name_any();
131-
let server_and_internal_secret_class = cluster_config.tls.as_ref().and_then(|tls| {
132-
tls.server_and_internal_secret_class
133-
.as_ref()
134-
.map(|secret_class| secret_class.to_string())
135-
});
132+
let server_and_internal_secret_class = cluster_config
133+
.tls
134+
.as_ref()
135+
.and_then(|tls| tls.server_and_internal_secret_class.as_ref());
136136

137137
match &auth_class.spec.provider {
138138
core::v1alpha1::AuthenticationClassProvider::Tls(provider) => {
139-
match &server_and_internal_secret_class {
139+
match server_and_internal_secret_class {
140140
Some(server_and_internal_secret_class) => {
141141
if let Some(auth_class_secret_class) =
142142
&provider.client_cert_secret_class
143-
&& auth_class_secret_class != server_and_internal_secret_class
143+
&& auth_class_secret_class.as_str()
144+
!= server_and_internal_secret_class.as_ref()
144145
{
145146
return TlsAuthenticationClassSecretClassDiffersFromDruidServerTlsSnafu { auth_class_name: auth_class_name.to_string(), server_and_internal_secret_class: server_and_internal_secret_class.clone() }.fail()?;
146147
}

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

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ use stackable_operator::{
4646
role_utils::{JavaCommonConfig, RoleGroupConfig, with_validated_config},
4747
types::{
4848
common::Port,
49-
kubernetes::{ConfigMapName, ListenerClassName},
49+
kubernetes::{ConfigMapName, ContainerName, ListenerClassName},
5050
operator::{RoleGroupName, RoleName},
5151
},
5252
},
@@ -601,6 +601,14 @@ pub enum Container {
601601
Vector,
602602
}
603603

604+
impl Container {
605+
/// Returns the typed container name for this container.
606+
pub fn to_container_name(&self) -> ContainerName {
607+
ContainerName::from_str(&self.to_string())
608+
.expect("a Container always serializes to a valid container name")
609+
}
610+
}
611+
604612
/// The validated, merged Druid config shared by all role groups (the typed per-role config erased
605613
/// to a single view). Mirrors the opensearch-operator's `ValidatedOpenSearchConfig`.
606614
#[derive(Clone)]

0 commit comments

Comments
 (0)