From 69d0575c0f6afe04926f56fdf3467cbf471c2589 Mon Sep 17 00:00:00 2001 From: Kaveesh Dubey Date: Tue, 27 May 2025 14:59:21 -0700 Subject: [PATCH 01/17] fix: simplify logic and enable correct recording rule groups for managed prom extension --- .../recordingrules/create.py | 65 +++++++++++-------- .../recordingrules/delete.py | 7 ++ 2 files changed, 45 insertions(+), 27 deletions(-) diff --git a/src/k8s-extension/azext_k8s_extension/partner_extensions/azuremonitormetrics/recordingrules/create.py b/src/k8s-extension/azext_k8s_extension/partner_extensions/azuremonitormetrics/recordingrules/create.py index 5f022b6bb88..dfd53d0fa89 100644 --- a/src/k8s-extension/azext_k8s_extension/partner_extensions/azuremonitormetrics/recordingrules/create.py +++ b/src/k8s-extension/azext_k8s_extension/partner_extensions/azuremonitormetrics/recordingrules/create.py @@ -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 @@ -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 @@ -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 + ) diff --git a/src/k8s-extension/azext_k8s_extension/partner_extensions/azuremonitormetrics/recordingrules/delete.py b/src/k8s-extension/azext_k8s_extension/partner_extensions/azuremonitormetrics/recordingrules/delete.py index ac945fbaed8..622d1e0fbca 100644 --- a/src/k8s-extension/azext_k8s_extension/partner_extensions/azuremonitormetrics/recordingrules/delete.py +++ b/src/k8s-extension/azext_k8s_extension/partner_extensions/azuremonitormetrics/recordingrules/delete.py @@ -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) + ) + \ No newline at end of file From 078bb265f6633b8b68d5e3ba166b54cd203513de Mon Sep 17 00:00:00 2001 From: Kaveesh Dubey Date: Wed, 28 May 2025 14:29:04 -0700 Subject: [PATCH 02/17] add test for create rule groups --- .../public/AzureMonitorMetrics.Tests.ps1 | 23 ++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/testing/test/extensions/public/AzureMonitorMetrics.Tests.ps1 b/testing/test/extensions/public/AzureMonitorMetrics.Tests.ps1 index d1eca16ddb8..da2d0ac3308 100644 --- a/testing/test/extensions/public/AzureMonitorMetrics.Tests.ps1 +++ b/testing/test/extensions/public/AzureMonitorMetrics.Tests.ps1 @@ -11,9 +11,14 @@ Describe 'Azure Monitor Metrics Testing' { } It 'Creates the extension and checks that it onboards correctly' { - az $Env:K8sExtensionName create -c $($ENVCONFIG.arcClusterName) -g $($ENVCONFIG.resourceGroup) --cluster-type connectedClusters --extension-type $extensionType -n $extensionName --no-wait + $createOutput = az $Env:K8sExtensionName create -c $($ENVCONFIG.arcClusterName) -g $($ENVCONFIG.resourceGroup) --cluster-type connectedClusters --extension-type $extensionType -n $extensionName --no-wait $? | Should -BeTrue + # Extract workspace resource group from output line (robust regex-based extraction) + if ($createOutput -match "resourceGroups/([^/]+)/providers/microsoft\.monitor/accounts") { + $script:workspaceResourceGroup = $matches[1] + } + $output = az $Env:K8sExtensionName show -c $($ENVCONFIG.arcClusterName) -g $($ENVCONFIG.resourceGroup) --cluster-type connectedClusters -n $extensionName $? | Should -BeTrue @@ -47,6 +52,22 @@ Describe 'Azure Monitor Metrics Testing' { $extensionExists | Should -Not -BeNullOrEmpty } + It 'Verifies rule groups were created' { + $clusterName = $ENVCONFIG.arcClusterName + $expectedRuleGroupNames = @( + "KubernetesRecordingRulesRuleGroup-$clusterName", + "NodeRecordingRulesRuleGroup-$clusterName" + ) + + $ruleGroups = az monitor metrics alert list --resource-group $script:workspaceResourceGroup | ConvertFrom-Json + $ruleGroups | Should -Not -BeNullOrEmpty + + foreach ($expectedName in $expectedRuleGroupNames) { + $matchingGroup = $ruleGroups | Where-Object { $_.name -eq $expectedName } + $matchingGroup | Should -Not -BeNullOrEmpty -Because "Rule group '$expectedName' should have been created by create.py" + } + } + It "Deletes the extension from the cluster" { $output = az $Env:K8sExtensionName delete -c $($ENVCONFIG.arcClusterName) -g $($ENVCONFIG.resourceGroup) --cluster-type connectedClusters -n $extensionName --force $? | Should -BeTrue From 1bc90a56c890ab03aeae70b64330215263e0c81c Mon Sep 17 00:00:00 2001 From: Kaveesh Dubey Date: Wed, 28 May 2025 14:54:48 -0700 Subject: [PATCH 03/17] change rule group command --- testing/test/extensions/public/AzureMonitorMetrics.Tests.ps1 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/testing/test/extensions/public/AzureMonitorMetrics.Tests.ps1 b/testing/test/extensions/public/AzureMonitorMetrics.Tests.ps1 index da2d0ac3308..0a27917b83e 100644 --- a/testing/test/extensions/public/AzureMonitorMetrics.Tests.ps1 +++ b/testing/test/extensions/public/AzureMonitorMetrics.Tests.ps1 @@ -58,8 +58,8 @@ Describe 'Azure Monitor Metrics Testing' { "KubernetesRecordingRulesRuleGroup-$clusterName", "NodeRecordingRulesRuleGroup-$clusterName" ) - - $ruleGroups = az monitor metrics alert list --resource-group $script:workspaceResourceGroup | ConvertFrom-Json + + $ruleGroups = az resource list --resource-group $script:workspaceResourceGroup --resource-type "Microsoft.AlertsManagement/prometheusRuleGroups" --query "[].{name:name, location:location, id:id}" | ConvertFrom-Json $ruleGroups | Should -Not -BeNullOrEmpty foreach ($expectedName in $expectedRuleGroupNames) { From 278e40a5b53f225bac3b2ab573adbdfc90b0ec28 Mon Sep 17 00:00:00 2001 From: Kaveesh Dubey Date: Wed, 28 May 2025 15:54:35 -0700 Subject: [PATCH 04/17] print --- testing/test/extensions/public/AzureMonitorMetrics.Tests.ps1 | 2 ++ 1 file changed, 2 insertions(+) diff --git a/testing/test/extensions/public/AzureMonitorMetrics.Tests.ps1 b/testing/test/extensions/public/AzureMonitorMetrics.Tests.ps1 index 0a27917b83e..a64bc0b0f73 100644 --- a/testing/test/extensions/public/AzureMonitorMetrics.Tests.ps1 +++ b/testing/test/extensions/public/AzureMonitorMetrics.Tests.ps1 @@ -17,6 +17,7 @@ Describe 'Azure Monitor Metrics Testing' { # Extract workspace resource group from output line (robust regex-based extraction) if ($createOutput -match "resourceGroups/([^/]+)/providers/microsoft\.monitor/accounts") { $script:workspaceResourceGroup = $matches[1] + Write-Host "Workspace Resource Group: $script:workspaceResourceGroup" } $output = az $Env:K8sExtensionName show -c $($ENVCONFIG.arcClusterName) -g $($ENVCONFIG.resourceGroup) --cluster-type connectedClusters -n $extensionName @@ -59,6 +60,7 @@ Describe 'Azure Monitor Metrics Testing' { "NodeRecordingRulesRuleGroup-$clusterName" ) + Write-Host "Workspace Resource Group: $script:workspaceResourceGroup" $ruleGroups = az resource list --resource-group $script:workspaceResourceGroup --resource-type "Microsoft.AlertsManagement/prometheusRuleGroups" --query "[].{name:name, location:location, id:id}" | ConvertFrom-Json $ruleGroups | Should -Not -BeNullOrEmpty From 32819cb5b3a21c8ce5cad0a4badea39519da9681 Mon Sep 17 00:00:00 2001 From: Kaveesh Dubey Date: Wed, 28 May 2025 16:05:44 -0700 Subject: [PATCH 05/17] . --- .../extensions/public/AzureMonitorMetrics.Tests.ps1 | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/testing/test/extensions/public/AzureMonitorMetrics.Tests.ps1 b/testing/test/extensions/public/AzureMonitorMetrics.Tests.ps1 index a64bc0b0f73..76412c1136d 100644 --- a/testing/test/extensions/public/AzureMonitorMetrics.Tests.ps1 +++ b/testing/test/extensions/public/AzureMonitorMetrics.Tests.ps1 @@ -14,11 +14,9 @@ Describe 'Azure Monitor Metrics Testing' { $createOutput = az $Env:K8sExtensionName create -c $($ENVCONFIG.arcClusterName) -g $($ENVCONFIG.resourceGroup) --cluster-type connectedClusters --extension-type $extensionType -n $extensionName --no-wait $? | Should -BeTrue - # Extract workspace resource group from output line (robust regex-based extraction) - if ($createOutput -match "resourceGroups/([^/]+)/providers/microsoft\.monitor/accounts") { - $script:workspaceResourceGroup = $matches[1] - Write-Host "Workspace Resource Group: $script:workspaceResourceGroup" - } + $workspaceLine = $createOutput -match "Using Azure Monitor Workspace.*: (\/subscriptions\/[^`n`r]+)" + $workspaceResourceId = $workspaceLine -split ': ', 2 | Select-Object -Last 1 + $workspaceResourceGroup = ($workspaceResourceId -split '/resourceGroups/')[1] -split '/' | Select-Object -First 1 $output = az $Env:K8sExtensionName show -c $($ENVCONFIG.arcClusterName) -g $($ENVCONFIG.resourceGroup) --cluster-type connectedClusters -n $extensionName $? | Should -BeTrue @@ -60,8 +58,8 @@ Describe 'Azure Monitor Metrics Testing' { "NodeRecordingRulesRuleGroup-$clusterName" ) - Write-Host "Workspace Resource Group: $script:workspaceResourceGroup" - $ruleGroups = az resource list --resource-group $script:workspaceResourceGroup --resource-type "Microsoft.AlertsManagement/prometheusRuleGroups" --query "[].{name:name, location:location, id:id}" | ConvertFrom-Json + Write-Host "Workspace Resource Group: $workspaceResourceGroup" + $ruleGroups = az resource list --resource-group $workspaceResourceGroup --resource-type "Microsoft.AlertsManagement/prometheusRuleGroups" --query "[].{name:name, location:location, id:id}" | ConvertFrom-Json $ruleGroups | Should -Not -BeNullOrEmpty foreach ($expectedName in $expectedRuleGroupNames) { From 1dd4c1fb4ac83c75508294a0f2ca2060fe3109cf Mon Sep 17 00:00:00 2001 From: Kaveesh Dubey Date: Wed, 28 May 2025 16:42:46 -0700 Subject: [PATCH 06/17] ... --- testing/test/extensions/public/AzureMonitorMetrics.Tests.ps1 | 1 + 1 file changed, 1 insertion(+) diff --git a/testing/test/extensions/public/AzureMonitorMetrics.Tests.ps1 b/testing/test/extensions/public/AzureMonitorMetrics.Tests.ps1 index 76412c1136d..2abc7132eb1 100644 --- a/testing/test/extensions/public/AzureMonitorMetrics.Tests.ps1 +++ b/testing/test/extensions/public/AzureMonitorMetrics.Tests.ps1 @@ -17,6 +17,7 @@ Describe 'Azure Monitor Metrics Testing' { $workspaceLine = $createOutput -match "Using Azure Monitor Workspace.*: (\/subscriptions\/[^`n`r]+)" $workspaceResourceId = $workspaceLine -split ': ', 2 | Select-Object -Last 1 $workspaceResourceGroup = ($workspaceResourceId -split '/resourceGroups/')[1] -split '/' | Select-Object -First 1 + Write-Host "print in create: $workspaceResourceGroup" $output = az $Env:K8sExtensionName show -c $($ENVCONFIG.arcClusterName) -g $($ENVCONFIG.resourceGroup) --cluster-type connectedClusters -n $extensionName $? | Should -BeTrue From f8d908106467a06aaef1da8336b50672334d6981 Mon Sep 17 00:00:00 2001 From: Kaveesh Dubey Date: Wed, 28 May 2025 16:56:35 -0700 Subject: [PATCH 07/17] ./ --- testing/test/extensions/public/AzureMonitorMetrics.Tests.ps1 | 2 ++ 1 file changed, 2 insertions(+) diff --git a/testing/test/extensions/public/AzureMonitorMetrics.Tests.ps1 b/testing/test/extensions/public/AzureMonitorMetrics.Tests.ps1 index 2abc7132eb1..d61d2e66088 100644 --- a/testing/test/extensions/public/AzureMonitorMetrics.Tests.ps1 +++ b/testing/test/extensions/public/AzureMonitorMetrics.Tests.ps1 @@ -15,7 +15,9 @@ Describe 'Azure Monitor Metrics Testing' { $? | Should -BeTrue $workspaceLine = $createOutput -match "Using Azure Monitor Workspace.*: (\/subscriptions\/[^`n`r]+)" + Write-Host "workspaceLine : $workspaceLine" $workspaceResourceId = $workspaceLine -split ': ', 2 | Select-Object -Last 1 + Write-Host "workspaceResourceId : $workspaceResourceId" $workspaceResourceGroup = ($workspaceResourceId -split '/resourceGroups/')[1] -split '/' | Select-Object -First 1 Write-Host "print in create: $workspaceResourceGroup" From f39305aa78b0a318659d6fb8da5efc90dc93514d Mon Sep 17 00:00:00 2001 From: Kaveesh Dubey Date: Wed, 28 May 2025 19:31:37 -0700 Subject: [PATCH 08/17] update to handle multiple lines --- .../public/AzureMonitorMetrics.Tests.ps1 | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/testing/test/extensions/public/AzureMonitorMetrics.Tests.ps1 b/testing/test/extensions/public/AzureMonitorMetrics.Tests.ps1 index d61d2e66088..29cfe44b83f 100644 --- a/testing/test/extensions/public/AzureMonitorMetrics.Tests.ps1 +++ b/testing/test/extensions/public/AzureMonitorMetrics.Tests.ps1 @@ -14,12 +14,17 @@ Describe 'Azure Monitor Metrics Testing' { $createOutput = az $Env:K8sExtensionName create -c $($ENVCONFIG.arcClusterName) -g $($ENVCONFIG.resourceGroup) --cluster-type connectedClusters --extension-type $extensionType -n $extensionName --no-wait $? | Should -BeTrue - $workspaceLine = $createOutput -match "Using Azure Monitor Workspace.*: (\/subscriptions\/[^`n`r]+)" - Write-Host "workspaceLine : $workspaceLine" - $workspaceResourceId = $workspaceLine -split ': ', 2 | Select-Object -Last 1 - Write-Host "workspaceResourceId : $workspaceResourceId" - $workspaceResourceGroup = ($workspaceResourceId -split '/resourceGroups/')[1] -split '/' | Select-Object -First 1 - Write-Host "print in create: $workspaceResourceGroup" + $line = $createOutput -split "`n" | Where-Object { $_ -match "Using Azure Monitor Workspace.*: (\/subscriptions\/[^`n`r]+)" } + if ($line) { + $workspaceResourceId = $matches[1] + Write-Host "workspaceResourceId : $workspaceResourceId" + + $workspaceResourceGroup = ($workspaceResourceId -split '/resourceGroups/')[1] -split '/' | Select-Object -First 1 + Write-Host "print in create: $workspaceResourceGroup" + } else { + Write-Host "Pattern not found in createOutput" + } + $output = az $Env:K8sExtensionName show -c $($ENVCONFIG.arcClusterName) -g $($ENVCONFIG.resourceGroup) --cluster-type connectedClusters -n $extensionName $? | Should -BeTrue From 793f3a4ea82a1dd639f71a20c76c603216c77508 Mon Sep 17 00:00:00 2001 From: Kaveesh Dubey Date: Wed, 28 May 2025 19:50:15 -0700 Subject: [PATCH 09/17] update --- .../test/extensions/public/AzureMonitorMetrics.Tests.ps1 | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/testing/test/extensions/public/AzureMonitorMetrics.Tests.ps1 b/testing/test/extensions/public/AzureMonitorMetrics.Tests.ps1 index 29cfe44b83f..f0e6680a7e9 100644 --- a/testing/test/extensions/public/AzureMonitorMetrics.Tests.ps1 +++ b/testing/test/extensions/public/AzureMonitorMetrics.Tests.ps1 @@ -5,6 +5,7 @@ Describe 'Azure Monitor Metrics Testing' { $extensionName = "azuremonitor-metrics" $extensionAgentName = "ama-metrics" $extensionAgentNamespace = "kube-system" + $workspaceResourceGroup = $null # Initialize here for shared scope . $PSScriptRoot/../../helper/Constants.ps1 . $PSScriptRoot/../../helper/Helper.ps1 @@ -19,8 +20,8 @@ Describe 'Azure Monitor Metrics Testing' { $workspaceResourceId = $matches[1] Write-Host "workspaceResourceId : $workspaceResourceId" - $workspaceResourceGroup = ($workspaceResourceId -split '/resourceGroups/')[1] -split '/' | Select-Object -First 1 - Write-Host "print in create: $workspaceResourceGroup" + $script:workspaceResourceGroup = ($workspaceResourceId -split '/resourceGroups/')[1] -split '/' | Select-Object -First 1 + Write-Host "print in create: $script:workspaceResourceGroup" } else { Write-Host "Pattern not found in createOutput" } @@ -66,8 +67,8 @@ Describe 'Azure Monitor Metrics Testing' { "NodeRecordingRulesRuleGroup-$clusterName" ) - Write-Host "Workspace Resource Group: $workspaceResourceGroup" - $ruleGroups = az resource list --resource-group $workspaceResourceGroup --resource-type "Microsoft.AlertsManagement/prometheusRuleGroups" --query "[].{name:name, location:location, id:id}" | ConvertFrom-Json + Write-Host "Workspace Resource Group: $script:workspaceResourceGroup" + $ruleGroups = az resource list --resource-group $script:workspaceResourceGroup --resource-type "Microsoft.AlertsManagement/prometheusRuleGroups" --query "[].{name:name, location:location, id:id}" | ConvertFrom-Json $ruleGroups | Should -Not -BeNullOrEmpty foreach ($expectedName in $expectedRuleGroupNames) { From e8c5bc894c976db4e05203371243f427bdd57d7f Mon Sep 17 00:00:00 2001 From: Kaveesh Dubey Date: Wed, 28 May 2025 20:05:46 -0700 Subject: [PATCH 10/17] rule group check --- testing/test/extensions/public/AzureMonitorMetrics.Tests.ps1 | 2 ++ 1 file changed, 2 insertions(+) diff --git a/testing/test/extensions/public/AzureMonitorMetrics.Tests.ps1 b/testing/test/extensions/public/AzureMonitorMetrics.Tests.ps1 index f0e6680a7e9..959a5bab8f7 100644 --- a/testing/test/extensions/public/AzureMonitorMetrics.Tests.ps1 +++ b/testing/test/extensions/public/AzureMonitorMetrics.Tests.ps1 @@ -68,7 +68,9 @@ Describe 'Azure Monitor Metrics Testing' { ) Write-Host "Workspace Resource Group: $script:workspaceResourceGroup" + az resource list --resource-group $script:workspaceResourceGroup --resource-type "Microsoft.AlertsManagement/prometheusRuleGroups" --query "[].{name:name, location:location, id:id}" | ConvertFrom-Json $ruleGroups = az resource list --resource-group $script:workspaceResourceGroup --resource-type "Microsoft.AlertsManagement/prometheusRuleGroups" --query "[].{name:name, location:location, id:id}" | ConvertFrom-Json + Write-Host "ruleGroups: $ruleGroups" $ruleGroups | Should -Not -BeNullOrEmpty foreach ($expectedName in $expectedRuleGroupNames) { From e2c23ee4f3c2f86aa9aa60aff53723d2357009f3 Mon Sep 17 00:00:00 2001 From: Kaveesh Dubey Date: Thu, 29 May 2025 09:23:20 -0700 Subject: [PATCH 11/17] .. --- .../public/AzureMonitorMetrics.Tests.ps1 | 29 +++++++++++++++---- 1 file changed, 23 insertions(+), 6 deletions(-) diff --git a/testing/test/extensions/public/AzureMonitorMetrics.Tests.ps1 b/testing/test/extensions/public/AzureMonitorMetrics.Tests.ps1 index 959a5bab8f7..4b1d57a6969 100644 --- a/testing/test/extensions/public/AzureMonitorMetrics.Tests.ps1 +++ b/testing/test/extensions/public/AzureMonitorMetrics.Tests.ps1 @@ -22,7 +22,8 @@ Describe 'Azure Monitor Metrics Testing' { $script:workspaceResourceGroup = ($workspaceResourceId -split '/resourceGroups/')[1] -split '/' | Select-Object -First 1 Write-Host "print in create: $script:workspaceResourceGroup" - } else { + } + else { Write-Host "Pattern not found in createOutput" } @@ -66,19 +67,35 @@ Describe 'Azure Monitor Metrics Testing' { "KubernetesRecordingRulesRuleGroup-$clusterName", "NodeRecordingRulesRuleGroup-$clusterName" ) - + Write-Host "Workspace Resource Group: $script:workspaceResourceGroup" - az resource list --resource-group $script:workspaceResourceGroup --resource-type "Microsoft.AlertsManagement/prometheusRuleGroups" --query "[].{name:name, location:location, id:id}" | ConvertFrom-Json - $ruleGroups = az resource list --resource-group $script:workspaceResourceGroup --resource-type "Microsoft.AlertsManagement/prometheusRuleGroups" --query "[].{name:name, location:location, id:id}" | ConvertFrom-Json - Write-Host "ruleGroups: $ruleGroups" - $ruleGroups | Should -Not -BeNullOrEmpty + $n = 0 + $ruleGroups = @() + do { + $ruleGroups = az resource list ` + --resource-group $script:workspaceResourceGroup ` + --resource-type "Microsoft.AlertsManagement/prometheusRuleGroups" ` + --query "[].{name:name, location:location, id:id}" | ConvertFrom-Json + + if ($ruleGroups) { break } + Start-Sleep -Seconds 10 + $n += 1 + } while ($n -lt 6) + + $ruleGroups | Should -Not -BeNullOrEmpty -Because "Rule groups may take time to be created after extension onboarding" + Write-Host "Retrieved rule groups: $($ruleGroups | ConvertTo-Json -Depth 5)" + foreach ($expectedName in $expectedRuleGroupNames) { $matchingGroup = $ruleGroups | Where-Object { $_.name -eq $expectedName } $matchingGroup | Should -Not -BeNullOrEmpty -Because "Rule group '$expectedName' should have been created by create.py" } + + Write-Host "`n--- All resources in workspace resource group ($script:workspaceResourceGroup) ---" + az resource list --resource-group $script:workspaceResourceGroup | ConvertFrom-Json | ConvertTo-Json -Depth 5 } + It "Deletes the extension from the cluster" { $output = az $Env:K8sExtensionName delete -c $($ENVCONFIG.arcClusterName) -g $($ENVCONFIG.resourceGroup) --cluster-type connectedClusters -n $extensionName --force $? | Should -BeTrue From 3deef3ebfcf9bbddc8c3fa2693c75bb40314018d Mon Sep 17 00:00:00 2001 From: Kaveesh Dubey Date: Thu, 29 May 2025 09:50:29 -0700 Subject: [PATCH 12/17] p --- .../extensions/public/AzureMonitorMetrics.Tests.ps1 | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/testing/test/extensions/public/AzureMonitorMetrics.Tests.ps1 b/testing/test/extensions/public/AzureMonitorMetrics.Tests.ps1 index 4b1d57a6969..baf6c800d62 100644 --- a/testing/test/extensions/public/AzureMonitorMetrics.Tests.ps1 +++ b/testing/test/extensions/public/AzureMonitorMetrics.Tests.ps1 @@ -83,13 +83,13 @@ Describe 'Azure Monitor Metrics Testing' { $n += 1 } while ($n -lt 6) - $ruleGroups | Should -Not -BeNullOrEmpty -Because "Rule groups may take time to be created after extension onboarding" + # $ruleGroups | Should -Not -BeNullOrEmpty -Because "Rule groups may take time to be created after extension onboarding" Write-Host "Retrieved rule groups: $($ruleGroups | ConvertTo-Json -Depth 5)" - foreach ($expectedName in $expectedRuleGroupNames) { - $matchingGroup = $ruleGroups | Where-Object { $_.name -eq $expectedName } - $matchingGroup | Should -Not -BeNullOrEmpty -Because "Rule group '$expectedName' should have been created by create.py" - } + # foreach ($expectedName in $expectedRuleGroupNames) { + # $matchingGroup = $ruleGroups | Where-Object { $_.name -eq $expectedName } + # $matchingGroup | Should -Not -BeNullOrEmpty -Because "Rule group '$expectedName' should have been created by create.py" + # } Write-Host "`n--- All resources in workspace resource group ($script:workspaceResourceGroup) ---" az resource list --resource-group $script:workspaceResourceGroup | ConvertFrom-Json | ConvertTo-Json -Depth 5 From e780aa750a0c37c76d9ce9193bbf8deed378907e Mon Sep 17 00:00:00 2001 From: Kaveesh Dubey Date: Thu, 29 May 2025 10:13:12 -0700 Subject: [PATCH 13/17] print resources --- testing/test/extensions/public/AzureMonitorMetrics.Tests.ps1 | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/testing/test/extensions/public/AzureMonitorMetrics.Tests.ps1 b/testing/test/extensions/public/AzureMonitorMetrics.Tests.ps1 index baf6c800d62..205252a6c8f 100644 --- a/testing/test/extensions/public/AzureMonitorMetrics.Tests.ps1 +++ b/testing/test/extensions/public/AzureMonitorMetrics.Tests.ps1 @@ -92,7 +92,8 @@ Describe 'Azure Monitor Metrics Testing' { # } Write-Host "`n--- All resources in workspace resource group ($script:workspaceResourceGroup) ---" - az resource list --resource-group $script:workspaceResourceGroup | ConvertFrom-Json | ConvertTo-Json -Depth 5 + $allResources = az resource list --resource-group $script:workspaceResourceGroup + Write-Output $allResources } From f3e1b3fa6f46dff7b6d7c56720139a81b00dc974 Mon Sep 17 00:00:00 2001 From: Kaveesh Dubey Date: Thu, 29 May 2025 11:01:02 -0700 Subject: [PATCH 14/17] rule groups in cluster rg --- .../public/AzureMonitorMetrics.Tests.ps1 | 45 +++---------------- 1 file changed, 7 insertions(+), 38 deletions(-) diff --git a/testing/test/extensions/public/AzureMonitorMetrics.Tests.ps1 b/testing/test/extensions/public/AzureMonitorMetrics.Tests.ps1 index 205252a6c8f..2df305cebe6 100644 --- a/testing/test/extensions/public/AzureMonitorMetrics.Tests.ps1 +++ b/testing/test/extensions/public/AzureMonitorMetrics.Tests.ps1 @@ -12,22 +12,9 @@ Describe 'Azure Monitor Metrics Testing' { } It 'Creates the extension and checks that it onboards correctly' { - $createOutput = az $Env:K8sExtensionName create -c $($ENVCONFIG.arcClusterName) -g $($ENVCONFIG.resourceGroup) --cluster-type connectedClusters --extension-type $extensionType -n $extensionName --no-wait + az $Env:K8sExtensionName create -c $($ENVCONFIG.arcClusterName) -g $($ENVCONFIG.resourceGroup) --cluster-type connectedClusters --extension-type $extensionType -n $extensionName --no-wait $? | Should -BeTrue - $line = $createOutput -split "`n" | Where-Object { $_ -match "Using Azure Monitor Workspace.*: (\/subscriptions\/[^`n`r]+)" } - if ($line) { - $workspaceResourceId = $matches[1] - Write-Host "workspaceResourceId : $workspaceResourceId" - - $script:workspaceResourceGroup = ($workspaceResourceId -split '/resourceGroups/')[1] -split '/' | Select-Object -First 1 - Write-Host "print in create: $script:workspaceResourceGroup" - } - else { - Write-Host "Pattern not found in createOutput" - } - - $output = az $Env:K8sExtensionName show -c $($ENVCONFIG.arcClusterName) -g $($ENVCONFIG.resourceGroup) --cluster-type connectedClusters -n $extensionName $? | Should -BeTrue @@ -68,32 +55,14 @@ Describe 'Azure Monitor Metrics Testing' { "NodeRecordingRulesRuleGroup-$clusterName" ) - Write-Host "Workspace Resource Group: $script:workspaceResourceGroup" - - $n = 0 - $ruleGroups = @() - do { - $ruleGroups = az resource list ` - --resource-group $script:workspaceResourceGroup ` - --resource-type "Microsoft.AlertsManagement/prometheusRuleGroups" ` - --query "[].{name:name, location:location, id:id}" | ConvertFrom-Json - - if ($ruleGroups) { break } - Start-Sleep -Seconds 10 - $n += 1 - } while ($n -lt 6) - - # $ruleGroups | Should -Not -BeNullOrEmpty -Because "Rule groups may take time to be created after extension onboarding" + $ruleGroups = az resource list --resource-group $($ENVCONFIG.resourceGroup) --resource-type "Microsoft.AlertsManagement/prometheusRuleGroups" --query "[].{name:name, location:location, id:id}" | ConvertFrom-Json Write-Host "Retrieved rule groups: $($ruleGroups | ConvertTo-Json -Depth 5)" + $ruleGroups | Should -Not -BeNullOrEmpty -Because "Rule groups may take time to be created after extension onboarding" - # foreach ($expectedName in $expectedRuleGroupNames) { - # $matchingGroup = $ruleGroups | Where-Object { $_.name -eq $expectedName } - # $matchingGroup | Should -Not -BeNullOrEmpty -Because "Rule group '$expectedName' should have been created by create.py" - # } - - Write-Host "`n--- All resources in workspace resource group ($script:workspaceResourceGroup) ---" - $allResources = az resource list --resource-group $script:workspaceResourceGroup - Write-Output $allResources + foreach ($expectedName in $expectedRuleGroupNames) { + $matchingGroup = $ruleGroups | Where-Object { $_.name -eq $expectedName } + $matchingGroup | Should -Not -BeNullOrEmpty -Because "Rule group '$expectedName' should have been created by create.py" + } } From a3f37b64fe3bccd4c4613eaa180931fb8917b8db Mon Sep 17 00:00:00 2001 From: Kaveesh Dubey Date: Thu, 29 May 2025 11:21:00 -0700 Subject: [PATCH 15/17] remove debug line --- testing/test/extensions/public/AzureMonitorMetrics.Tests.ps1 | 1 - 1 file changed, 1 deletion(-) diff --git a/testing/test/extensions/public/AzureMonitorMetrics.Tests.ps1 b/testing/test/extensions/public/AzureMonitorMetrics.Tests.ps1 index 2df305cebe6..92d2b265b50 100644 --- a/testing/test/extensions/public/AzureMonitorMetrics.Tests.ps1 +++ b/testing/test/extensions/public/AzureMonitorMetrics.Tests.ps1 @@ -56,7 +56,6 @@ Describe 'Azure Monitor Metrics Testing' { ) $ruleGroups = az resource list --resource-group $($ENVCONFIG.resourceGroup) --resource-type "Microsoft.AlertsManagement/prometheusRuleGroups" --query "[].{name:name, location:location, id:id}" | ConvertFrom-Json - Write-Host "Retrieved rule groups: $($ruleGroups | ConvertTo-Json -Depth 5)" $ruleGroups | Should -Not -BeNullOrEmpty -Because "Rule groups may take time to be created after extension onboarding" foreach ($expectedName in $expectedRuleGroupNames) { From 0593bd192ef75248378895707aa7102bae66b7bb Mon Sep 17 00:00:00 2001 From: bragi92 Date: Thu, 29 May 2025 12:56:02 -0700 Subject: [PATCH 16/17] Update HISTORY.rst --- src/k8s-extension/HISTORY.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/src/k8s-extension/HISTORY.rst b/src/k8s-extension/HISTORY.rst index 8400bf6416a..ee7bab40d67 100644 --- a/src/k8s-extension/HISTORY.rst +++ b/src/k8s-extension/HISTORY.rst @@ -6,6 +6,7 @@ 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 ++++++++++++++++++ From 353b88e39ce89f7bb28537c69bf8fe728e14c9f9 Mon Sep 17 00:00:00 2001 From: bragi92 Date: Thu, 29 May 2025 13:15:33 -0700 Subject: [PATCH 17/17] Update HISTORY.rst --- src/k8s-extension/HISTORY.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/k8s-extension/HISTORY.rst b/src/k8s-extension/HISTORY.rst index ee7bab40d67..09a13348d04 100644 --- a/src/k8s-extension/HISTORY.rst +++ b/src/k8s-extension/HISTORY.rst @@ -6,7 +6,7 @@ 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 +* microsoft.azuremonitor.containers.metrics: Simplify logic and enable correct recording rule groups for managed prom extension 1.6.4 ++++++++++++++++++