@@ -9,6 +9,7 @@ use snafu::{ResultExt, Snafu};
99use stackable_operator:: {
1010 cli:: OperatorEnvironmentOptions ,
1111 commons:: product_image_selection:: { self , ResolvedProductImage } ,
12+ config:: merge:: Merge ,
1213 crd:: s3,
1314 kube:: ResourceExt ,
1415} ;
@@ -99,43 +100,39 @@ fn key_value_overrides(
99100/// Builds the precomputed per-file config for a single rolegroup. Pure assembly: combines the
100101/// role-level overrides with the rolegroup-level overrides (rolegroup wins) on top of the
101102/// computed defaults. No behavior change vs. the inline loop body it was extracted from.
102- #[ allow( clippy:: too_many_arguments) ]
103103fn build_role_group_config (
104104 druid : & v1alpha1:: DruidCluster ,
105105 druid_role : & DruidRole ,
106106 merged_config : CommonRoleGroupConfig ,
107- role_runtime_overrides : & BTreeMap < String , Option < String > > ,
108- role_security_overrides : & BTreeMap < String , Option < String > > ,
107+ role_config_overrides : & DruidConfigOverrides ,
109108 role_env_overrides : & HashMap < String , String > ,
110109 rg_config_overrides : & DruidConfigOverrides ,
111110 rg_env_overrides : & HashMap < String , String > ,
112111) -> DruidRoleGroupConfig {
112+ // Merge the role-level and rolegroup-level config overrides (rolegroup wins over role).
113+ let mut config_overrides = rg_config_overrides. clone ( ) ;
114+ config_overrides. merge ( role_config_overrides) ;
115+
113116 // ----- runtime.properties -----
114117 let mut runtime_config = druid. compute_runtime_properties ( ) ;
115118 if * druid_role == DruidRole :: MiddleManager {
116119 let ( k, v) = middlemanager_indexer_java_opts ( ) ;
117120 runtime_config. insert ( k, v) ;
118121 }
119122 runtime_config. extend ( runtime_properties:: defaults ( druid_role) ) ;
120- // merged user overrides (role <- rolegroup; rolegroup wins)
121- let mut runtime_overrides = role_runtime_overrides. clone ( ) ;
122- runtime_overrides. extend ( key_value_overrides (
123- rg_config_overrides,
123+ runtime_config. extend ( key_value_overrides (
124+ & config_overrides,
124125 ConfigFileName :: RuntimeProperties ,
125126 ) ) ;
126- runtime_config. extend ( runtime_overrides) ;
127127
128128 // ----- security.properties -----
129129 let mut security_config: BTreeMap < String , Option < String > > = BTreeMap :: new ( ) ;
130130 if * druid_role == DruidRole :: MiddleManager {
131131 let ( k, v) = middlemanager_indexer_java_opts ( ) ;
132132 security_config. insert ( k, v) ;
133133 }
134- let mut security_overrides = role_security_overrides. clone ( ) ;
135- security_overrides. extend ( key_value_overrides (
136- rg_config_overrides,
137- ConfigFileName :: SecurityProperties ,
138- ) ) ;
134+ let security_overrides =
135+ key_value_overrides ( & config_overrides, ConfigFileName :: SecurityProperties ) ;
139136 security_config. extend ( security_properties:: build ( & security_overrides) ) ;
140137
141138 // ----- env -----
@@ -202,14 +199,7 @@ pub fn validate(
202199 for druid_role in DruidRole :: iter ( ) {
203200 // The role-level overrides (role <- rolegroup precedence starts here).
204201 let role = druid. get_role ( & druid_role) ;
205- let role_runtime_overrides = key_value_overrides (
206- & role. config . config_overrides ,
207- ConfigFileName :: RuntimeProperties ,
208- ) ;
209- let role_security_overrides = key_value_overrides (
210- & role. config . config_overrides ,
211- ConfigFileName :: SecurityProperties ,
212- ) ;
202+ let role_config_overrides = & role. config . config_overrides ;
213203 let role_env_overrides = role. config . env_overrides . clone ( ) ;
214204
215205 let rolegroups = merged. role_group_names ( & druid_role) ;
@@ -232,8 +222,7 @@ pub fn validate(
232222 druid,
233223 & druid_role,
234224 merged_config,
235- & role_runtime_overrides,
236- & role_security_overrides,
225+ role_config_overrides,
237226 & role_env_overrides,
238227 rg_config_overrides,
239228 rg_env_overrides,
0 commit comments