Skip to content

Commit f86c7ca

Browse files
authored
[AKS] az aks create/update: Update recording rule group create logic for managed prometheus addon (Azure#8499)
1 parent 5d8c506 commit f86c7ca

File tree

4 files changed

+31
-6
lines changed

4 files changed

+31
-6
lines changed

src/aks-preview/HISTORY.rst

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,10 @@ If there is no rush to release a new version, please just add a description of t
99

1010
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.
1111

12+
13.0.0b8
13+
+++++++
14+
* `az aks create/update``: Update recording rule group create logic for managed prometheus addon
15+
1216
13.0.0b7
1317
+++++++
1418
* Add `--max-unavailable` to the `az aks nodepool add/update/upgrade` commands.
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
# --------------------------------------------------------------------------------------------
2+
# Copyright (c) Microsoft Corporation. All rights reserved.
3+
# Licensed under the MIT License. See License.txt in the project root for license information.
4+
# --------------------------------------------------------------------------------------------
5+
6+
7+
def truncate_rule_group_name(name, max_length=260):
8+
return name[:max_length]

src/aks-preview/azext_aks_preview/azuremonitormetrics/recordingrules/create.py

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,11 @@
44
# --------------------------------------------------------------------------------------------
55
import json
66
from azext_aks_preview.azuremonitormetrics.constants import ALERTS_API, RULES_API
7+
from azext_aks_preview.azuremonitormetrics.recordingrules.common import truncate_rule_group_name
78
from knack.util import CLIError
89

910

11+
# pylint: disable=line-too-long
1012
def get_recording_rules_template(cmd, azure_monitor_workspace_resource_id):
1113
from azure.cli.core.util import send_raw_request
1214
headers = ['User-Agent=azuremonitormetrics.get_recording_rules_template']
@@ -17,7 +19,18 @@ def get_recording_rules_template(cmd, azure_monitor_workspace_resource_id):
1719
)
1820
r = send_raw_request(cmd.cli_ctx, "GET", url, headers=headers)
1921
data = json.loads(r.text)
20-
return data['value']
22+
# Safely filter the templates with case-insensitive check
23+
filtered_templates = [
24+
template for template in data.get('value', [])
25+
if template.get("properties", {}).get("alertRuleType", "").lower() == "microsoft.alertsmanagement/prometheusrulegroups" and isinstance(template.get("properties", {}).get("rulesArmTemplate", {}).get("resources"), list) and all(
26+
isinstance(rule, dict) and "record" in rule and "expression" in rule
27+
for resource in template["properties"]["rulesArmTemplate"]["resources"]
28+
if resource.get("type", "").lower() == "microsoft.alertsmanagement/prometheusrulegroups"
29+
for rule in resource.get("properties", {}).get("rules", [])
30+
)
31+
]
32+
33+
return filtered_templates
2134

2235

2336
def put_rules(
@@ -71,7 +84,7 @@ def create_rules(
7184
raw_parameters,
7285
):
7386
default_rules_template = get_recording_rules_template(cmd, azure_monitor_workspace_resource_id)
74-
default_rule_group_name = f"NodeRecordingRulesRuleGroup-{cluster_name}"
87+
default_rule_group_name = truncate_rule_group_name("{0}-{1}".format(default_rules_template[0]["name"], cluster_name))
7588
default_rule_group_id = (
7689
f"/subscriptions/{cluster_subscription}/resourceGroups/{cluster_resource_group_name}/providers/"
7790
f"Microsoft.AlertsManagement/prometheusRuleGroups/{default_rule_group_name}"
@@ -90,7 +103,7 @@ def create_rules(
90103
0,
91104
)
92105

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

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

136-
default_rule_group_name = f"NodeAndKubernetesRecordingRulesRuleGroup-Win-{cluster_name}"
149+
default_rule_group_name = truncate_rule_group_name("{0}-{1}".format(default_rules_template[3]["name"], cluster_name))
137150
default_rule_group_id = (
138151
f"/subscriptions/{cluster_subscription}/resourceGroups/{cluster_resource_group_name}/providers/"
139152
f"Microsoft.AlertsManagement/prometheusRuleGroups/{default_rule_group_name}"

src/aks-preview/setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010
from setuptools import setup, find_packages
1111

12-
VERSION = "13.0.0b7"
12+
VERSION = "13.0.0b8"
1313

1414
CLASSIFIERS = [
1515
"Development Status :: 4 - Beta",

0 commit comments

Comments
 (0)