Skip to content

Commit 141efef

Browse files
committed
refactor: use v2 owerref, RoleGroupName, labels, ResourceNames
1 parent e3a7cbf commit 141efef

11 files changed

Lines changed: 321 additions & 293 deletions

File tree

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

Lines changed: 25 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,9 @@ use snafu::{OptionExt, ResultExt, Snafu};
44
use stackable_operator::{
55
builder::{configmap::ConfigMapBuilder, meta::ObjectMetaBuilder},
66
k8s_openapi::api::core::v1::ConfigMap,
7-
kvp::ObjectLabels,
87
product_logging::framework::VECTOR_CONFIG_FILE,
9-
role_utils::RoleGroupRef,
108
utils::cluster_info::KubernetesClusterInfo,
11-
v2::builder::meta::ownerreference_from_resource,
9+
v2::{builder::meta::ownerreference_from_resource, types::operator::RoleGroupName},
1210
};
1311

1412
use crate::{
@@ -23,16 +21,11 @@ use crate::{
2321
proxy_hosts,
2422
},
2523
},
26-
crd::{NifiRole, v1alpha1},
24+
crd::NifiRole,
2725
};
2826

2927
#[derive(Debug, Snafu)]
3028
pub enum Error {
31-
#[snafu(display("failed to build metadata"))]
32-
MetadataBuild {
33-
source: stackable_operator::builder::meta::Error,
34-
},
35-
3629
#[snafu(display("failed to build bootstrap.conf"))]
3730
BootstrapConfig {
3831
#[snafu(source(from(crate::controller::build::Error, Box::new)))]
@@ -43,19 +36,19 @@ pub enum Error {
4336
BuildNifiProperties {
4437
#[snafu(source(from(crate::controller::build::Error, Box::new)))]
4538
source: Box<crate::controller::build::Error>,
46-
rolegroup: RoleGroupRef<v1alpha1::NifiCluster>,
39+
rolegroup: RoleGroupName,
4740
},
4841

4942
#[snafu(display("failed to build ConfigMap for {rolegroup}"))]
5043
BuildRoleGroupConfig {
5144
source: stackable_operator::builder::configmap::Error,
52-
rolegroup: RoleGroupRef<v1alpha1::NifiCluster>,
45+
rolegroup: RoleGroupName,
5346
},
5447

5548
#[snafu(display("failed to serialize JVM security properties for {}", rolegroup))]
5649
JvmSecurityProperties {
5750
source: stackable_operator::v2::config_file_writer::PropertiesWriterError,
58-
rolegroup: String,
51+
rolegroup: RoleGroupName,
5952
},
6053

6154
#[snafu(display("failed to build login-identity-providers configuration"))]
@@ -75,23 +68,25 @@ type Result<T, E = Error> = std::result::Result<T, E>;
7568
/// Build the rolegroup [`ConfigMap`] configuring the rolegroup based on the
7669
/// resolved cluster configuration.
7770
///
78-
/// All NiFi configuration is sourced from `cluster`. `recommended_labels` must be built by the
79-
/// caller (typically via `build_recommended_labels`).
71+
/// All NiFi configuration is sourced from `cluster`.
72+
///
73+
/// `vector_config` is the Vector agent config (`vector.yaml`) built by the caller (where a
74+
/// `RoleGroupRef` is available); it is `None` when the Vector agent is disabled.
8075
pub fn build_rolegroup_config_map(
8176
cluster: &ValidatedCluster,
82-
rolegroup: &RoleGroupRef<v1alpha1::NifiCluster>,
83-
recommended_labels: &ObjectLabels<'_, ValidatedCluster>,
77+
role_group_name: &RoleGroupName,
8478
cluster_info: &KubernetesClusterInfo,
79+
vector_config: Option<String>,
8580
) -> Result<ConfigMap> {
8681
tracing::debug!("building rolegroup ConfigMap");
8782

8883
let rg = cluster
8984
.role_group_configs
9085
.get(&NifiRole::Node)
91-
.and_then(|groups| groups.get(&rolegroup.role_group))
86+
.and_then(|groups| groups.get(role_group_name))
9287
.with_context(|| MissingRoleGroupSnafu {
9388
role: NifiRole::Node.to_string(),
94-
role_group: rolegroup.role_group.clone(),
89+
role_group: role_group_name.to_string(),
9590
})?;
9691

9792
let proxy_hosts = proxy_hosts::compute_proxy_hosts(cluster, cluster_info);
@@ -103,11 +98,15 @@ pub fn build_rolegroup_config_map(
10398
cm_builder
10499
.metadata(
105100
ObjectMetaBuilder::new()
106-
.namespace(&cluster.namespace)
107-
.name(rolegroup.object_name())
101+
.name_and_namespace(cluster)
102+
.name(
103+
cluster
104+
.resource_names(role_group_name)
105+
.role_group_config_map()
106+
.to_string(),
107+
)
108108
.ownerreference(ownerreference_from_resource(cluster, None, Some(true)))
109-
.with_recommended_labels(recommended_labels)
110-
.context(MetadataBuildSnafu)?
109+
.with_labels(cluster.recommended_labels(role_group_name))
111110
.build(),
112111
)
113112
.add_data(
@@ -119,7 +118,7 @@ pub fn build_rolegroup_config_map(
119118
ConfigFileName::NifiProperties.to_string(),
120119
nifi_properties::build(cluster, rg, &proxy_hosts, &git_sync_resources).with_context(
121120
|_| BuildNifiPropertiesSnafu {
122-
rolegroup: rolegroup.clone(),
121+
rolegroup: role_group_name.clone(),
123122
},
124123
)?,
125124
)
@@ -139,21 +138,21 @@ pub fn build_rolegroup_config_map(
139138
.add_data(
140139
ConfigFileName::SecurityProperties.to_string(),
141140
security_properties::build(rg).with_context(|_| JvmSecurityPropertiesSnafu {
142-
rolegroup: rolegroup.role_group.clone(),
141+
rolegroup: role_group_name.clone(),
143142
})?,
144143
);
145144

146145
if let Some(logback_config) = logging::build_logback_config(&rg.config.logging) {
147146
cm_builder.add_data(ConfigFileName::Logback.to_string(), logback_config);
148147
}
149148

150-
if let Some(vector_config) = logging::build_vector_config(rolegroup, &rg.config.logging) {
149+
if let Some(vector_config) = vector_config {
151150
cm_builder.add_data(VECTOR_CONFIG_FILE, vector_config);
152151
}
153152

154153
cm_builder
155154
.build()
156155
.with_context(|_| BuildRoleGroupConfigSnafu {
157-
rolegroup: rolegroup.clone(),
156+
rolegroup: role_group_name.clone(),
158157
})
159158
}

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

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ pub(crate) mod test_support {
7777
kvp::LabelValue,
7878
v2::types::{
7979
kubernetes::{NamespaceName, Uid},
80-
operator::ClusterName,
80+
operator::{ClusterName, ProductVersion, RoleGroupName},
8181
},
8282
};
8383

@@ -144,12 +144,15 @@ pub(crate) mod test_support {
144144
let name = ClusterName::from_str("simple-nifi").expect("valid cluster name");
145145
let namespace = NamespaceName::from_str("default").expect("valid namespace");
146146
let uid = Uid::from_str("e6ac237d-a6d4-43a1-8135-f36506110912").expect("valid uid");
147+
let product_version = ProductVersion::from_str(&image.app_version_label_value)
148+
.expect("valid product version");
147149

148150
ValidatedCluster::new(
149151
name,
150152
namespace,
151153
uid,
152154
image,
155+
product_version,
153156
role_group_configs,
154157
ValidatedClusterConfig {
155158
authentication: NifiAuthenticationConfig::SingleUser {
@@ -177,7 +180,9 @@ pub(crate) mod test_support {
177180
cluster
178181
.role_group_configs
179182
.get(&NifiRole::Node)
180-
.and_then(|rgs| rgs.get("default"))
183+
.and_then(|rgs| {
184+
rgs.get(&RoleGroupName::from_str("default").expect("valid role-group name"))
185+
})
181186
.expect("minimal_validated_cluster must contain a 'default' role group")
182187
}
183188

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

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ pub fn build(
4949
#[cfg(test)]
5050
mod tests {
5151
use indoc::indoc;
52+
use stackable_operator::v2::types::operator::RoleGroupName;
5253

5354
use super::*;
5455
use crate::{
@@ -64,7 +65,13 @@ mod tests {
6465
build_role_group_configs(&nifi).expect("failed to build role group configs");
6566
let rg = role_group_configs
6667
.get(&NifiRole::Node)
67-
.and_then(|groups| groups.get("default"))
68+
.and_then(|groups| {
69+
groups.get(
70+
&"default"
71+
.parse::<RoleGroupName>()
72+
.expect("valid role-group name"),
73+
)
74+
})
6875
.expect("default role group must exist");
6976

7077
build(rg, None).unwrap()

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

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -642,6 +642,8 @@ mod tests {
642642
/// Verify that a user configOverride for `nifi.properties` flows through to the output.
643643
#[test]
644644
fn test_config_override_wins() {
645+
use stackable_operator::v2::types::operator::RoleGroupName;
646+
645647
use crate::{
646648
controller::validate::build_role_group_configs,
647649
crd::{NifiRole, v1alpha1},
@@ -673,9 +675,12 @@ mod tests {
673675
let nifi: v1alpha1::NifiCluster = serde_yaml::from_str(yaml).expect("invalid test YAML");
674676
let mut role_group_configs =
675677
build_role_group_configs(&nifi).expect("failed to build role group configs");
678+
let default_rg_name = "default"
679+
.parse::<RoleGroupName>()
680+
.expect("valid role-group name");
676681
let rg = role_group_configs
677682
.get_mut(&NifiRole::Node)
678-
.and_then(|groups| groups.remove("default"))
683+
.and_then(|groups| groups.remove(&default_rg_name))
679684
.expect("default role group must exist");
680685

681686
// Build a cluster with this rg substituted in
@@ -684,7 +689,7 @@ mod tests {
684689
.role_group_configs
685690
.get_mut(&NifiRole::Node)
686691
.unwrap()
687-
.insert("default".to_string(), rg.clone());
692+
.insert(default_rg_name, rg.clone());
688693

689694
let git_sync = empty_git_sync_resources();
690695
let props =

0 commit comments

Comments
 (0)