Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -721,44 +721,44 @@ function Test-StorageBlobORS
$stoname1 = 'sto' + $rgname + 'src';
$stoname2 = 'sto' + $rgname + 'dest';
$stotype = 'Standard_LRS';
$loc = Get-ProviderLocation_Canary ResourceManagement;
$loc = Get-ProviderLocation ResourceManagement;
$kind = 'StorageV2'

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

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

# Enable Blob Enable Changefeed and versioning
Update-AzStorageBlobServiceProperty -ResourceGroupName $rgname -StorageAccountName $stoname1 -EnableChangeFeed $true -IsVersioningEnabled $true
Update-AzStorageBlobServiceProperty -ResourceGroupName $rgname -StorageAccountName $stoname2 -EnableChangeFeed $true -IsVersioningEnabled $true
$property1 = Get-AzStorageBlobServiceProperty -ResourceGroupName $rgname -StorageAccountName $stoname1
Assert-AreEqual $true $property1.ChangeFeed.Enabled
Assert-AreEqual $true $property1.IsVersioningEnabled
$property2 = Get-AzStorageBlobServiceProperty -ResourceGroupName $rgname -StorageAccountName $stoname2
Assert-AreEqual $true $property2.ChangeFeed.Enabled
Assert-AreEqual $true $property2.IsVersioningEnabled

# create containers
Get-AzStorageAccount -ResourceGroupName $rgname -StorageAccountName $stoname1 | New-AzRmStorageContainer -name src
Get-AzStorageAccount -ResourceGroupName $rgname -StorageAccountName $stoname2 | New-AzRmStorageContainer -name dest
Get-AzStorageAccount -ResourceGroupName $rgname -StorageAccountName $stoname1 | New-AzRmStorageContainer -name src1
# Enable Blob Enable Changefeed and versioning
Update-AzStorageBlobServiceProperty -ResourceGroupName $rgname -StorageAccountName $stoname1 -EnableChangeFeed $true -IsVersioningEnabled $true
Update-AzStorageBlobServiceProperty -ResourceGroupName $rgname -StorageAccountName $stoname2 -EnableChangeFeed $true -IsVersioningEnabled $true
$property1 = Get-AzStorageBlobServiceProperty -ResourceGroupName $rgname -StorageAccountName $stoname1
Assert-AreEqual $true $property1.ChangeFeed.Enabled
Assert-AreEqual $true $property1.IsVersioningEnabled
$property2 = Get-AzStorageBlobServiceProperty -ResourceGroupName $rgname -StorageAccountName $stoname2
Assert-AreEqual $true $property2.ChangeFeed.Enabled
Assert-AreEqual $true $property2.IsVersioningEnabled

# create containers
Get-AzStorageAccount -ResourceGroupName $rgname -StorageAccountName $stoname1 | New-AzRmStorageContainer -name src
Get-AzStorageAccount -ResourceGroupName $rgname -StorageAccountName $stoname2 | New-AzRmStorageContainer -name dest
Get-AzStorageAccount -ResourceGroupName $rgname -StorageAccountName $stoname1 | New-AzRmStorageContainer -name src1
Get-AzStorageAccount -ResourceGroupName $rgname -StorageAccountName $stoname2 | New-AzRmStorageContainer -name dest1

# create rules
$minCreationTime = "2019-01-01T16:00:00Z"
$rule1 = New-AzStorageObjectReplicationPolicyRule -SourceContainer src1 -DestinationContainer dest1
$rule2 = New-AzStorageObjectReplicationPolicyRule -SourceContainer src -DestinationContainer dest -MinCreationTime $minCreationTime -PrefixMatch a,abc,dd #-Tag t1,t2,t3

# set policy to dest account
$destPolicy = Set-AzStorageObjectReplicationPolicy -ResourceGroupName $rgname -StorageAccountName $stoname2 -PolicyId default -SourceAccount $stoname1 -Rule $rule1,$rule2
$policyID = $destPolicy.PolicyId
Assert-AreEqual $stoname1 $destPolicy.SourceAccount
Assert-AreEqual $stoname2 $destPolicy.DestinationAccount
# set policy to dest account
$destPolicy = Set-AzStorageObjectReplicationPolicy -ResourceGroupName $rgname -StorageAccountName $stoname2 -PolicyId default -SourceAccount $sto1.Id -Rule $rule1,$rule2 -EnableMetric $true
$policyID = $destPolicy.PolicyId
Assert-AreEqual $sto1.Id $destPolicy.SourceAccount
Assert-AreEqual $sto2.Id $destPolicy.DestinationAccount
Assert-AreEqual 2 $destPolicy.Rules.Count
Assert-AreEqual src1 $destPolicy.Rules[0].SourceContainer
Assert-AreEqual dest1 $destPolicy.Rules[0].DestinationContainer
Expand All @@ -769,8 +769,8 @@ function Test-StorageBlobORS
Assert-AreEqual $minCreationTime ($destPolicy.Rules[1].Filters.MinCreationTime.ToUniversalTime().ToString("s")+"Z")
$destPolicy = Get-AzStorageObjectReplicationPolicy -ResourceGroupName $rgname -StorageAccountName $stoname2 -PolicyId $destPolicy.PolicyId
Assert-AreEqual $policyID $destPolicy.PolicyId
Assert-AreEqual $stoname1 $destPolicy.SourceAccount
Assert-AreEqual $stoname2 $destPolicy.DestinationAccount
Assert-AreEqual $sto1.Id $destPolicy.SourceAccount
Assert-AreEqual $sto2.Id $destPolicy.DestinationAccount
Assert-AreEqual 2 $destPolicy.Rules.Count
Assert-AreEqual src1 $destPolicy.Rules[0].SourceContainer
Assert-AreEqual dest1 $destPolicy.Rules[0].DestinationContainer
Expand All @@ -779,13 +779,14 @@ function Test-StorageBlobORS
Assert-AreEqual dest $destPolicy.Rules[1].DestinationContainer
Assert-AreEqual 3 $destPolicy.Rules[1].Filters.PrefixMatch.Count
Assert-AreEqual $minCreationTime ($destPolicy.Rules[1].Filters.MinCreationTime.ToUniversalTime().ToString("s")+"Z")
Assert-AreEqual $true $destPolicy.Metrics.Enabled

#Set policy to source account
Set-AzStorageObjectReplicationPolicy -ResourceGroupName $rgname -StorageAccountName $stoname1 -InputObject $destPolicy
$srcPolicy = Get-AzStorageObjectReplicationPolicy -ResourceGroupName $rgname -StorageAccountName $stoname1
Assert-AreEqual $policyID $srcPolicy.PolicyId
Assert-AreEqual $stoname1 $srcPolicy.SourceAccount
Assert-AreEqual $stoname2 $srcPolicy.DestinationAccount
Assert-AreEqual $sto1.Id $destPolicy.SourceAccount
Assert-AreEqual $sto2.Id $destPolicy.DestinationAccount
Assert-AreEqual 2 $srcPolicy.Rules.Count
Assert-AreEqual src1 $srcPolicy.Rules[0].SourceContainer
Assert-AreEqual dest1 $srcPolicy.Rules[0].DestinationContainer
Expand All @@ -794,6 +795,7 @@ function Test-StorageBlobORS
Assert-AreEqual dest $srcPolicy.Rules[1].DestinationContainer
Assert-AreEqual 3 $srcPolicy.Rules[1].Filters.PrefixMatch.Count
Assert-AreEqual $minCreationTime ($srcPolicy.Rules[1].Filters.MinCreationTime.ToUniversalTime().ToString("s")+"Z")
Assert-AreEqual $true $srcPolicy.Metrics.Enabled
$destPolicy | Remove-AzStorageObjectReplicationPolicy
$srcPolicy | Remove-AzStorageObjectReplicationPolicy

Expand All @@ -804,7 +806,7 @@ function Test-StorageBlobORS
Assert-AreEqual $false $sto2.AllowCrossTenantReplication

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

Set-AzStorageObjectReplicationPolicy -ResourceGroupName $rgname -StorageAccountName $stoname1 -InputObject $destPolicy
$srcPolicy = Get-AzStorageObjectReplicationPolicy -ResourceGroupName $rgname -StorageAccountName $stoname1
Expand All @@ -831,13 +834,14 @@ function Test-StorageBlobORS
Assert-AreEqual dest $srcPolicy.Rules[1].DestinationContainer
Assert-AreEqual 3 $srcPolicy.Rules[1].Filters.PrefixMatch.Count
Assert-AreEqual $minCreationTime ($srcPolicy.Rules[1].Filters.MinCreationTime.ToUniversalTime().ToString("s")+"Z")
Assert-AreEqual $false $srcPolicy.Metrics.Enabled

#remove policies
Remove-AzStorageObjectReplicationPolicy -ResourceGroupName $rgname -StorageAccountName $stoname2 -PolicyId $destPolicy.PolicyId
Remove-AzStorageObjectReplicationPolicy -ResourceGroupName $rgname -StorageAccountName $stoname1 -PolicyId $srcPolicy.PolicyId
Remove-AzStorageAccount -Force -ResourceGroupName $rgname -Name $stoname1;
Remove-AzStorageAccount -Force -ResourceGroupName $rgname -Name $stoname2;

Remove-AzStorageAccount -Force -ResourceGroupName $rgname -Name $stoname1;
Remove-AzStorageAccount -Force -ResourceGroupName $rgname -Name $stoname2;
}
finally
{
Expand Down

Large diffs are not rendered by default.

2 changes: 2 additions & 0 deletions src/Storage/Storage.Management/ChangeLog.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@
- Additional information about change #1
-->
## Upcoming Release
* Supported Enable Metrics when set object replication policy
- `Set-AzStorageObjectReplicationPolicy`

## Version 9.1.0
* Supported set SasExpirationAction as Log or Block, together with SasExpirationPeriod
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ public class PSObjectReplicationPolicy
public string DestinationAccount { get; set; }
[Ps1Xml(Label = "Rules", Target = ViewControl.Table, ScriptBlock = "if (($_.Rules -ne $null) -and ($_.Rules.Count -ne 0)) {'[' + $_.Rules[0].RuleId + ',...]'} else {$null}", Position = 6)]
public PSObjectReplicationPolicyRule[] Rules { get; set; }
public PSObjectReplicationPolicyPropertiesMetrics Metrics { get; set; }

public PSObjectReplicationPolicy()
{ }
Expand All @@ -59,6 +60,7 @@ public PSObjectReplicationPolicy(ObjectReplicationPolicy policy, string Resource
this.SourceAccount = policy.SourceAccount;
this.DestinationAccount = policy.DestinationAccount;
this.Rules = PSObjectReplicationPolicyRule.GetPSObjectReplicationPolicyRules(policy.Rules);
this.Metrics = policy.Metrics is null ? null : new PSObjectReplicationPolicyPropertiesMetrics(policy.Metrics);
}

public ObjectReplicationPolicy ParseObjectReplicationPolicy()
Expand All @@ -67,7 +69,8 @@ public ObjectReplicationPolicy ParseObjectReplicationPolicy()
{
SourceAccount = this.SourceAccount,
DestinationAccount = this.DestinationAccount,
Rules = PSObjectReplicationPolicyRule.ParseObjectReplicationPolicyRules(this.Rules)
Rules = PSObjectReplicationPolicyRule.ParseObjectReplicationPolicyRules(this.Rules),
Metrics = this.Metrics is null ? null : this.Metrics.ParseObjectReplicationPolicyPropertiesMetrics()
};
return policy;
}
Expand Down Expand Up @@ -193,4 +196,28 @@ public ObjectReplicationPolicyFilter ParseObjectReplicationPolicyFilter()
};
}
}

/// <summary>
/// Wrapper of SDK type ObjectReplicationPolicyPropertiesMetrics
/// </summary>
public class PSObjectReplicationPolicyPropertiesMetrics
{
public bool? Enabled { get; set; }

public PSObjectReplicationPolicyPropertiesMetrics()
{
}

public PSObjectReplicationPolicyPropertiesMetrics(ObjectReplicationPolicyPropertiesMetrics metrics)
{
this.Enabled = metrics.Enabled;
}
public ObjectReplicationPolicyPropertiesMetrics ParseObjectReplicationPolicyPropertiesMetrics()
{
return new ObjectReplicationPolicyPropertiesMetrics()
{
Enabled = this.Enabled
};
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -653,6 +653,10 @@
<Alignment>Left</Alignment>
<Label>DestinationAccount</Label>
</TableColumnHeader>
<TableColumnHeader>
<Alignment>Left</Alignment>
<Label>Metrics.Enabled</Label>
</TableColumnHeader>
<TableColumnHeader>
<Alignment>Left</Alignment>
<Label>Rules</Label>
Expand Down Expand Up @@ -685,6 +689,10 @@
<Alignment>Left</Alignment>
<PropertyName>DestinationAccount</PropertyName>
</TableColumnItem>
<TableColumnItem>
<Alignment>Left</Alignment>
<ScriptBlock>$_.Metrics.Enabled</ScriptBlock>
</TableColumnItem>
<TableColumnItem>
<Alignment>Left</Alignment>
<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>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -125,6 +125,27 @@ public string PolicyId
[ValidateNotNullOrEmpty]
public string DestinationAccount { get; set; }

[Parameter(
Mandatory = false,
HelpMessage = "Indicates whether object replication metrics feature is enabled for the policy.",
ParameterSetName = AccountNameParameterSet)]
[Parameter(
Mandatory = false,
HelpMessage = "Indicates whether object replication metrics feature is enabled for the policy.",
ParameterSetName = AccountObjectParameterSet)]
public bool EnableMetric
{
get
{
return enableMetric.Value;
}
set
{
enableMetric = value;
}
}
private bool? enableMetric = null;

[Parameter(
Mandatory = true,
HelpMessage = "Object Replication Policy Rules.",
Expand Down Expand Up @@ -182,6 +203,13 @@ public override void ExecuteCmdlet()
DestinationAccount = this.DestinationAccount,
Rules = PSObjectReplicationPolicyRule.ParseObjectReplicationPolicyRules(this.Rule)
};
if (this.enableMetric != null)
{
policyToSet.Metrics = new ObjectReplicationPolicyPropertiesMetrics()
{
Enabled = this.enableMetric
};
}
}

ObjectReplicationPolicy policy = this.StorageClient.ObjectReplicationPolicies.CreateOrUpdate(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,23 +15,23 @@ Creates or updates the specified object replication policy in a Storage account.
### AccountName (Default)
```
Set-AzStorageObjectReplicationPolicy [-ResourceGroupName] <String> [-StorageAccountName] <String>
[-PolicyId <String>] -SourceAccount <String> [-DestinationAccount <String>]
-Rule <PSObjectReplicationPolicyRule[]> [-DefaultProfile <IAzureContextContainer>]
[-WhatIf] [-Confirm] [<CommonParameters>]
[-PolicyId <String>] -SourceAccount <String> [-DestinationAccount <String>] [-EnableMetric <Boolean>]
-Rule <PSObjectReplicationPolicyRule[]> [-DefaultProfile <IAzureContextContainer>] [-WhatIf] [-Confirm]
[<CommonParameters>]
```

### PolicyObject
```
Set-AzStorageObjectReplicationPolicy [-ResourceGroupName] <String> [-StorageAccountName] <String>
-InputObject <PSObjectReplicationPolicy> [-DefaultProfile <IAzureContextContainer>]
[-WhatIf] [-Confirm] [<CommonParameters>]
-InputObject <PSObjectReplicationPolicy> [-DefaultProfile <IAzureContextContainer>] [-WhatIf] [-Confirm]
[<CommonParameters>]
```

### AccountObject
```
Set-AzStorageObjectReplicationPolicy -StorageAccount <PSStorageAccount> [-PolicyId <String>]
-SourceAccount <String> [-DestinationAccount <String>] -Rule <PSObjectReplicationPolicyRule[]>
[-DefaultProfile <IAzureContextContainer>] [-WhatIf] [-Confirm]
-SourceAccount <String> [-DestinationAccount <String>] [-EnableMetric <Boolean>]
-Rule <PSObjectReplicationPolicyRule[]> [-DefaultProfile <IAzureContextContainer>] [-WhatIf] [-Confirm]
[<CommonParameters>]
```

Expand All @@ -51,7 +51,7 @@ $rule2 = New-AzStorageObjectReplicationPolicyRule -SourceContainer src -Destinat

$srcAccount = Get-AzStorageAccount -ResourceGroupName "myresourcegroup" -AccountName "mysourceaccount"

Set-AzStorageObjectReplicationPolicy -ResourceGroupName "myresourcegroup" -AccountName "mydestaccount" -PolicyId default -SourceAccount $srcAccount.Id -Rule $rule1,$rule2
Set-AzStorageObjectReplicationPolicy -ResourceGroupName "myresourcegroup" -AccountName "mydestaccount" -PolicyId default -SourceAccount $srcAccount.Id -Rule $rule1,$rule2 -EnableMetric $true

ResourceGroupName StorageAccountName PolicyId EnabledTime SourceAccount DestinationAccount Rules
----------------- ------------------ -------- ----------- ------------- ------------------ -----
Expand All @@ -67,7 +67,7 @@ myresourcegroup mysourceaccount 56bfa11c-81ef-4f8d-b307-5e5386e16fba
```

This command sets object replication policy to both destination and source account.
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.
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.
Please note, when storage account has AllowCrossTenantReplication as false, SourceAccount and DestinationAccount should be account resource Id.

## PARAMETERS
Expand Down Expand Up @@ -102,6 +102,21 @@ Accept pipeline input: False
Accept wildcard characters: False
```

### -EnableMetric
Indicates whether object replication metrics feature is enabled for the policy.

```yaml
Type: System.Boolean
Parameter Sets: AccountName, AccountObject
Aliases:

Required: False
Position: Named
Default value: None
Accept pipeline input: False
Accept wildcard characters: False
```

### -InputObject
Object Replication Policy Object to Set to the specified Account.

Expand Down