Skip to content

Commit

Permalink
[AKS] az aks create/update: Update recording rule group create logic …
Browse files Browse the repository at this point in the history
…for managed prometheus addon (#8499)
  • Loading branch information
bragi92 authored Feb 26, 2025
1 parent 5d8c506 commit f86c7ca
Show file tree
Hide file tree
Showing 4 changed files with 31 additions and 6 deletions.
4 changes: 4 additions & 0 deletions src/aks-preview/HISTORY.rst
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,10 @@ If there is no rush to release a new version, please just add a description of t

To release a new version, please select a new version number (usually plus 1 to last patch version, X.Y.Z -> Major.Minor.Patch, more details in `\doc <https://semver.org/>`_), and then add a new section named as the new version number in this file, the content should include the new modifications and everything from the *Pending* section. Finally, update the `VERSION` variable in `setup.py` with this new version number.

13.0.0b8
+++++++
* `az aks create/update``: Update recording rule group create logic for managed prometheus addon

13.0.0b7
+++++++
* Add `--max-unavailable` to the `az aks nodepool add/update/upgrade` commands.
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
# --------------------------------------------------------------------------------------------
# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the MIT License. See License.txt in the project root for license information.
# --------------------------------------------------------------------------------------------


def truncate_rule_group_name(name, max_length=260):
return name[:max_length]
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,11 @@
# --------------------------------------------------------------------------------------------
import json
from azext_aks_preview.azuremonitormetrics.constants import ALERTS_API, RULES_API
from azext_aks_preview.azuremonitormetrics.recordingrules.common import truncate_rule_group_name
from knack.util import CLIError


# pylint: disable=line-too-long
def get_recording_rules_template(cmd, azure_monitor_workspace_resource_id):
from azure.cli.core.util import send_raw_request
headers = ['User-Agent=azuremonitormetrics.get_recording_rules_template']
Expand All @@ -17,7 +19,18 @@ def get_recording_rules_template(cmd, azure_monitor_workspace_resource_id):
)
r = send_raw_request(cmd.cli_ctx, "GET", url, headers=headers)
data = json.loads(r.text)
return data['value']
# Safely filter the templates with case-insensitive check
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


def put_rules(
Expand Down Expand Up @@ -71,7 +84,7 @@ def create_rules(
raw_parameters,
):
default_rules_template = get_recording_rules_template(cmd, azure_monitor_workspace_resource_id)
default_rule_group_name = f"NodeRecordingRulesRuleGroup-{cluster_name}"
default_rule_group_name = truncate_rule_group_name("{0}-{1}".format(default_rules_template[0]["name"], cluster_name))
default_rule_group_id = (
f"/subscriptions/{cluster_subscription}/resourceGroups/{cluster_resource_group_name}/providers/"
f"Microsoft.AlertsManagement/prometheusRuleGroups/{default_rule_group_name}"
Expand All @@ -90,7 +103,7 @@ def create_rules(
0,
)

default_rule_group_name = f"KubernetesRecordingRulesRuleGroup-{cluster_name}"
default_rule_group_name = truncate_rule_group_name("{0}-{1}".format(default_rules_template[1]["name"], cluster_name))
default_rule_group_id = (
f"/subscriptions/{cluster_subscription}/resourceGroups/{cluster_resource_group_name}/providers/"
f"Microsoft.AlertsManagement/prometheusRuleGroups/{default_rule_group_name}"
Expand All @@ -114,7 +127,7 @@ def create_rules(
if enable_windows_recording_rules is not True:
enable_windows_recording_rules = False

default_rule_group_name = f"NodeRecordingRulesRuleGroup-Win-{cluster_name}"
default_rule_group_name = truncate_rule_group_name("{0}-{1}".format(default_rules_template[2]["name"], cluster_name))
default_rule_group_id = (
f"/subscriptions/{cluster_subscription}/resourceGroups/{cluster_resource_group_name}/providers/"
f"Microsoft.AlertsManagement/prometheusRuleGroups/{default_rule_group_name}"
Expand All @@ -133,7 +146,7 @@ def create_rules(
2,
)

default_rule_group_name = f"NodeAndKubernetesRecordingRulesRuleGroup-Win-{cluster_name}"
default_rule_group_name = truncate_rule_group_name("{0}-{1}".format(default_rules_template[3]["name"], cluster_name))
default_rule_group_id = (
f"/subscriptions/{cluster_subscription}/resourceGroups/{cluster_resource_group_name}/providers/"
f"Microsoft.AlertsManagement/prometheusRuleGroups/{default_rule_group_name}"
Expand Down
2 changes: 1 addition & 1 deletion src/aks-preview/setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@

from setuptools import setup, find_packages

VERSION = "13.0.0b7"
VERSION = "13.0.0b8"

CLASSIFIERS = [
"Development Status :: 4 - Beta",
Expand Down

0 comments on commit f86c7ca

Please sign in to comment.