Skip to content

Commit 6aa258f

Browse files
authored
[Storage] Support Blobversion with Track2 SDK (#12323)
1 parent 34eaab1 commit 6aa258f

39 files changed

+5127
-305
lines changed

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

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,13 @@ public StorageBlobTests(ITestOutputHelper output)
3131
XunitTracingInterceptor.AddToContext(_logger);
3232
}
3333

34+
[Fact]
35+
[Trait(Category.AcceptanceType, Category.CheckIn)]
36+
public void TestStorageBlobIsVersioningEnabled()
37+
{
38+
TestController.NewInstance.RunPsTest(_logger, "Test-StorageBlobIsVersioningEnabled");
39+
}
40+
3441
[Fact]
3542
[Trait(Category.AcceptanceType, Category.CheckIn)]
3643
public void TestStorageBlobContainer()
@@ -57,6 +64,6 @@ public void TestStorageBlobContainerImmutabilityPolicy()
5764
public void TestStorageBlobServiceProperties()
5865
{
5966
TestController.NewInstance.RunPsTest(_logger, "Test-StorageBlobServiceProperties");
60-
}
67+
}
6168
}
6269
}

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

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,51 @@
1212
# limitations under the License.
1313
# ----------------------------------------------------------------------------------
1414

15+
16+
<#
17+
.SYNOPSIS
18+
Test StorageAccount blob IsVersioningEnabled
19+
.DESCRIPTION
20+
SmokeTest
21+
#>
22+
function Test-StorageBlobIsVersioningEnabled
23+
{
24+
# Setup
25+
$rgname = Get-StorageManagementTestResourceName;
26+
27+
try
28+
{
29+
# Test
30+
$stoname = $rgname;
31+
$stotype = 'Standard_LRS';
32+
$loc = Get-ProviderLocation ResourceManagement;
33+
$kind = 'StorageV2'
34+
35+
Write-Verbose "RGName: $rgname | Loc: $loc"
36+
New-AzResourceGroup -Name $rgname -Location $loc;
37+
38+
$loc = Get-ProviderLocation_Canary ResourceManagement;
39+
New-AzStorageAccount -ResourceGroupName $rgname -Name $stoname -Location $loc -Type $stotype -Kind $kind
40+
41+
# Enable Blob versioning
42+
Update-AzStorageBlobServiceProperty -ResourceGroupName $rgname -StorageAccountName $stoname -IsVersioningEnabled $true
43+
$property = Get-AzStorageBlobServiceProperty -ResourceGroupName $rgname -StorageAccountName $stoname
44+
Assert-AreEqual $true $property.IsVersioningEnabled
45+
46+
# Disable Blob versioning
47+
Update-AzStorageBlobServiceProperty -ResourceGroupName $rgname -StorageAccountName $stoname -IsVersioningEnabled $false
48+
$property = Get-AzStorageBlobServiceProperty -ResourceGroupName $rgname -StorageAccountName $stoname
49+
Assert-AreEqual $false $property.IsVersioningEnabled
50+
51+
Remove-AzStorageAccount -Force -ResourceGroupName $rgname -Name $stoname;
52+
}
53+
finally
54+
{
55+
# Cleanup
56+
Clean-ResourceGroup $rgname
57+
}
58+
}
59+
1560
<#
1661
.SYNOPSIS
1762
Test StorageAccount
@@ -390,3 +435,5 @@ function Test-StorageBlobServiceProperties
390435
}
391436

392437

438+
439+

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

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

src/Storage/Storage.Management.Test/Storage.Management.Test.csproj

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,10 @@
1111
</PropertyGroup>
1212

1313
<ItemGroup>
14-
<PackageReference Include="Azure.Storage.Blobs" Version="12.4.0" />
15-
<PackageReference Include="Azure.Storage.Files.DataLake" Version="12.0.0" />
16-
<PackageReference Include="Azure.Storage.Files.Shares" Version="12.2.0" />
17-
<PackageReference Include="Azure.Storage.Queues" Version="12.3.0" />
14+
<PackageReference Include="Azure.Storage.Blobs" Version="12.5.0-preview.5" />
15+
<PackageReference Include="Azure.Storage.Files.DataLake" Version="12.3.0-preview.1" />
16+
<PackageReference Include="Azure.Storage.Files.Shares" Version="12.3.0-preview.1" />
17+
<PackageReference Include="Azure.Storage.Queues" Version="12.4.0-preview.5" />
1818
<PackageReference Include="Microsoft.Azure.Management.Storage" Version="17.1.0" />
1919
</ItemGroup>
2020

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

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,23 @@ public class UpdateAzStorageBlobServicePropertyCommand : StorageBlobBaseCmdlet
8383
[ValidateNotNull]
8484
public string DefaultServiceVersion { get; set; }
8585

86+
[Parameter(
87+
Mandatory = false,
88+
HelpMessage = "Gets or sets versioning is enabled if set to true.")]
89+
[ValidateNotNullOrEmpty]
90+
public bool IsVersioningEnabled
91+
{
92+
get
93+
{
94+
return isVersioningEnabled is null ? false : isVersioningEnabled.Value;
95+
}
96+
set
97+
{
98+
isVersioningEnabled = value;
99+
}
100+
}
101+
private bool? isVersioningEnabled = null;
102+
86103
public override void ExecuteCmdlet()
87104
{
88105
base.ExecuteCmdlet();
@@ -111,6 +128,10 @@ public override void ExecuteCmdlet()
111128
{
112129
serviceProperties.DefaultServiceVersion = this.DefaultServiceVersion;
113130
}
131+
if (isVersioningEnabled != null)
132+
{
133+
serviceProperties.IsVersioningEnabled = isVersioningEnabled;
134+
}
114135

115136
serviceProperties = this.StorageClient.BlobServices.SetServiceProperties(this.ResourceGroupName, this.StorageAccountName, serviceProperties);
116137

src/Storage/Storage.Management/ChangeLog.md

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,19 @@
2222
* Supported create/update Storage account with MinimumTlsVersion and AllowBlobPublicAccess
2323
- `New-AzStorageAccount`
2424
- `Set-AzStorageAccount`
25+
* Support enable/disable versioning on Blob Service of a Storage account
26+
- `Update-AzStorageBlobServiceProperty`
27+
* Support list blobs with blob versions
28+
- `Get-AzStorageBlob`
29+
* Support get/remove single blob snapshot or blob version
30+
- `Get-AzStorageBlob`
31+
- `Remove-AzStorageBlob`
32+
* Support pipeline from blob object generated from Azure.Storage.Blobs V12
33+
- `Get-AzStorageBlobContent`
34+
- `New-AzStorageBlobSASToken`
35+
- `Remove-AzStorageBlob`
36+
- `Set-AzStorageBlobContent`
37+
- `Start-AzStorageBlobCopy`
2538

2639
## Version 2.2.0
2740
* Supported create Storage account with RequireInfrastructureEncryption

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

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,10 +34,17 @@ public class PSBlobServiceProperties
3434
public string Type { get; set; }
3535
[Ps1Xml(Label = "DefaultServiceVersion", Target = ViewControl.Table, Position = 2)]
3636
public string DefaultServiceVersion { get; set; }
37+
[Ps1Xml(Label = "ChangeFeed", Target = ViewControl.Table, ScriptBlock = "$_.ChangeFeed.Enabled", Position = 7)]
38+
public PSChangeFeed ChangeFeed { get; set; }
3739
[Ps1Xml(Label = "DeleteRetentionPolicy.Enabled", Target = ViewControl.Table, ScriptBlock = "$_.DeleteRetentionPolicy.Enabled", Position = 3)]
3840
[Ps1Xml(Label = "DeleteRetentionPolicy.Days", Target = ViewControl.Table, ScriptBlock = "$_.DeleteRetentionPolicy.Days", Position = 4)]
3941
public PSDeleteRetentionPolicy DeleteRetentionPolicy { get; set; }
42+
[Ps1Xml(Label = "RestorePolicy.Enabled", Target = ViewControl.Table, ScriptBlock = "$_.RestorePolicy.Enabled", Position = 5)]
43+
[Ps1Xml(Label = "RestorePolicy.Days", Target = ViewControl.Table, ScriptBlock = "$_.RestorePolicy.Days", Position = 6)]
44+
[Ps1Xml(Label = "RestorePolicy.LastEnabledTime", Target = ViewControl.Table, ScriptBlock = "$_.RestorePolicy.LastEnabledTime", Position = 7)]
45+
public PSRestorePolicy RestorePolicy { get; set; }
4046
public PSCorsRules Cors { get; set; }
47+
public bool? IsVersioningEnabled { get; set; }
4148

4249
public PSBlobServiceProperties()
4350
{ }
@@ -52,6 +59,9 @@ public PSBlobServiceProperties(BlobServiceProperties policy)
5259
this.Cors = policy.Cors is null ? null : new PSCorsRules(policy.Cors);
5360
this.DefaultServiceVersion = policy.DefaultServiceVersion;
5461
this.DeleteRetentionPolicy = policy.DeleteRetentionPolicy is null ? null : new PSDeleteRetentionPolicy(policy.DeleteRetentionPolicy);
62+
this.RestorePolicy = policy.RestorePolicy is null ? null : new PSRestorePolicy(policy.RestorePolicy);
63+
this.ChangeFeed = policy.ChangeFeed is null ? null : new PSChangeFeed(policy.ChangeFeed);
64+
this.IsVersioningEnabled = policy.IsVersioningEnabled;
5565
}
5666
public BlobServiceProperties ParseBlobServiceProperties()
5767
{
@@ -60,6 +70,9 @@ public BlobServiceProperties ParseBlobServiceProperties()
6070
Cors = this.Cors is null ? null : this.Cors.ParseCorsRules(),
6171
DefaultServiceVersion = this.DefaultServiceVersion,
6272
DeleteRetentionPolicy = this.DeleteRetentionPolicy is null ? null : this.DeleteRetentionPolicy.ParseDeleteRetentionPolicy(),
73+
RestorePolicy = this.RestorePolicy is null ? null : this.RestorePolicy.ParseRestorePolicy(),
74+
ChangeFeed = this.ChangeFeed is null ? null : this.ChangeFeed.ParseChangeFeed(),
75+
IsVersioningEnabled = this.IsVersioningEnabled
6376
};
6477
}
6578

@@ -141,6 +154,36 @@ public DeleteRetentionPolicy ParseDeleteRetentionPolicy()
141154
}
142155
}
143156

157+
/// <summary>
158+
/// Wrapper of SDK type DeleteRetentionPolicy
159+
/// </summary>
160+
public class PSRestorePolicy
161+
{
162+
public bool? Enabled { get; set; }
163+
public int? Days { get; set; }
164+
public DateTime? LastEnabledTime { get; set; }
165+
166+
public PSRestorePolicy()
167+
{
168+
}
169+
170+
public PSRestorePolicy(RestorePolicyProperties policy)
171+
{
172+
this.Enabled = policy.Enabled;
173+
this.Days = policy.Days;
174+
this.LastEnabledTime = policy.LastEnabledTime;
175+
176+
}
177+
public RestorePolicyProperties ParseRestorePolicy()
178+
{
179+
return new RestorePolicyProperties
180+
{
181+
Enabled = this.Enabled is null ? false : this.Enabled.Value,
182+
Days = this.Days
183+
};
184+
}
185+
}
186+
144187
/// <summary>
145188
/// Wrapper of SDK type CorsRules
146189
/// </summary>

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

Lines changed: 47 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -278,60 +278,58 @@
278278
</ListControl>
279279
</View>
280280
<View>
281-
<Name>Microsoft.Azure.Commands.Management.Storage.Models.PSBlobServiceProperties</Name>
282-
<ViewSelectedBy>
283-
<TypeName>Microsoft.Azure.Commands.Management.Storage.Models.PSBlobServiceProperties</TypeName>
284-
</ViewSelectedBy>
285-
<TableControl>
286-
<TableHeaders>
287-
<TableColumnHeader>
288-
<Alignment>Left</Alignment>
289-
<Label>StorageAccountName</Label>
290-
</TableColumnHeader>
291-
<TableColumnHeader>
292-
<Alignment>Left</Alignment>
293-
<Label>ResourceGroupName</Label>
294-
</TableColumnHeader>
295-
<TableColumnHeader>
296-
<Alignment>Left</Alignment>
297-
<Label>DefaultServiceVersion</Label>
298-
</TableColumnHeader>
299-
<TableColumnHeader>
300-
<Alignment>Left</Alignment>
301-
<Label>DeleteRetentionPolicy.Enabled</Label>
302-
</TableColumnHeader>
303-
<TableColumnHeader>
304-
<Alignment>Left</Alignment>
305-
<Label>DeleteRetentionPolicy.Days</Label>
306-
</TableColumnHeader>
307-
</TableHeaders>
308-
<TableRowEntries>
309-
<TableRowEntry>
310-
<TableColumnItems>
311-
<TableColumnItem>
312-
<Alignment>Left</Alignment>
281+
<Name>Microsoft.Azure.Commands.Management.Storage.Models.PSBlobServiceProperties</Name>
282+
<ViewSelectedBy>
283+
<TypeName>Microsoft.Azure.Commands.Management.Storage.Models.PSBlobServiceProperties</TypeName>
284+
</ViewSelectedBy>
285+
<ListControl>
286+
<ListEntries>
287+
<ListEntry>
288+
<ListItems>
289+
<ListItem>
313290
<PropertyName>StorageAccountName</PropertyName>
314-
</TableColumnItem>
315-
<TableColumnItem>
316-
<Alignment>Left</Alignment>
291+
<Label>StorageAccountName</Label>
292+
</ListItem>
293+
<ListItem>
317294
<PropertyName>ResourceGroupName</PropertyName>
318-
</TableColumnItem>
319-
<TableColumnItem>
320-
<Alignment>Left</Alignment>
295+
<Label>ResourceGroupName</Label>
296+
</ListItem>
297+
<ListItem>
321298
<PropertyName>DefaultServiceVersion</PropertyName>
322-
</TableColumnItem>
323-
<TableColumnItem>
324-
<Alignment>Left</Alignment>
299+
<Label>DefaultServiceVersion</Label>
300+
</ListItem>
301+
<ListItem>
302+
<Label>DeleteRetentionPolicy.Enabled</Label>
325303
<ScriptBlock>$_.DeleteRetentionPolicy.Enabled</ScriptBlock>
326-
</TableColumnItem>
327-
<TableColumnItem>
328-
<Alignment>Left</Alignment>
304+
</ListItem>
305+
<ListItem>
306+
<Label>DeleteRetentionPolicy.Days</Label>
329307
<ScriptBlock>$_.DeleteRetentionPolicy.Days</ScriptBlock>
330-
</TableColumnItem>
331-
</TableColumnItems>
332-
</TableRowEntry>
333-
</TableRowEntries>
334-
</TableControl>
308+
</ListItem>
309+
<ListItem>
310+
<Label>RestorePolicy.Enabled</Label>
311+
<ScriptBlock>$_.RestorePolicy.Enabled</ScriptBlock>
312+
</ListItem>
313+
<ListItem>
314+
<Label>RestorePolicy.Days</Label>
315+
<ScriptBlock>$_.RestorePolicy.Days</ScriptBlock>
316+
</ListItem>
317+
<ListItem>
318+
<Label>RestorePolicy.LastEnabledTime</Label>
319+
<ScriptBlock>$_.RestorePolicy.LastEnabledTime</ScriptBlock>
320+
</ListItem>
321+
<ListItem>
322+
<Label>ChangeFeed</Label>
323+
<ScriptBlock>$_.ChangeFeed.Enabled</ScriptBlock>
324+
</ListItem>
325+
<ListItem>
326+
<PropertyName>IsVersioningEnabled</PropertyName>
327+
<Label>IsVersioningEnabled</Label>
328+
</ListItem>
329+
</ListItems>
330+
</ListEntry>
331+
</ListEntries>
332+
</ListControl>
335333
</View>
336334
<View>
337335
<Name>Microsoft.Azure.Commands.Management.Storage.Models.PSShare</Name>

0 commit comments

Comments
 (0)