Skip to content

[Storage] Support allowProtectedAppendWrites in ImmutabilityPolicy #11195

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Feb 27, 2020
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
2 changes: 1 addition & 1 deletion src/EventGrid/EventGrid.Test/EventGrid.Test.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
<PackageReference Include="Microsoft.Azure.Management.EventHub" Version="2.5.0" />
<PackageReference Include="Microsoft.Azure.Management.Relay" Version="2.0.2" />
<PackageReference Include="Microsoft.Azure.Management.ServiceBus" Version="2.1.0" />
<PackageReference Include="Microsoft.Azure.Management.Storage" Version="14.3.0" />
<PackageReference Include="Microsoft.Azure.Management.Storage" Version="14.5.0" />
</ItemGroup>

</Project>
Original file line number Diff line number Diff line change
Expand Up @@ -216,11 +216,12 @@ function Test-StorageBlobContainerImmutabilityPolicy
Assert-AreEqual "" $policy.Etag

$immutabilityPeriod =3
Set-AzRmStorageContainerImmutabilityPolicy -ResourceGroupName $rgname -StorageAccountName $stoname -ContainerName $containerName -ImmutabilityPeriod $immutabilityPeriod
Set-AzRmStorageContainerImmutabilityPolicy -ResourceGroupName $rgname -StorageAccountName $stoname -ContainerName $containerName -ImmutabilityPeriod $immutabilityPeriod -AllowProtectedAppendWrite $true
$policy = Get-AzRmStorageContainerImmutabilityPolicy -ResourceGroupName $rgname -StorageAccountName $stoname -ContainerName $containerName
Assert-AreEqual $immutabilityPeriod $policy.ImmutabilityPeriodSinceCreationInDays
Assert-AreEqual Unlocked $policy.State
Assert-AreNotEqual $null $policy.Etag
Assert-AreEqual $true $policy.AllowProtectedAppendWrites
$container = Get-AzRmStorageContainer -ResourceGroupName $rgname -StorageAccountName $stoname -Name $containerName
Assert-AreEqual $containerName $container.Name
Assert-AreEqual $immutabilityPeriod $container.ImmutabilityPolicy.ImmutabilityPeriodSinceCreationInDays
Expand All @@ -230,13 +231,15 @@ function Test-StorageBlobContainerImmutabilityPolicy
Assert-AreEqual $immutabilityPeriod $container.ImmutabilityPolicy.UpdateHistory[0].ImmutabilityPeriodSinceCreationInDays
Assert-AreNotEqual $null $container.ImmutabilityPolicy.UpdateHistory[0].Timestamp
Assert-AreNotEqual $null $container.ImmutabilityPolicy.UpdateHistory[0].ObjectIdentifier
Assert-AreEqual $true $container.ImmutabilityPolicy.AllowProtectedAppendWrites

$immutabilityPeriod =2
Set-AzRmStorageContainerImmutabilityPolicy -inputObject $policy -ImmutabilityPeriod $immutabilityPeriod
Set-AzRmStorageContainerImmutabilityPolicy -inputObject $policy -ImmutabilityPeriod $immutabilityPeriod -AllowProtectedAppendWrite $false
$policy = Get-AzRmStorageContainerImmutabilityPolicy -ResourceGroupName $rgname -StorageAccountName $stoname -ContainerName $containerName
Assert-AreEqual $immutabilityPeriod $policy.ImmutabilityPeriodSinceCreationInDays
Assert-AreEqual Unlocked $policy.State
Assert-AreNotEqual $null $policy.Etag
Assert-AreEqual $false $policy.AllowProtectedAppendWrites
$container = Get-AzRmStorageContainer -ResourceGroupName $rgname -StorageAccountName $stoname -Name $containerName
Assert-AreEqual $containerName $container.Name
Assert-AreEqual $immutabilityPeriod $container.ImmutabilityPolicy.ImmutabilityPeriodSinceCreationInDays
Expand All @@ -246,6 +249,7 @@ function Test-StorageBlobContainerImmutabilityPolicy
Assert-AreEqual $immutabilityPeriod $container.ImmutabilityPolicy.UpdateHistory[0].ImmutabilityPeriodSinceCreationInDays
Assert-AreNotEqual $null $container.ImmutabilityPolicy.UpdateHistory[0].Timestamp
Assert-AreNotEqual $null $container.ImmutabilityPolicy.UpdateHistory[0].ObjectIdentifier
Assert-AreEqual $false $container.ImmutabilityPolicy.AllowProtectedAppendWrites

Remove-AzRmStorageContainerImmutabilityPolicy -inputObject $policy
$policy = Get-AzRmStorageContainerImmutabilityPolicy -ResourceGroupName $rgname -StorageAccountName $stoname -ContainerName $containerName
Expand Down

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Microsoft.Azure.Management.Storage" Version="14.3.0" />
<PackageReference Include="Microsoft.Azure.Management.Storage" Version="14.5.0" />
</ItemGroup>

</Project>
Original file line number Diff line number Diff line change
Expand Up @@ -165,8 +165,44 @@ public class SetAzureStorageContainerImmutabilityPolicyCommand : StorageBlobBase
public PSImmutabilityPolicy InputObject { get; set; }

[Alias("ImmutabilityPeriodSinceCreationInDays")]
[Parameter(Mandatory = true, HelpMessage = "Immutability period since creation in days.")]
public int ImmutabilityPeriod { get; set; }
[Parameter(Mandatory = false, ParameterSetName = AccountNameParameterSet, HelpMessage = "Immutability period since creation in days.")]
[Parameter(Mandatory = false, ParameterSetName = AccountObjectParameterSet, HelpMessage = "Immutability period since creation in days.")]
[Parameter(Mandatory = false, ParameterSetName = ContainerObjectParameterSet, HelpMessage = "Immutability period since creation in days.")]
[Parameter(Mandatory = false, ParameterSetName = ImmutabilityPolicyObjectParameterSet, HelpMessage = "Immutability period since creation in days.")]
[Parameter(Mandatory = true, ParameterSetName = ExtendAccountNameParameterSet, HelpMessage = "Immutability period since creation in days.")]
[Parameter(Mandatory = true, ParameterSetName = ExtendAccountObjectParameterSet, HelpMessage = "Immutability period since creation in days.")]
[Parameter(Mandatory = true, ParameterSetName = ExtendContainerObjectParameterSet, HelpMessage = "Immutability period since creation in days.")]
[Parameter(Mandatory = true, ParameterSetName = ExtendImmutabilityPolicyObjectParameterSet, HelpMessage = "Immutability period since creation in days.")]
public int ImmutabilityPeriod
{
get
{
return immutabilityPeriod is null ? 0 : immutabilityPeriod.Value;
}
set
{
immutabilityPeriod = value;
}
}

public int? immutabilityPeriod;

[Parameter(Mandatory = false, ParameterSetName = AccountNameParameterSet, HelpMessage = "This property can only be changed for unlocked time-based retention policies. With this property enabled, new blocks can be written to an append blob while maintaining immutability protection and compliance. Only new blocks can be added and any existing blocks cannot be modified or deleted.")]
[Parameter(Mandatory = false, ParameterSetName = AccountObjectParameterSet, HelpMessage = "This property can only be changed for unlocked time-based retention policies. With this property enabled, new blocks can be written to an append blob while maintaining immutability protection and compliance. Only new blocks can be added and any existing blocks cannot be modified or deleted.")]
[Parameter(Mandatory = false, ParameterSetName = ContainerObjectParameterSet, HelpMessage = "This property can only be changed for unlocked time-based retention policies. With this property enabled, new blocks can be written to an append blob while maintaining immutability protection and compliance. Only new blocks can be added and any existing blocks cannot be modified or deleted.")]
[Parameter(Mandatory = false, ParameterSetName = ImmutabilityPolicyObjectParameterSet, HelpMessage = "This property can only be changed for unlocked time-based retention policies. With this property enabled, new blocks can be written to an append blob while maintaining immutability protection and compliance. Only new blocks can be added and any existing blocks cannot be modified or deleted.")]
public bool AllowProtectedAppendWrite
{
get
{
return allowProtectedAppendWrite is null ? false : allowProtectedAppendWrite.Value;
}
set
{
allowProtectedAppendWrite = value;
}
}
private bool? allowProtectedAppendWrite;

[Alias("IfMatch")]
[Parameter(Mandatory = false, ParameterSetName = AccountNameParameterSet, HelpMessage = "Immutability policy etag.")]
Expand Down Expand Up @@ -220,8 +256,9 @@ public override void ExecuteCmdlet()
this.ResourceGroupName,
this.StorageAccountName,
this.ContainerName,
ImmutabilityPeriod,
this.Etag);
this.Etag,
immutabilityPeriod,
this.allowProtectedAppendWrite);
}
else
{
Expand All @@ -230,7 +267,7 @@ public override void ExecuteCmdlet()
this.StorageAccountName,
this.ContainerName,
this.Etag,
ImmutabilityPeriod);
immutabilityPeriod);
}
WriteObject(new PSImmutabilityPolicy(policy));
}
Expand Down
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
* Support AllowProtectedAppendWrite in ImmutabilityPolicy
- Set-AzRmStorageContainerImmutabilityPolicy
* Add breaking change warning message for AzureStorageTable type change in a future release
- New-AzStorageTable
- Get-AzStorageTable
Expand Down
8 changes: 6 additions & 2 deletions src/Storage/Storage.Management/Models/PSContainer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -222,14 +222,16 @@ public PSImmutabilityPolicy(StorageModels.ImmutabilityPolicy policy)
this.Name = policy.Name;
this.Type = policy.Type;
this.Id = policy.Id;
this.AllowProtectedAppendWrites = policy.AllowProtectedAppendWrites;
}

public int ImmutabilityPeriodSinceCreationInDays { get; set; }
public int? ImmutabilityPeriodSinceCreationInDays { get; set; }
public string State { get; set; }
public string Id { get; set; }
public string Name { get; set; }
public string Type { get; set; }
public string Etag { get; set; }
public bool? AllowProtectedAppendWrites { get; set; }
}

public class PSImmutabilityPolicyProperties
Expand All @@ -239,6 +241,7 @@ public PSImmutabilityPolicyProperties(StorageModels.ImmutabilityPolicyProperties
this.ImmutabilityPeriodSinceCreationInDays = policy.ImmutabilityPeriodSinceCreationInDays;
this.State = policy.State;
this.Etag = policy.Etag;
this.AllowProtectedAppendWrites = policy.AllowProtectedAppendWrites;

List<PSUpdateHistoryProperty> updateHistoryList = new List<PSUpdateHistoryProperty>();
if (policy.UpdateHistory != null && policy.UpdateHistory.Count != 0)
Expand All @@ -251,10 +254,11 @@ public PSImmutabilityPolicyProperties(StorageModels.ImmutabilityPolicyProperties
this.UpdateHistory = updateHistoryList.ToArray();
}

public int ImmutabilityPeriodSinceCreationInDays { get; set; }
public int? ImmutabilityPeriodSinceCreationInDays { get; set; }
public string State { get; set; }
public string Etag { get; set; }
public PSUpdateHistoryProperty[] UpdateHistory { get; set; }
public bool? AllowProtectedAppendWrites { get; set; }
}

public enum PSPublicAccess
Expand Down
2 changes: 1 addition & 1 deletion src/Storage/Storage.Management/Storage.Management.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
<RootNamespace>$(LegacyAssemblyPrefix)$(PsModuleName)</RootNamespace>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Azure.Management.Storage" Version="14.3.0" />
<PackageReference Include="Microsoft.Azure.Management.Storage" Version="14.5.0" />
<PackageReference Include="Microsoft.Azure.Storage.Blob" Version="11.1.0" />
<PackageReference Include="Microsoft.Azure.Storage.File" Version="11.1.0" />
<PackageReference Include="Microsoft.Azure.Storage.Queue" Version="11.1.0" />
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
---
---
external help file: Microsoft.Azure.PowerShell.Cmdlets.Storage.Management.dll-Help.xml
Module Name: Az.Storage
online version: https://docs.microsoft.com/en-us/powershell/module/az.storage/set-azrmstoragecontainerimmutabilitypolicy
Expand All @@ -15,7 +15,7 @@ Creates or updates ImmutabilityPolicy of a Storage blob containers
### AccountName (Default)
```
Set-AzRmStorageContainerImmutabilityPolicy [-ResourceGroupName] <String> [-StorageAccountName] <String>
-ContainerName <String> -ImmutabilityPeriod <Int32> [-Etag <String>]
-ContainerName <String> [-ImmutabilityPeriod <Int32>] [-AllowProtectedAppendWrite <Boolean>] [-Etag <String>]
[-DefaultProfile <IAzureContextContainer>] [-WhatIf] [-Confirm] [<CommonParameters>]
```

Expand All @@ -29,8 +29,8 @@ Set-AzRmStorageContainerImmutabilityPolicy [-ResourceGroupName] <String> [-Stora
### AccountObject
```
Set-AzRmStorageContainerImmutabilityPolicy -ContainerName <String> -StorageAccount <PSStorageAccount>
-ImmutabilityPeriod <Int32> [-Etag <String>] [-DefaultProfile <IAzureContextContainer>] [-WhatIf] [-Confirm]
[<CommonParameters>]
[-ImmutabilityPeriod <Int32>] [-AllowProtectedAppendWrite <Boolean>] [-Etag <String>]
[-DefaultProfile <IAzureContextContainer>] [-WhatIf] [-Confirm] [<CommonParameters>]
```

### ExtendAccountObject
Expand All @@ -42,8 +42,9 @@ Set-AzRmStorageContainerImmutabilityPolicy -ContainerName <String> -StorageAccou

### ContainerObject
```
Set-AzRmStorageContainerImmutabilityPolicy -Container <PSContainer> -ImmutabilityPeriod <Int32>
[-Etag <String>] [-DefaultProfile <IAzureContextContainer>] [-WhatIf] [-Confirm] [<CommonParameters>]
Set-AzRmStorageContainerImmutabilityPolicy -Container <PSContainer> [-ImmutabilityPeriod <Int32>]
[-AllowProtectedAppendWrite <Boolean>] [-Etag <String>] [-DefaultProfile <IAzureContextContainer>] [-WhatIf]
[-Confirm] [<CommonParameters>]
```

### ExtendContainerObject
Expand All @@ -54,8 +55,9 @@ Set-AzRmStorageContainerImmutabilityPolicy -Container <PSContainer> -Immutabilit

### ImmutabilityPolicyObject
```
Set-AzRmStorageContainerImmutabilityPolicy [-InputObject] <PSImmutabilityPolicy> -ImmutabilityPeriod <Int32>
[-DefaultProfile <IAzureContextContainer>] [-WhatIf] [-Confirm] [<CommonParameters>]
Set-AzRmStorageContainerImmutabilityPolicy [-InputObject] <PSImmutabilityPolicy> [-ImmutabilityPeriod <Int32>]
[-AllowProtectedAppendWrite <Boolean>] [-DefaultProfile <IAzureContextContainer>] [-WhatIf] [-Confirm]
[<CommonParameters>]
```

### ExtendImmutabilityPolicyObject
Expand Down Expand Up @@ -85,14 +87,16 @@ PS C:\>Set-AzRmStorageContainerImmutabilityPolicy -StorageAccount $accountObject

This command extend ImmutabilityPolicy of a Storage blob container, with Storage account object. Extend ImmutabilityPolicy can only run after ImmutabilityPolicy is locked.

### Example 3: Update ImmutabilityPolicyof a Storage blob container
### Example 3: Update ImmutabilityPolicy of a Storage blob container
```
PS C:\>$containerObject = Get-AzStorageContainer -ResourceGroupName "myResourceGroup" -AccountName "myStorageAccount" -Name "myContainer"
PS C:\>$policy = Set-AzRmStorageContainerImmutabilityPolicy -Container $containerObject -ImmutabilityPeriod 12
PS C:\>$policy = Set-AzRmStorageContainerImmutabilityPolicy -Container $containerObject -ImmutabilityPeriod 9 -Etag $policy.Etag
PS C:\>$policy = Set-AzRmStorageContainerImmutabilityPolicy -Container $containerObject -AllowProtectedAppendWrite $true
```

This command updates ImmutabilityPolicy of a Storage blob container with Storage container object 2 times, first to ImmutabilityPeriod 12 days without etag, then to ImmutabilityPeriod 9 days with etag.
This command updates ImmutabilityPolicy of a Storage blob container with Storage container object 3 times:
First to ImmutabilityPeriod 12 days without etag, then to ImmutabilityPeriod 9 days with etag, finally enabled AllowProtectedAppendWrite.

### Example 4: Extend ImmutabilityPolicy of a Storage blob container, with ImmutabilityPolicy object
```
Expand All @@ -103,6 +107,23 @@ This command extend ImmutabilityPolicy of a Storage blob container, with Immutab

## PARAMETERS

### -AllowProtectedAppendWrite
This property can only be changed for unlocked time-based retention policies.
With this property enabled, new blocks can be written to an append blob while maintaining immutability protection and compliance.
Only new blocks can be added and any existing blocks cannot be modified or deleted.

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

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

### -Container
Storage container object

Expand Down Expand Up @@ -195,7 +216,19 @@ Immutability period since creation in days.

```yaml
Type: System.Int32
Parameter Sets: (All)
Parameter Sets: AccountName, AccountObject, ContainerObject, ImmutabilityPolicyObject
Aliases: ImmutabilityPeriodSinceCreationInDays

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

```yaml
Type: System.Int32
Parameter Sets: ExtendAccountName, ExtendAccountObject, ExtendContainerObject, ExtendImmutabilityPolicyObject
Aliases: ImmutabilityPeriodSinceCreationInDays

Required: True
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -158,4 +158,5 @@
"Microsoft.Azure.PowerShell.Cmdlets.Storage.Management.dll","Microsoft.Azure.Commands.Management.Storage.GetAzureStorageShareCommand","Get-AzRmStorageShare","0","3000","The type of property 'Sku' of type 'Microsoft.Azure.Commands.Management.Storage.Models.PSStorageAccount' has changed from 'Microsoft.Azure.Management.Storage.Models.Sku' to 'Microsoft.Azure.Commands.Management.Storage.Models.PSSku'.","Change the type of property 'Sku' back to 'Microsoft.Azure.Management.Storage.Models.Sku'."
"Microsoft.Azure.PowerShell.Cmdlets.Storage.Management.dll","Microsoft.Azure.Commands.Management.Storage.NewAzureStorageShareCommand","New-AzRmStorageShare","0","3000","The type of property 'Sku' of type 'Microsoft.Azure.Commands.Management.Storage.Models.PSStorageAccount' has changed from 'Microsoft.Azure.Management.Storage.Models.Sku' to 'Microsoft.Azure.Commands.Management.Storage.Models.PSSku'.","Change the type of property 'Sku' back to 'Microsoft.Azure.Management.Storage.Models.Sku'."
"Microsoft.Azure.PowerShell.Cmdlets.Storage.Management.dll","Microsoft.Azure.Commands.Management.Storage.RemoveAzureStorageShareCommand","Remove-AzRmStorageShare","0","3000","The type of property 'Sku' of type 'Microsoft.Azure.Commands.Management.Storage.Models.PSStorageAccount' has changed from 'Microsoft.Azure.Management.Storage.Models.Sku' to 'Microsoft.Azure.Commands.Management.Storage.Models.PSSku'.","Change the type of property 'Sku' back to 'Microsoft.Azure.Management.Storage.Models.Sku'."
"Microsoft.Azure.PowerShell.Cmdlets.Storage.Management.dll","Microsoft.Azure.Commands.Management.Storage.UpdateAzureStorageShareCommand","Update-AzRmStorageShare","0","3000","The type of property 'Sku' of type 'Microsoft.Azure.Commands.Management.Storage.Models.PSStorageAccount' has changed from 'Microsoft.Azure.Management.Storage.Models.Sku' to 'Microsoft.Azure.Commands.Management.Storage.Models.PSSku'.","Change the type of property 'Sku' back to 'Microsoft.Azure.Management.Storage.Models.Sku'."
"Microsoft.Azure.PowerShell.Cmdlets.Storage.Management.dll","Microsoft.Azure.Commands.Management.Storage.UpdateAzureStorageShareCommand","Update-AzRmStorageShare","0","3000","The type of property 'Sku' of type 'Microsoft.Azure.Commands.Management.Storage.Models.PSStorageAccount' has changed from 'Microsoft.Azure.Management.Storage.Models.Sku' to 'Microsoft.Azure.Commands.Management.Storage.Models.PSSku'.","Change the type of property 'Sku' back to 'Microsoft.Azure.Management.Storage.Models.Sku'."
"Microsoft.Azure.PowerShell.Cmdlets.Storage.Management.dll","Microsoft.Azure.Commands.Management.Storage.SetAzureStorageContainerImmutabilityPolicyCommand","Set-AzRmStorageContainerImmutabilityPolicy","0","1050","The parameter set '__AllParameterSets' for cmdlet 'Set-AzRmStorageContainerImmutabilityPolicy' has been removed.","Add parameter set '__AllParameterSets' back to cmdlet 'Set-AzRmStorageContainerImmutabilityPolicy'."