Skip to content

Commit 9a6e271

Browse files
authored
[Storage] Support ORS metric (#27289)
1 parent f215cb0 commit 9a6e271

File tree

7 files changed

+1437
-839
lines changed

7 files changed

+1437
-839
lines changed

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

Lines changed: 36 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -731,44 +731,44 @@ function Test-StorageBlobORS
731731
$stoname1 = 'sto' + $rgname + 'src';
732732
$stoname2 = 'sto' + $rgname + 'dest';
733733
$stotype = 'Standard_LRS';
734-
$loc = Get-ProviderLocation_Canary ResourceManagement;
734+
$loc = Get-ProviderLocation ResourceManagement;
735735
$kind = 'StorageV2'
736736

737737
Write-Verbose "RGName: $rgname | Loc: $loc"
738738
New-AzResourceGroup -Name $rgname -Location $loc;
739739

740-
$loc = Get-ProviderLocation_Canary ResourceManagement;
740+
$loc = Get-ProviderLocation ResourceManagement;
741741
$sto1 = New-AzStorageAccount -ResourceGroupName $rgname -Name $stoname1 -Location $loc -Type $stotype -Kind $kind
742742
$sto2 = New-AzStorageAccount -ResourceGroupName $rgname -Name $stoname2 -Location $loc -Type $stotype -Kind $kind
743-
Assert-Null $sto1.AllowCrossTenantReplication
744-
Assert-Null $sto2.AllowCrossTenantReplication
743+
Assert-AreEqual $false $sto1.AllowCrossTenantReplication
744+
Assert-AreEqual $false $sto2.AllowCrossTenantReplication
745745

746-
# Enable Blob Enable Changefeed and versioning
747-
Update-AzStorageBlobServiceProperty -ResourceGroupName $rgname -StorageAccountName $stoname1 -EnableChangeFeed $true -IsVersioningEnabled $true
748-
Update-AzStorageBlobServiceProperty -ResourceGroupName $rgname -StorageAccountName $stoname2 -EnableChangeFeed $true -IsVersioningEnabled $true
749-
$property1 = Get-AzStorageBlobServiceProperty -ResourceGroupName $rgname -StorageAccountName $stoname1
750-
Assert-AreEqual $true $property1.ChangeFeed.Enabled
751-
Assert-AreEqual $true $property1.IsVersioningEnabled
752-
$property2 = Get-AzStorageBlobServiceProperty -ResourceGroupName $rgname -StorageAccountName $stoname2
753-
Assert-AreEqual $true $property2.ChangeFeed.Enabled
754-
Assert-AreEqual $true $property2.IsVersioningEnabled
755-
756-
# create containers
757-
Get-AzStorageAccount -ResourceGroupName $rgname -StorageAccountName $stoname1 | New-AzRmStorageContainer -name src
758-
Get-AzStorageAccount -ResourceGroupName $rgname -StorageAccountName $stoname2 | New-AzRmStorageContainer -name dest
759-
Get-AzStorageAccount -ResourceGroupName $rgname -StorageAccountName $stoname1 | New-AzRmStorageContainer -name src1
746+
# Enable Blob Enable Changefeed and versioning
747+
Update-AzStorageBlobServiceProperty -ResourceGroupName $rgname -StorageAccountName $stoname1 -EnableChangeFeed $true -IsVersioningEnabled $true
748+
Update-AzStorageBlobServiceProperty -ResourceGroupName $rgname -StorageAccountName $stoname2 -EnableChangeFeed $true -IsVersioningEnabled $true
749+
$property1 = Get-AzStorageBlobServiceProperty -ResourceGroupName $rgname -StorageAccountName $stoname1
750+
Assert-AreEqual $true $property1.ChangeFeed.Enabled
751+
Assert-AreEqual $true $property1.IsVersioningEnabled
752+
$property2 = Get-AzStorageBlobServiceProperty -ResourceGroupName $rgname -StorageAccountName $stoname2
753+
Assert-AreEqual $true $property2.ChangeFeed.Enabled
754+
Assert-AreEqual $true $property2.IsVersioningEnabled
755+
756+
# create containers
757+
Get-AzStorageAccount -ResourceGroupName $rgname -StorageAccountName $stoname1 | New-AzRmStorageContainer -name src
758+
Get-AzStorageAccount -ResourceGroupName $rgname -StorageAccountName $stoname2 | New-AzRmStorageContainer -name dest
759+
Get-AzStorageAccount -ResourceGroupName $rgname -StorageAccountName $stoname1 | New-AzRmStorageContainer -name src1
760760
Get-AzStorageAccount -ResourceGroupName $rgname -StorageAccountName $stoname2 | New-AzRmStorageContainer -name dest1
761-
761+
762762
# create rules
763763
$minCreationTime = "2019-01-01T16:00:00Z"
764764
$rule1 = New-AzStorageObjectReplicationPolicyRule -SourceContainer src1 -DestinationContainer dest1
765765
$rule2 = New-AzStorageObjectReplicationPolicyRule -SourceContainer src -DestinationContainer dest -MinCreationTime $minCreationTime -PrefixMatch a,abc,dd #-Tag t1,t2,t3
766766

767-
# set policy to dest account
768-
$destPolicy = Set-AzStorageObjectReplicationPolicy -ResourceGroupName $rgname -StorageAccountName $stoname2 -PolicyId default -SourceAccount $stoname1 -Rule $rule1,$rule2
769-
$policyID = $destPolicy.PolicyId
770-
Assert-AreEqual $stoname1 $destPolicy.SourceAccount
771-
Assert-AreEqual $stoname2 $destPolicy.DestinationAccount
767+
# set policy to dest account
768+
$destPolicy = Set-AzStorageObjectReplicationPolicy -ResourceGroupName $rgname -StorageAccountName $stoname2 -PolicyId default -SourceAccount $sto1.Id -Rule $rule1,$rule2 -EnableMetric $true
769+
$policyID = $destPolicy.PolicyId
770+
Assert-AreEqual $sto1.Id $destPolicy.SourceAccount
771+
Assert-AreEqual $sto2.Id $destPolicy.DestinationAccount
772772
Assert-AreEqual 2 $destPolicy.Rules.Count
773773
Assert-AreEqual src1 $destPolicy.Rules[0].SourceContainer
774774
Assert-AreEqual dest1 $destPolicy.Rules[0].DestinationContainer
@@ -779,8 +779,8 @@ function Test-StorageBlobORS
779779
Assert-AreEqual $minCreationTime ($destPolicy.Rules[1].Filters.MinCreationTime.ToUniversalTime().ToString("s")+"Z")
780780
$destPolicy = Get-AzStorageObjectReplicationPolicy -ResourceGroupName $rgname -StorageAccountName $stoname2 -PolicyId $destPolicy.PolicyId
781781
Assert-AreEqual $policyID $destPolicy.PolicyId
782-
Assert-AreEqual $stoname1 $destPolicy.SourceAccount
783-
Assert-AreEqual $stoname2 $destPolicy.DestinationAccount
782+
Assert-AreEqual $sto1.Id $destPolicy.SourceAccount
783+
Assert-AreEqual $sto2.Id $destPolicy.DestinationAccount
784784
Assert-AreEqual 2 $destPolicy.Rules.Count
785785
Assert-AreEqual src1 $destPolicy.Rules[0].SourceContainer
786786
Assert-AreEqual dest1 $destPolicy.Rules[0].DestinationContainer
@@ -789,13 +789,14 @@ function Test-StorageBlobORS
789789
Assert-AreEqual dest $destPolicy.Rules[1].DestinationContainer
790790
Assert-AreEqual 3 $destPolicy.Rules[1].Filters.PrefixMatch.Count
791791
Assert-AreEqual $minCreationTime ($destPolicy.Rules[1].Filters.MinCreationTime.ToUniversalTime().ToString("s")+"Z")
792+
Assert-AreEqual $true $destPolicy.Metrics.Enabled
792793

793794
#Set policy to source account
794795
Set-AzStorageObjectReplicationPolicy -ResourceGroupName $rgname -StorageAccountName $stoname1 -InputObject $destPolicy
795796
$srcPolicy = Get-AzStorageObjectReplicationPolicy -ResourceGroupName $rgname -StorageAccountName $stoname1
796797
Assert-AreEqual $policyID $srcPolicy.PolicyId
797-
Assert-AreEqual $stoname1 $srcPolicy.SourceAccount
798-
Assert-AreEqual $stoname2 $srcPolicy.DestinationAccount
798+
Assert-AreEqual $sto1.Id $destPolicy.SourceAccount
799+
Assert-AreEqual $sto2.Id $destPolicy.DestinationAccount
799800
Assert-AreEqual 2 $srcPolicy.Rules.Count
800801
Assert-AreEqual src1 $srcPolicy.Rules[0].SourceContainer
801802
Assert-AreEqual dest1 $srcPolicy.Rules[0].DestinationContainer
@@ -804,6 +805,7 @@ function Test-StorageBlobORS
804805
Assert-AreEqual dest $srcPolicy.Rules[1].DestinationContainer
805806
Assert-AreEqual 3 $srcPolicy.Rules[1].Filters.PrefixMatch.Count
806807
Assert-AreEqual $minCreationTime ($srcPolicy.Rules[1].Filters.MinCreationTime.ToUniversalTime().ToString("s")+"Z")
808+
Assert-AreEqual $true $srcPolicy.Metrics.Enabled
807809
$destPolicy | Remove-AzStorageObjectReplicationPolicy
808810
$srcPolicy | Remove-AzStorageObjectReplicationPolicy
809811

@@ -814,7 +816,7 @@ function Test-StorageBlobORS
814816
Assert-AreEqual $false $sto2.AllowCrossTenantReplication
815817

816818
# Set policy with source account resourceID
817-
Set-AzStorageObjectReplicationPolicy -ResourceGroupName $rgname -StorageAccountName $stoname2 -PolicyId default -SourceAccount $sto1.Id -Rule $rule1,$rule2
819+
Set-AzStorageObjectReplicationPolicy -ResourceGroupName $rgname -StorageAccountName $stoname2 -PolicyId default -SourceAccount $sto1.Id -Rule $rule1,$rule2 -EnableMetric $false
818820
$destPolicy = Get-AzStorageObjectReplicationPolicy -ResourceGroupName $rgname -StorageAccountName $stoname2
819821
$policyID = $destPolicy.PolicyId
820822
Assert-AreEqual $sto1.Id $destPolicy.SourceAccount
@@ -827,6 +829,7 @@ function Test-StorageBlobORS
827829
Assert-AreEqual dest $destPolicy.Rules[1].DestinationContainer
828830
Assert-AreEqual 3 $destPolicy.Rules[1].Filters.PrefixMatch.Count
829831
Assert-AreEqual $minCreationTime ($destPolicy.Rules[1].Filters.MinCreationTime.ToUniversalTime().ToString("s")+"Z")
832+
Assert-AreEqual $false $destPolicy.Metrics.Enabled
830833

831834
Set-AzStorageObjectReplicationPolicy -ResourceGroupName $rgname -StorageAccountName $stoname1 -InputObject $destPolicy
832835
$srcPolicy = Get-AzStorageObjectReplicationPolicy -ResourceGroupName $rgname -StorageAccountName $stoname1
@@ -841,13 +844,14 @@ function Test-StorageBlobORS
841844
Assert-AreEqual dest $srcPolicy.Rules[1].DestinationContainer
842845
Assert-AreEqual 3 $srcPolicy.Rules[1].Filters.PrefixMatch.Count
843846
Assert-AreEqual $minCreationTime ($srcPolicy.Rules[1].Filters.MinCreationTime.ToUniversalTime().ToString("s")+"Z")
847+
Assert-AreEqual $false $srcPolicy.Metrics.Enabled
844848

845849
#remove policies
846850
Remove-AzStorageObjectReplicationPolicy -ResourceGroupName $rgname -StorageAccountName $stoname2 -PolicyId $destPolicy.PolicyId
847851
Remove-AzStorageObjectReplicationPolicy -ResourceGroupName $rgname -StorageAccountName $stoname1 -PolicyId $srcPolicy.PolicyId
848-
849-
Remove-AzStorageAccount -Force -ResourceGroupName $rgname -Name $stoname1;
850-
Remove-AzStorageAccount -Force -ResourceGroupName $rgname -Name $stoname2;
852+
853+
Remove-AzStorageAccount -Force -ResourceGroupName $rgname -Name $stoname1;
854+
Remove-AzStorageAccount -Force -ResourceGroupName $rgname -Name $stoname2;
851855
}
852856
finally
853857
{

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

Lines changed: 1310 additions & 797 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 Enable Metrics when set object replication policy
22+
- `New-AzStorageObjectReplicationPolicyRule`
2123

2224
## Version 8.2.0
2325
* Supported new SkuName when create/update Storage account for Files Provisioned v2 account type: "StandardV2_LRS", "StandardV2_GRS", "StandardV2_ZRS", "StandardV2_GZRS", "PremiumV2_LRS", "PremiumV2_ZRS"

src/Storage/Storage.Management/Models/PSObjectReplicationPolicy.cs

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ public class PSObjectReplicationPolicy
4343
public string DestinationAccount { get; set; }
4444
[Ps1Xml(Label = "Rules", Target = ViewControl.Table, ScriptBlock = "if (($_.Rules -ne $null) -and ($_.Rules.Count -ne 0)) {'[' + $_.Rules[0].RuleId + ',...]'} else {$null}", Position = 6)]
4545
public PSObjectReplicationPolicyRule[] Rules { get; set; }
46+
public PSObjectReplicationPolicyPropertiesMetrics Metrics { get; set; }
4647

4748
public PSObjectReplicationPolicy()
4849
{ }
@@ -59,6 +60,7 @@ public PSObjectReplicationPolicy(ObjectReplicationPolicy policy, string Resource
5960
this.SourceAccount = policy.SourceAccount;
6061
this.DestinationAccount = policy.DestinationAccount;
6162
this.Rules = PSObjectReplicationPolicyRule.GetPSObjectReplicationPolicyRules(policy.Rules);
63+
this.Metrics = policy.Metrics is null ? null : new PSObjectReplicationPolicyPropertiesMetrics(policy.Metrics);
6264
}
6365

6466
public ObjectReplicationPolicy ParseObjectReplicationPolicy()
@@ -67,7 +69,8 @@ public ObjectReplicationPolicy ParseObjectReplicationPolicy()
6769
{
6870
SourceAccount = this.SourceAccount,
6971
DestinationAccount = this.DestinationAccount,
70-
Rules = PSObjectReplicationPolicyRule.ParseObjectReplicationPolicyRules(this.Rules)
72+
Rules = PSObjectReplicationPolicyRule.ParseObjectReplicationPolicyRules(this.Rules),
73+
Metrics = this.Metrics is null ? null : this.Metrics.ParseObjectReplicationPolicyPropertiesMetrics()
7174
};
7275
return policy;
7376
}
@@ -193,4 +196,28 @@ public ObjectReplicationPolicyFilter ParseObjectReplicationPolicyFilter()
193196
};
194197
}
195198
}
199+
200+
/// <summary>
201+
/// Wrapper of SDK type ObjectReplicationPolicyPropertiesMetrics
202+
/// </summary>
203+
public class PSObjectReplicationPolicyPropertiesMetrics
204+
{
205+
public bool? Enabled { get; set; }
206+
207+
public PSObjectReplicationPolicyPropertiesMetrics()
208+
{
209+
}
210+
211+
public PSObjectReplicationPolicyPropertiesMetrics(ObjectReplicationPolicyPropertiesMetrics metrics)
212+
{
213+
this.Enabled = metrics.Enabled;
214+
}
215+
public ObjectReplicationPolicyPropertiesMetrics ParseObjectReplicationPolicyPropertiesMetrics()
216+
{
217+
return new ObjectReplicationPolicyPropertiesMetrics()
218+
{
219+
Enabled = this.Enabled
220+
};
221+
}
222+
}
196223
}

src/Storage/Storage.Management/Storage.Management.format.ps1xml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -812,6 +812,10 @@
812812
<Alignment>Left</Alignment>
813813
<Label>DestinationAccount</Label>
814814
</TableColumnHeader>
815+
<TableColumnHeader>
816+
<Alignment>Left</Alignment>
817+
<Label>Metrics.Enabled</Label>
818+
</TableColumnHeader>
815819
<TableColumnHeader>
816820
<Alignment>Left</Alignment>
817821
<Label>Rules</Label>
@@ -844,6 +848,10 @@
844848
<Alignment>Left</Alignment>
845849
<PropertyName>DestinationAccount</PropertyName>
846850
</TableColumnItem>
851+
<TableColumnItem>
852+
<Alignment>Left</Alignment>
853+
<ScriptBlock>$_.Metrics.Enabled</ScriptBlock>
854+
</TableColumnItem>
847855
<TableColumnItem>
848856
<Alignment>Left</Alignment>
849857
<ScriptBlock>if (($_.Rules -ne $null) -and ($_.Rules.Count -ne 0)) { if ($_.Rules.Count -eq 1) {'[' + $_.Rules[0].RuleId + ']'} else {'[' + $_.Rules[0].RuleId + ',...]'}} else {$null}</ScriptBlock>

src/Storage/Storage.Management/StorageAccount/SetAzStorageObjectReplicationPolicy.cs

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,28 @@ public string PolicyId
125125
[ValidateNotNullOrEmpty]
126126
public string DestinationAccount { get; set; }
127127

128+
[Parameter(
129+
Mandatory = false,
130+
HelpMessage = "Indicates whether object replication metrics feature is enabled for the policy.",
131+
ParameterSetName = AccountNameParameterSet)]
132+
[Parameter(
133+
Mandatory = false,
134+
HelpMessage = "Indicates whether object replication metrics feature is enabled for the policy.",
135+
ParameterSetName = AccountObjectParameterSet)]
136+
[ValidateNotNullOrEmpty]
137+
public bool EnableMetric
138+
{
139+
get
140+
{
141+
return enableMetric.Value;
142+
}
143+
set
144+
{
145+
enableMetric = value;
146+
}
147+
}
148+
private bool? enableMetric = null;
149+
128150
[Parameter(
129151
Mandatory = true,
130152
HelpMessage = "Object Replication Policy Rules.",
@@ -182,6 +204,13 @@ public override void ExecuteCmdlet()
182204
DestinationAccount = this.DestinationAccount,
183205
Rules = PSObjectReplicationPolicyRule.ParseObjectReplicationPolicyRules(this.Rule)
184206
};
207+
if (this.enableMetric != null)
208+
{
209+
policyToSet.Metrics = new ObjectReplicationPolicyPropertiesMetrics()
210+
{
211+
Enabled = this.enableMetric
212+
};
213+
}
185214
}
186215

187216
ObjectReplicationPolicy policy = this.StorageClient.ObjectReplicationPolicies.CreateOrUpdate(

src/Storage/Storage.Management/help/Set-AzStorageObjectReplicationPolicy.md

Lines changed: 24 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -15,23 +15,23 @@ Creates or updates the specified object replication policy in a Storage account.
1515
### AccountName (Default)
1616
```
1717
Set-AzStorageObjectReplicationPolicy [-ResourceGroupName] <String> [-StorageAccountName] <String>
18-
[-PolicyId <String>] -SourceAccount <String> [-DestinationAccount <String>]
19-
-Rule <PSObjectReplicationPolicyRule[]> [-DefaultProfile <IAzureContextContainer>]
20-
[-WhatIf] [-Confirm] [<CommonParameters>]
18+
[-PolicyId <String>] -SourceAccount <String> [-DestinationAccount <String>] [-EnableMetric <Boolean>]
19+
-Rule <PSObjectReplicationPolicyRule[]> [-DefaultProfile <IAzureContextContainer>] [-WhatIf] [-Confirm]
20+
[<CommonParameters>]
2121
```
2222

2323
### PolicyObject
2424
```
2525
Set-AzStorageObjectReplicationPolicy [-ResourceGroupName] <String> [-StorageAccountName] <String>
26-
-InputObject <PSObjectReplicationPolicy> [-DefaultProfile <IAzureContextContainer>]
27-
[-WhatIf] [-Confirm] [<CommonParameters>]
26+
-InputObject <PSObjectReplicationPolicy> [-DefaultProfile <IAzureContextContainer>] [-WhatIf] [-Confirm]
27+
[<CommonParameters>]
2828
```
2929

3030
### AccountObject
3131
```
3232
Set-AzStorageObjectReplicationPolicy -StorageAccount <PSStorageAccount> [-PolicyId <String>]
33-
-SourceAccount <String> [-DestinationAccount <String>] -Rule <PSObjectReplicationPolicyRule[]>
34-
[-DefaultProfile <IAzureContextContainer>] [-WhatIf] [-Confirm]
33+
-SourceAccount <String> [-DestinationAccount <String>] [-EnableMetric <Boolean>]
34+
-Rule <PSObjectReplicationPolicyRule[]> [-DefaultProfile <IAzureContextContainer>] [-WhatIf] [-Confirm]
3535
[<CommonParameters>]
3636
```
3737

@@ -51,7 +51,7 @@ $rule2 = New-AzStorageObjectReplicationPolicyRule -SourceContainer src -Destinat
5151
5252
$srcAccount = Get-AzStorageAccount -ResourceGroupName "myresourcegroup" -AccountName "mysourceaccount"
5353
54-
Set-AzStorageObjectReplicationPolicy -ResourceGroupName "myresourcegroup" -AccountName "mydestaccount" -PolicyId default -SourceAccount $srcAccount.Id -Rule $rule1,$rule2
54+
Set-AzStorageObjectReplicationPolicy -ResourceGroupName "myresourcegroup" -AccountName "mydestaccount" -PolicyId default -SourceAccount $srcAccount.Id -Rule $rule1,$rule2 -EnableMetric $true
5555
5656
ResourceGroupName StorageAccountName PolicyId EnabledTime SourceAccount DestinationAccount Rules
5757
----------------- ------------------ -------- ----------- ------------- ------------------ -----
@@ -67,7 +67,7 @@ myresourcegroup mysourceaccount 56bfa11c-81ef-4f8d-b307-5e5386e16fba
6767
```
6868

6969
This command sets object replication policy to both destination and source account.
70-
First create 2 object replication policy rules, and set policy to destination account with the 2 rules and source account resource Id. Then get the object replication policy from destination account and set to source account.
70+
First create 2 object replication policy rules, and set policy to destination account with the 2 rules and source account resource Id, and enable metrics. Then get the object replication policy from destination account and set to source account.
7171
Please note, when storage account has AllowCrossTenantReplication as false, SourceAccount and DestinationAccount should be account resource Id.
7272

7373
## PARAMETERS
@@ -102,6 +102,21 @@ Accept pipeline input: False
102102
Accept wildcard characters: False
103103
```
104104
105+
### -EnableMetric
106+
Indicates whether object replication metrics feature is enabled for the policy.
107+
108+
```yaml
109+
Type: System.Boolean
110+
Parameter Sets: AccountName, AccountObject
111+
Aliases:
112+
113+
Required: False
114+
Position: Named
115+
Default value: None
116+
Accept pipeline input: False
117+
Accept wildcard characters: False
118+
```
119+
105120
### -InputObject
106121
Object Replication Policy Object to Set to the specified Account.
107122

0 commit comments

Comments
 (0)