Skip to content

Commit fbb29ef

Browse files
committed
refactor: use v2 keyconfig overrides with merge
1 parent eb48ad8 commit fbb29ef

2 files changed

Lines changed: 13 additions & 40 deletions

File tree

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

Lines changed: 12 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ use snafu::{ResultExt, Snafu};
99
use 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)]
103103
fn 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,

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

Lines changed: 1 addition & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ use security::add_cert_to_jvm_trust_store_cmd;
55
use serde::{Deserialize, Serialize};
66
use snafu::{OptionExt, ResultExt, Snafu};
77
use stackable_operator::{
8-
builder::pod::volume::ListenerOperatorVolumeSourceBuilderError,
98
client::Client,
109
commons::{
1110
affinity::StackableAffinity,
@@ -111,7 +110,7 @@ const DEFAULT_ROUTER_SECRET_LIFETIME: Duration = Duration::from_days_unchecked(1
111110
const DEFAULT_HISTORICAL_SECRET_LIFETIME: Duration = Duration::from_days_unchecked(1);
112111

113112
/// Typed config override strategies for Druid config files.
114-
#[derive(Clone, Debug, Default, Deserialize, Eq, JsonSchema, PartialEq, Serialize)]
113+
#[derive(Clone, Debug, Default, Deserialize, Eq, JsonSchema, Merge, PartialEq, Serialize)]
115114
#[serde(rename_all = "camelCase")]
116115
pub struct DruidConfigOverrides {
117116
/// Overrides for the `runtime.properties` file.
@@ -158,21 +157,6 @@ pub enum Error {
158157

159158
#[snafu(display("fragment validation failure"))]
160159
FragmentValidationFailure { source: ValidationError },
161-
162-
#[snafu(display("failed to build Labels"))]
163-
LabelBuild {
164-
source: stackable_operator::kvp::LabelError,
165-
},
166-
167-
#[snafu(display("failed to build listener volume"))]
168-
BuildListenerVolume {
169-
source: ListenerOperatorVolumeSourceBuilderError,
170-
},
171-
172-
#[snafu(display("failed to apply group listener"))]
173-
ApplyGroupListener {
174-
source: stackable_operator::cluster_resources::Error,
175-
},
176160
}
177161

178162
#[versioned(

0 commit comments

Comments
 (0)