@@ -8358,6 +8358,24 @@ def update_network_plugin_settings(self, mc: ManagedCluster) -> ManagedCluster:
83588358
83598359 return mc
83608360
8361+ def _ensure_acns_security (self , acns ):
8362+ """Lazily initialize the ACNS security sub-object."""
8363+ if acns .security is None :
8364+ acns .security = self .models .AdvancedNetworkingSecurity ()
8365+ return acns .security
8366+
8367+ def _ensure_acns_observability (self , acns ):
8368+ """Lazily initialize the ACNS observability sub-object."""
8369+ if acns .observability is None :
8370+ acns .observability = self .models .AdvancedNetworkingObservability ()
8371+ return acns .observability
8372+
8373+ def _ensure_acns_performance (self , acns ):
8374+ """Lazily initialize the ACNS performance sub-object."""
8375+ if acns .performance is None :
8376+ acns .performance = self .models .AdvancedNetworkingPerformance ()
8377+ return acns .performance
8378+
83618379 def update_network_profile_advanced_networking (self , mc : ManagedCluster ) -> ManagedCluster :
83628380 """Update advanced networking settings of network profile for the ManagedCluster object.
83638381
@@ -8367,58 +8385,65 @@ def update_network_profile_advanced_networking(self, mc: ManagedCluster) -> Mana
83678385 acns_advanced_networkpolicies = self .context .get_acns_advanced_networkpolicies ()
83688386 (acns_enabled , acns_observability , acns_security , acns_perf_enabled ) = self .context .get_acns_enablement_with_perf ()
83698387 acns_transit_encryption = self .context .get_acns_transit_encryption_type ()
8370- if acns_enabled is not None :
8371- acns = self .models .AdvancedNetworking (
8372- enabled = acns_enabled ,
8373- )
8374- if acns_observability is not None :
8375- acns .observability = self .models .AdvancedNetworkingObservability (
8376- enabled = acns_observability ,
8377- )
8378- if acns_security is not None :
8379- acns .security = self .models .AdvancedNetworkingSecurity (
8380- enabled = acns_security ,
8381- )
8382- if acns_advanced_networkpolicies is not None :
8383- if acns .security is None :
8384- acns .security = self .models .AdvancedNetworkingSecurity (
8385- advanced_network_policies = acns_advanced_networkpolicies
8386- )
8387- else :
8388- acns .security .advanced_network_policies = acns_advanced_networkpolicies
8389- if acns_perf_enabled is not None :
8390- acns .performance = self .models .AdvancedNetworkingPerformance (
8391- acceleration_mode = self .context .get_acns_datapath_acceleration_mode (),
8392- )
8393- elif not acns_enabled :
8394- acns .performance = self .models .AdvancedNetworkingPerformance (
8395- acceleration_mode = CONST_ACNS_DATAPATH_ACCELERATION_MODE_NONE ,
8396- )
8397- elif mc .network_profile .advanced_networking is not None :
8398- acns .performance = mc .network_profile .advanced_networking .performance
83998388
8400- if acns_enabled is not None :
8401- if acns_transit_encryption is not None :
8402- if acns .security is None :
8403- acns .security = self .models .AdvancedNetworkingSecurity ()
8404- acns .security .transit_encryption = self .models .AdvancedNetworkingSecurityTransitEncryption (
8405- type = acns_transit_encryption ,
8406- )
8407- mc .network_profile .advanced_networking = acns
8408- elif acns_transit_encryption is not None :
8389+ if acns_enabled is None and acns_transit_encryption is not None :
8390+ # Transit encryption update without --enable-acns requires ACNS already enabled
84098391 if (mc .network_profile .advanced_networking is None or
84108392 not mc .network_profile .advanced_networking .enabled ):
84118393 raise MutuallyExclusiveArgumentError (
84128394 "--acns-transit-encryption-type requires ACNS to be enabled on the cluster. "
84138395 "Use --enable-acns together with --acns-transit-encryption-type."
84148396 )
8415- if mc .network_profile .advanced_networking .security is None :
8416- mc .network_profile .advanced_networking .security = self .models .AdvancedNetworkingSecurity ()
8417- mc .network_profile .advanced_networking .security .transit_encryption = (
8418- self .models .AdvancedNetworkingSecurityTransitEncryption (
8419- type = acns_transit_encryption ,
8420- )
8397+ self ._ensure_acns_security (mc .network_profile .advanced_networking ).transit_encryption = (
8398+ self .models .AdvancedNetworkingSecurityTransitEncryption (type = acns_transit_encryption )
8399+ )
8400+ return mc
8401+
8402+ if acns_enabled is None :
8403+ return mc
8404+
8405+ # Preserve existing advanced_networking settings, only overwrite fields the user specified
8406+ if mc .network_profile .advanced_networking is None :
8407+ mc .network_profile .advanced_networking = self .models .AdvancedNetworking ()
8408+ acns = mc .network_profile .advanced_networking
8409+
8410+ acns .enabled = acns_enabled
8411+
8412+ # When disabling ACNS, explicitly disable sub-features for a consistent payload
8413+ if not acns_enabled :
8414+ if acns .observability is not None :
8415+ acns .observability .enabled = False
8416+ if acns .security is not None :
8417+ acns .security .enabled = False
8418+ if acns_perf_enabled is None :
8419+ self ._ensure_acns_performance (acns ).acceleration_mode = (
8420+ CONST_ACNS_DATAPATH_ACCELERATION_MODE_NONE
8421+ )
8422+
8423+ # When enabling ACNS, default observability and security to enabled
8424+ # (matching create-path behavior). The RP rejects enabling ACNS when both
8425+ # observability and security are disabled, so we must set safe defaults.
8426+ if acns_enabled :
8427+ if acns_observability is None :
8428+ self ._ensure_acns_observability (acns ).enabled = True
8429+ if acns_security is None :
8430+ self ._ensure_acns_security (acns ).enabled = True
8431+
8432+ if acns_observability is not None :
8433+ self ._ensure_acns_observability (acns ).enabled = acns_observability
8434+ if acns_security is not None :
8435+ self ._ensure_acns_security (acns ).enabled = acns_security
8436+ if acns_advanced_networkpolicies is not None :
8437+ self ._ensure_acns_security (acns ).advanced_network_policies = acns_advanced_networkpolicies
8438+ if acns_transit_encryption is not None :
8439+ self ._ensure_acns_security (acns ).transit_encryption = (
8440+ self .models .AdvancedNetworkingSecurityTransitEncryption (type = acns_transit_encryption )
84218441 )
8442+ if acns_perf_enabled is not None :
8443+ self ._ensure_acns_performance (acns ).acceleration_mode = (
8444+ self .context .get_acns_datapath_acceleration_mode ()
8445+ )
8446+
84228447 return mc
84238448
84248449 def update_monitoring_profile_flow_logs (self , mc : ManagedCluster ) -> ManagedCluster :
0 commit comments