From 3e18402edca115aed0fbd1a0f8df110f377dc41b Mon Sep 17 00:00:00 2001 From: bragi92 Date: Mon, 12 May 2025 15:08:15 -0700 Subject: [PATCH 1/8] Update setup.py --- src/k8s-extension/setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/k8s-extension/setup.py b/src/k8s-extension/setup.py index f7a6ed72b29..c46e1aca890 100644 --- a/src/k8s-extension/setup.py +++ b/src/k8s-extension/setup.py @@ -33,7 +33,7 @@ # TODO: Add any additional SDK dependencies here DEPENDENCIES = [] -VERSION = "1.6.4" +VERSION = "1.6.5" with open("README.rst", "r", encoding="utf-8") as f: README = f.read() From 89a3e8eea47296a8819db5c2a65ff11ce2f24011 Mon Sep 17 00:00:00 2001 From: bragi92 Date: Mon, 12 May 2025 15:09:00 -0700 Subject: [PATCH 2/8] Update HISTORY.rst --- src/k8s-extension/HISTORY.rst | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/k8s-extension/HISTORY.rst b/src/k8s-extension/HISTORY.rst index 829c9a9fb4c..a40a7d29a41 100644 --- a/src/k8s-extension/HISTORY.rst +++ b/src/k8s-extension/HISTORY.rst @@ -2,6 +2,9 @@ Release History =============== +1.6.5 +++++++++++++++++++ +* microsoft.azuremonitor.containers.metrics: fix: simplify logic and enable correct recording rule groups for managed prom 1.6.4 ++++++++++++++++++ From 64ae134e2ab2e12a1ec9dad614743b500b92d74f Mon Sep 17 00:00:00 2001 From: bragi92 Date: Mon, 12 May 2025 15:12:23 -0700 Subject: [PATCH 3/8] Update delete.py --- .../azuremonitormetrics/recordingrules/delete.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/k8s-extension/azext_k8s_extension/partner_extensions/azuremonitormetrics/recordingrules/delete.py b/src/k8s-extension/azext_k8s_extension/partner_extensions/azuremonitormetrics/recordingrules/delete.py index ac945fbaed8..bd50143f6b6 100644 --- a/src/k8s-extension/azext_k8s_extension/partner_extensions/azuremonitormetrics/recordingrules/delete.py +++ b/src/k8s-extension/azext_k8s_extension/partner_extensions/azuremonitormetrics/recordingrules/delete.py @@ -35,3 +35,9 @@ def delete_rules(cmd, cluster_subscription, cluster_resource_group_name, cluster cluster_resource_group_name, "KubernetesRecordingRulesRuleGroup-{0}".format(cluster_name) ) + delete_rule( + cmd, + cluster_subscription, + cluster_resource_group_name, + truncate_rule_group_name("UXRecordingRulesRuleGroup - {0}".format(cluster_name)) + ) From aba418e30fc51348cf4289914d8138b709035b06 Mon Sep 17 00:00:00 2001 From: bragi92 Date: Mon, 12 May 2025 15:18:58 -0700 Subject: [PATCH 4/8] Update create.py --- .../recordingrules/create.py | 69 +++++++++++-------- 1 file changed, 40 insertions(+), 29 deletions(-) diff --git a/src/k8s-extension/azext_k8s_extension/partner_extensions/azuremonitormetrics/recordingrules/create.py b/src/k8s-extension/azext_k8s_extension/partner_extensions/azuremonitormetrics/recordingrules/create.py index 5f022b6bb88..dd38491285b 100644 --- a/src/k8s-extension/azext_k8s_extension/partner_extensions/azuremonitormetrics/recordingrules/create.py +++ b/src/k8s-extension/azext_k8s_extension/partner_extensions/azuremonitormetrics/recordingrules/create.py @@ -3,8 +3,9 @@ # Licensed under the MIT License. See License.txt in the project root for license information. # -------------------------------------------------------------------------------------------- import json -from ..constants import ALERTS_API, RULES_API from knack.util import CLIError +from ..constants import ALERTS_API, RULES_API +from azure.cli.command_modules.acs.azuremonitormetrics.recordingrules.common import truncate_rule_group_name # pylint: disable=line-too-long @@ -15,7 +16,18 @@ def get_recording_rules_template(cmd, azure_monitor_workspace_resource_id): url = f"{armendpoint}{azure_monitor_workspace_resource_id}/providers/microsoft.alertsManagement/alertRuleRecommendations?api-version={ALERTS_API}" r = send_raw_request(cmd.cli_ctx, "GET", url, headers=headers) data = json.loads(r.text) - return data['value'] + + filtered_templates = [ + template for template in data.get('value', []) + if template.get("properties", {}).get("alertRuleType", "").lower() == "microsoft.alertsmanagement/prometheusrulegroups" and isinstance(template.get("properties", {}).get("rulesArmTemplate", {}).get("resources"), list) and all( + isinstance(rule, dict) and "record" in rule and "expression" in rule + for resource in template["properties"]["rulesArmTemplate"]["resources"] + if resource.get("type", "").lower() == "microsoft.alertsmanagement/prometheusrulegroups" + for rule in resource.get("properties", {}).get("rules", []) + ) + ] + + return filtered_templates # pylint: disable=line-too-long @@ -39,8 +51,7 @@ def put_rules(cmd, default_rule_group_id, default_rule_group_name, mac_region, a for _ in range(3): try: headers = ['User-Agent=arc-azuremonitormetrics.put_rules.' + default_rule_group_name] - send_raw_request(cmd.cli_ctx, "PUT", url, - body=body, headers=headers) + send_raw_request(cmd.cli_ctx, "PUT", url, body=body, headers=headers) break except CLIError as e: error = e @@ -49,30 +60,30 @@ def put_rules(cmd, default_rule_group_id, default_rule_group_name, mac_region, a # pylint: disable=line-too-long -def create_rules(cmd, cluster_subscription, cluster_resource_group_name, cluster_name, azure_monitor_workspace_resource_id, mac_region): +def create_rules(cmd, cluster_subscription, cluster_resource_group_name, cluster_name, azure_monitor_workspace_resource_id, mac_region, raw_parameters): default_rules_template = get_recording_rules_template(cmd, azure_monitor_workspace_resource_id) - default_rule_group_name = "NodeRecordingRulesRuleGroup-{0}".format(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, azure_monitor_workspace_resource_id, cluster_name, default_rules_template, url, True, 0) - default_rule_group_name = "KubernetesRecordingRulesRuleGroup-{0}".format(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, azure_monitor_workspace_resource_id, cluster_name, default_rules_template, url, True, 1) + enable_windows_recording_rules = raw_parameters.get("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() + + 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}" + url = f"{cmd.cli_ctx.cloud.endpoints.resource_manager}{rule_group_id}?api-version={RULES_API}" + + put_rules( + cmd, + rule_group_id, + rule_group_name, + mac_region, + azure_monitor_workspace_resource_id, + cluster_name, + default_rules_template, + url, + enable_rules, + index + ) From bbf507900c6bce46c07527a9881cdd6b96ca707c Mon Sep 17 00:00:00 2001 From: Kaveesh Dubey Date: Mon, 12 May 2025 15:37:32 -0700 Subject: [PATCH 5/8] . --- .../azuremonitormetrics/recordingrules/create.py | 3 +-- .../azuremonitormetrics/recordingrules/delete.py | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/k8s-extension/azext_k8s_extension/partner_extensions/azuremonitormetrics/recordingrules/create.py b/src/k8s-extension/azext_k8s_extension/partner_extensions/azuremonitormetrics/recordingrules/create.py index dd38491285b..2a1e63a6936 100644 --- a/src/k8s-extension/azext_k8s_extension/partner_extensions/azuremonitormetrics/recordingrules/create.py +++ b/src/k8s-extension/azext_k8s_extension/partner_extensions/azuremonitormetrics/recordingrules/create.py @@ -5,7 +5,6 @@ import json from knack.util import CLIError from ..constants import ALERTS_API, RULES_API -from azure.cli.command_modules.acs.azuremonitormetrics.recordingrules.common import truncate_rule_group_name # pylint: disable=line-too-long @@ -71,7 +70,7 @@ def create_rules(cmd, cluster_subscription, cluster_resource_group_name, cluster 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_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}" diff --git a/src/k8s-extension/azext_k8s_extension/partner_extensions/azuremonitormetrics/recordingrules/delete.py b/src/k8s-extension/azext_k8s_extension/partner_extensions/azuremonitormetrics/recordingrules/delete.py index bd50143f6b6..c02bf197d06 100644 --- a/src/k8s-extension/azext_k8s_extension/partner_extensions/azuremonitormetrics/recordingrules/delete.py +++ b/src/k8s-extension/azext_k8s_extension/partner_extensions/azuremonitormetrics/recordingrules/delete.py @@ -39,5 +39,5 @@ def delete_rules(cmd, cluster_subscription, cluster_resource_group_name, cluster cmd, cluster_subscription, cluster_resource_group_name, - truncate_rule_group_name("UXRecordingRulesRuleGroup - {0}".format(cluster_name)) + "UXRecordingRulesRuleGroup - {0}".format(cluster_name) ) From 2cedec70004980850786ef7129def211094d9a67 Mon Sep 17 00:00:00 2001 From: Kaveesh Dubey Date: Tue, 13 May 2025 14:20:33 -0700 Subject: [PATCH 6/8] fixes --- .../azuremonitormetrics/recordingrules/create.py | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/src/k8s-extension/azext_k8s_extension/partner_extensions/azuremonitormetrics/recordingrules/create.py b/src/k8s-extension/azext_k8s_extension/partner_extensions/azuremonitormetrics/recordingrules/create.py index 2a1e63a6936..58e31757904 100644 --- a/src/k8s-extension/azext_k8s_extension/partner_extensions/azuremonitormetrics/recordingrules/create.py +++ b/src/k8s-extension/azext_k8s_extension/partner_extensions/azuremonitormetrics/recordingrules/create.py @@ -59,17 +59,10 @@ def put_rules(cmd, default_rule_group_id, default_rule_group_name, mac_region, a # 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): +def create_rules(cmd, cluster_subscription, cluster_resource_group_name, cluster_name, azure_monitor_workspace_resource_id, mac_region): default_rules_template = get_recording_rules_template(cmd, azure_monitor_workspace_resource_id) - enable_windows_recording_rules = raw_parameters.get("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() - - enable_rules = not (is_windows_rule and not enable_windows_recording_rules) - 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}" @@ -83,6 +76,6 @@ def create_rules(cmd, cluster_subscription, cluster_resource_group_name, cluster cluster_name, default_rules_template, url, - enable_rules, + True, index ) From d71e1c2c51e57f42f19c62cf3082511c9160676d Mon Sep 17 00:00:00 2001 From: Kaveesh Dubey Date: Tue, 13 May 2025 14:29:53 -0700 Subject: [PATCH 7/8] stop windows --- .../azuremonitormetrics/recordingrules/create.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/k8s-extension/azext_k8s_extension/partner_extensions/azuremonitormetrics/recordingrules/create.py b/src/k8s-extension/azext_k8s_extension/partner_extensions/azuremonitormetrics/recordingrules/create.py index 58e31757904..59f499f40ec 100644 --- a/src/k8s-extension/azext_k8s_extension/partner_extensions/azuremonitormetrics/recordingrules/create.py +++ b/src/k8s-extension/azext_k8s_extension/partner_extensions/azuremonitormetrics/recordingrules/create.py @@ -63,6 +63,13 @@ def create_rules(cmd, cluster_subscription, cluster_resource_group_name, cluster default_rules_template = get_recording_rules_template(cmd, azure_monitor_workspace_resource_id) for index, rule_template in enumerate(default_rules_template): + rule_name = rule_template["name"] + is_windows_rule = "win" in rule_name.lower() + + # Skip any recording rules as ARC metrics extension doesn't have windows support + if is_windows_rule: + continue + 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}" From bddac36c15a56c3283d2f4d25c63c47f9ec9b2a5 Mon Sep 17 00:00:00 2001 From: Kaveesh Dubey Date: Tue, 13 May 2025 14:36:08 -0700 Subject: [PATCH 8/8] style --- .../azuremonitormetrics/recordingrules/create.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/k8s-extension/azext_k8s_extension/partner_extensions/azuremonitormetrics/recordingrules/create.py b/src/k8s-extension/azext_k8s_extension/partner_extensions/azuremonitormetrics/recordingrules/create.py index 59f499f40ec..65f420a5c4a 100644 --- a/src/k8s-extension/azext_k8s_extension/partner_extensions/azuremonitormetrics/recordingrules/create.py +++ b/src/k8s-extension/azext_k8s_extension/partner_extensions/azuremonitormetrics/recordingrules/create.py @@ -18,6 +18,7 @@ def get_recording_rules_template(cmd, azure_monitor_workspace_resource_id): filtered_templates = [ template for template in data.get('value', []) + # pylint: disable=line-too-long if template.get("properties", {}).get("alertRuleType", "").lower() == "microsoft.alertsmanagement/prometheusrulegroups" and isinstance(template.get("properties", {}).get("rulesArmTemplate", {}).get("resources"), list) and all( isinstance(rule, dict) and "record" in rule and "expression" in rule for resource in template["properties"]["rulesArmTemplate"]["resources"]