Skip to content

Commit 5d1cbc8

Browse files
committed
Fixed a bug to continue visting NextPageLink when listing key vaults from ARM API
1 parent 4c65590 commit 5d1cbc8

File tree

3 files changed

+35
-12
lines changed

3 files changed

+35
-12
lines changed

src/KeyVault/KeyVault/ChangeLog.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,8 @@
1818
- Additional information about change #1
1919
-->
2020
## Upcoming Release
21-
21+
* Fixed a bug to continue visting `NextPageLink` when listing key vaults from ARM API
22+
2223
## Version 4.3.0
2324
* `New-AzKeyVaultManagedHsm`: supported specifying how long a deleted managed hsm is retained by `SoftDeleteRetentionInDays` and enabling purge protection by `EnablePurgeProtection`
2425
* `Update-AzKeyVaultManagedHsm`: supported enabling purge protection by `EnablePurgeProtection`

src/KeyVault/KeyVault/Commands/GetAzureKeyVault.cs

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414

1515
using System;
1616
using System.Collections;
17+
using System.Collections.Generic;
18+
using System.Linq;
1719
using System.Management.Automation;
1820
using Microsoft.Azure.Commands.KeyVault.Helpers;
1921
using Microsoft.Azure.Commands.KeyVault.Models;
@@ -103,7 +105,13 @@ public override void ExecuteCmdlet()
103105
switch (ParameterSetName)
104106
{
105107
case GetVaultParameterSet:
106-
ResourceGroupName = string.IsNullOrWhiteSpace(ResourceGroupName) ? GetResourceGroupName(VaultName) : ResourceGroupName;
108+
List<PSKeyVaultIdentityItem> vaults = null;
109+
110+
if (string.IsNullOrWhiteSpace(ResourceGroupName))
111+
{
112+
vaults = ListVaults(ResourceGroupName, Tag);
113+
ResourceGroupName = vaults?.FirstOrDefault(r => r.VaultName.Equals(VaultName, StringComparison.OrdinalIgnoreCase))?.ResourceGroupName;
114+
}
107115

108116
if (ShouldGetByName(ResourceGroupName, VaultName))
109117
{
@@ -115,7 +123,7 @@ public override void ExecuteCmdlet()
115123
}
116124
else
117125
{
118-
WriteObject(TopLevelWildcardFilter(ResourceGroupName, VaultName, ListVaults(ResourceGroupName, Tag)), true);
126+
WriteObject(TopLevelWildcardFilter(ResourceGroupName, VaultName, vaults ?? ListVaults(ResourceGroupName, Tag)), true);
119127
}
120128

121129
break;

src/KeyVault/KeyVault/Models/KeyVaultManagementCmdletBase.cs

Lines changed: 23 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -141,8 +141,8 @@ protected List<PSKeyVaultIdentityItem> ListVaults(string resourceGroupName, Hash
141141
if (ShouldListByResourceGroup(resourceGroupName, null))
142142
{
143143
listResult = ListByResourceGroup(resourceGroupName,
144-
new Rest.Azure.OData.ODataQuery<GenericResourceFilter>(
145-
r => r.ResourceType == resourceType));
144+
new Rest.Azure.OData.ODataQuery<GenericResourceFilter>(
145+
r => r.ResourceType == resourceType));
146146
}
147147
else
148148
{
@@ -161,22 +161,36 @@ protected List<PSKeyVaultIdentityItem> ListVaults(string resourceGroupName, Hash
161161
return vaults;
162162
}
163163

164-
public virtual IEnumerable<PSKeyVaultIdentityItem> ListResources(Rest.Azure.OData.ODataQuery<GenericResourceFilter> filter = null, ulong first = ulong.MaxValue, ulong skip = ulong.MinValue)
164+
public virtual IEnumerable<PSKeyVaultIdentityItem> ListResources(Rest.Azure.OData.ODataQuery<GenericResourceFilter> filter = null)
165165
{
166166
IResourceManagementClient armClient = ResourceClient;
167-
168-
return new GenericPageEnumerable<GenericResource>(() => armClient.Resources.List(filter), armClient.Resources.ListNext, first, skip).Select(r => new PSKeyVaultIdentityItem(r));
167+
var response = armClient.Resources.List(filter);
168+
var results = new List<PSKeyVaultIdentityItem>();
169+
results.AddRange(response.Select(r => new PSKeyVaultIdentityItem(r)));
170+
while (!string.IsNullOrEmpty(response.NextPageLink))
171+
{
172+
response = armClient.Resources.ListNext(response.NextPageLink);
173+
results.AddRange(response.Select(r => new PSKeyVaultIdentityItem(r)));
174+
}
175+
return results;
169176
}
170177

171178
private IEnumerable<PSKeyVaultIdentityItem> ListByResourceGroup(
172179
string resourceGroupName,
173-
Rest.Azure.OData.ODataQuery<GenericResourceFilter> filter,
174-
ulong first = ulong.MaxValue,
175-
ulong skip = ulong.MinValue)
180+
Rest.Azure.OData.ODataQuery<GenericResourceFilter> filter)
176181
{
177182
IResourceManagementClient armClient = ResourceClient;
178183

179-
return new GenericPageEnumerable<GenericResource>(() => armClient.ResourceGroups.ListResources(resourceGroupName, filter), armClient.ResourceGroups.ListResourcesNext, first, skip).Select(r => new PSKeyVaultIdentityItem(r));
184+
var response = armClient.ResourceGroups.ListResources(resourceGroupName, filter);
185+
var results = new List<PSKeyVaultIdentityItem>();
186+
results.AddRange(response.Select(r => new PSKeyVaultIdentityItem(r)));
187+
188+
while (!string.IsNullOrEmpty(response.NextPageLink))
189+
{
190+
response = armClient.ResourceGroups.ListResourcesNext(response.NextPageLink);
191+
results.AddRange(response.Select(r => new PSKeyVaultIdentityItem(r)));
192+
}
193+
return results;
180194
}
181195

182196
protected string GetResourceGroupName(string name, bool isHsm = false)

0 commit comments

Comments
 (0)