Skip to content

Commit 7e1587f

Browse files
authored
Storage: Eliminating listing storage account when its resource ID is available to use GET (#28617)
* Eliminating SA list when the full ARM ID is available (using GET instead) * include storage_account_queue_properties_data_plane_resource
1 parent 87fed1a commit 7e1587f

7 files changed

+41
-16
lines changed

internal/services/storage/client/helpers.go

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -184,6 +184,32 @@ func (c Client) FindAccount(ctx context.Context, subscriptionIdRaw, accountName
184184
return nil, nil
185185
}
186186

187+
func (c Client) GetAccount(ctx context.Context, id commonids.StorageAccountId) (*AccountDetails, error) {
188+
cacheAccountsLock.Lock()
189+
defer cacheAccountsLock.Unlock()
190+
191+
if existing, ok := storageAccountsCache[id.StorageAccountName]; ok {
192+
return &existing, nil
193+
}
194+
195+
resp, err := c.ResourceManager.StorageAccounts.GetProperties(ctx, id, storageaccounts.DefaultGetPropertiesOperationOptions())
196+
if err != nil {
197+
return nil, fmt.Errorf("retrieving %s: %v", id, err)
198+
}
199+
200+
if resp.Model == nil {
201+
return nil, fmt.Errorf("unexpected null model of %s", id)
202+
}
203+
204+
account, err := populateAccountDetails(id, *resp.Model)
205+
if err != nil {
206+
return nil, fmt.Errorf("populating details for %s: %+v", id, err)
207+
}
208+
209+
storageAccountsCache[id.StorageAccountName] = *account
210+
return account, nil
211+
}
212+
187213
func populateAccountDetails(accountId commonids.StorageAccountId, account storageaccounts.StorageAccount) (*AccountDetails, error) {
188214
out := AccountDetails{
189215
Kind: pointer.From(account.Kind),

internal/services/storage/storage_account_queue_properties_data_plane_resource.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -297,7 +297,7 @@ func (s AccountQueuePropertiesResource) Create() sdk.ResourceFunc {
297297
}
298298
accountReplicationType := accountReplicationTypeParts[1]
299299

300-
accountDetails, err := storageClient.FindAccount(ctx, accountID.SubscriptionId, accountID.StorageAccountName)
300+
accountDetails, err := storageClient.GetAccount(ctx, *accountID)
301301
if err != nil {
302302
return err
303303
}
@@ -398,7 +398,7 @@ func (s AccountQueuePropertiesResource) Read() sdk.ResourceFunc {
398398

399399
state.StorageAccountId = id.ID()
400400

401-
account, err := storageClient.FindAccount(ctx, id.SubscriptionId, id.StorageAccountName)
401+
account, err := storageClient.GetAccount(ctx, *id)
402402
if err != nil {
403403
return metadata.MarkAsGone(id)
404404
}
@@ -481,7 +481,7 @@ func (s AccountQueuePropertiesResource) Delete() sdk.ResourceFunc {
481481
return err
482482
}
483483

484-
account, err := storageClient.FindAccount(ctx, id.SubscriptionId, id.StorageAccountName)
484+
account, err := storageClient.GetAccount(ctx, *id)
485485
if err != nil {
486486
return fmt.Errorf("retrieving %s: %+v", *id, err)
487487
}
@@ -514,7 +514,7 @@ func (s AccountQueuePropertiesResource) Update() sdk.ResourceFunc {
514514
return err
515515
}
516516

517-
account, err := storageClient.FindAccount(ctx, id.SubscriptionId, id.StorageAccountName)
517+
account, err := storageClient.GetAccount(ctx, *id)
518518
if err != nil {
519519
return fmt.Errorf("retrieving %s: %+v", *id, err)
520520
}

internal/services/storage/storage_account_queue_properties_data_plane_resource_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,7 @@ func (r AccountQueuePropertiesResource) Exists(ctx context.Context, client *clie
158158
return nil, err
159159
}
160160

161-
account, err := client.Storage.FindAccount(ctx, id.SubscriptionId, id.StorageAccountName)
161+
account, err := client.Storage.GetAccount(ctx, *id)
162162
if err != nil {
163163
return nil, fmt.Errorf("retrieving %s: %+v", *id, err)
164164
}

internal/services/storage/storage_account_resource.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1516,7 +1516,7 @@ func resourceStorageAccountCreate(d *pluginsdk.ResourceData, meta interface{}) e
15161516
// Start of Data Plane access - this entire block can be removed for 5.0, as the data_plane_available flag becomes redundant at that time.
15171517
if !features.FivePointOh() && dataPlaneAvailable {
15181518
dataPlaneClient := meta.(*clients.Client).Storage
1519-
dataPlaneAccount, err := storageUtils.FindAccount(ctx, id.SubscriptionId, id.StorageAccountName)
1519+
dataPlaneAccount, err := storageUtils.GetAccount(ctx, id)
15201520
if err != nil {
15211521
return fmt.Errorf("retrieving %s: %+v", id, err)
15221522
}
@@ -1952,7 +1952,7 @@ func resourceStorageAccountUpdate(d *pluginsdk.ResourceData, meta interface{}) e
19521952
return fmt.Errorf("`queue_properties` aren't supported for account kind %q in sku tier %q", accountKind, accountTier)
19531953
}
19541954

1955-
account, err := dataPlaneClient.FindAccount(ctx, id.SubscriptionId, id.StorageAccountName)
1955+
account, err := dataPlaneClient.GetAccount(ctx, *id)
19561956
if err != nil {
19571957
return fmt.Errorf("retrieving %s: %+v", *id, err)
19581958
}
@@ -1980,7 +1980,7 @@ func resourceStorageAccountUpdate(d *pluginsdk.ResourceData, meta interface{}) e
19801980
return fmt.Errorf("`static_website` aren't supported for account kind %q in sku tier %q", accountKind, accountTier)
19811981
}
19821982

1983-
account, err := dataPlaneClient.FindAccount(ctx, id.SubscriptionId, id.StorageAccountName)
1983+
account, err := dataPlaneClient.GetAccount(ctx, *id)
19841984
if err != nil {
19851985
return fmt.Errorf("retrieving %s: %+v", *id, err)
19861986
}
@@ -2057,7 +2057,7 @@ func resourceStorageAccountRead(d *pluginsdk.ResourceData, meta interface{}) err
20572057
}
20582058

20592059
// we then need to find the storage account
2060-
account, err := storageUtils.FindAccount(ctx, id.SubscriptionId, id.StorageAccountName)
2060+
account, err := storageUtils.GetAccount(ctx, *id)
20612061
if err != nil {
20622062
return fmt.Errorf("retrieving %s: %+v", *id, err)
20632063
}

internal/services/storage/storage_account_static_website_data_plane_resource.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ func (a AccountStaticWebsiteResource) Create() sdk.ResourceFunc {
103103
}
104104
accountReplicationType := accountReplicationTypeParts[1]
105105

106-
accountDetails, err := storageClient.FindAccount(ctx, accountID.SubscriptionId, accountID.StorageAccountName)
106+
accountDetails, err := storageClient.GetAccount(ctx, *accountID)
107107
if err != nil {
108108
return err
109109
}
@@ -157,7 +157,7 @@ func (a AccountStaticWebsiteResource) Read() sdk.ResourceFunc {
157157

158158
state.StorageAccountId = id.ID()
159159

160-
accountDetails, err := storageClient.FindAccount(ctx, id.SubscriptionId, id.StorageAccountName)
160+
accountDetails, err := storageClient.GetAccount(ctx, *id)
161161
if err != nil {
162162
return metadata.MarkAsGone(id)
163163
}
@@ -193,7 +193,7 @@ func (a AccountStaticWebsiteResource) Delete() sdk.ResourceFunc {
193193
return err
194194
}
195195

196-
accountDetails, err := storageClient.FindAccount(ctx, id.SubscriptionId, id.StorageAccountName)
196+
accountDetails, err := storageClient.GetAccount(ctx, *id)
197197
if err != nil {
198198
return nil // lint:ignore nilerr If we don't find the account we can safely assume we don't need to remove the website since it must already be deleted
199199
}
@@ -233,7 +233,7 @@ func (a AccountStaticWebsiteResource) Update() sdk.ResourceFunc {
233233
return err
234234
}
235235

236-
accountDetails, err := storageClient.FindAccount(ctx, id.SubscriptionId, id.StorageAccountName)
236+
accountDetails, err := storageClient.GetAccount(ctx, *id)
237237
if err != nil {
238238
return err
239239
}

internal/services/storage/storage_account_static_website_data_plane_resource_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ func (r AccountStaticWebsiteResource) Exists(ctx context.Context, client *client
105105
return nil, err
106106
}
107107

108-
accountDetails, err := client.Storage.FindAccount(ctx, id.SubscriptionId, id.StorageAccountName)
108+
accountDetails, err := client.Storage.GetAccount(ctx, *id)
109109
if err != nil {
110110
return nil, fmt.Errorf("retrieving %s: %+v", *id, err)
111111
}

internal/services/storage/storage_containers_data_source.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,6 @@ func (r storageContainersDataSource) Read() sdk.ResourceFunc {
8989

9090
Func: func(ctx context.Context, metadata sdk.ResourceMetaData) error {
9191
blobContainersClient := metadata.Client.Storage.ResourceManager.BlobContainers
92-
subscriptionId := metadata.Client.Account.SubscriptionId
9392

9493
var plan storageContainersDataSourceModel
9594
if err := metadata.Decode(&plan); err != nil {
@@ -101,7 +100,7 @@ func (r storageContainersDataSource) Read() sdk.ResourceFunc {
101100
return err
102101
}
103102

104-
account, err := metadata.Client.Storage.FindAccount(ctx, subscriptionId, id.StorageAccountName)
103+
account, err := metadata.Client.Storage.GetAccount(ctx, *id)
105104
if err != nil {
106105
return fmt.Errorf("retrieving Storage Account %q: %v", id.StorageAccountName, err)
107106
}

0 commit comments

Comments
 (0)