Skip to content

Commit b87cfc0

Browse files
authored
Fix issues with child resource export error verbosity and processing of resource with null or empty resource group (#935)
* Update * Update
1 parent 2c2e460 commit b87cfc0

2 files changed

Lines changed: 18 additions & 4 deletions

File tree

src/internal/functions/Get-AzOpsResourceDefinition.ps1

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -290,8 +290,10 @@
290290
if (-not $SkipResource) {
291291
Write-AzOpsMessage -LogLevel Verbose -LogString 'Get-AzOpsResourceDefinition.Processing.Resource.Discovery' -LogStringValues $scopeObject.Name -Target $ScopeObject
292292
try {
293+
# Skip resources with null or empty resource group
294+
$query = "resources | where isnotempty(resourceGroup)"
293295
$SkipResourceType | ForEach-Object { $skipResourceTypes += ($(if($skipResourceTypes){","}) + "'" + $_ + "'") }
294-
$query = "resources | where type !in~ ($skipResourceTypes)"
296+
$query = $query + " and type !in~ ($skipResourceTypes)"
295297
if ($IncludeResourceType -ne "*") {
296298
$IncludeResourceType | ForEach-Object { $includeResourceTypes += ($(if($includeResourceTypes){","}) + "'" + $_ + "'") }
297299
$query = $query + " and type in~ ($includeResourceTypes)"
@@ -309,6 +311,11 @@
309311
if ($resourcesBase) {
310312
$resources = @()
311313
foreach ($resource in $resourcesBase) {
314+
# Skip resources with null or empty resource group to prevent Export-AzResourceGroup errors
315+
if ([string]::IsNullOrEmpty($resource.resourceGroup)) {
316+
Write-AzOpsMessage -LogLevel Debug -LogString 'Get-AzOpsResourceDefinition.Processing.Resource.SkippingNoResourceGroup' -LogStringValues $resource.name, $resource.id -Target $resource
317+
continue
318+
}
312319
if ($resourceGroups | Where-Object { $_.name -eq $resource.resourceGroup -and $_.subscriptionId -eq $resource.subscriptionId }) {
313320
Write-AzOpsMessage -LogLevel Verbose -LogString 'Get-AzOpsResourceDefinition.Processing.Resource' -LogStringValues $resource.name, $resource.resourcegroup -Target $resource
314321
$resources += $resource
@@ -347,6 +354,11 @@
347354
$tempExportPath = [System.IO.Path]::GetTempPath() + (New-Guid).ToString() + '.json'
348355
try {
349356
& $azOps {
357+
# Validate resource group name before calling Export-AzResourceGroup
358+
if ([string]::IsNullOrEmpty($resource.resourceGroup)) {
359+
Write-AzOpsMessage -LogLevel Debug -LogString 'Get-AzOpsResourceDefinition.Processing.ChildResource.SkippingNoResourceGroup' -LogStringValues $resource.name, $resource.id -Target $resource
360+
return
361+
}
350362
$exportParameters = @{
351363
Resource = $resource.id
352364
ResourceGroupName = $resource.resourceGroup
@@ -386,7 +398,7 @@
386398
}
387399
catch {
388400
& $azOps {
389-
Write-AzOpsMessage -LogLevel Warning -LogString 'Get-AzOpsResourceDefinition.ChildResource.Warning' -LogStringValues $resource.resourceGroup, $_ -FunctionName "Get-AzOpsResourceDefinition" -ModuleName "AzOps"
401+
Write-AzOpsMessage -LogLevel Warning -LogString 'Get-AzOpsResourceDefinition.ChildResource.Warning' -LogStringValues $resource.resourceGroup, ($exportParameters | Out-String -NoNewline), $_ -FunctionName "Get-AzOpsResourceDefinition" -ModuleName "AzOps"
390402
}
391403
}
392404
if (Test-Path -Path $tempExportPath) {

src/localized/en-us/Strings.psd1

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@
122122
'Get-AzOpsPolicySetDefinition.ManagementGroup' = 'Retrieving PolicySet Definition for ManagementGroup {0} ({1})' # $ScopeObject.ManagementGroupDisplayName, $ScopeObject.ManagementGroup
123123
'Get-AzOpsPolicySetDefinition.Subscription' = 'Retrieving PolicySet Definition for {0} Subscription objects' # $Subscription.count
124124

125-
'Get-AzOpsResourceDefinition.ChildResource.Warning' = 'Failed to export childResources in [{0}]. Warning: [{1}]' # $resourceGroup.ResourceGroupName, $_
125+
'Get-AzOpsResourceDefinition.ChildResource.Warning' = 'Failed to export childResources in [{0}] with parameters [{1}]. Warning: [{2}]' # $resource.resourceGroup, $exportParameters | Out-String -NoNewline, $_
126126
'Get-AzOpsResourceDefinition.Finished' = 'Finished processing scope [{0}]' # $scopeObject.Scope
127127
'Get-AzOpsResourceDefinition.ManagementGroup.Processing' = 'Processing Management Group [{0}] ({1})' # $ScopeObject.ManagementGroupDisplayName, $ScopeObject.ManagementGroup
128128
'Get-AzOpsResourceDefinition.Processing' = 'Processing resources at [{0}]' # $Scope
@@ -134,10 +134,12 @@
134134
'Get-AzOpsResourceDefinition.Processing.Resource' = 'Processing resource [{0}] in resource Group [{1}]' # $resource.Name, $resourceGroup.ResourceGroupName
135135
'Get-AzOpsResourceDefinition.Processing.Resource.Discovery' = 'Searching for resources in [{0}]' # $scopeObject.Name
136136
'Get-AzOpsResourceDefinition.Processing.Resource.Discovery.NotFound' = 'No resources found in [{0}]' # $scopeObject.Name
137-
'Get-AzOpsResourceDefinition.Processing.Resource.Warning' = 'Failed to get resources in {0}]. Consider excluding the resource causing the failure with [Core.SkipResourceType] setting' # $scopeObject.Name
137+
'Get-AzOpsResourceDefinition.Processing.Resource.SkippingNoResourceGroup' = 'Skipping resource [{0}] at [{1}], null or empty ResourceGroup property. Cannot export resources' # $resource.name, $resource.id
138+
'Get-AzOpsResourceDefinition.Processing.Resource.Warning' = 'Failed to get resources in [{0}]. Consider excluding the resource causing the failure with [Core.SkipResourceType] setting' # $scopeObject.Name
138139
'Get-AzOpsResourceDefinition.SkippingResourceGroup' = 'SkipResourceGroup switch used, skipping resource Group discovery' #
139140
'Get-AzOpsResourceDefinition.SkippingResources' = 'SkipResource switch used, skipping resource discovery.' #
140141
'Get-AzOpsResourceDefinition.Processing.ChildResource' = 'Processing resource [{0}] in resource Group [{1}]' # $resource.Name, $resourceGroup.ResourceGroupName
142+
'Get-AzOpsResourceDefinition.Processing.ChildResource.SkippingNoResourceGroup' = 'Skipping resource [{0}] at [{1}], null or empty ResourceGroup property. Cannot export child resources' # $resource.name, $resource.id
141143
'Get-AzOpsResourceDefinition.SkippingChildResources' = 'SkipChildResource switch used, skipping child resource discovery' #
142144

143145
'Get-AzOpsRoleAssignment.Assignment' = 'Found assignment {0} for role {1}' # $roleAssignment.id, $roleAssignment.properties.roleDefinitionId

0 commit comments

Comments
 (0)