Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions src/k8s-extension/HISTORY.rst
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,11 @@
Release History
===============

1.6.5
++++++++++++++++++
* microsoft.dataprotection.kubernetes: Add support for 'DisableInformerCache' configuration.
* microsoft.azuremonitor.containers.metrics: Simplify logic and enable correct recording rule groups for managed prom extension

1.6.4
++++++++++++++++++
* microsoft.azuremonitor.containers.metrics: Update default region for azure monitor metrics extension in mooncake.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ def __init__(self):
- Backup storage location (required)
- Resource Requests (optional)
- Resource Limits (optional)
- Disable Informer Cache (optional)
"""
self.TENANT_ID = "credentials.tenantId"
self.BACKUP_STORAGE_ACCOUNT_CONTAINER = "configuration.backupStorageLocation.bucket"
Expand All @@ -34,6 +35,7 @@ def __init__(self):
self.RESOURCE_LIMIT_MEMORY = "resources.limits.memory"
self.BACKUP_STORAGE_ACCOUNT_USE_AAD = "configuration.backupStorageLocation.config.useAAD"
self.BACKUP_STORAGE_ACCOUNT_STORAGE_ACCOUNT_URI = "configuration.backupStorageLocation.config.storageAccountURI"
self.DISABLE_INFORMER_CACHE = "configuration.disableInformerCache"

self.blob_container = "blobContainer"
self.storage_account = "storageAccount"
Expand All @@ -45,6 +47,7 @@ def __init__(self):
self.memory_limit = "memoryLimit"
self.use_aad = "useAAD"
self.storage_account_uri = "storageAccountURI"
self.disable_informer_cache = "disableInformerCache"

self.configuration_mapping = {
self.blob_container.lower(): self.BACKUP_STORAGE_ACCOUNT_CONTAINER,
Expand All @@ -56,7 +59,8 @@ def __init__(self):
self.cpu_limit.lower(): self.RESOURCE_LIMIT_CPU,
self.memory_limit.lower(): self.RESOURCE_LIMIT_MEMORY,
self.use_aad.lower(): self.BACKUP_STORAGE_ACCOUNT_USE_AAD,
self.storage_account_uri.lower(): self.BACKUP_STORAGE_ACCOUNT_STORAGE_ACCOUNT_URI
self.storage_account_uri.lower(): self.BACKUP_STORAGE_ACCOUNT_STORAGE_ACCOUNT_URI,
self.disable_informer_cache.lower(): self.DISABLE_INFORMER_CACHE
}

self.bsl_configuration_settings = [
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,19 @@ 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', [])
# 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"]
if resource.get("type", "").lower() == "microsoft.alertsmanagement/prometheusrulegroups"
for rule in resource.get("properties", {}).get("rules", [])
)
]

return filtered_templates


# pylint: disable=line-too-long
Expand All @@ -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
Expand All @@ -51,28 +62,28 @@ 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):
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)
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}"

put_rules(
cmd,
rule_group_id,
rule_group_name,
mac_region,
azure_monitor_workspace_resource_id,
cluster_name,
default_rules_template,
url,
True,
index
)
Original file line number Diff line number Diff line change
Expand Up @@ -35,3 +35,10 @@ 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,
"UXRecordingRulesRuleGroup - {0}".format(cluster_name)
)

2 changes: 1 addition & 1 deletion src/k8s-extension/setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -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()
Expand Down
Loading