@@ -18,35 +18,26 @@ use crate::crd::{
1818 KAFKA_LISTENERS , KAFKA_NODE_ID , KafkaRole , broker:: BROKER_PROPERTIES_FILE ,
1919 controller:: CONTROLLER_PROPERTIES_FILE ,
2020 } ,
21+ v1alpha1,
2122} ;
2223
2324/// Returns the commands to start the main Kafka container
2425pub fn broker_kafka_container_commands (
26+ kafka : & v1alpha1:: KafkaCluster ,
2527 cluster_id : & str ,
2628 controller_descriptors : Vec < KafkaPodDescriptor > ,
2729 kafka_listeners : & KafkaListenerConfig ,
2830 opa_connect_string : Option < & str > ,
2931 kerberos_enabled : bool ,
3032) -> String {
31- // TODO: copy to tmp? mount readwrite folder?
3233 formatdoc ! { "
3334 {COMMON_BASH_TRAP_FUNCTIONS}
3435 {remove_vector_shutdown_file_command}
3536 prepare_signal_handlers
3637 containerdebug --output={STACKABLE_LOG_DIR}/containerdebug-state.json --loop &
3738 {set_realm_env}
3839
39- export REPLICA_ID=$(echo \" $POD_NAME\" | grep -oE '[0-9]+$')
40- cp {config_dir}/{properties_file} /tmp/{properties_file}
41-
42- echo \" {KAFKA_NODE_ID}=$((REPLICA_ID + {KAFKA_BROKER_ID_OFFSET}))\" >> /tmp/{properties_file}
43- echo \" {KAFKA_CONTROLLER_QUORUM_BOOTSTRAP_SERVERS}={bootstrap_servers}\" >> /tmp/{properties_file}
44- echo \" {KAFKA_LISTENERS}={listeners}\" >> /tmp/{properties_file}
45- echo \" {KAFKA_ADVERTISED_LISTENERS}={advertised_listeners}\" >> /tmp/{properties_file}
46- echo \" {KAFKA_LISTENER_SECURITY_PROTOCOL_MAP}={listener_security_protocol_map}\" >> /tmp/{properties_file}
47-
48- bin/kafka-storage.sh format --cluster-id {cluster_id} --config /tmp/{properties_file} --initial-controllers {initial_controllers} --ignore-formatted
49- bin/kafka-server-start.sh /tmp/{properties_file} {opa_config}{jaas_config} &
40+ {broker_start_command}
5041
5142 wait_for_termination $!
5243 {create_vector_shutdown_file_command}
@@ -57,26 +48,75 @@ pub fn broker_kafka_container_commands(
5748 true => format!( "export KERBEROS_REALM=$(grep -oP 'default_realm = \\ K.*' {})" , STACKABLE_KERBEROS_KRB5_PATH ) ,
5849 false => "" . to_string( ) ,
5950 } ,
51+ broker_start_command = broker_start_command( kafka, cluster_id, controller_descriptors, kafka_listeners, opa_connect_string, kerberos_enabled) ,
52+ }
53+ }
54+
55+ fn broker_start_command (
56+ kafka : & v1alpha1:: KafkaCluster ,
57+ cluster_id : & str ,
58+ controller_descriptors : Vec < KafkaPodDescriptor > ,
59+ kafka_listeners : & KafkaListenerConfig ,
60+ opa_connect_string : Option < & str > ,
61+ kerberos_enabled : bool ,
62+ ) -> String {
63+ let opa_config = match opa_connect_string {
64+ None => "" . to_string ( ) ,
65+ Some ( opa_connect_string) => {
66+ format ! ( " --override \" opa.authorizer.url={opa_connect_string}\" " )
67+ }
68+ } ;
69+
70+ let jaas_config = match kerberos_enabled {
71+ true => {
72+ let service_name = KafkaRole :: Broker . kerberos_service_name ( ) ;
73+ let broker_address = node_address_cmd ( STACKABLE_LISTENER_BROKER_DIR ) ;
74+ let bootstrap_address = node_address_cmd ( STACKABLE_LISTENER_BOOTSTRAP_DIR ) ;
75+ // TODO replace client and bootstrap below with constants
76+ format ! ( " --override \" listener.name.client.gssapi.sasl.jaas.config=com.sun.security.auth.module.Krb5LoginModule required useKeyTab=true storeKey=true isInitiator=false keyTab=\\ \" /stackable/kerberos/keytab\\ \" principal=\\ \" {service_name}/{broker_address}@$KERBEROS_REALM\\ \" ;\" --override \" listener.name.bootstrap.gssapi.sasl.jaas.config=com.sun.security.auth.module.Krb5LoginModule required useKeyTab=true storeKey=true isInitiator=false keyTab=\\ \" /stackable/kerberos/keytab\\ \" principal=\\ \" {service_name}/{bootstrap_address}@$KERBEROS_REALM\\ \" ;\" " ) . to_string ( )
77+ }
78+ false => "" . to_string ( ) ,
79+ } ;
80+
81+ // TODO: copy to tmp? mount readwrite folder?
82+ if kafka. is_controller_configured ( ) {
83+ formatdoc ! { "
84+ export REPLICA_ID=$(echo \" $POD_NAME\" | grep -oE '[0-9]+$')
85+ cp {config_dir}/{properties_file} /tmp/{properties_file}
86+
87+ echo \" {KAFKA_NODE_ID}=$((REPLICA_ID + {KAFKA_BROKER_ID_OFFSET}))\" >> /tmp/{properties_file}
88+ echo \" {KAFKA_CONTROLLER_QUORUM_BOOTSTRAP_SERVERS}={bootstrap_servers}\" >> /tmp/{properties_file}
89+ echo \" {KAFKA_LISTENERS}={listeners}\" >> /tmp/{properties_file}
90+ echo \" {KAFKA_ADVERTISED_LISTENERS}={advertised_listeners}\" >> /tmp/{properties_file}
91+ echo \" {KAFKA_LISTENER_SECURITY_PROTOCOL_MAP}={listener_security_protocol_map}\" >> /tmp/{properties_file}
92+
93+ bin/kafka-storage.sh format --cluster-id {cluster_id} --config /tmp/{properties_file} --initial-controllers {initial_controllers} --ignore-formatted
94+ bin/kafka-server-start.sh /tmp/{properties_file} {opa_config}{jaas_config} &
95+ " ,
6096 config_dir = STACKABLE_CONFIG_DIR ,
6197 properties_file = BROKER_PROPERTIES_FILE ,
6298 bootstrap_servers = to_bootstrap_servers( & controller_descriptors) ,
6399 initial_controllers = to_initial_controllers( & controller_descriptors) ,
64100 listeners = kafka_listeners. listeners( ) ,
65101 advertised_listeners = kafka_listeners. advertised_listeners( ) ,
66102 listener_security_protocol_map = kafka_listeners. listener_security_protocol_map( ) ,
67- opa_config = match opa_connect_string {
68- None => "" . to_string( ) ,
69- Some ( opa_connect_string) => format!( " --override \" opa.authorizer.url={opa_connect_string}\" " ) ,
70- } ,
71- jaas_config = match kerberos_enabled {
72- true => {
73- let service_name = KafkaRole :: Broker . kerberos_service_name( ) ;
74- let broker_address = node_address_cmd( STACKABLE_LISTENER_BROKER_DIR ) ;
75- let bootstrap_address = node_address_cmd( STACKABLE_LISTENER_BOOTSTRAP_DIR ) ;
76- // TODO replace client and bootstrap below with constants
77- format!( " --override \" listener.name.client.gssapi.sasl.jaas.config=com.sun.security.auth.module.Krb5LoginModule required useKeyTab=true storeKey=true isInitiator=false keyTab=\\ \" /stackable/kerberos/keytab\\ \" principal=\\ \" {service_name}/{broker_address}@$KERBEROS_REALM\\ \" ;\" --override \" listener.name.bootstrap.gssapi.sasl.jaas.config=com.sun.security.auth.module.Krb5LoginModule required useKeyTab=true storeKey=true isInitiator=false keyTab=\\ \" /stackable/kerberos/keytab\\ \" principal=\\ \" {service_name}/{bootstrap_address}@$KERBEROS_REALM\\ \" ;\" " ) . to_string( ) } ,
78- false => "" . to_string( ) ,
79- } ,
103+ }
104+ } else {
105+ formatdoc ! { "
106+ bin/kafka-server-start.sh {config_dir}/{properties_file} \
107+ --override \" zookeeper.connect=$ZOOKEEPER\" \
108+ --override \" listeners={listeners}\" \
109+ --override \" advertised.listeners={advertised_listeners}\" \
110+ --override \" listener.security.protocol.map={listener_security_protocol_map}\" \
111+ {opa_config} \
112+ {jaas_config} \
113+ &",
114+ config_dir = STACKABLE_CONFIG_DIR ,
115+ properties_file = BROKER_PROPERTIES_FILE ,
116+ listeners = kafka_listeners. listeners( ) ,
117+ advertised_listeners = kafka_listeners. advertised_listeners( ) ,
118+ listener_security_protocol_map = kafka_listeners. listener_security_protocol_map( ) ,
119+ }
80120 }
81121}
82122
0 commit comments