@@ -104,12 +104,6 @@ impl ValidatedCluster {
104104 format ! ( "{name}-{role}" , name = self . name, role = OpaRole :: Server )
105105 }
106106
107- /// The single OPA role name (`server`).
108- pub fn role_name ( ) -> RoleName {
109- RoleName :: from_str ( & OpaRole :: Server . to_string ( ) )
110- . expect ( "the server role name is a valid role name" )
111- }
112-
113107 /// Type-safe names for the per-cluster RBAC resources: the ServiceAccount shared by all
114108 /// Pods, its (namespaced) RoleBinding, and the operator-deployed ClusterRole it binds.
115109 pub fn cluster_resource_names ( & self ) -> role_utils:: ResourceNames {
@@ -126,13 +120,13 @@ impl ValidatedCluster {
126120 ) -> ResourceNames {
127121 ResourceNames {
128122 cluster_name : self . name . clone ( ) ,
129- role_name : Self :: role_name ( ) ,
123+ role_name : OpaRole :: Server . into ( ) ,
130124 role_group_name : role_group_name. clone ( ) ,
131125 }
132126 }
133127
134128 pub fn recommended_labels ( & self , role_group_name : & RoleGroupName ) -> Labels {
135- self . recommended_labels_for ( & Self :: role_name ( ) , role_group_name)
129+ self . recommended_labels_for ( & OpaRole :: Server . into ( ) , role_group_name)
136130 }
137131
138132 /// Recommended labels for a resource that is not tied to a concrete role,
@@ -164,12 +158,17 @@ impl ValidatedCluster {
164158
165159 /// Selector labels matching the pods of a role group.
166160 pub fn role_group_selector ( & self , role_group_name : & RoleGroupName ) -> Labels {
167- role_group_selector ( self , & product_name ( ) , & Self :: role_name ( ) , role_group_name)
161+ role_group_selector (
162+ self ,
163+ & product_name ( ) ,
164+ & OpaRole :: Server . into ( ) ,
165+ role_group_name,
166+ )
168167 }
169168
170169 /// Selector labels matching all pods of the (single) OPA role.
171170 pub fn role_selector ( & self ) -> Labels {
172- role_selector ( self , & product_name ( ) , & Self :: role_name ( ) )
171+ role_selector ( self , & product_name ( ) , & OpaRole :: Server . into ( ) )
173172 }
174173
175174 /// Returns an [`ObjectMetaBuilder`](stackable_operator::builder::meta::ObjectMetaBuilder)
@@ -307,3 +306,21 @@ impl ValidatedOpaConfig {
307306 }
308307 }
309308}
309+
310+ #[ cfg( test) ]
311+ mod tests {
312+ use stackable_operator:: v2:: types:: operator:: RoleName ;
313+ use strum:: IntoEnumIterator ;
314+
315+ use crate :: crd:: OpaRole ;
316+
317+ /// Locks the invariant behind the `expect` in the `From<OpaRole> for RoleName` impls:
318+ /// every `OpaRole` variant (present and future) must serialise to a valid `RoleName`.
319+ #[ test]
320+ fn every_opa_role_serialises_to_a_valid_role_name ( ) {
321+ for role in OpaRole :: iter ( ) {
322+ let _: RoleName = ( & role) . into ( ) ;
323+ let _: RoleName = role. into ( ) ;
324+ }
325+ }
326+ }
0 commit comments