Skip to content

Commit a8eecfa

Browse files
msJinLeimsJinLei
authored andcommitted
Add resource name filter with parent/child format into TopLevelWildcardFilter
Fix issue Azure/azure-powershell#11692
1 parent 2adc6f9 commit a8eecfa

File tree

2 files changed

+40
-5
lines changed

2 files changed

+40
-5
lines changed

src/ResourceManager.Test/WildcardUnitTests.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -201,6 +201,10 @@ public void TopLevelWildcardFilterTest()
201201
Assert.Equal(6, cmdlet.TopLevelWildcardFilter("r*1", "*", ReturnedResources2).Count);
202202
Assert.Equal(2, cmdlet.TopLevelWildcardFilter("r*1", "*1", ReturnedResources2).Count);
203203
Assert.Equal(6, cmdlet.TopLevelWildcardFilter("r*1", "t*", ReturnedResources2).Count);
204+
205+
Assert.Single(cmdlet.TopLevelWildcardFilter("resourcegrouptest", "testserver", ReturnedResourcesWithChild));
206+
Assert.Single(cmdlet.TopLevelWildcardFilter("resourcegrouptest", "testdatabase", ReturnedResourcesWithChild));
207+
Assert.Single(cmdlet.TopLevelWildcardFilter("resourcegrouptest", "testserver/testdatabase", ReturnedResourcesWithChild));
204208
}
205209

206210
[Fact]
@@ -280,6 +284,12 @@ public void SubResourceWildcardFilterTest()
280284
new TestResource2("resourcegrouptest","test1"),
281285
new TestResource2("resourcegrouptest","testdifferent")
282286
};
287+
288+
public List<TestResource> ReturnedResourcesWithChild = new List<TestResource>()
289+
{
290+
new TestResource("/subscriptions/9e223dbe-3399-4e19-88eb-0975f02ac87f/resourceGroups/resourcegrouptest/providers/Microsoft.Sql/servers/testserver/databases/testdatabase"),
291+
new TestResource("/subscriptions/9e223dbe-3399-4e19-88eb-0975f02ac87f/resourceGroups/resourcegrouptest/providers/Microsoft.Sql/servers/testserver")
292+
};
283293
}
284294

285295
public class WildCardTestCmdlet : AzureRMCmdlet

src/ResourceManager/Version2016_09_01/AzureRMCmdlet.cs

Lines changed: 30 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -412,12 +412,22 @@ public List<T> TopLevelWildcardFilter<T>(string resourceGroupName, string name,
412412

413413
if (!string.IsNullOrEmpty(name))
414414
{
415-
WildcardPattern pattern = new WildcardPattern(name, WildcardOptions.IgnoreCase);
416-
output = output.Select(t => new { Id = new ResourceIdentifier((string) GetPropertyValue(t, idProperty)), Resource = t })
417-
.Where(p => IsMatch(p.Id, "ResourceName", pattern))
418-
.Select(r => r.Resource);
415+
string[] parts = name.Split(new[] { '/' }, StringSplitOptions.RemoveEmptyEntries);
416+
List<WildcardPattern> patterns = new List<WildcardPattern>();
417+
parts.ForEach(p => patterns.Add(new WildcardPattern(p, WildcardOptions.IgnoreCase)));
418+
if (parts.Length == 1)
419+
{
420+
output = output.Select(t => new { Id = new ResourceIdentifier((string)GetPropertyValue(t, idProperty)), Resource = t })
421+
.Where(p => IsMatch(p.Id, "ResourceName", patterns.Last()))
422+
.Select(r => r.Resource);
423+
}
424+
else if (parts.Length == 2)
425+
{
426+
output = output.Select(t => new { Id = new ResourceIdentifier((string)GetPropertyValue(t, idProperty)), Resource = t })
427+
.Where(p => IsMatch(p.Id, "ResourceName", patterns.Last()) && IsParentNameMatch(p.Id, patterns.First()))
428+
.Select(r => r.Resource);
429+
}
419430
}
420-
421431
}
422432
else
423433
{
@@ -466,6 +476,21 @@ private bool IsMatch<T>(T resource, string property, WildcardPattern pattern)
466476
return !string.IsNullOrEmpty(value) && pattern.IsMatch(value);
467477
}
468478

479+
private bool IsParentNameMatch<T>(T resource, WildcardPattern pattern)
480+
{
481+
string value = (string)GetPropertyValue(resource, "ParentResource");
482+
if (!string.IsNullOrEmpty(value))
483+
{
484+
int parentNameStartIdx = value.LastIndexOf('/');
485+
if (parentNameStartIdx > 0)
486+
{
487+
value = value.Substring(parentNameStartIdx + 1);
488+
}
489+
return !string.IsNullOrEmpty(value) && pattern.IsMatch(value);
490+
}
491+
return false;
492+
}
493+
469494
public bool ShouldListBySubscription(string resourceGroupName, string name)
470495
{
471496
if (string.IsNullOrEmpty(resourceGroupName))

0 commit comments

Comments
 (0)