Skip to content

Commit c8a1ae9

Browse files
committed
refactor: consolidate ValidatedReportingTask & ValidatedSensitiveProperties
1 parent 1455165 commit c8a1ae9

9 files changed

Lines changed: 81 additions & 55 deletions

File tree

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

Lines changed: 21 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -94,8 +94,8 @@ pub(crate) mod test_support {
9494

9595
use crate::{
9696
controller::{
97-
NifiRoleGroupConfig, ValidatedCluster, ValidatedClusterConfig, ValidatedRoleConfig,
98-
validate::build_role_group_configs,
97+
NifiRoleGroupConfig, ValidatedCluster, ValidatedClusterConfig, ValidatedReportingTask,
98+
ValidatedRoleConfig, ValidatedSensitiveProperties, validate::build_role_group_configs,
9999
},
100100
crd::{NifiRole, v1alpha1},
101101
security::{
@@ -184,21 +184,27 @@ pub(crate) mod test_support {
184184
},
185185
authorization: ResolvedNifiAuthorizationConfig::SingleUser,
186186
clustering_backend: v1alpha1::NifiClusteringBackend::Kubernetes {},
187-
sensitive_properties_algorithm: Default::default(), // NifiArgon2AesGcm256
188-
sensitive_key_secret: nifi
189-
.spec
190-
.cluster_config
191-
.sensitive_properties
192-
.key_secret
193-
.clone(),
187+
sensitive_properties: ValidatedSensitiveProperties {
188+
algorithm: Default::default(), // NifiArgon2AesGcm256
189+
key_secret: nifi
190+
.spec
191+
.cluster_config
192+
.sensitive_properties
193+
.key_secret
194+
.clone(),
195+
auto_generate: nifi.spec.cluster_config.sensitive_properties.auto_generate,
196+
},
194197
server_tls_secret_class: nifi.server_tls_secret_class().clone(),
195198
extra_volumes: nifi.spec.cluster_config.extra_volumes.clone(),
196-
reporting_task_pod_overrides: nifi
197-
.spec
198-
.cluster_config
199-
.create_reporting_task_job
200-
.pod_overrides
201-
.clone(),
199+
reporting_task: ValidatedReportingTask {
200+
enabled: nifi.spec.cluster_config.create_reporting_task_job.enabled,
201+
pod_overrides: nifi
202+
.spec
203+
.cluster_config
204+
.create_reporting_task_job
205+
.pod_overrides
206+
.clone(),
207+
},
202208
host_header_check: nifi.spec.cluster_config.host_header_check.clone(),
203209
},
204210
)

rust/operator-binary/src/controller/build/properties/nifi_properties.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -451,7 +451,8 @@ pub fn build(
451451
"nifi.sensitive.props.algorithm".to_string(),
452452
cluster
453453
.cluster_config
454-
.sensitive_properties_algorithm
454+
.sensitive_properties
455+
.algorithm
455456
.to_string(),
456457
);
457458

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -323,7 +323,7 @@ fn build_reporting_task_job(
323323
.context(AddVolumeSnafu)?
324324
.build_template();
325325

326-
pod_template.merge_from(cluster.cluster_config.reporting_task_pod_overrides.clone());
326+
pod_template.merge_from(cluster.cluster_config.reporting_task.pod_overrides.clone());
327327

328328
let job = Job {
329329
metadata: cluster

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

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ use crate::{
6464
},
6565
},
6666
crd::{
67-
NifiRole, NifiRoleType,
67+
NifiRole,
6868
authorization::NifiAccessPolicyProvider,
6969
storage::{NifiRepository, PERSISTENT_REPOSITORIES},
7070
v1alpha1,
@@ -162,7 +162,6 @@ stackable_operator::constant!(VECTOR_LOG_VOLUME_NAME: VolumeName = "log");
162162
pub(crate) async fn build_node_rolegroup_statefulset(
163163
cluster: &ValidatedCluster,
164164
cluster_info: &KubernetesClusterInfo,
165-
role: &NifiRoleType,
166165
role_group_name: &RoleGroupName,
167166
rg: &NifiRoleGroupConfig,
168167
rolling_update_supported: bool,
@@ -250,7 +249,7 @@ pub(crate) async fn build_node_rolegroup_statefulset(
250249
cluster_domain = cluster_info.cluster_domain,
251250
);
252251

253-
let sensitive_key_secret = &cluster.cluster_config.sensitive_key_secret;
252+
let sensitive_key_secret = &cluster.cluster_config.sensitive_properties.key_secret;
254253

255254
let prepare_container_name = PREPARE_CONTAINER_NAME.to_string();
256255
let mut prepare_args = vec![];
@@ -475,7 +474,7 @@ pub(crate) async fn build_node_rolegroup_statefulset(
475474
tracing::info!(
476475
?volume_name,
477476
?mount_point,
478-
?role,
477+
role = %NifiRole::Node,
479478
"Adding user specified extra volume",
480479
);
481480
pod_builder

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

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -170,16 +170,32 @@ pub struct ValidatedClusterConfig {
170170
pub clustering_backend: v1alpha1::NifiClusteringBackend,
171171
/// The host-header-check config, resolved into the proxy hosts allow-list at build time.
172172
pub host_header_check: HostHeaderCheckConfig,
173-
/// The validated sensitive properties algorithm.
174-
pub sensitive_properties_algorithm: NifiSensitiveKeyAlgorithm,
175-
/// The name of the Secret holding the sensitive-properties key, mounted into the NiFi Pods.
176-
pub sensitive_key_secret: SecretName,
173+
/// The resolved sensitive-properties configuration.
174+
pub sensitive_properties: ValidatedSensitiveProperties,
177175
/// The SecretClass providing the server TLS certificates.
178176
pub server_tls_secret_class: SecretClassName,
179177
/// User-provided extra volumes, mounted into every container under `/stackable/userdata/`.
180178
pub extra_volumes: Vec<Volume>,
181-
/// Pod overrides for the (NiFi 1.x-only) create-reporting-task Job.
182-
pub reporting_task_pod_overrides: PodTemplateSpec,
179+
/// The resolved (NiFi 1.x-only) create-reporting-task Job configuration.
180+
pub reporting_task: ValidatedReportingTask,
181+
}
182+
183+
/// The resolved `spec.clusterConfig.sensitiveProperties`.
184+
pub struct ValidatedSensitiveProperties {
185+
/// The validated sensitive-properties encryption algorithm.
186+
pub algorithm: NifiSensitiveKeyAlgorithm,
187+
/// The name of the Secret holding the sensitive-properties key, mounted into the NiFi Pods.
188+
pub key_secret: SecretName,
189+
/// Whether to generate the key Secret if it is missing.
190+
pub auto_generate: bool,
191+
}
192+
193+
/// The resolved `spec.clusterConfig.createReportingTaskJob` (NiFi 1.x only).
194+
pub struct ValidatedReportingTask {
195+
/// Whether the reporting-task Job should be created.
196+
pub enabled: bool,
197+
/// Pod overrides for the reporting-task Job.
198+
pub pod_overrides: PodTemplateSpec,
183199
}
184200

185201
/// Per-role configuration extracted during validation.

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

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ use strum::{EnumDiscriminants, IntoStaticStr};
3030

3131
use super::{
3232
NifiRoleGroupConfig, ValidatedCluster, ValidatedClusterConfig, ValidatedLogging,
33-
ValidatedNifiConfig, ValidatedRoleConfig,
33+
ValidatedNifiConfig, ValidatedReportingTask, ValidatedRoleConfig, ValidatedSensitiveProperties,
3434
};
3535
use crate::{
3636
controller::{build::git_sync::build_git_sync_resources, dereference::DereferencedObjects},
@@ -181,21 +181,27 @@ pub fn validate(
181181
authentication: authentication_config,
182182
authorization: authorization_config,
183183
clustering_backend: nifi.spec.cluster_config.clustering_backend.clone(),
184-
sensitive_properties_algorithm,
185-
sensitive_key_secret: nifi
186-
.spec
187-
.cluster_config
188-
.sensitive_properties
189-
.key_secret
190-
.clone(),
184+
sensitive_properties: ValidatedSensitiveProperties {
185+
algorithm: sensitive_properties_algorithm,
186+
key_secret: nifi
187+
.spec
188+
.cluster_config
189+
.sensitive_properties
190+
.key_secret
191+
.clone(),
192+
auto_generate: nifi.spec.cluster_config.sensitive_properties.auto_generate,
193+
},
191194
server_tls_secret_class: nifi.server_tls_secret_class().clone(),
192195
extra_volumes: nifi.spec.cluster_config.extra_volumes.clone(),
193-
reporting_task_pod_overrides: nifi
194-
.spec
195-
.cluster_config
196-
.create_reporting_task_job
197-
.pod_overrides
198-
.clone(),
196+
reporting_task: ValidatedReportingTask {
197+
enabled: nifi.spec.cluster_config.create_reporting_task_job.enabled,
198+
pod_overrides: nifi
199+
.spec
200+
.cluster_config
201+
.create_reporting_task_job
202+
.pod_overrides
203+
.clone(),
204+
},
199205
host_header_check: nifi.spec.cluster_config.host_header_check.clone(),
200206
},
201207
))

rust/operator-binary/src/nifi_controller.rs

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -206,7 +206,7 @@ pub async fn reconcile_nifi(
206206
tracing::info!("Checking for sensitive key configuration");
207207
check_or_generate_sensitive_key(
208208
client,
209-
&nifi.spec.cluster_config.sensitive_properties,
209+
&validated_cluster.cluster_config.sensitive_properties,
210210
&validated_cluster.namespace,
211211
)
212212
.await
@@ -291,8 +291,6 @@ pub async fn reconcile_nifi(
291291
let rg_headless_service =
292292
build_rolegroup_headless_service(&validated_cluster, role_group_name);
293293

294-
let role = nifi.spec.nodes.as_ref().context(NoNodesDefinedSnafu)?;
295-
296294
let rg_configmap = build::resource::config_map::build_rolegroup_config_map(
297295
&validated_cluster,
298296
role_group_name,
@@ -315,7 +313,6 @@ pub async fn reconcile_nifi(
315313
let rg_statefulset = build_node_rolegroup_statefulset(
316314
&validated_cluster,
317315
&client.kubernetes_cluster_info,
318-
role,
319316
role_group_name,
320317
rg,
321318
rolling_upgrade_supported,
@@ -389,7 +386,7 @@ pub async fn reconcile_nifi(
389386
.context(ApplyGroupListenerSnafu)?;
390387

391388
// Only add the reporting task in case it is enabled.
392-
if nifi.spec.cluster_config.create_reporting_task_job.enabled {
389+
if validated_cluster.cluster_config.reporting_task.enabled {
393390
if let Some((reporting_task_job, reporting_task_service)) = build_maybe_reporting_task(
394391
&validated_cluster,
395392
&client.kubernetes_cluster_info,

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ use stackable_operator::{
1010
},
1111
};
1212

13-
use crate::crd::sensitive_properties::NifiSensitivePropertiesConfig;
13+
use crate::controller::ValidatedSensitiveProperties;
1414

1515
pub mod authentication;
1616
pub mod authorization;
@@ -34,10 +34,10 @@ pub enum Error {
3434

3535
pub async fn check_or_generate_sensitive_key(
3636
client: &Client,
37-
sensitive_config: &NifiSensitivePropertiesConfig,
37+
sensitive_properties: &ValidatedSensitiveProperties,
3838
namespace: &NamespaceName,
3939
) -> Result<bool> {
40-
sensitive_key::check_or_generate_sensitive_key(client, sensitive_config, namespace)
40+
sensitive_key::check_or_generate_sensitive_key(client, sensitive_properties, namespace)
4141
.await
4242
.context(SensitiveKeySnafu)
4343
}

rust/operator-binary/src/security/sensitive_key.rs

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ use stackable_operator::{
77
v2::types::kubernetes::NamespaceName,
88
};
99

10-
use crate::crd::sensitive_properties::NifiSensitivePropertiesConfig;
10+
use crate::controller::ValidatedSensitiveProperties;
1111

1212
/// The key under which the generated sensitive-properties key is stored in the Secret. The
1313
/// `nifi.properties` builder references the mounted file by this same name, so the two must agree.
@@ -33,19 +33,20 @@ pub enum Error {
3333

3434
pub(crate) async fn check_or_generate_sensitive_key(
3535
client: &Client,
36-
sensitive_config: &NifiSensitivePropertiesConfig,
36+
sensitive_properties: &ValidatedSensitiveProperties,
3737
namespace: &NamespaceName,
3838
) -> Result<bool, Error> {
39+
let key_secret = &sensitive_properties.key_secret;
3940
match client
40-
.get_opt::<Secret>(sensitive_config.key_secret.as_ref(), namespace.as_ref())
41+
.get_opt::<Secret>(key_secret.as_ref(), namespace.as_ref())
4142
.await
4243
.context(SensitiveKeySecretSnafu)?
4344
{
4445
Some(_) => Ok(false),
4546
None => {
46-
if !sensitive_config.auto_generate {
47+
if !sensitive_properties.auto_generate {
4748
return Err(Error::SensitiveKeySecretMissing {
48-
name: sensitive_config.key_secret.to_string(),
49+
name: key_secret.to_string(),
4950
namespace: namespace.to_string(),
5051
});
5152
}
@@ -62,7 +63,7 @@ pub(crate) async fn check_or_generate_sensitive_key(
6263
let new_secret = Secret {
6364
metadata: ObjectMetaBuilder::new()
6465
.namespace(namespace)
65-
.name(sensitive_config.key_secret.to_string())
66+
.name(key_secret.to_string())
6667
.build(),
6768
string_data: Some(secret_data),
6869
..Secret::default()

0 commit comments

Comments
 (0)