Skip to content

Commit 9dcde6e

Browse files
authored
[Storage] Support Extended location (#14718)
1 parent 23df797 commit 9dcde6e

File tree

7 files changed

+921
-2
lines changed

7 files changed

+921
-2
lines changed

src/Storage/Storage.Management.Test/ScenarioTests/StorageAccountTests.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -225,5 +225,12 @@ public void TestNewSetAzureStorageAccountAllowSharedKeyAccess()
225225
{
226226
TestRunner.RunTestScript("Test-NewSetAzureStorageAccountAllowSharedKeyAccess");
227227
}
228+
229+
[Fact]
230+
[Trait(Category.AcceptanceType, Category.CheckIn)]
231+
public void TestNewAzureStorageAccountEdgeZone()
232+
{
233+
TestRunner.RunTestScript("Test-NewAzureStorageAccountEdgeZone");
234+
}
228235
}
229236
}

src/Storage/Storage.Management.Test/ScenarioTests/StorageAccountTests.ps1

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1553,4 +1553,46 @@ function Test-NewSetAzStorageAccount_RoutingPreference
15531553
# Cleanup
15541554
Clean-ResourceGroup $rgname
15551555
}
1556+
}
1557+
1558+
<#
1559+
.SYNOPSIS
1560+
Test Test-NewAzureStorageAccountEdgeZone
1561+
.DESCRIPTION
1562+
SmokeTest
1563+
#>
1564+
function Test-NewAzureStorageAccountEdgeZone
1565+
{
1566+
# Setup
1567+
$rgname = Get-StorageManagementTestResourceName;
1568+
1569+
try
1570+
{
1571+
# Test
1572+
$stoname = 'sto' + $rgname;
1573+
$stotype = 'Premium_LRS';
1574+
$loc = Get-ProviderLocation ResourceManagement;
1575+
$kind = 'StorageV2'
1576+
1577+
New-AzResourceGroup -Name $rgname -Location $loc;
1578+
Write-Output ("Resource Group created")
1579+
1580+
# new account
1581+
New-AzStorageAccount -ResourceGroupName $rgname -Name $stoname -Location $loc -SkuName $stotype -EdgeZone "microsoftlosangeles1"
1582+
1583+
Retry-IfException { $global:sto = Get-AzStorageAccount -ResourceGroupName $rgname -Name $stoname; }
1584+
Assert-AreEqual $stoname $sto.StorageAccountName;
1585+
Assert-AreEqual $stotype $sto.Sku.Name;
1586+
Assert-AreEqual $loc.ToLower().Replace(" ", "") $sto.Location;
1587+
Assert-AreEqual $kind $sto.Kind;
1588+
Assert-AreEqual "EdgeZone" $sto.ExtendedLocation.Type;
1589+
Assert-AreEqual "microsoftlosangeles1" $sto.ExtendedLocation.Name;
1590+
1591+
Remove-AzStorageAccount -Force -ResourceGroupName $rgname -Name $stoname;
1592+
}
1593+
finally
1594+
{
1595+
# Cleanup
1596+
Clean-ResourceGroup $rgname
1597+
}
15561598
}

src/Storage/Storage.Management.Test/SessionRecords/Microsoft.Azure.Commands.Management.Storage.Test.ScenarioTests.StorageAccountTests/TestNewAzureStorageAccountEdgeZone.json

Lines changed: 810 additions & 0 deletions
Large diffs are not rendered by default.

src/Storage/Storage.Management/ChangeLog.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818
- Additional information about change #1
1919
-->
2020
## Upcoming Release
21+
* Supported EdgeZone in create storage account
22+
- `New-AzStorageAccount`
2123
* Fixed an issue that delete immutable blob will prompt incorrect message.
2224
- `Remove-AzStorageAccount`
2325

src/Storage/Storage.Management/Models/PSStorageAccount.cs

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ public PSStorageAccount(StorageModels.StorageAccount storageAccount)
6161
this.RoutingPreference = PSRoutingPreference.ParsePSRoutingPreference(storageAccount.RoutingPreference);
6262
this.BlobRestoreStatus = storageAccount.BlobRestoreStatus is null ? null : new PSBlobRestoreStatus(storageAccount.BlobRestoreStatus);
6363
this.EnableNfsV3 = storageAccount.EnableNfsV3;
64+
this.ExtendedLocation = storageAccount.ExtendedLocation is null ? null : new PSExtendedLocation(storageAccount.ExtendedLocation);
6465
this.AllowSharedKeyAccess = storageAccount.AllowSharedKeyAccess;
6566

6667
}
@@ -140,6 +141,8 @@ public PSStorageAccount(StorageModels.StorageAccount storageAccount)
140141

141142
public bool? AllowSharedKeyAccess { get; set; }
142143

144+
public PSExtendedLocation ExtendedLocation { get; set; }
145+
143146
public static PSStorageAccount Create(StorageModels.StorageAccount storageAccount, IStorageManagementClient client)
144147
{
145148
var result = new PSStorageAccount(storageAccount);
@@ -207,4 +210,19 @@ public Sku ParseSku()
207210
return new Sku(Name, Tier);
208211
}
209212
}
213+
214+
public class PSExtendedLocation
215+
{
216+
public PSExtendedLocation()
217+
{ }
218+
219+
public PSExtendedLocation(ExtendedLocation extendedLocation)
220+
{
221+
this.Name = extendedLocation.Name;
222+
this.Type = extendedLocation.Type;
223+
}
224+
225+
public string Name { get; set; }
226+
public string Type { get; set; }
227+
}
210228
}

src/Storage/Storage.Management/StorageAccount/NewAzureStorageAccount.cs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -374,6 +374,10 @@ public bool AllowSharedKeyAccess
374374
}
375375
private bool? allowSharedKeyAccess = null;
376376

377+
[Parameter(Mandatory = false, HelpMessage = "Set the extended location name for EdgeZone. If not set, the storage account will be created in Azure main region. Otherwise it will be created in the specified extended location")]
378+
[ValidateNotNullOrEmpty]
379+
public string EdgeZone { get; set; }
380+
377381
public override void ExecuteCmdlet()
378382
{
379383
base.ExecuteCmdlet();
@@ -512,6 +516,14 @@ public override void ExecuteCmdlet()
512516
{
513517
createParameters.AllowSharedKeyAccess = allowSharedKeyAccess;
514518
}
519+
if(this.EdgeZone != null)
520+
{
521+
createParameters.ExtendedLocation = new ExtendedLocation()
522+
{
523+
Type = ExtendedLocationTypes.EdgeZone,
524+
Name = this.EdgeZone
525+
};
526+
}
515527

516528
var createAccountResponse = this.StorageClient.StorageAccounts.Create(
517529
this.ResourceGroupName,

src/Storage/Storage.Management/help/New-AzStorageAccount.md

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ New-AzStorageAccount [-ResourceGroupName] <String> [-Name] <String> [-SkuName] <
2222
[-EnableLargeFileShare] [-PublishMicrosoftEndpoint <Boolean>] [-PublishInternetEndpoint <Boolean>] [-AsJob]
2323
[-EncryptionKeyTypeForTable <String>] [-EncryptionKeyTypeForQueue <String>] [-RequireInfrastructureEncryption]
2424
[-AllowBlobPublicAccess <Boolean>] [-MinimumTlsVersion <String>] [-AllowSharedKeyAccess <Boolean>]
25-
[-DefaultProfile <IAzureContextContainer>] [-RoutingChoice <String>] [<CommonParameters>]
25+
[-EdgeZone <String>] [-DefaultProfile <IAzureContextContainer>] [-RoutingChoice <String>] [<CommonParameters>]
2626
```
2727

2828
### ActiveDirectoryDomainServicesForFile
@@ -37,7 +37,7 @@ New-AzStorageAccount [-ResourceGroupName] <String> [-Name] <String> [-SkuName] <
3737
[-ActiveDirectoryDomainSid <String>] [-ActiveDirectoryAzureStorageSid <String>] [-AsJob]
3838
[-EncryptionKeyTypeForTable <String>] [-EncryptionKeyTypeForQueue <String>] [-RequireInfrastructureEncryption]
3939
[-AllowBlobPublicAccess <Boolean>] [-MinimumTlsVersion <String>] [-AllowSharedKeyAccess <Boolean>]
40-
[-DefaultProfile <IAzureContextContainer>] [-RoutingChoice <String>] [<CommonParameters>]
40+
[-EdgeZone <String>] [-DefaultProfile <IAzureContextContainer>] [-RoutingChoice <String>] [<CommonParameters>]
4141
```
4242

4343
## DESCRIPTION
@@ -172,6 +172,19 @@ InternetEndpoints : {"Blob":"https://mystorageaccount-internetrouting.blob.core
172172

173173
This command creates a Storage account with RoutingPreference setting: PublishMicrosoftEndpoint and PublishInternetEndpoint as true, and RoutingChoice as MicrosoftRouting.
174174

175+
### Example 11: Create a Storage account with EdgeZone
176+
```powershell
177+
PS C:\>$account = New-AzStorageAccount -ResourceGroupName "myresourcegroup" -AccountName "mystorageaccount" -SkuName Premium_LRS -Location westus -EdgeZone "microsoftlosangeles1"
178+
179+
PS C:\>$account.ExtendedLocation
180+
181+
Name Type
182+
---- ----
183+
microsoftlosangeles1 EdgeZone
184+
```
185+
186+
This command creates a Storage account with EdgeZone as "microsoftlosangeles1", then show the created account ExtendedLocation properties.
187+
175188
## PARAMETERS
176189

177190
### -AccessTier
@@ -375,6 +388,21 @@ Accept pipeline input: False
375388
Accept wildcard characters: False
376389
```
377390
391+
### -EdgeZone
392+
Set the extended location name for EdgeZone. If not set, the storage account will be created in Azure main region. Otherwise it will be created in the specified extended location
393+
394+
```yaml
395+
Type: System.String
396+
Parameter Sets: (All)
397+
Aliases:
398+
399+
Required: False
400+
Position: Named
401+
Default value: None
402+
Accept pipeline input: False
403+
Accept wildcard characters: False
404+
```
405+
378406
### -EnableActiveDirectoryDomainServicesForFile
379407
Enable Azure Files Active Directory Domain Service Authentication for the storage account.
380408

0 commit comments

Comments
 (0)