Skip to content

Commit e02597a

Browse files
authored
[Storage] Add support for TierToHot and TierToCold in LCM (#20292)
* add support for TierToHot and TierToCold in LCM * add changelog
1 parent 9426057 commit e02597a

File tree

8 files changed

+957
-270
lines changed

8 files changed

+957
-270
lines changed

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

Lines changed: 56 additions & 13 deletions
Large diffs are not rendered by default.

src/Storage/Storage.Management.Test/SessionRecords/Microsoft.Azure.Commands.Management.Storage.Test.ScenarioTests.StorageAccountTests/TestStorageAccountManagementPolicy.json

Lines changed: 767 additions & 242 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 TierToCold and TierToHot in Storage account management policy
22+
- `Add-AzStorageAccountManagementPolicyAction`
2123
* Supported MaxPageSize, Include, and Filter parameters for listing encryption scopes
2224
- `Get-AzStorageEncryptionScope`
2325
* Supported excludePrefix, includeDeleted, and many new schema fields in Blob Inventory

src/Storage/Storage.Management/Models/PSDataPolicy.cs

Lines changed: 27 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -290,6 +290,8 @@ public class PSManagementPolicyBaseBlob
290290
public PSDateAfterModification TierToCool { get; set; }
291291
public PSDateAfterModification TierToArchive { get; set; }
292292
public PSDateAfterModification Delete { get; set; }
293+
public PSDateAfterModification TierToCold { get; set; }
294+
public PSDateAfterModification TierToHot { get; set; }
293295
public bool? EnableAutoTierToHotFromCool { get; set; }
294296

295297
public PSManagementPolicyBaseBlob()
@@ -300,15 +302,19 @@ public PSManagementPolicyBaseBlob(ManagementPolicyBaseBlob blobAction)
300302
this.TierToCool = blobAction.TierToCool is null ? null : new PSDateAfterModification(blobAction.TierToCool);
301303
this.TierToArchive = blobAction.TierToArchive is null ? null : new PSDateAfterModification(blobAction.TierToArchive);
302304
this.Delete = blobAction.Delete is null ? null : new PSDateAfterModification(blobAction.Delete);
305+
this.TierToCold = blobAction.TierToCold is null ? null : new PSDateAfterModification(blobAction.TierToCold);
306+
this.TierToHot = blobAction.TierToHot is null ? null : new PSDateAfterModification(blobAction.TierToHot);
303307
this.EnableAutoTierToHotFromCool = blobAction.EnableAutoTierToHotFromCool;
304308
}
305309
public ManagementPolicyBaseBlob ParseManagementPolicyBaseBlob()
306310
{
307311
return new ManagementPolicyBaseBlob()
308312
{
309-
TierToCool = this.TierToCool is null ? null : this.TierToCool.ParseDateAfterModification(),
310-
TierToArchive = this.TierToArchive is null ? null : this.TierToArchive.ParseDateAfterModification(),
311-
Delete = this.Delete is null ? null : this.Delete.ParseDateAfterModification(),
313+
TierToCool = this.TierToCool?.ParseDateAfterModification(),
314+
TierToArchive = this.TierToArchive?.ParseDateAfterModification(),
315+
Delete = this.Delete?.ParseDateAfterModification(),
316+
TierToCold = this.TierToCold?.ParseDateAfterModification(),
317+
TierToHot = this.TierToHot?.ParseDateAfterModification(),
312318
EnableAutoTierToHotFromCool = this.EnableAutoTierToHotFromCool
313319
};
314320
}
@@ -322,6 +328,8 @@ public class PSManagementPolicySnapShot
322328
public PSDateAfterCreation Delete { get; set; }
323329
public PSDateAfterCreation TierToCool { get; set; }
324330
public PSDateAfterCreation TierToArchive { get; set; }
331+
public PSDateAfterCreation TierToCold { get; set; }
332+
public PSDateAfterCreation TierToHot { get; set; }
325333

326334
public PSManagementPolicySnapShot()
327335
{ }
@@ -331,14 +339,18 @@ public PSManagementPolicySnapShot(ManagementPolicySnapShot blobAction)
331339
this.Delete = blobAction.Delete is null ? null : new PSDateAfterCreation(blobAction.Delete);
332340
this.TierToCool = blobAction.TierToCool is null ? null : new PSDateAfterCreation(blobAction.TierToCool);
333341
this.TierToArchive = blobAction.TierToArchive is null ? null : new PSDateAfterCreation(blobAction.TierToArchive);
342+
this.TierToCold = blobAction.TierToCold is null ? null : new PSDateAfterCreation(blobAction.TierToCold);
343+
this.TierToHot = blobAction.TierToHot is null ? null : new PSDateAfterCreation(blobAction.TierToHot);
334344
}
335345
public ManagementPolicySnapShot ParseManagementPolicySnapShot()
336346
{
337347
return new ManagementPolicySnapShot()
338348
{
339-
Delete = this.Delete is null ? null : this.Delete.ParseDateAfterCreation(),
340-
TierToCool = this.TierToCool is null ? null : this.TierToCool.ParseDateAfterCreation(),
341-
TierToArchive = this.TierToArchive is null ? null : this.TierToArchive.ParseDateAfterCreation()
349+
Delete = this.Delete?.ParseDateAfterCreation(),
350+
TierToCool = this.TierToCool?.ParseDateAfterCreation(),
351+
TierToArchive = this.TierToArchive?.ParseDateAfterCreation(),
352+
TierToCold = this.TierToCold?.ParseDateAfterCreation(),
353+
TierToHot = this.TierToHot?.ParseDateAfterCreation()
342354
};
343355
}
344356
}
@@ -351,6 +363,8 @@ public class PSManagementPolicyVersion
351363
public PSDateAfterCreation Delete { get; set; }
352364
public PSDateAfterCreation TierToCool { get; set; }
353365
public PSDateAfterCreation TierToArchive { get; set; }
366+
public PSDateAfterCreation TierToCold { get; set; }
367+
public PSDateAfterCreation TierToHot { get; set; }
354368

355369
public PSManagementPolicyVersion()
356370
{ }
@@ -360,14 +374,18 @@ public PSManagementPolicyVersion(ManagementPolicyVersion blobAction)
360374
this.Delete = blobAction.Delete is null ? null : new PSDateAfterCreation(blobAction.Delete);
361375
this.TierToCool = blobAction.TierToCool is null ? null : new PSDateAfterCreation(blobAction.TierToCool);
362376
this.TierToArchive = blobAction.TierToArchive is null ? null : new PSDateAfterCreation(blobAction.TierToArchive);
377+
this.TierToCold = blobAction.TierToCold is null ? null : new PSDateAfterCreation(blobAction.TierToCold);
378+
this.TierToHot = blobAction.TierToHot is null ? null : new PSDateAfterCreation(blobAction.TierToHot);
363379
}
364380
public ManagementPolicyVersion ParseManagementPolicyVersion()
365381
{
366382
return new ManagementPolicyVersion()
367383
{
368-
Delete = this.Delete is null ? null : this.Delete.ParseDateAfterCreation(),
369-
TierToCool = this.TierToCool is null ? null : this.TierToCool.ParseDateAfterCreation(),
370-
TierToArchive = this.TierToArchive is null ? null : this.TierToArchive.ParseDateAfterCreation()
384+
Delete = this.Delete?.ParseDateAfterCreation(),
385+
TierToCool = this.TierToCool?.ParseDateAfterCreation(),
386+
TierToArchive = this.TierToArchive?.ParseDateAfterCreation(),
387+
TierToCold = this.TierToCold?.ParseDateAfterCreation(),
388+
TierToHot = this.TierToHot?.ParseDateAfterCreation()
371389
};
372390
}
373391
}

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

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -299,6 +299,30 @@
299299
<ScriptBlock>$_.BaseBlob.Delete.DaysAfterCreationGreaterThan</ScriptBlock>
300300
<Label>BaseBlob.Delete.DaysAfterCreationGreaterThan</Label>
301301
</ListItem>
302+
<ListItem>
303+
<ScriptBlock>$_.BaseBlob.TierToCold.DaysAfterModificationGreaterThan</ScriptBlock>
304+
<Label>BaseBlob.TierToCold.DaysAfterModificationGreaterThan</Label>
305+
</ListItem>
306+
<ListItem>
307+
<ScriptBlock>$_.BaseBlob.TierToCold.DaysAfterLastAccessTimeGreaterThan</ScriptBlock>
308+
<Label>BaseBlob.TierToCold.DaysAfterLastAccessTimeGreaterThan</Label>
309+
</ListItem>
310+
<ListItem>
311+
<ScriptBlock>$_.BaseBlob.TierToCold.DaysAfterCreationGreaterThan</ScriptBlock>
312+
<Label>BaseBlob.TierToCold.DaysAfterCreationGreaterThan</Label>
313+
</ListItem>
314+
<ListItem>
315+
<ScriptBlock>$_.BaseBlob.TierToHot.DaysAfterModificationGreaterThan</ScriptBlock>
316+
<Label>BaseBlob.TierToHot.DaysAfterModificationGreaterThan</Label>
317+
</ListItem>
318+
<ListItem>
319+
<ScriptBlock>$_.BaseBlob.TierToHot.DaysAfterLastAccessTimeGreaterThan</ScriptBlock>
320+
<Label>BaseBlob.TierToHot.DaysAfterLastAccessTimeGreaterThan</Label>
321+
</ListItem>
322+
<ListItem>
323+
<ScriptBlock>$_.BaseBlob.TierToHot.DaysAfterCreationGreaterThan</ScriptBlock>
324+
<Label>BaseBlob.TierToHot.DaysAfterCreationGreaterThan</Label>
325+
</ListItem>
302326
<ListItem>
303327
<ScriptBlock>$_.Snapshot.TierToCool.DaysAfterCreationGreaterThan</ScriptBlock>
304328
<Label>Snapshot.TierToCool.DaysAfterCreationGreaterThan</Label>
@@ -315,6 +339,14 @@
315339
<ScriptBlock>$_.Snapshot.Delete.DaysAfterCreationGreaterThan</ScriptBlock>
316340
<Label>Snapshot.Delete.DaysAfterCreationGreaterThan</Label>
317341
</ListItem>
342+
<ListItem>
343+
<ScriptBlock>$_.Snapshot.TierToCold.DaysAfterCreationGreaterThan</ScriptBlock>
344+
<Label>Snapshot.TierToCold.DaysAfterCreationGreaterThan</Label>
345+
</ListItem>
346+
<ListItem>
347+
<ScriptBlock>$_.Snapshot.TierToHot.DaysAfterCreationGreaterThan</ScriptBlock>
348+
<Label>Snapshot.TierToHot.DaysAfterCreationGreaterThan</Label>
349+
</ListItem>
318350
<ListItem>
319351
<ScriptBlock>$_.Version.TierToCool.DaysAfterCreationGreaterThan</ScriptBlock>
320352
<Label>Version.TierToCool.DaysAfterCreationGreaterThan</Label>
@@ -331,6 +363,14 @@
331363
<ScriptBlock>$_.Version.Delete.DaysAfterCreationGreaterThan</ScriptBlock>
332364
<Label>Version.Delete.DaysAfterCreationGreaterThan</Label>
333365
</ListItem>
366+
<ListItem>
367+
<ScriptBlock>$_.Version.TierToCold.DaysAfterCreationGreaterThan</ScriptBlock>
368+
<Label>Version.TierToCold.DaysAfterCreationGreaterThan</Label>
369+
</ListItem>
370+
<ListItem>
371+
<ScriptBlock>$_.Version.TierToHot.DaysAfterCreationGreaterThan</ScriptBlock>
372+
<Label>Version.TierToHot.DaysAfterCreationGreaterThan</Label>
373+
</ListItem>
334374
</ListItems>
335375
</ListEntry>
336376
</ListEntries>

src/Storage/Storage.Management/StorageAccount/AddAzureStorageAccountManagementPolicyAction.cs

Lines changed: 33 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
using Microsoft.WindowsAzure.Commands.Common.CustomAttributes;
2020
using System.Globalization;
2121
using System.Management.Automation;
22+
using System.Security.Permissions;
2223

2324
namespace Microsoft.Azure.Commands.Management.Storage
2425
{
@@ -42,6 +43,8 @@ public class AddAzureStorageAccountManagementPolicyActionCommand : StorageAccoun
4243
[ValidateSet(ManagementPolicyAction.Delete,
4344
ManagementPolicyAction.TierToArchive,
4445
ManagementPolicyAction.TierToCool,
46+
ManagementPolicyAction.TierToCold,
47+
ManagementPolicyAction.TierToHot,
4548
IgnoreCase = true)]
4649
public string BaseBlobAction { get; set; }
4750

@@ -51,6 +54,8 @@ public class AddAzureStorageAccountManagementPolicyActionCommand : StorageAccoun
5154
[ValidateSet(ManagementPolicyAction.Delete,
5255
ManagementPolicyAction.TierToArchive,
5356
ManagementPolicyAction.TierToCool,
57+
ManagementPolicyAction.TierToCold,
58+
ManagementPolicyAction.TierToHot,
5459
IgnoreCase = true)]
5560
public string SnapshotAction { get; set; }
5661

@@ -60,6 +65,8 @@ public class AddAzureStorageAccountManagementPolicyActionCommand : StorageAccoun
6065
[ValidateSet(ManagementPolicyAction.Delete,
6166
ManagementPolicyAction.TierToArchive,
6267
ManagementPolicyAction.TierToCool,
68+
ManagementPolicyAction.TierToCold,
69+
ManagementPolicyAction.TierToHot,
6370
IgnoreCase = true)]
6471
public string BlobVersionAction { get; set; }
6572

@@ -198,14 +205,26 @@ public override void ExecuteCmdlet()
198205
action.BaseBlob.TierToCool = new PSDateAfterModification(this.daysAfterModificationGreaterThan,
199206
this.daysAfterLastAccessTimeGreaterThan,
200207
this.daysAfterLastTierChangeGreaterThan,
201-
this.daysAfterCreationGreaterThan);
202-
break;
208+
this.daysAfterCreationGreaterThan);
209+
break;
203210
case ManagementPolicyAction.TierToArchive:
204211
action.BaseBlob.TierToArchive = new PSDateAfterModification(this.daysAfterModificationGreaterThan,
205212
this.daysAfterLastAccessTimeGreaterThan,
206213
this.daysAfterLastTierChangeGreaterThan,
207214
this.daysAfterCreationGreaterThan);
208215
break;
216+
case ManagementPolicyAction.TierToCold:
217+
action.BaseBlob.TierToCold = new PSDateAfterModification(this.daysAfterModificationGreaterThan,
218+
this.daysAfterLastAccessTimeGreaterThan,
219+
this.daysAfterLastTierChangeGreaterThan,
220+
this.daysAfterCreationGreaterThan);
221+
break;
222+
case ManagementPolicyAction.TierToHot:
223+
action.BaseBlob.TierToHot = new PSDateAfterModification(this.daysAfterModificationGreaterThan,
224+
this.daysAfterLastAccessTimeGreaterThan,
225+
this.daysAfterLastTierChangeGreaterThan,
226+
this.daysAfterCreationGreaterThan);
227+
break;
209228
default:
210229
throw new PSArgumentException(string.Format(CultureInfo.InvariantCulture, "Invalid BaseBlobAction: {0}", this.BaseBlobAction));
211230
}
@@ -230,6 +249,12 @@ public override void ExecuteCmdlet()
230249
case ManagementPolicyAction.TierToArchive:
231250
action.Snapshot.TierToArchive = new PSDateAfterCreation(this.DaysAfterCreationGreaterThan, this.daysAfterLastTierChangeGreaterThan);
232251
break;
252+
case ManagementPolicyAction.TierToCold:
253+
action.Snapshot.TierToCold = new PSDateAfterCreation(this.DaysAfterCreationGreaterThan, this.daysAfterLastTierChangeGreaterThan);
254+
break;
255+
case ManagementPolicyAction.TierToHot:
256+
action.Snapshot.TierToHot = new PSDateAfterCreation(this.DaysAfterCreationGreaterThan, this.daysAfterLastTierChangeGreaterThan);
257+
break;
233258
default:
234259
throw new PSArgumentException(string.Format(CultureInfo.InvariantCulture, "Invalid SnapshotAction: {0}", this.SnapshotAction));
235260
}
@@ -250,6 +275,12 @@ public override void ExecuteCmdlet()
250275
case ManagementPolicyAction.TierToArchive:
251276
action.Version.TierToArchive = new PSDateAfterCreation(this.DaysAfterCreationGreaterThan, this.daysAfterLastTierChangeGreaterThan);
252277
break;
278+
case ManagementPolicyAction.TierToCold:
279+
action.Version.TierToCold = new PSDateAfterCreation(this.DaysAfterCreationGreaterThan, this.daysAfterLastTierChangeGreaterThan);
280+
break;
281+
case ManagementPolicyAction.TierToHot:
282+
action.Version.TierToHot = new PSDateAfterCreation(this.DaysAfterCreationGreaterThan, this.daysAfterLastTierChangeGreaterThan);
283+
break;
253284
default:
254285
throw new PSArgumentException(string.Format(CultureInfo.InvariantCulture, "Invalid BlobVersionAction: {0}", this.BlobVersionAction));
255286
}

src/Storage/Storage.Management/StorageAccount/StorageAccountBaseCmdlet.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,8 @@ protected struct ManagementPolicyAction
7373
internal const string TierToCool = "TierToCool";
7474
internal const string TierToArchive = "TierToArchive";
7575
internal const string Delete = "Delete";
76+
internal const string TierToCold = "TierToCold";
77+
internal const string TierToHot = "TierToHot";
7678
}
7779

7880
protected struct AccountIdentityType

0 commit comments

Comments
 (0)