Skip to content

Commit b52d4a1

Browse files
committed
added role/From impl plus parsing test, fixed comment
1 parent 7c52f90 commit b52d4a1

4 files changed

Lines changed: 28 additions & 28 deletions

File tree

rust/operator-binary/src/controller.rs

Lines changed: 10 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -228,10 +228,6 @@ impl ValidatedCluster {
228228
}
229229

230230
/// The given [`KafkaRole`] as a type-safe [`RoleName`].
231-
pub fn role_name(role: &KafkaRole) -> RoleName {
232-
RoleName::from_str(&role.to_string()).expect("a KafkaRole is a valid role name")
233-
}
234-
235231
/// Type-safe names for the per-cluster RBAC resources: the ServiceAccount shared by all
236232
/// Pods, its (namespaced) RoleBinding, and the operator-deployed ClusterRole it binds.
237233
pub fn cluster_resource_names(&self) -> role_utils::ResourceNames {
@@ -249,14 +245,14 @@ impl ValidatedCluster {
249245
) -> ResourceNames {
250246
ResourceNames {
251247
cluster_name: self.name.clone(),
252-
role_name: Self::role_name(role),
248+
role_name: role.into(),
253249
role_group_name: role_group_name.clone(),
254250
}
255251
}
256252

257253
/// Recommended labels for a role-group resource.
258254
pub fn recommended_labels(&self, role: &KafkaRole, role_group_name: &RoleGroupName) -> Labels {
259-
self.recommended_labels_for(&Self::role_name(role), role_group_name)
255+
self.recommended_labels_for(&role.into(), role_group_name)
260256
}
261257

262258
/// Recommended labels for a resource that is not tied to a concrete [`KafkaRole`], using a free-form role/role-group label value.
@@ -275,11 +271,7 @@ impl ValidatedCluster {
275271
role: &KafkaRole,
276272
role_group_name: &RoleGroupName,
277273
) -> Labels {
278-
self.recommended_labels_with(
279-
&UNVERSIONED_PRODUCT_VERSION,
280-
&Self::role_name(role),
281-
role_group_name,
282-
)
274+
self.recommended_labels_with(&UNVERSIONED_PRODUCT_VERSION, &role.into(), role_group_name)
283275
}
284276

285277
fn recommended_labels_with(
@@ -301,12 +293,7 @@ impl ValidatedCluster {
301293

302294
/// Selector labels matching the pods of a role group.
303295
pub fn role_group_selector(&self, role: &KafkaRole, role_group_name: &RoleGroupName) -> Labels {
304-
role_group_selector(
305-
self,
306-
&product_name(),
307-
&Self::role_name(role),
308-
role_group_name,
309-
)
296+
role_group_selector(self, &product_name(), &role.into(), role_group_name)
310297
}
311298

312299
/// The name of the broker rolegroup's bootstrap [`Listener`](stackable_operator::crd::listener),
@@ -722,10 +709,11 @@ pub(crate) mod test_support {
722709
mod tests {
723710
use std::collections::BTreeSet;
724711

712+
use stackable_operator::v2::types::operator::RoleName;
725713
use strum::IntoEnumIterator;
726714

727715
use super::{
728-
PodDescriptorsError, ValidatedCluster,
716+
PodDescriptorsError,
729717
test_support::{minimal_kafka, validated_cluster},
730718
};
731719
use crate::crd::role::KafkaRole;
@@ -808,12 +796,13 @@ mod tests {
808796
assert_eq!(node_ids.len(), 3, "node ids must be unique: {node_ids:?}");
809797
}
810798

811-
/// Locks the invariant behind the `expect` in [`ValidatedCluster::role_name`]: every
812-
/// `KafkaRole` variant (present and future) must serialise to a valid `RoleName`.
799+
/// Locks the invariant behind the `expect` in the `From<KafkaRole> for RoleName` impls:
800+
/// every `KafkaRole` variant (present and future) must serialise to a valid `RoleName`.
813801
#[test]
814802
fn every_kafka_role_serialises_to_a_valid_role_name() {
815803
for role in KafkaRole::iter() {
816-
ValidatedCluster::role_name(&role);
804+
let _: RoleName = (&role).into();
805+
let _: RoleName = role.into();
817806
}
818807
}
819808
}

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

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -55,10 +55,6 @@ pub enum Error {
5555
/// The discovery `ConfigMap` is intentionally excluded: it reports the applied bootstrap
5656
/// `Listener`s' ingress addresses (populated by the Listener operator only after apply), so it is
5757
/// built in the reconcile step once those `Listener`s exist.
58-
///
59-
/// `service_account_name` is the name of the RBAC `ServiceAccount` the role-group Pods run under.
60-
/// The RBAC resources are built and applied separately, in the reconcile step; the name is
61-
/// deterministic, so the build step does not depend on the applied `ServiceAccount`.
6258
pub fn build(cluster: &ValidatedCluster) -> Result<KubernetesResources, Error> {
6359
let mut stateful_sets = vec![];
6460
let mut services = vec![];

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ pub fn build_pdb(
2424
let pdb = pod_disruption_budget_builder_with_role(
2525
validated_cluster,
2626
&product_name(),
27-
&ValidatedCluster::role_name(role),
27+
&role.into(),
2828
&operator_name(),
2929
&controller_name(),
3030
)

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

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,17 @@ pub mod broker;
22
pub mod commons;
33
pub mod controller;
44

5-
use std::{borrow::Cow, ops::Deref};
5+
use std::{borrow::Cow, ops::Deref, str::FromStr};
66

77
use serde::{Deserialize, Serialize};
88
use stackable_operator::{
99
commons::resources::{NoRuntimeLimits, Resources},
1010
product_logging::spec::ContainerLogConfig,
1111
schemars::{self, JsonSchema},
12-
v2::{config_overrides::KeyValueConfigOverrides, types::kubernetes::ListenerClassName},
12+
v2::{
13+
config_overrides::KeyValueConfigOverrides,
14+
types::{kubernetes::ListenerClassName, operator::RoleName},
15+
},
1316
};
1417
use strum::{Display, EnumIter, EnumString, IntoEnumIterator};
1518

@@ -85,6 +88,18 @@ pub enum KafkaRole {
8588
Controller,
8689
}
8790

91+
impl From<KafkaRole> for RoleName {
92+
fn from(value: KafkaRole) -> Self {
93+
RoleName::from_str(&value.to_string()).expect("a KafkaRole is a valid role name")
94+
}
95+
}
96+
97+
impl From<&KafkaRole> for RoleName {
98+
fn from(value: &KafkaRole) -> Self {
99+
RoleName::from_str(&value.to_string()).expect("a KafkaRole is a valid role name")
100+
}
101+
}
102+
88103
impl KafkaRole {
89104
/// Return all available roles
90105
pub fn roles() -> Vec<KafkaRole> {

0 commit comments

Comments
 (0)