33# Licensed under the MIT License. See License.txt in the project root for license information.
44# --------------------------------------------------------------------------------------------
55import json
6- from ..constants import ALERTS_API , RULES_API
76from 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