From 7fd77ba070e156577e2e32b320dea67df8adfca6 Mon Sep 17 00:00:00 2001 From: bragi92 Date: Mon, 5 May 2025 15:50:16 -0700 Subject: [PATCH 1/3] fix: simplify logic and enable correct recording rule groups for managed prom --- .../recordingrules/create.py | 84 ++++++------------- 1 file changed, 25 insertions(+), 59 deletions(-) diff --git a/src/azure-cli/azure/cli/command_modules/acs/azuremonitormetrics/recordingrules/create.py b/src/azure-cli/azure/cli/command_modules/acs/azuremonitormetrics/recordingrules/create.py index 3b2868b78ec..49ee66b0748 100644 --- a/src/azure-cli/azure/cli/command_modules/acs/azuremonitormetrics/recordingrules/create.py +++ b/src/azure-cli/azure/cli/command_modules/acs/azuremonitormetrics/recordingrules/create.py @@ -61,69 +61,35 @@ def put_rules(cmd, default_rule_group_id, default_rule_group_name, mac_region, c # pylint: disable=line-too-long def create_rules(cmd, cluster_subscription, cluster_resource_group_name, cluster_name, azure_monitor_workspace_resource_id, mac_region, raw_parameters): - # limit rule group name to 260 characters - # with urllib.request.urlopen("https://defaultrulessc.blob.core.windows.net/defaultrules/ManagedPrometheusDefaultRecordingRules.json") as url: - # default_rules_template = json.loads(url.read().decode()) default_rules_template = get_recording_rules_template(cmd, azure_monitor_workspace_resource_id) - default_rule_group_name = truncate_rule_group_name("{0}-{1}".format(default_rules_template[0]["name"], cluster_name)) - default_rule_group_id = "/subscriptions/{0}/resourceGroups/{1}/providers/Microsoft.AlertsManagement/prometheusRuleGroups/{2}".format( - cluster_subscription, - cluster_resource_group_name, - default_rule_group_name - ) - cluster_resource_id = \ - "/subscriptions/{0}/resourceGroups/{1}/providers/Microsoft.ContainerService/managedClusters/{2}".format( - cluster_subscription, - cluster_resource_group_name, - cluster_name - ) - url = "{0}{1}?api-version={2}".format( - cmd.cli_ctx.cloud.endpoints.resource_manager, - default_rule_group_id, - RULES_API - ) - put_rules(cmd, default_rule_group_id, default_rule_group_name, mac_region, cluster_resource_id, azure_monitor_workspace_resource_id, cluster_name, default_rules_template, url, True, 0) - default_rule_group_name = truncate_rule_group_name("{0}-{1}".format(default_rules_template[1]["name"], cluster_name)) - default_rule_group_id = "/subscriptions/{0}/resourceGroups/{1}/providers/Microsoft.AlertsManagement/prometheusRuleGroups/{2}".format( - cluster_subscription, - cluster_resource_group_name, - default_rule_group_name + cluster_resource_id = ( + f"/subscriptions/{cluster_subscription}/resourceGroups/{cluster_resource_group_name}/providers/Microsoft.ContainerService/managedClusters/{cluster_name}" ) - url = "{0}{1}?api-version={2}".format( - cmd.cli_ctx.cloud.endpoints.resource_manager, - default_rule_group_id, - RULES_API - ) - put_rules(cmd, default_rule_group_id, default_rule_group_name, mac_region, cluster_resource_id, azure_monitor_workspace_resource_id, cluster_name, default_rules_template, url, True, 1) - enable_windows_recording_rules = raw_parameters.get("enable_windows_recording_rules") + enable_windows_recording_rules = raw_parameters.get("enable_windows_recording_rules", False) - if enable_windows_recording_rules is not True: - enable_windows_recording_rules = False + for index, rule_template in enumerate(default_rules_template): + rule_name = rule_template["name"] + is_windows_rule = "win" in rule_name.lower() - default_rule_group_name = truncate_rule_group_name("{0}-{1}".format(default_rules_template[2]["name"], cluster_name)) - default_rule_group_id = "/subscriptions/{0}/resourceGroups/{1}/providers/Microsoft.AlertsManagement/prometheusRuleGroups/{2}".format( - cluster_subscription, - cluster_resource_group_name, - default_rule_group_name - ) - url = "{0}{1}?api-version={2}".format( - cmd.cli_ctx.cloud.endpoints.resource_manager, - default_rule_group_id, - RULES_API - ) - put_rules(cmd, default_rule_group_id, default_rule_group_name, mac_region, cluster_resource_id, azure_monitor_workspace_resource_id, cluster_name, default_rules_template, url, enable_windows_recording_rules, 2) + if is_windows_rule and not enable_windows_recording_rules: + continue + + rule_group_name = truncate_rule_group_name(f"{rule_template['name']}-{cluster_name}") + rule_group_id = f"/subscriptions/{cluster_subscription}/resourceGroups/{cluster_resource_group_name}/providers/Microsoft.AlertsManagement/prometheusRuleGroups/{rule_group_name}" + url = f"{cmd.cli_ctx.cloud.endpoints.resource_manager}{rule_group_id}?api-version={RULES_API}" - default_rule_group_name = truncate_rule_group_name("{0}-{1}".format(default_rules_template[3]["name"], cluster_name)) - default_rule_group_id = "/subscriptions/{0}/resourceGroups/{1}/providers/Microsoft.AlertsManagement/prometheusRuleGroups/{2}".format( - cluster_subscription, - cluster_resource_group_name, - default_rule_group_name - ) - url = "{0}{1}?api-version={2}".format( - cmd.cli_ctx.cloud.endpoints.resource_manager, - default_rule_group_id, - RULES_API - ) - put_rules(cmd, default_rule_group_id, default_rule_group_name, mac_region, cluster_resource_id, azure_monitor_workspace_resource_id, cluster_name, default_rules_template, url, enable_windows_recording_rules, 3) + put_rules( + cmd, + rule_group_id, + rule_group_name, + mac_region, + cluster_resource_id, + azure_monitor_workspace_resource_id, + cluster_name, + default_rules_template, + url, + True, + index + ) From 7eb4aad2a1681296e35f29a3af91668ce3cfc311 Mon Sep 17 00:00:00 2001 From: bragi92 Date: Mon, 12 May 2025 13:23:23 -0700 Subject: [PATCH 2/3] Update create.py --- .../acs/azuremonitormetrics/recordingrules/create.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/azure-cli/azure/cli/command_modules/acs/azuremonitormetrics/recordingrules/create.py b/src/azure-cli/azure/cli/command_modules/acs/azuremonitormetrics/recordingrules/create.py index 49ee66b0748..84793fc338c 100644 --- a/src/azure-cli/azure/cli/command_modules/acs/azuremonitormetrics/recordingrules/create.py +++ b/src/azure-cli/azure/cli/command_modules/acs/azuremonitormetrics/recordingrules/create.py @@ -73,8 +73,11 @@ def create_rules(cmd, cluster_subscription, cluster_resource_group_name, cluster rule_name = rule_template["name"] is_windows_rule = "win" in rule_name.lower() - if is_windows_rule and not enable_windows_recording_rules: - continue + # Determine whether the rule group should be enabled: + # - If the rule is a Windows rule AND windows recording rules are NOT enabled → disable the rule group (enable_rules = False) + # - If the rule is a Windows rule AND windows recording rules are enabled → enable the rule group (enable_rules = True) + # - If the rule is NOT a Windows rule (i.e., a Linux or general rule) → always enable the rule group (enable_rules = True) + enable_rules = not (is_windows_rule and not enable_windows_recording_rules) rule_group_name = truncate_rule_group_name(f"{rule_template['name']}-{cluster_name}") rule_group_id = f"/subscriptions/{cluster_subscription}/resourceGroups/{cluster_resource_group_name}/providers/Microsoft.AlertsManagement/prometheusRuleGroups/{rule_group_name}" @@ -90,6 +93,6 @@ def create_rules(cmd, cluster_subscription, cluster_resource_group_name, cluster cluster_name, default_rules_template, url, - True, + enable_rules, index ) From 96d3c3c3ad73e435863a75b98d2d68e50fb500e6 Mon Sep 17 00:00:00 2001 From: bragi92 Date: Mon, 12 May 2025 13:24:31 -0700 Subject: [PATCH 3/3] Update delete.py --- .../acs/azuremonitormetrics/recordingrules/delete.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/azure-cli/azure/cli/command_modules/acs/azuremonitormetrics/recordingrules/delete.py b/src/azure-cli/azure/cli/command_modules/acs/azuremonitormetrics/recordingrules/delete.py index d12ac5d5643..50e495f7f55 100644 --- a/src/azure-cli/azure/cli/command_modules/acs/azuremonitormetrics/recordingrules/delete.py +++ b/src/azure-cli/azure/cli/command_modules/acs/azuremonitormetrics/recordingrules/delete.py @@ -49,3 +49,15 @@ def delete_rules(cmd, cluster_subscription, cluster_resource_group_name, cluster cluster_resource_group_name, truncate_rule_group_name("NodeAndKubernetesRecordingRulesRuleGroup-Win-{0}".format(cluster_name)) ) + delete_rule( + cmd, + cluster_subscription, + cluster_resource_group_name, + truncate_rule_group_name("UXRecordingRulesRuleGroup - {0}".format(cluster_name)) + ) + delete_rule( + cmd, + cluster_subscription, + cluster_resource_group_name, + truncate_rule_group_name("UXRecordingRulesRuleGroup-Win - {0}".format(cluster_name)) + )