From dedc22649a6c8172f02f9a4e146ef0f7ee27ea14 Mon Sep 17 00:00:00 2001 From: Fuming Zhang Date: Mon, 30 Mar 2026 10:36:04 +1100 Subject: [PATCH 1/2] fix --- .../managed_cluster_decorator.py | 40 ++++++++++--------- .../latest/test_managed_cluster_decorator.py | 11 ++--- 2 files changed, 27 insertions(+), 24 deletions(-) diff --git a/src/aks-preview/azext_aks_preview/managed_cluster_decorator.py b/src/aks-preview/azext_aks_preview/managed_cluster_decorator.py index af1d1ff1615..e91cc201ec5 100644 --- a/src/aks-preview/azext_aks_preview/managed_cluster_decorator.py +++ b/src/aks-preview/azext_aks_preview/managed_cluster_decorator.py @@ -7597,21 +7597,9 @@ def _setup_azure_monitor_logs(self, mc: ManagedCluster) -> None: mc.addon_profiles = {} CONST_MONITORING_ADDON_NAME = addon_consts.get("CONST_MONITORING_ADDON_NAME") - - # Detect existing key (could be "omsagent" or "omsAgent" from Azure API) - existing_key = None - if CONST_MONITORING_ADDON_NAME in mc.addon_profiles: - existing_key = CONST_MONITORING_ADDON_NAME - elif CONST_MONITORING_ADDON_NAME_CAMELCASE in mc.addon_profiles: - existing_key = CONST_MONITORING_ADDON_NAME_CAMELCASE - - if existing_key: - addon_profile = mc.addon_profiles[existing_key] - else: - addon_profile = self.models.ManagedClusterAddonProfile(enabled=False) - existing_key = CONST_MONITORING_ADDON_NAME - - addon_profile.enabled = True + CONST_MONITORING_LOG_ANALYTICS_WORKSPACE_RESOURCE_ID = addon_consts.get( + "CONST_MONITORING_LOG_ANALYTICS_WORKSPACE_RESOURCE_ID") + CONST_MONITORING_USING_AAD_MSI_AUTH = addon_consts.get("CONST_MONITORING_USING_AAD_MSI_AUTH") # Get or create workspace resource ID workspace_resource_id = self.context.raw_param.get("workspace_resource_id") @@ -7628,16 +7616,30 @@ def _setup_azure_monitor_logs(self, mc: ManagedCluster) -> None: sanitize_func = self.context.external_functions.sanitize_loganalytics_ws_resource_id workspace_resource_id = sanitize_func(workspace_resource_id) - CONST_MONITORING_LOG_ANALYTICS_WORKSPACE_RESOURCE_ID = addon_consts.get( - "CONST_MONITORING_LOG_ANALYTICS_WORKSPACE_RESOURCE_ID") - CONST_MONITORING_USING_AAD_MSI_AUTH = addon_consts.get("CONST_MONITORING_USING_AAD_MSI_AUTH") - + # Call get_enable_msi_auth_for_monitoring BEFORE detecting the existing key, + # because the parent's implementation may normalize addon_profiles keys in-place + # (e.g., renaming "omsAgent" to "omsagent"). enable_msi_auth_bool = self.context.get_enable_msi_auth_for_monitoring() if enable_msi_auth_bool: enable_msi_auth = "true" else: enable_msi_auth = "false" + # Detect existing key (could be "omsagent" or "omsAgent" from Azure API) + existing_key = None + if CONST_MONITORING_ADDON_NAME in mc.addon_profiles: + existing_key = CONST_MONITORING_ADDON_NAME + elif CONST_MONITORING_ADDON_NAME_CAMELCASE in mc.addon_profiles: + existing_key = CONST_MONITORING_ADDON_NAME_CAMELCASE + + if existing_key: + addon_profile = mc.addon_profiles[existing_key] + else: + addon_profile = self.models.ManagedClusterAddonProfile(enabled=False) + existing_key = CONST_MONITORING_ADDON_NAME + + addon_profile.enabled = True + new_config = { CONST_MONITORING_LOG_ANALYTICS_WORKSPACE_RESOURCE_ID: workspace_resource_id, CONST_MONITORING_USING_AAD_MSI_AUTH: enable_msi_auth diff --git a/src/aks-preview/azext_aks_preview/tests/latest/test_managed_cluster_decorator.py b/src/aks-preview/azext_aks_preview/tests/latest/test_managed_cluster_decorator.py index 3f0a16b3ff7..733eabcddd3 100644 --- a/src/aks-preview/azext_aks_preview/tests/latest/test_managed_cluster_decorator.py +++ b/src/aks-preview/azext_aks_preview/tests/latest/test_managed_cluster_decorator.py @@ -10922,12 +10922,13 @@ def test_setup_azure_monitor_logs_with_omsagent_camelcase(self): # Call _setup_azure_monitor_logs dec_1._setup_azure_monitor_logs(mc_1) - # Verify: Should update existing omsAgent key (not create omsagent lowercase) - self.assertIn("omsAgent", mc_1.addon_profiles) - self.assertNotIn("omsagent", mc_1.addon_profiles) # Should NOT create duplicate - self.assertTrue(mc_1.addon_profiles["omsAgent"].enabled) + # Verify: The parent class normalizes addon keys to lowercase in-place, + # so "omsAgent" becomes "omsagent". The key point is no duplicate is created. + self.assertIn("omsagent", mc_1.addon_profiles) + self.assertEqual(len([k for k in mc_1.addon_profiles if k.lower() == "omsagent"]), 1) # No duplicate + self.assertTrue(mc_1.addon_profiles["omsagent"].enabled) self.assertEqual( - mc_1.addon_profiles["omsAgent"].config["logAnalyticsWorkspaceResourceID"], + mc_1.addon_profiles["omsagent"].config["logAnalyticsWorkspaceResourceID"], "/subscriptions/test/resourceGroups/test/providers/Microsoft.OperationalInsights/workspaces/test-workspace" ) From 5855b2c85a6ccf54392bd5e5c81e14e92930809d Mon Sep 17 00:00:00 2001 From: Fuming Zhang Date: Mon, 30 Mar 2026 10:41:19 +1100 Subject: [PATCH 2/2] update history --- src/aks-preview/HISTORY.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/src/aks-preview/HISTORY.rst b/src/aks-preview/HISTORY.rst index 79b399496a8..ba2aa58f128 100644 --- a/src/aks-preview/HISTORY.rst +++ b/src/aks-preview/HISTORY.rst @@ -11,6 +11,7 @@ To release a new version, please select a new version number (usually plus 1 to Pending +++++++ +* Fix monitoring addon key casing compatibility with azure-cli/acs 19.0.0b28 +++++++