@@ -32,7 +32,7 @@ use crate::{
3232 dereference:: DereferencedObjects ,
3333 } ,
3434 crd:: {
35- SupersetRole ,
35+ SupersetRole , SupersetRoleGroupType , SupersetRoleType ,
3636 v1alpha1:: {
3737 Container , SupersetCluster , SupersetConfig , SupersetConfigFragment ,
3838 SupersetConfigOverrides , SupersetRoleConfig ,
@@ -62,15 +62,16 @@ pub enum Error {
6262 source : stackable_operator:: v2:: controller_utils:: Error ,
6363 } ,
6464
65- #[ snafu( display( "failed to resolve and merge config for role group {role_group}" ) ) ]
66- FailedToResolveConfig {
65+ #[ snafu( display( "failed to validate the config for role group {role_group}" ) ) ]
66+ ValidateConfig {
6767 source : fragment:: ValidationError ,
68- role_group : String ,
68+ role_group : RoleGroupName ,
6969 } ,
7070
71- #[ snafu( display( "failed to parse environment variable name" ) ) ]
71+ #[ snafu( display( "invalid environment variable override name in role group {role_group} " ) ) ]
7272 ParseEnvVarName {
7373 source : stackable_operator:: v2:: macros:: attributed_string_type:: Error ,
74+ role_group : RoleGroupName ,
7475 } ,
7576
7677 #[ snafu( display( "invalid role group name {role_group}" ) ) ]
@@ -174,53 +175,19 @@ pub fn validate_cluster(
174175
175176 let mut group_configs = BTreeMap :: new ( ) ;
176177 for ( rolegroup_name, rolegroup) in & resolved_role. role_groups {
177- let validated_rg = with_validated_config :: <
178- SupersetConfig ,
179- GenericCommonConfig ,
180- SupersetConfigFragment ,
181- SupersetRoleConfig ,
182- SupersetConfigOverrides ,
183- > ( rolegroup, resolved_role, & default_config)
184- . with_context ( |_| FailedToResolveConfigSnafu {
185- role_group : rolegroup_name. clone ( ) ,
186- } ) ?;
187-
188- let mut env_overrides = EnvVarSet :: new ( ) ;
189- for ( name, value) in validated_rg. config . env_overrides {
190- env_overrides = env_overrides. with_value (
191- & EnvVarName :: from_str ( & name) . context ( ParseEnvVarNameSnafu ) ?,
192- value,
193- ) ;
194- }
195-
196178 let role_group_name = RoleGroupName :: from_str ( rolegroup_name) . with_context ( |_| {
197179 ParseRoleGroupNameSnafu {
198180 role_group : rolegroup_name. clone ( ) ,
199181 }
200182 } ) ?;
201-
202- let logging = validate_logging (
203- & validated_rg. config . config . logging ,
183+ let validated_rg = validate_role_group_config (
184+ & role_group_name,
185+ rolegroup,
186+ resolved_role,
187+ & default_config,
204188 & vector_aggregator_config_map_name,
205189 ) ?;
206-
207- group_configs. insert (
208- role_group_name,
209- SupersetRoleGroupConfig {
210- replicas : validated_rg. replicas ,
211- config : ValidatedSupersetConfig :: from_merged (
212- validated_rg. config . config ,
213- logging,
214- ) ,
215- config_overrides : validated_rg. config . config_overrides ,
216- env_overrides,
217- cli_overrides : validated_rg. config . cli_overrides ,
218- pod_overrides : validated_rg. config . pod_overrides ,
219- product_specific_common_config : validated_rg
220- . config
221- . product_specific_common_config ,
222- } ,
223- ) ;
190+ group_configs. insert ( role_group_name, validated_rg) ;
224191 }
225192
226193 role_groups. insert ( role, group_configs) ;
@@ -252,6 +219,51 @@ pub fn validate_cluster(
252219 ) )
253220}
254221
222+ /// Merges and validates one role group into a [`SupersetRoleGroupConfig`].
223+ fn validate_role_group_config (
224+ role_group_name : & RoleGroupName ,
225+ role_group : & SupersetRoleGroupType ,
226+ role : & SupersetRoleType ,
227+ default_config : & SupersetConfigFragment ,
228+ vector_aggregator_config_map_name : & Option < ConfigMapName > ,
229+ ) -> Result < SupersetRoleGroupConfig , Error > {
230+ let merged = with_validated_config :: <
231+ SupersetConfig ,
232+ GenericCommonConfig ,
233+ SupersetConfigFragment ,
234+ SupersetRoleConfig ,
235+ SupersetConfigOverrides ,
236+ > ( role_group, role, default_config)
237+ . with_context ( |_| ValidateConfigSnafu {
238+ role_group : role_group_name. clone ( ) ,
239+ } ) ?;
240+
241+ let mut env_overrides = EnvVarSet :: new ( ) ;
242+ for ( env_var_name, env_var_value) in merged. config . env_overrides {
243+ env_overrides = env_overrides. with_value (
244+ & EnvVarName :: from_str ( & env_var_name) . with_context ( |_| ParseEnvVarNameSnafu {
245+ role_group : role_group_name. clone ( ) ,
246+ } ) ?,
247+ env_var_value,
248+ ) ;
249+ }
250+
251+ let logging = validate_logging (
252+ & merged. config . config . logging ,
253+ vector_aggregator_config_map_name,
254+ ) ?;
255+
256+ Ok ( SupersetRoleGroupConfig {
257+ replicas : merged. replicas ,
258+ config : ValidatedSupersetConfig :: from_merged ( merged. config . config , logging) ,
259+ config_overrides : merged. config . config_overrides ,
260+ env_overrides,
261+ cli_overrides : merged. config . cli_overrides ,
262+ pod_overrides : merged. config . pod_overrides ,
263+ product_specific_common_config : merged. config . product_specific_common_config ,
264+ } )
265+ }
266+
255267#[ cfg( test) ]
256268mod tests {
257269
@@ -267,28 +279,10 @@ mod tests {
267279
268280 use super :: { Error , validate_cluster, validate_logging} ;
269281 use crate :: {
270- controller:: dereference:: DereferencedObjects ,
271- crd:: {
272- SupersetRole ,
273- authentication:: {
274- self , SupersetClientAuthenticationDetailsResolved , v1alpha1:: FlaskRolesSyncMoment ,
275- } ,
276- v1alpha1,
277- } ,
282+ controller:: test_support:: default_dereferenced,
283+ crd:: { SupersetRole , v1alpha1} ,
278284 } ;
279285
280- fn default_dereferenced ( ) -> DereferencedObjects {
281- DereferencedObjects {
282- authentication_config : SupersetClientAuthenticationDetailsResolved {
283- authentication_classes_resolved : vec ! [ ] ,
284- user_registration : true ,
285- user_registration_role : authentication:: DEFAULT_USER_REGISTRATION_ROLE . to_string ( ) ,
286- sync_roles_at : FlaskRolesSyncMoment :: default ( ) ,
287- } ,
288- opa_config : None ,
289- }
290- }
291-
292286 /// Builds a [`Logging`] with automatic log configuration for the Superset and Vector containers.
293287 fn automatic_logging ( enable_vector_agent : bool ) -> Logging < v1alpha1:: Container > {
294288 let automatic = || ContainerLogConfig {
0 commit comments