@@ -519,6 +519,36 @@ pub async fn reconcile_airflow(
519519 role : role_name. to_string ( ) ,
520520 } ) ?;
521521
522+ if let Some ( GenericRoleConfig {
523+ pod_disruption_budget : pdb,
524+ } ) = airflow. role_config ( & airflow_role)
525+ {
526+ add_pdbs ( & pdb, airflow, & airflow_role, client, & mut cluster_resources)
527+ . await
528+ . context ( FailedToCreatePdbSnafu ) ?;
529+ }
530+
531+ if let Some ( listener_class) = airflow_role. listener_class_name ( airflow) {
532+ if let Some ( listener_group_name) = airflow. group_listener_name ( & airflow_role) {
533+ let rg_group_listener = build_group_listener (
534+ airflow,
535+ build_recommended_labels (
536+ airflow,
537+ AIRFLOW_CONTROLLER_NAME ,
538+ & resolved_product_image. app_version_label_value ,
539+ role_name,
540+ "none" ,
541+ ) ,
542+ listener_class. to_string ( ) ,
543+ listener_group_name,
544+ ) ?;
545+ cluster_resources
546+ . add ( client, rg_group_listener)
547+ . await
548+ . context ( ApplyGroupListenerSnafu ) ?;
549+ }
550+ }
551+
522552 for ( rolegroup_name, rolegroup_config) in role_config. iter ( ) {
523553 let rolegroup = RoleGroupRef {
524554 cluster : ObjectRef :: from_obj ( airflow) ,
@@ -587,6 +617,26 @@ pub async fn reconcile_airflow(
587617 rolegroup : rolegroup. clone ( ) ,
588618 } ) ?;
589619
620+ let rg_configmap = build_rolegroup_config_map (
621+ airflow,
622+ & resolved_product_image,
623+ & rolegroup,
624+ rolegroup_config,
625+ & authentication_config,
626+ & authorization_config,
627+ & merged_airflow_config. logging ,
628+ & Container :: Airflow ,
629+ ) ?;
630+ cluster_resources
631+ . add ( client, rg_configmap)
632+ . await
633+ . with_context ( |_| ApplyRoleGroupConfigSnafu {
634+ rolegroup : rolegroup. clone ( ) ,
635+ } ) ?;
636+
637+ // Note: The StatefulSet needs to be applied after all ConfigMaps and Secrets it mounts
638+ // to prevent unnecessary Pod restarts.
639+ // See https://github.com/stackabletech/commons-operator/issues/111 for details.
590640 let rg_statefulset = build_server_rolegroup_statefulset (
591641 airflow,
592642 & resolved_product_image,
@@ -609,54 +659,6 @@ pub async fn reconcile_airflow(
609659 rolegroup : rolegroup. clone ( ) ,
610660 } ) ?,
611661 ) ;
612-
613- let rg_configmap = build_rolegroup_config_map (
614- airflow,
615- & resolved_product_image,
616- & rolegroup,
617- rolegroup_config,
618- & authentication_config,
619- & authorization_config,
620- & merged_airflow_config. logging ,
621- & Container :: Airflow ,
622- ) ?;
623- cluster_resources
624- . add ( client, rg_configmap)
625- . await
626- . with_context ( |_| ApplyRoleGroupConfigSnafu {
627- rolegroup : rolegroup. clone ( ) ,
628- } ) ?;
629- }
630-
631- let role_config = airflow. role_config ( & airflow_role) ;
632- if let Some ( GenericRoleConfig {
633- pod_disruption_budget : pdb,
634- } ) = role_config
635- {
636- add_pdbs ( & pdb, airflow, & airflow_role, client, & mut cluster_resources)
637- . await
638- . context ( FailedToCreatePdbSnafu ) ?;
639- }
640-
641- if let Some ( listener_class) = airflow_role. listener_class_name ( airflow) {
642- if let Some ( listener_group_name) = airflow. group_listener_name ( & airflow_role) {
643- let rg_group_listener = build_group_listener (
644- airflow,
645- build_recommended_labels (
646- airflow,
647- AIRFLOW_CONTROLLER_NAME ,
648- & resolved_product_image. app_version_label_value ,
649- role_name,
650- "none" ,
651- ) ,
652- listener_class. to_string ( ) ,
653- listener_group_name,
654- ) ?;
655- cluster_resources
656- . add ( client, rg_group_listener)
657- . await
658- . context ( ApplyGroupListenerSnafu ) ?;
659- }
660662 }
661663 }
662664
0 commit comments