Skip to content

Commit 16ae5f7

Browse files
committed
[Storage] Support ORS (Azure#11752)
* [Storage] Support ORS * [Storage] Fix CI failure
1 parent 2de9c77 commit 16ae5f7

20 files changed

+4301
-71
lines changed

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,5 +72,12 @@ public void TestStorageBlobRestore()
7272
{
7373
TestController.NewInstance.RunPsTest(_logger, "Test-StorageBlobRestore");
7474
}
75+
76+
[Fact]
77+
[Trait(Category.AcceptanceType, Category.CheckIn)]
78+
public void TestStorageBlobORS()
79+
{
80+
TestController.NewInstance.RunPsTest(_logger, "Test-StorageBlobORS");
81+
}
7582
}
7683
}

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

Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -533,3 +533,107 @@ function Test-StorageBlobRestore
533533
}
534534

535535

536+
<#
537+
.SYNOPSIS
538+
Test StorageAccount Object Replication
539+
.DESCRIPTION
540+
SmokeTest
541+
#>
542+
function Test-StorageBlobORS
543+
{
544+
# Setup
545+
$rgname = Get-StorageManagementTestResourceName;
546+
547+
try
548+
{
549+
# Test
550+
$stoname1 = 'sto' + $rgname + 'src';
551+
$stoname2 = 'sto' + $rgname + 'dest';
552+
$stotype = 'Standard_LRS';
553+
$loc = Get-ProviderLocation ResourceManagement;
554+
$kind = 'StorageV2'
555+
556+
Write-Verbose "RGName: $rgname | Loc: $loc"
557+
New-AzResourceGroup -Name $rgname -Location $loc;
558+
559+
$loc = Get-ProviderLocation_Canary ResourceManagement;
560+
New-AzStorageAccount -ResourceGroupName $rgname -Name $stoname1 -Location $loc -Type $stotype -Kind $kind
561+
New-AzStorageAccount -ResourceGroupName $rgname -Name $stoname2 -Location $loc -Type $stotype -Kind $kind
562+
563+
# Enable Blob Enable Changefeed and versioning
564+
Update-AzStorageBlobServiceProperty -ResourceGroupName $rgname -StorageAccountName $stoname1 -EnableChangeFeed $true -IsVersioningEnabled $true
565+
Update-AzStorageBlobServiceProperty -ResourceGroupName $rgname -StorageAccountName $stoname2 -EnableChangeFeed $true -IsVersioningEnabled $true
566+
$property1 = Get-AzStorageBlobServiceProperty -ResourceGroupName $rgname -StorageAccountName $stoname1
567+
Assert-AreEqual $true $property1.ChangeFeed.Enabled
568+
Assert-AreEqual $true $property1.IsVersioningEnabled
569+
$property2 = Get-AzStorageBlobServiceProperty -ResourceGroupName $rgname -StorageAccountName $stoname2
570+
Assert-AreEqual $true $property2.ChangeFeed.Enabled
571+
Assert-AreEqual $true $property2.IsVersioningEnabled
572+
573+
# create containers
574+
Get-AzStorageAccount -ResourceGroupName $rgname -StorageAccountName $stoname1 | New-AzRmStorageContainer -name src
575+
Get-AzStorageAccount -ResourceGroupName $rgname -StorageAccountName $stoname2 | New-AzRmStorageContainer -name dest
576+
Get-AzStorageAccount -ResourceGroupName $rgname -StorageAccountName $stoname1 | New-AzRmStorageContainer -name src1
577+
Get-AzStorageAccount -ResourceGroupName $rgname -StorageAccountName $stoname2 | New-AzRmStorageContainer -name dest1
578+
579+
# create rules
580+
$minCreationTime = "2019-01-01T16:00:00Z"
581+
$rule1 = New-AzStorageObjectReplicationPolicyRule -SourceContainer src1 -DestinationContainer dest1
582+
$rule2 = New-AzStorageObjectReplicationPolicyRule -SourceContainer src -DestinationContainer dest -MinCreationTime $minCreationTime -PrefixMatch a,abc,dd #-Tag t1,t2,t3
583+
584+
# set policy to dest account
585+
$destPolicy = Set-AzStorageObjectReplicationPolicy -ResourceGroupName $rgname -StorageAccountName $stoname2 -PolicyId default -SourceAccount $stoname1 -Rule $rule1,$rule2
586+
$policyID = $destPolicy.PolicyId
587+
Assert-AreEqual $stoname1 $destPolicy.SourceAccount
588+
Assert-AreEqual $stoname2 $destPolicy.DestinationAccount
589+
Assert-AreEqual 2 $destPolicy.Rules.Count
590+
Assert-AreEqual src1 $destPolicy.Rules[0].SourceContainer
591+
Assert-AreEqual dest1 $destPolicy.Rules[0].DestinationContainer
592+
Assert-AreEqual $null $destPolicy.Rules[0].Filters
593+
Assert-AreEqual src $destPolicy.Rules[1].SourceContainer
594+
Assert-AreEqual dest $destPolicy.Rules[1].DestinationContainer
595+
Assert-AreEqual 3 $destPolicy.Rules[1].Filters.PrefixMatch.Count
596+
Assert-AreEqual $minCreationTime ($destPolicy.Rules[1].Filters.MinCreationTime.ToUniversalTime().ToString("s")+"Z")
597+
$destPolicy = Get-AzStorageObjectReplicationPolicy -ResourceGroupName $rgname -StorageAccountName $stoname2 -PolicyId $destPolicy.PolicyId
598+
Assert-AreEqual $policyID $destPolicy.PolicyId
599+
Assert-AreEqual $stoname1 $destPolicy.SourceAccount
600+
Assert-AreEqual $stoname2 $destPolicy.DestinationAccount
601+
Assert-AreEqual 2 $destPolicy.Rules.Count
602+
Assert-AreEqual src1 $destPolicy.Rules[0].SourceContainer
603+
Assert-AreEqual dest1 $destPolicy.Rules[0].DestinationContainer
604+
Assert-AreEqual $null $destPolicy.Rules[0].Filters
605+
Assert-AreEqual src $destPolicy.Rules[1].SourceContainer
606+
Assert-AreEqual dest $destPolicy.Rules[1].DestinationContainer
607+
Assert-AreEqual 3 $destPolicy.Rules[1].Filters.PrefixMatch.Count
608+
Assert-AreEqual $minCreationTime ($destPolicy.Rules[1].Filters.MinCreationTime.ToUniversalTime().ToString("s")+"Z")
609+
610+
#Set policy to source account
611+
Set-AzStorageObjectReplicationPolicy -ResourceGroupName $rgname -StorageAccountName $stoname1 -InputObject $destPolicy
612+
$srcPolicy = Get-AzStorageObjectReplicationPolicy -ResourceGroupName $rgname -StorageAccountName $stoname1
613+
Assert-AreEqual $policyID $srcPolicy.PolicyId
614+
Assert-AreEqual $stoname1 $srcPolicy.SourceAccount
615+
Assert-AreEqual $stoname2 $srcPolicy.DestinationAccount
616+
Assert-AreEqual 2 $srcPolicy.Rules.Count
617+
Assert-AreEqual src1 $srcPolicy.Rules[0].SourceContainer
618+
Assert-AreEqual dest1 $srcPolicy.Rules[0].DestinationContainer
619+
Assert-AreEqual $null $srcPolicy.Rules[0].Filters
620+
Assert-AreEqual src $srcPolicy.Rules[1].SourceContainer
621+
Assert-AreEqual dest $srcPolicy.Rules[1].DestinationContainer
622+
Assert-AreEqual 3 $srcPolicy.Rules[1].Filters.PrefixMatch.Count
623+
Assert-AreEqual $minCreationTime ($srcPolicy.Rules[1].Filters.MinCreationTime.ToUniversalTime().ToString("s")+"Z")
624+
625+
#remove policies
626+
Remove-AzStorageObjectReplicationPolicy -ResourceGroupName $rgname -StorageAccountName $stoname2 -PolicyId $destPolicy.PolicyId
627+
Remove-AzStorageObjectReplicationPolicy -ResourceGroupName $rgname -StorageAccountName $stoname1 -PolicyId $srcPolicy.PolicyId
628+
629+
Remove-AzStorageAccount -Force -ResourceGroupName $rgname -Name $stoname1;
630+
Remove-AzStorageAccount -Force -ResourceGroupName $rgname -Name $stoname2;
631+
}
632+
finally
633+
{
634+
# Cleanup
635+
Clean-ResourceGroup $rgname
636+
}
637+
}
638+
639+

src/Storage/Storage.Management.Test/SessionRecords/Microsoft.Azure.Commands.Management.Storage.Test.ScenarioTests.StorageBlobTests/TestStorageBlobORS.json

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

src/Storage/Storage.Management/Az.Storage.psd1

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,9 @@ CmdletsToExport = 'Get-AzStorageAccount', 'Get-AzStorageAccountKey',
171171
'Disable-AzStorageBlobRestorePolicy',
172172
'New-AzStorageBlobRangeToRestore', 'Restore-AzStorageBlobRange',
173173
'New-AzStorageEncryptionScope', 'Update-AzStorageEncryptionScope',
174-
'Get-AzStorageEncryptionScope'
174+
'Get-AzStorageEncryptionScope',
175+
'New-AzStorageObjectReplicationPolicyRule', 'Set-AzStorageObjectReplicationPolicy',
176+
'Get-AzStorageObjectReplicationPolicy', 'Remove-AzStorageObjectReplicationPolicy'
175177

176178
# Variables to export from this module
177179
# VariablesToExport = @()

src/Storage/Storage.Management/Blob/UpdateAzureStorageBlobServiceProperties.cs

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ public bool EnableChangeFeed
9191
{
9292
get
9393
{
94-
return enableChangeFeed is null? false : enableChangeFeed.Value;
94+
return enableChangeFeed is null ? false : enableChangeFeed.Value;
9595
}
9696
set
9797
{
@@ -100,6 +100,23 @@ public bool EnableChangeFeed
100100
}
101101
private bool? enableChangeFeed = null;
102102

103+
[Parameter(
104+
Mandatory = false,
105+
HelpMessage = "Gets or sets versioning is enabled if set to true.")]
106+
[ValidateNotNullOrEmpty]
107+
public bool IsVersioningEnabled
108+
{
109+
get
110+
{
111+
return isVersioningEnabled is null ? false : isVersioningEnabled.Value;
112+
}
113+
set
114+
{
115+
isVersioningEnabled = value;
116+
}
117+
}
118+
private bool? isVersioningEnabled = null;
119+
103120
public override void ExecuteCmdlet()
104121
{
105122
base.ExecuteCmdlet();
@@ -133,6 +150,10 @@ public override void ExecuteCmdlet()
133150
serviceProperties.ChangeFeed = new ChangeFeed();
134151
serviceProperties.ChangeFeed.Enabled = enableChangeFeed;
135152
}
153+
if (isVersioningEnabled != null)
154+
{
155+
serviceProperties.IsVersioningEnabled = isVersioningEnabled;
156+
}
136157

137158
serviceProperties = this.StorageClient.BlobServices.SetServiceProperties(this.ResourceGroupName, this.StorageAccountName, serviceProperties);
138159

src/Storage/Storage.Management/ChangeLog.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,13 @@
1818
- Additional information about change #1
1919
-->
2020
## Upcoming Release
21+
* Support enable/disable versioning on Blob Service of a Storage account
22+
- `Update-AzStorageBlobServiceProperty`
23+
* Support Set/Get/Remove Object Replication Policy on Storage accounts
24+
- `New-AzStorageObjectReplicationPolicyRule`
25+
- `Set-AzStorageObjectReplicationPolicy`
26+
- `Get-AzStorageObjectReplicationPolicy`
27+
- `Remove-AzStorageObjectReplicationPolicy`
2128

2229
## Version 1.14.1
2330
* Supported create container and upload blob with Encryption Scope setting
@@ -31,6 +38,9 @@
3138
- `Get-AzStorageAccountNetworkRuleSet`
3239
* Fixed #11624: Skip duplicated rules when add NetworkRules, to avoid server failure
3340
- `Add-AzStorageAccountNetworkRule`
41+
* Supported create container and upload blob with Encryption Scope setting
42+
- `New-AzStorageContainer`
43+
- `Set-AzStorageBlobContent`
3444

3545
## Version 1.14.0
3646
* Added breaking change notice for Azure File cmdlets output change in a future release

src/Storage/Storage.Management/Models/PSBlobServiceProperties.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ public class PSBlobServiceProperties
4444
[Ps1Xml(Label = "RestorePolicy.LastEnabledTime", Target = ViewControl.Table, ScriptBlock = "$_.RestorePolicy.LastEnabledTime", Position = 7)]
4545
public PSRestorePolicy RestorePolicy { get; set; }
4646
public PSCorsRules Cors { get; set; }
47+
public bool? IsVersioningEnabled { get; set; }
4748

4849
public PSBlobServiceProperties()
4950
{ }
@@ -60,6 +61,7 @@ public PSBlobServiceProperties(BlobServiceProperties policy)
6061
this.DeleteRetentionPolicy = policy.DeleteRetentionPolicy is null ? null : new PSDeleteRetentionPolicy(policy.DeleteRetentionPolicy);
6162
this.RestorePolicy = policy.RestorePolicy is null ? null : new PSRestorePolicy(policy.RestorePolicy);
6263
this.ChangeFeed = policy.ChangeFeed is null ? null : new PSChangeFeed(policy.ChangeFeed);
64+
this.IsVersioningEnabled = policy.IsVersioningEnabled;
6365
}
6466
public BlobServiceProperties ParseBlobServiceProperties()
6567
{
@@ -69,7 +71,8 @@ public BlobServiceProperties ParseBlobServiceProperties()
6971
DefaultServiceVersion = this.DefaultServiceVersion,
7072
DeleteRetentionPolicy = this.DeleteRetentionPolicy is null ? null : this.DeleteRetentionPolicy.ParseDeleteRetentionPolicy(),
7173
RestorePolicy = this.RestorePolicy is null ? null : this.RestorePolicy.ParseRestorePolicy(),
72-
ChangeFeed = this.ChangeFeed is null ? null : this.ChangeFeed.ParseChangeFeed()
74+
ChangeFeed = this.ChangeFeed is null ? null : this.ChangeFeed.ParseChangeFeed(),
75+
IsVersioningEnabled = this.IsVersioningEnabled
7376
};
7477
}
7578

0 commit comments

Comments
 (0)