@@ -3,65 +3,70 @@ use snafu::{ResultExt, Snafu};
33use stackable_operator:: {
44 builder:: { configmap:: ConfigMapBuilder , meta:: ObjectMetaBuilder } ,
55 k8s_openapi:: api:: core:: v1:: ConfigMap ,
6- role_utils:: RoleGroupRef ,
7- v2:: config_file_writer:: { PropertiesWriterError , to_java_properties_string} ,
6+ product_logging:: framework:: VECTOR_CONFIG_FILE ,
7+ v2:: {
8+ builder:: meta:: ownerreference_from_resource,
9+ config_file_writer:: { PropertiesWriterError , to_java_properties_string} ,
10+ } ,
811} ;
912
1013use crate :: {
1114 controller:: {
12- ValidatedCluster , ValidatedRoleGroupConfig ,
15+ RoleGroupName , ValidatedCluster , ValidatedRoleGroupConfig ,
1316 build:: properties:: logging:: role_group_config_map_data,
1417 } ,
1518 crd:: {
1619 ConfigFileName , STACKABLE_LISTENER_BOOTSTRAP_DIR , STACKABLE_LISTENER_BROKER_DIR ,
1720 listener:: { KafkaListenerConfig , node_address_cmd} ,
1821 role:: AnyConfig ,
19- v1alpha1,
2022 } ,
21- kafka_controller:: { KAFKA_CONTROLLER_NAME , build_recommended_labels} ,
2223} ;
2324
2425#[ derive( Snafu , Debug ) ]
2526pub enum Error {
26- #[ snafu( display( "failed to build ConfigMap for {}" , rolegroup ) ) ]
27+ #[ snafu( display( "failed to build ConfigMap for role group {role_group}" ) ) ]
2728 BuildRoleGroupConfig {
2829 source : stackable_operator:: builder:: configmap:: Error ,
29- rolegroup : RoleGroupRef < v1alpha1 :: KafkaCluster > ,
30+ role_group : RoleGroupName ,
3031 } ,
3132
32- #[ snafu( display( "failed to serialize [{}] for {rolegroup}" , ConfigFileName :: Security ) ) ]
33+ #[ snafu( display(
34+ "failed to serialize [{}] for role group {role_group}" ,
35+ ConfigFileName :: Security
36+ ) ) ]
3337 JvmSecurityProperties {
3438 source : PropertiesWriterError ,
35- rolegroup : String ,
36- } ,
37-
38- #[ snafu( display( "failed to build Metadata" ) ) ]
39- MetadataBuild {
40- source : stackable_operator:: builder:: meta:: Error ,
41- } ,
42-
43- #[ snafu( display( "object is missing metadata to build owner reference" ) ) ]
44- ObjectMissingMetadataForOwnerRef {
45- source : stackable_operator:: builder:: meta:: Error ,
39+ role_group : RoleGroupName ,
4640 } ,
4741
48- #[ snafu( display( "failed to serialize config for {rolegroup }" ) ) ]
42+ #[ snafu( display( "failed to serialize config for role group {role_group }" ) ) ]
4943 SerializeConfig {
5044 source : PropertiesWriterError ,
51- rolegroup : RoleGroupRef < v1alpha1:: KafkaCluster > ,
45+ role_group : RoleGroupName ,
46+ } ,
47+
48+ #[ snafu( display( "failed to build pod descriptors" ) ) ]
49+ BuildPodDescriptors {
50+ source : crate :: controller:: PodDescriptorsError ,
5251 } ,
5352
5453 #[ snafu( display( "no Kraft controllers found to build" ) ) ]
5554 NoKraftControllersFound ,
5655}
5756
58- /// The rolegroup [`ConfigMap`] configures the rolegroup based on the configuration given by the administrator
57+ /// The rolegroup [`ConfigMap`] configures the rolegroup based on the configuration given by the administrator.
58+ ///
59+ /// `vector_config` is the Vector agent config built by the caller (where a `RoleGroupRef` is
60+ /// available); it is `None` when the Vector agent is disabled. Resource naming and labels use the
61+ /// role (derived from `validated_rg.config`) and the typed `role_group_name`.
5962pub fn build_rolegroup_config_map (
6063 validated_cluster : & ValidatedCluster ,
61- rolegroup : & RoleGroupRef < v1alpha1 :: KafkaCluster > ,
64+ role_group_name : & RoleGroupName ,
6265 validated_rg : & ValidatedRoleGroupConfig ,
6366 listener_config : & KafkaListenerConfig ,
67+ vector_config : Option < String > ,
6468) -> Result < ConfigMap , Error > {
69+ let role = validated_rg. config . kafka_role ( ) ;
6570 let cluster_config = & validated_cluster. cluster_config ;
6671 let kafka_security = & cluster_config. kafka_security ;
6772 let resolved_product_image = & validated_cluster. image ;
@@ -72,20 +77,26 @@ pub fn build_rolegroup_config_map(
7277 . overrides
7378 . clone ( ) ;
7479
75- if cluster_config. is_kraft_mode ( ) && cluster_config. pod_descriptors . is_empty ( ) {
80+ let pod_descriptors = validated_cluster
81+ . pod_descriptors ( None )
82+ . context ( BuildPodDescriptorsSnafu ) ?;
83+
84+ if cluster_config. is_kraft_mode ( ) && pod_descriptors. is_empty ( ) {
7685 return NoKraftControllersFoundSnafu . fail ( ) ;
7786 }
7887
7988 let kafka_config = match & validated_rg. config {
8089 AnyConfig :: Broker ( _) => crate :: controller:: build:: properties:: broker_properties:: build (
8190 cluster_config,
8291 listener_config,
92+ & pod_descriptors,
8393 config_overrides,
8494 ) ,
8595 AnyConfig :: Controller ( _) => {
8696 crate :: controller:: build:: properties:: controller_properties:: build (
8797 cluster_config,
8898 listener_config,
99+ & pod_descriptors,
89100 config_overrides,
90101 )
91102 }
@@ -101,32 +112,33 @@ pub fn build_rolegroup_config_map(
101112 . metadata (
102113 ObjectMetaBuilder :: new ( )
103114 . name_and_namespace ( validated_cluster)
104- . name ( rolegroup. object_name ( ) )
105- . ownerreference_from_resource ( validated_cluster, None , Some ( true ) )
106- . context ( ObjectMissingMetadataForOwnerRefSnafu ) ?
107- . with_recommended_labels ( & build_recommended_labels (
115+ . name (
116+ validated_cluster
117+ . resource_names ( & role, role_group_name)
118+ . role_group_config_map ( )
119+ . to_string ( ) ,
120+ )
121+ . ownerreference ( ownerreference_from_resource (
108122 validated_cluster,
109- KAFKA_CONTROLLER_NAME ,
110- & resolved_product_image. app_version_label_value ,
111- & rolegroup. role ,
112- & rolegroup. role_group ,
123+ None ,
124+ Some ( true ) ,
113125 ) )
114- . context ( MetadataBuildSnafu ) ?
126+ . with_labels ( validated_cluster . recommended_labels ( & role , role_group_name ) )
115127 . build ( ) ,
116128 )
117129 . add_data (
118130 kafka_config_file_name,
119131 to_java_properties_string ( kafka_config. iter ( ) ) . with_context ( |_| {
120132 SerializeConfigSnafu {
121- rolegroup : rolegroup . clone ( ) ,
133+ role_group : role_group_name . clone ( ) ,
122134 }
123135 } ) ?,
124136 )
125137 . add_data (
126138 ConfigFileName :: Security . to_string ( ) ,
127139 to_java_properties_string ( jvm_sec_props. iter ( ) ) . with_context ( |_| {
128140 JvmSecurityPropertiesSnafu {
129- rolegroup : rolegroup . role_group . clone ( ) ,
141+ role_group : role_group_name . clone ( ) ,
130142 }
131143 } ) ?,
132144 )
@@ -139,7 +151,7 @@ pub fn build_rolegroup_config_map(
139151 . filter_map ( |( k, v) | v. as_ref ( ) . map ( |v| ( k, v) ) ) ,
140152 )
141153 . with_context ( |_| JvmSecurityPropertiesSnafu {
142- rolegroup : rolegroup . role_group . clone ( ) ,
154+ role_group : role_group_name . clone ( ) ,
143155 } ) ?,
144156 )
145157 // This file contains the JAAS configuration for Kerberos authentication
@@ -156,7 +168,6 @@ pub fn build_rolegroup_config_map(
156168
157169 let config_data = role_group_config_map_data (
158170 & resolved_product_image. product_version ,
159- rolegroup,
160171 & validated_rg. config ,
161172 ) ;
162173 for ( file_name, data) in config_data {
@@ -165,10 +176,14 @@ pub fn build_rolegroup_config_map(
165176 }
166177 }
167178
179+ if let Some ( vector_config) = vector_config {
180+ cm_builder. add_data ( VECTOR_CONFIG_FILE , vector_config) ;
181+ }
182+
168183 cm_builder
169184 . build ( )
170185 . with_context ( |_| BuildRoleGroupConfigSnafu {
171- rolegroup : rolegroup . clone ( ) ,
186+ role_group : role_group_name . clone ( ) ,
172187 } )
173188}
174189
0 commit comments