Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
6002cd2
Fix update enable cnl hlsm
carlotaarvela Mar 10, 2026
b41a130
Fix tests + lint
carlotaarvela Mar 11, 2026
2afb48c
Add unit tests
carlotaarvela Mar 12, 2026
c3ebe8e
More tests
carlotaarvela Mar 12, 2026
1dd4726
Update history
carlotaarvela Mar 12, 2026
76f815e
Fix addon and msi auth bug
carlotaarvela Mar 13, 2026
5775825
Lint
carlotaarvela Mar 13, 2026
2b5b9c8
Fix update validation + tests
carlotaarvela Mar 16, 2026
6554065
Fix disable cnls
carlotaarvela Mar 16, 2026
6552b03
Fix unit tests
carlotaarvela Mar 16, 2026
81580c2
PR comment - refactoring
carlotaarvela Mar 18, 2026
c1afbcd
Refactor
carlotaarvela Mar 18, 2026
9c429a0
Add unit and integration tests
carlotaarvela Mar 18, 2026
66b9b20
Fix integration tests
carlotaarvela Mar 19, 2026
ea1937d
Fix tests + lint
carlotaarvela Mar 19, 2026
ce5edfc
Fix linting
carlotaarvela Mar 19, 2026
767e9bb
Fix history
carlotaarvela Mar 20, 2026
cdf322b
PR comments + tests
carlotaarvela Mar 23, 2026
3c5402d
Fix tests
carlotaarvela Mar 23, 2026
097cb7c
Fix live test
carlotaarvela Mar 23, 2026
ef4202b
Fix live test
carlotaarvela Mar 24, 2026
ceb6d08
Fix tests
carlotaarvela Mar 24, 2026
ec2d69e
PR comments
carlotaarvela Mar 27, 2026
b1fa0dd
Fix history
carlotaarvela Mar 27, 2026
f21c0ea
Lint + fix unit test
carlotaarvela Mar 27, 2026
bb7ad7e
Fix missing CONST_MONITORING_ADDON_NAME_CAMELCASE import
carlotaarvela Mar 30, 2026
f81732b
Fix tests + update history
carlotaarvela Mar 31, 2026
0c20eba
PR comments
carlotaarvela Apr 1, 2026
6dc32c4
Fix lint
carlotaarvela Apr 1, 2026
7d9c8f8
Fix pending history
carlotaarvela Apr 13, 2026
dfc7b3f
PR comments
carlotaarvela Apr 14, 2026
8b869cc
Apply suggestions from code review
FumingZhang Apr 16, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions src/aks-preview/HISTORY.rst
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,11 @@ To release a new version, please select a new version number (usually plus 1 to
Pending
+++++++

20.0.0b3
+++++++
* `az aks create/update`: Fix DCR not being created or updated when `--enable-container-network-logs`, `--enable-retina-flow-logs`, or `--enable-high-log-scale-mode` flags are used, ensuring the Data Collection Rule streams (e.g. `Microsoft-ContainerLogV2-HighScale`) are kept in sync.
* `az aks update`: Add validation for `--enable-high-log-scale-mode` on the update path requiring the monitoring addon with MSI authentication to be enabled

20.0.0b2
+++++++
* `az aks nodepool update`: clean up some useless code in the update managed gpu function.
Expand Down
26 changes: 24 additions & 2 deletions src/aks-preview/azext_aks_preview/_helpers.py
Original file line number Diff line number Diff line change
Expand Up @@ -389,6 +389,27 @@ def check_is_azure_cli_core_editable_installed():
return False


def get_monitoring_addon_key(addon_profiles, monitoring_addon_name):
"""Return the canonical key for the monitoring addon, normalizing non-standard casing.

The API response may return the monitoring addon key in any casing (e.g.
"omsagent", "omsAgent", "oMSaGent"). This helper performs a
case-insensitive lookup and, when a non-standard key is found, re-keys
addon_profiles in-place so that subsequent code always uses the canonical
monitoring_addon_name (lowercase) form.
"""
if addon_profiles is None:
return monitoring_addon_name
if monitoring_addon_name in addon_profiles:
return monitoring_addon_name
target_lower = monitoring_addon_name.lower()
for key in list(addon_profiles):
if key.lower() == target_lower:
addon_profiles[monitoring_addon_name] = addon_profiles.pop(key)
return monitoring_addon_name
return monitoring_addon_name


def check_is_monitoring_addon_enabled(addons, instance):
is_monitoring_addon_enabled = False
is_monitoring_addon = False
Expand All @@ -401,10 +422,11 @@ def check_is_monitoring_addon_enabled(addons, instance):
is_monitoring_addon = True
break
addon_profiles = instance.addon_profiles or {}
monitoring_addon_key = get_monitoring_addon_key(addon_profiles, CONST_MONITORING_ADDON_NAME)
is_monitoring_addon_enabled = (
is_monitoring_addon
and CONST_MONITORING_ADDON_NAME in addon_profiles
and addon_profiles[CONST_MONITORING_ADDON_NAME].enabled
and monitoring_addon_key in addon_profiles
and addon_profiles[monitoring_addon_key].enabled
)
except Exception as ex: # pylint: disable=broad-except
logger.debug("failed to check monitoring addon enabled: %s", ex)
Expand Down
30 changes: 20 additions & 10 deletions src/aks-preview/azext_aks_preview/custom.py
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,7 @@
check_is_private_link_cluster,
get_cluster_snapshot_by_snapshot_id,
get_k8s_extension_module,
get_monitoring_addon_key,
get_nodepool_snapshot_by_snapshot_id,
print_or_merge_credentials,
process_message_for_run_command,
Expand Down Expand Up @@ -568,7 +569,7 @@ def __init__(self, location, resource_id):
)
error = None
break
except CLIError as e:
except (CLIError, HttpResponseError) as e:
error = e
else:
raise error
Expand Down Expand Up @@ -3045,22 +3046,24 @@ def aks_disable_addons(cmd, client, resource_group_name, name, addons, no_wait=F
subscription_id = get_subscription_id(cmd.cli_ctx)

try:
addon_profiles = instance.addon_profiles or {}
monitoring_addon_key = get_monitoring_addon_key(addon_profiles, CONST_MONITORING_ADDON_NAME)
if (
addons == "monitoring" and
CONST_MONITORING_ADDON_NAME in instance.addon_profiles and
instance.addon_profiles[CONST_MONITORING_ADDON_NAME].enabled and
monitoring_addon_key in addon_profiles and
addon_profiles[monitoring_addon_key].enabled and
CONST_MONITORING_USING_AAD_MSI_AUTH in
instance.addon_profiles[CONST_MONITORING_ADDON_NAME].config and
addon_profiles[monitoring_addon_key].config and
str(
instance.addon_profiles[CONST_MONITORING_ADDON_NAME].config[
addon_profiles[monitoring_addon_key].config[
CONST_MONITORING_USING_AAD_MSI_AUTH
]
).lower() == "true"
):
# remove the DCR association because otherwise the DCR can't be deleted
ensure_container_insights_for_monitoring(
cmd,
instance.addon_profiles[CONST_MONITORING_ADDON_NAME],
addon_profiles[monitoring_addon_key],
subscription_id,
resource_group_name,
name,
Expand Down Expand Up @@ -3163,22 +3166,29 @@ def aks_enable_addons(
if (
is_monitoring_addon_enabled
):
addon_profiles = instance.addon_profiles or {}
monitoring_addon_key = get_monitoring_addon_key(addon_profiles, CONST_MONITORING_ADDON_NAME)
if (
CONST_MONITORING_USING_AAD_MSI_AUTH in
instance.addon_profiles[CONST_MONITORING_ADDON_NAME].config and
addon_profiles[monitoring_addon_key].config and
str(
instance.addon_profiles[CONST_MONITORING_ADDON_NAME].config[
addon_profiles[monitoring_addon_key].config[
CONST_MONITORING_USING_AAD_MSI_AUTH
]
).lower() == "true"
):
if not msi_auth:
raise ArgumentUsageError(
"--enable-msi-auth-for-monitoring can not be used on clusters with service principal auth.")
# Auto-enable HLSM when CNL is active and HLSM wasn't explicitly set
if enable_high_log_scale_mode is None and \
(addon_profiles[monitoring_addon_key].config or {}).get(
"enableRetinaNetworkFlags", "").lower() == "true":
enable_high_log_scale_mode = True
# create a Data Collection Rule (DCR) and associate it with the cluster
ensure_container_insights_for_monitoring(
cmd,
instance.addon_profiles[CONST_MONITORING_ADDON_NAME],
addon_profiles[monitoring_addon_key],
subscription_id,
resource_group_name,
name,
Expand Down Expand Up @@ -3206,7 +3216,7 @@ def aks_enable_addons(
raise ArgumentUsageError("--ampls-resource-id can not be used without MSI auth.")
ensure_container_insights_for_monitoring(
cmd,
instance.addon_profiles[CONST_MONITORING_ADDON_NAME],
addon_profiles[monitoring_addon_key],
subscription_id,
resource_group_name,
name,
Expand Down
Loading
Loading