@@ -104,7 +104,7 @@ pub type AirflowExecutorCommonConfiguration =
104104pub type AirflowWebserverRoleType =
105105 Role < AirflowConfigFragment , AirflowConfigOverrides , v1alpha2:: WebserverRoleConfig > ;
106106
107- #[ derive( Clone , Debug , Default , Deserialize , Eq , JsonSchema , PartialEq , Serialize ) ]
107+ #[ derive( Clone , Debug , Default , Deserialize , Eq , JsonSchema , Merge , PartialEq , Serialize ) ]
108108#[ serde( rename_all = "camelCase" ) ]
109109pub struct AirflowConfigOverrides {
110110 #[ serde( default , rename = "webserver_config.py" ) ]
@@ -446,29 +446,27 @@ impl v1alpha2::AirflowCluster {
446446 rolegroup_name : & str ,
447447 ) -> Result < MergedOverrides , Error > {
448448 let role_config = role. role_config ( self ) ?;
449+ let rolegroup = role_config. role_groups . get ( rolegroup_name) ;
449450
451+ // env overrides: role first, role-group extended on top (role-group wins)
450452 let mut env_overrides = role_config. config . env_overrides . clone ( ) ;
451- // role-level webserver_config.py overrides; role-group overrides are extended on top below
452- // (role-group wins). Reads the v2 KeyValueConfigOverrides map directly, like hdfs/trino.
453- let mut file_overrides = role_config
454- . config
455- . config_overrides
456- . webserver_config_py
457- . overrides
458- . clone ( ) ;
459-
460- if let Some ( rg) = role_config. role_groups . get ( rolegroup_name) {
453+ if let Some ( rg) = rolegroup {
461454 env_overrides. extend ( rg. config . env_overrides . clone ( ) ) ;
462- file_overrides. extend (
463- rg. config
464- . config_overrides
465- . webserver_config_py
466- . overrides
467- . clone ( ) ,
468- ) ;
469455 }
470456
471- let config_file_overrides = file_overrides
457+ // file overrides: role-group merged over role (role-group wins) via the `Merge`
458+ // impl on AirflowConfigOverrides. A role-group `null` inherits the role value
459+ // rather than unsetting it. Mirrors hdfs-operator.
460+
461+ let mut config_overrides = rolegroup
462+ . map ( |rg| rg. config . config_overrides . clone ( ) )
463+ . unwrap_or_default ( ) ;
464+
465+ config_overrides. merge ( & role_config. config . config_overrides ) ;
466+
467+ let config_file_overrides = config_overrides
468+ . webserver_config_py
469+ . overrides
472470 . into_iter ( )
473471 . filter_map ( |( k, v) | v. map ( |v| ( k, v) ) )
474472 . collect ( ) ;
0 commit comments