Skip to content

Commit aba418e

Browse files
authored
Update create.py
1 parent 64ae134 commit aba418e

1 file changed

Lines changed: 40 additions & 29 deletions

File tree

  • src/k8s-extension/azext_k8s_extension/partner_extensions/azuremonitormetrics/recordingrules

src/k8s-extension/azext_k8s_extension/partner_extensions/azuremonitormetrics/recordingrules/create.py

Lines changed: 40 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,9 @@
33
# Licensed under the MIT License. See License.txt in the project root for license information.
44
# --------------------------------------------------------------------------------------------
55
import json
6-
from ..constants import ALERTS_API, RULES_API
76
from knack.util import CLIError
7+
from ..constants import ALERTS_API, RULES_API
8+
from azure.cli.command_modules.acs.azuremonitormetrics.recordingrules.common import truncate_rule_group_name
89

910

1011
# pylint: disable=line-too-long
@@ -15,7 +16,18 @@ def get_recording_rules_template(cmd, azure_monitor_workspace_resource_id):
1516
url = f"{armendpoint}{azure_monitor_workspace_resource_id}/providers/microsoft.alertsManagement/alertRuleRecommendations?api-version={ALERTS_API}"
1617
r = send_raw_request(cmd.cli_ctx, "GET", url, headers=headers)
1718
data = json.loads(r.text)
18-
return data['value']
19+
20+
filtered_templates = [
21+
template for template in data.get('value', [])
22+
if template.get("properties", {}).get("alertRuleType", "").lower() == "microsoft.alertsmanagement/prometheusrulegroups" and isinstance(template.get("properties", {}).get("rulesArmTemplate", {}).get("resources"), list) and all(
23+
isinstance(rule, dict) and "record" in rule and "expression" in rule
24+
for resource in template["properties"]["rulesArmTemplate"]["resources"]
25+
if resource.get("type", "").lower() == "microsoft.alertsmanagement/prometheusrulegroups"
26+
for rule in resource.get("properties", {}).get("rules", [])
27+
)
28+
]
29+
30+
return filtered_templates
1931

2032

2133
# pylint: disable=line-too-long
@@ -39,8 +51,7 @@ def put_rules(cmd, default_rule_group_id, default_rule_group_name, mac_region, a
3951
for _ in range(3):
4052
try:
4153
headers = ['User-Agent=arc-azuremonitormetrics.put_rules.' + default_rule_group_name]
42-
send_raw_request(cmd.cli_ctx, "PUT", url,
43-
body=body, headers=headers)
54+
send_raw_request(cmd.cli_ctx, "PUT", url, body=body, headers=headers)
4455
break
4556
except CLIError as e:
4657
error = e
@@ -49,30 +60,30 @@ def put_rules(cmd, default_rule_group_id, default_rule_group_name, mac_region, a
4960

5061

5162
# pylint: disable=line-too-long
52-
def create_rules(cmd, cluster_subscription, cluster_resource_group_name, cluster_name, azure_monitor_workspace_resource_id, mac_region):
63+
def create_rules(cmd, cluster_subscription, cluster_resource_group_name, cluster_name, azure_monitor_workspace_resource_id, mac_region, raw_parameters):
5364
default_rules_template = get_recording_rules_template(cmd, azure_monitor_workspace_resource_id)
54-
default_rule_group_name = "NodeRecordingRulesRuleGroup-{0}".format(cluster_name)
55-
default_rule_group_id = "/subscriptions/{0}/resourceGroups/{1}/providers/Microsoft.AlertsManagement/prometheusRuleGroups/{2}".format(
56-
cluster_subscription,
57-
cluster_resource_group_name,
58-
default_rule_group_name
59-
)
60-
url = "{0}{1}?api-version={2}".format(
61-
cmd.cli_ctx.cloud.endpoints.resource_manager,
62-
default_rule_group_id,
63-
RULES_API
64-
)
65-
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)
6665

67-
default_rule_group_name = "KubernetesRecordingRulesRuleGroup-{0}".format(cluster_name)
68-
default_rule_group_id = "/subscriptions/{0}/resourceGroups/{1}/providers/Microsoft.AlertsManagement/prometheusRuleGroups/{2}".format(
69-
cluster_subscription,
70-
cluster_resource_group_name,
71-
default_rule_group_name
72-
)
73-
url = "{0}{1}?api-version={2}".format(
74-
cmd.cli_ctx.cloud.endpoints.resource_manager,
75-
default_rule_group_id,
76-
RULES_API
77-
)
78-
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)
66+
enable_windows_recording_rules = raw_parameters.get("enable_windows_recording_rules", False)
67+
68+
for index, rule_template in enumerate(default_rules_template):
69+
rule_name = rule_template["name"]
70+
is_windows_rule = "win" in rule_name.lower()
71+
72+
enable_rules = not (is_windows_rule and not enable_windows_recording_rules)
73+
74+
rule_group_name = truncate_rule_group_name(f"{rule_template['name']}-{cluster_name}")
75+
rule_group_id = f"/subscriptions/{cluster_subscription}/resourceGroups/{cluster_resource_group_name}/providers/Microsoft.AlertsManagement/prometheusRuleGroups/{rule_group_name}"
76+
url = f"{cmd.cli_ctx.cloud.endpoints.resource_manager}{rule_group_id}?api-version={RULES_API}"
77+
78+
put_rules(
79+
cmd,
80+
rule_group_id,
81+
rule_group_name,
82+
mac_region,
83+
azure_monitor_workspace_resource_id,
84+
cluster_name,
85+
default_rules_template,
86+
url,
87+
enable_rules,
88+
index
89+
)

0 commit comments

Comments
 (0)