Skip to content

Commit eb8b43c

Browse files
authored
[Az.RecoveryServices.Backup] Added sub tasks duration for IaasVM job details command (#19377)
* Added SubTasks Duration for IaasVM job details * Removed status filter from Get-AzRecoveryServicesBackupContainer command * Added test cases * Re-recorded failed tests * re-recorded tests * re-recorded tests * re-recorded test cases
1 parent 93c027e commit eb8b43c

File tree

42 files changed

+12740
-94273
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

42 files changed

+12740
-94273
lines changed

src/RecoveryServices/RecoveryServices.Backup.Helpers/Conversions/JobConversions.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -810,7 +810,8 @@ private static CmdletModel.AzureVmJob GetPSAzureVmJob(JobResource serviceClientJ
810810
detailedResponse.SubTasks.Add(new CmdletModel.AzureVmJobSubTask()
811811
{
812812
Name = vmJobTask.TaskId,
813-
Status = vmJobTask.Status
813+
Status = vmJobTask.Status,
814+
Duration = (vmJobTask.StartTime != null && vmJobTask.EndTime != null) ? vmJobTask.Duration : null
814815
});
815816
}
816817
}

src/RecoveryServices/RecoveryServices.Backup.Helpers/Validations/PolicyValidations.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ namespace Microsoft.Azure.Commands.RecoveryServices.Backup.Helpers
2525
public partial class PolicyHelpers
2626
{
2727

28-
public static void ValidateLongTermRetentionPolicyWithTieringPolicy(LongTermRetentionPolicy ltrPolicy, TieringPolicy tieringPolicy, bool isPreviousTieringPolicy = false) // check resx messages
28+
public static void ValidateLongTermRetentionPolicyWithTieringPolicy(LongTermRetentionPolicy ltrPolicy, TieringPolicy tieringPolicy, bool isPreviousTieringPolicy = false)
2929
{
3030
// To enable Archive(either TierRecommended or TierAfter), Monthly or Yearly retention needs to be set
3131
if(tieringPolicy != null && tieringPolicy.TieringMode != TieringMode.DoNotTier )

src/RecoveryServices/RecoveryServices.Backup.Models/AzureVmModels/AzureVmJob.cs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
// limitations under the License.
1313
// ----------------------------------------------------------------------------------
1414

15+
using System;
1516
using System.Collections.Generic;
1617

1718
namespace Microsoft.Azure.Commands.RecoveryServices.Backup.Cmdlets.Models
@@ -57,5 +58,11 @@ public class AzureVmJobErrorInfo : AzureJobErrorInfo { }
5758
/// <summary>
5859
/// Azure VM specific job sub-task class.
5960
/// </summary>
60-
public class AzureVmJobSubTask : AzureJobSubTask { }
61+
public class AzureVmJobSubTask : AzureJobSubTask {
62+
63+
/// <summary>
64+
/// sub task duration
65+
/// </summary>
66+
public TimeSpan? Duration { get; set; }
67+
}
6168
}

src/RecoveryServices/RecoveryServices.Backup.Models/CommonModels/Enums.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -199,6 +199,7 @@ public enum ContainerRegistrationStatus
199199
/// Represents the registered state of the container with the recovery services vault.
200200
/// </summary>
201201
Registered = 1,
202+
NotRegistered = 2,
202203
}
203204

204205
/// <summary>

src/RecoveryServices/RecoveryServices.Backup.Providers/AzureWorkloadProviderHelper.cs

Lines changed: 3 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -340,28 +340,13 @@ public List<ProtectedItemResource> ListProtectedItemsByContainer(
340340
{
341341
string vaultName = (string)providerData[CmdletModel.VaultParams.VaultName];
342342
string vaultResourceGroupName = (string)providerData[CmdletModel.VaultParams.ResourceGroupName];
343-
string friendlyName = (string)providerData[CmdletModel.ContainerParams.FriendlyName];
344-
CmdletModel.ContainerRegistrationStatus status =
345-
(CmdletModel.ContainerRegistrationStatus)providerData[CmdletModel.ContainerParams.Status];
343+
string friendlyName = (string)providerData[CmdletModel.ContainerParams.FriendlyName];
346344

347345
string nameQueryFilter = friendlyName;
348-
349-
ODataQuery<ServiceClientModel.BMSContainerQueryObject> queryParams = null;
350-
if (status == 0)
351-
{
352-
queryParams = new ODataQuery<ServiceClientModel.BMSContainerQueryObject>(
346+
ODataQuery<ServiceClientModel.BMSContainerQueryObject> queryParams = new ODataQuery<ServiceClientModel.BMSContainerQueryObject>(
353347
q => q.FriendlyName == nameQueryFilter &&
354348
q.BackupManagementType == backupManagementType);
355-
}
356-
else
357-
{
358-
var statusString = status.ToString();
359-
queryParams = new ODataQuery<ServiceClientModel.BMSContainerQueryObject>(
360-
q => q.FriendlyName == nameQueryFilter &&
361-
q.BackupManagementType == backupManagementType &&
362-
q.Status == statusString);
363-
}
364-
349+
365350
var listResponse = ServiceClientAdapter.ListContainers(
366351
queryParams,
367352
vaultName: vaultName,

src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/AzureFiles/ContainerTests.ps1

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -54,31 +54,27 @@ function Test-AzureFSContainer
5454
# VARIATION-1: Get All Containers with only mandatory parameters
5555
$containers = Get-AzRecoveryServicesBackupContainer `
5656
-VaultId $vault.ID `
57-
-ContainerType AzureStorage `
58-
-Status Registered;
57+
-ContainerType AzureStorage;
5958
Assert-True { $containers.FriendlyName -contains $saName }
6059

6160
# VARIATION-2: Get Containers with friendly name filter
6261
$containers = Get-AzRecoveryServicesBackupContainer `
6362
-VaultId $vault.ID `
6463
-ContainerType AzureStorage `
65-
-Status Registered `
6664
-FriendlyName $saName;
6765
Assert-True { $containers.FriendlyName -contains $saName }
6866

6967
# VARIATION-3: Get Containers with resource group filter
7068
$containers = Get-AzRecoveryServicesBackupContainer `
7169
-VaultId $vault.ID `
7270
-ContainerType AzureStorage `
73-
-Status Registered `
7471
-ResourceGroupName $resourceGroupName;
7572
Assert-True { $containers.FriendlyName -contains $saName }
7673

7774
# VARIATION-4: Get Containers with friendly name and resource group filters
7875
$containers = Get-AzRecoveryServicesBackupContainer `
7976
-VaultId $vault.ID `
8077
-ContainerType AzureStorage `
81-
-Status Registered `
8278
-FriendlyName $saName `
8379
-ResourceGroupName $resourceGroupName;
8480
Assert-True { $containers.FriendlyName -contains $saName }
@@ -97,7 +93,6 @@ function Test-AzureFSUnregisterContainer
9793
$container = Get-AzRecoveryServicesBackupContainer `
9894
-VaultId $vault.ID `
9995
-ContainerType AzureStorage `
100-
-Status Registered `
10196
-FriendlyName $saName
10297

10398
# Disable Protection
@@ -114,7 +109,6 @@ function Test-AzureFSUnregisterContainer
114109
$container = Get-AzRecoveryServicesBackupContainer `
115110
-VaultId $vault.ID `
116111
-ContainerType AzureStorage `
117-
-Status Registered `
118112
-FriendlyName $saName
119113
Assert-Null $container
120114
}

src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/AzureFiles/ItemTests.ps1

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,6 @@ function Test-AzureFSItem
6666
$container = Get-AzRecoveryServicesBackupContainer `
6767
-VaultId $vault.ID `
6868
-ContainerType AzureStorage `
69-
-Status Registered `
7069
-FriendlyName $saName
7170

7271
# VARIATION-1: Get all items for container
@@ -150,7 +149,6 @@ function Test-AzureFSBackup
150149
$container = Get-AzRecoveryServicesBackupContainer `
151150
-VaultId $vault.ID `
152151
-ContainerType AzureStorage `
153-
-Status Registered `
154152
-FriendlyName $saName
155153

156154
# Trigger backup and wait for completion
@@ -185,7 +183,6 @@ function Test-AzureFSProtection
185183
$container = Get-AzRecoveryServicesBackupContainer `
186184
-VaultId $vault.ID `
187185
-ContainerType AzureStorage `
188-
-Status Registered `
189186
-FriendlyName $saName
190187

191188
$item = Get-AzRecoveryServicesBackupItem `
@@ -231,7 +228,6 @@ function Test-AzureFSGetRPs
231228
$container = Get-AzRecoveryServicesBackupContainer `
232229
-VaultId $vault.ID `
233230
-ContainerType AzureStorage `
234-
-Status Registered `
235231
-FriendlyName $saName
236232
$backupJob = Backup-Item $vault $item
237233

@@ -270,7 +266,6 @@ function Test-AzureFSFullRestore
270266
$container = Get-AzRecoveryServicesBackupContainer `
271267
-VaultId $vault.ID `
272268
-ContainerType AzureStorage `
273-
-Status Registered `
274269
-FriendlyName $saName
275270
$backupJob = Backup-Item $vault $item
276271

src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/AzureFiles/JobTests.ps1

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,6 @@ function Test-AzureFSGetJob
6868
$container = Get-AzRecoveryServicesBackupContainer `
6969
-VaultId $vault.ID `
7070
-ContainerType AzureStorage `
71-
-Status Registered `
7271
-FriendlyName $saName
7372
}
7473
finally
@@ -98,7 +97,6 @@ function Test-AzureFSWaitJob
9897
$container = Get-AzRecoveryServicesBackupContainer `
9998
-VaultId $vault.ID `
10099
-ContainerType AzureStorage `
101-
-Status Registered `
102100
-FriendlyName $saName
103101
}
104102
finally
@@ -124,7 +122,6 @@ function Test-AzureFSCancelJob
124122
$container = Get-AzRecoveryServicesBackupContainer `
125123
-VaultId $vault.ID `
126124
-ContainerType AzureStorage `
127-
-Status Registered `
128125
-FriendlyName $saName
129126
}
130127
finally

src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/AzureFiles/ProtectionCheckTests.ps1

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,6 @@ function Test-AzureFSProtectionCheck
7171
$container = Get-AzRecoveryServicesBackupContainer `
7272
-VaultId $vault.ID `
7373
-ContainerType AzureStorage `
74-
-Status Registered `
7574
-FriendlyName $saName
7675
}
7776
finally

src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/AzureWorkload/ContainerTests.ps1

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -43,31 +43,27 @@ function Get-AzureVmWorkloadContainer
4343
# VARIATION-1: Get All Containers with only mandatory parameters
4444
$containers = Get-AzRecoveryServicesBackupContainer `
4545
-VaultId $vault.ID `
46-
-ContainerType AzureVMAppContainer `
47-
-Status Registered;
46+
-ContainerType AzureVMAppContainer;
4847
Assert-True { $containers[0].FriendlyName -contains $containerName }
4948

5049
# VARIATION-2: Get Containers with friendly name filter
5150
$containers = Get-AzRecoveryServicesBackupContainer `
5251
-VaultId $vault.ID `
5352
-ContainerType AzureVMAppContainer `
54-
-Status Registered `
5553
-FriendlyName $containerName;
5654
Assert-True { $containers.FriendlyName -contains $containerName }
5755

5856
# VARIATION-3: Get Containers with resource group filter
5957
$containers = Get-AzRecoveryServicesBackupContainer `
6058
-VaultId $vault.ID `
6159
-ContainerType AzureVMAppContainer `
62-
-Status Registered `
6360
-ResourceGroupName $resourceGroupName;
6461
Assert-True { $containers[0].FriendlyName -contains $containerName }
6562

6663
# VARIATION-4: Get Containers with friendly name and resource group filters
6764
$containers = Get-AzRecoveryServicesBackupContainer `
6865
-VaultId $vault.ID `
6966
-ContainerType AzureVMAppContainer `
70-
-Status Registered `
7167
-FriendlyName $containerName `
7268
-ResourceGroupName $resourceGroupName;
7369
Assert-True { $containers.FriendlyName -contains $containerName }
@@ -98,13 +94,11 @@ function Unregister-AzureWorkloadContainer
9894
Get-AzRecoveryServicesBackupContainer `
9995
-VaultId $vault.ID `
10096
-ContainerType AzureVMAppContainer `
101-
-Status Registered `
10297
-FriendlyName $containerName | Unregister-AzRecoveryServicesBackupContainer -VaultId $vault.ID
10398

10499
$container = Get-AzRecoveryServicesBackupContainer `
105100
-VaultId $vault.ID `
106101
-ContainerType AzureVMAppContainer `
107-
-Status Registered `
108102
-FriendlyName $containerName
109103
Assert-Null $container
110104
}

src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/AzureWorkload/PolicyTests.cs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,5 +35,17 @@ public void TestAzureVmWorkloadPolicy()
3535
"Test-AzureVmWorkloadPolicy"
3636
);
3737
}
38+
39+
[Fact]
40+
[Trait(Category.AcceptanceType, Category.CheckIn)]
41+
[Trait(TestConstants.Workload, TestConstants.AzureVmWorkload)]
42+
public void TestAzureVmWorkloadSmartTieringPolicy()
43+
{
44+
TestRunner.RunTestScript(
45+
$"Import-Module {_AzureWorkloadcommonModule.AsAbsoluteLocation()}",
46+
$"Import-Module {_AzureWorkloadtestModule.AsAbsoluteLocation()}",
47+
"Test-AzureVmWorkloadSmartTieringPolicy"
48+
);
49+
}
3850
}
3951
}

src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/AzureWorkload/PolicyTests.ps1

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,57 @@ $location = "centraluseuap"
2121
$resourceGroupName = "iaasvm-pstest-rg"
2222
$vaultName = "iaasvm-pstest-vault"
2323

24+
function Test-AzureVmWorkloadSmartTieringPolicy
25+
{
26+
$location = "centraluseuap"
27+
$resourceGroupName = "hiagarg"
28+
$vaultName = "hiagaVault"
29+
$tierRecommendedPolicy = "hiagaSQLArchiveTierRecommended"
30+
$tierAfterPolicy = "hiagaSQLArchiveTierAfter"
31+
$archiveDisabledPolicy = "hiagaSQLArchiveDisabled"
32+
33+
try
34+
{
35+
$vault = Get-AzRecoveryServicesVault -ResourceGroupName $resourceGroupName -Name $vaultName
36+
37+
$schPol = Get-AzRecoveryServicesBackupSchedulePolicyObject -WorkloadType MSSQL -BackupManagementType AzureWorkload
38+
$retPol = Get-AzRecoveryServicesBackupRetentionPolicyObject -WorkloadType MSSQL -BackupManagementType AzureWorkload
39+
40+
# error scenario - tier recommended not supported
41+
Assert-ThrowsContains { $pol = New-AzRecoveryServicesBackupProtectionPolicy -Name $tierRecommendedPolicy -WorkloadType MSSQL -BackupManagementType AzureWorkload -RetentionPolicy $retPol -SchedulePolicy $schPol -VaultId $vault.ID -MoveToArchiveTier $true -TieringMode TierRecommended } `
42+
"Tiering mode TierRecommended is not supported for BackupManagementType AzureWorkload";
43+
44+
45+
# error scenario for tier after policy
46+
Assert-ThrowsContains { $pol = New-AzRecoveryServicesBackupProtectionPolicy -Name $tierAfterPolicy -WorkloadType MSSQL -BackupManagementType AzureWorkload -RetentionPolicy $retPol -SchedulePolicy $schPol -VaultId $vault.ID -MoveToArchiveTier $true -TieringMode TierAllEligible -TierAfterDuration 40 -TierAfterDurationType Days } `
47+
"TierAfterDuration needs to be >= 45 Days, at least one retention policy for full backup (daily / weekly / monthly / yearly) should be >= (TierAfter + 180) days";
48+
49+
# create tier after policy
50+
$pol = New-AzRecoveryServicesBackupProtectionPolicy -Name $tierAfterPolicy -WorkloadType MSSQL -BackupManagementType AzureWorkload -RetentionPolicy $retPol -SchedulePolicy $schPol -VaultId $vault.ID -MoveToArchiveTier $true -TieringMode TierAllEligible -TierAfterDuration 45 -TierAfterDurationType Days
51+
52+
Assert-True { $pol.Name -eq $tierAfterPolicy }
53+
54+
# modify policy
55+
$pol = Get-AzRecoveryServicesBackupProtectionPolicy -VaultId $vault.ID | Where { $_.Name -match $tierAfterPolicy }
56+
Set-AzRecoveryServicesBackupProtectionPolicy -VaultId $vault.ID -Policy $pol[0] -MoveToArchiveTier $false
57+
Set-AzRecoveryServicesBackupProtectionPolicy -VaultId $vault.ID -Policy $pol[0] -MoveToArchiveTier $true -TieringMode TierAllEligible -TierAfterDuration 45 -TierAfterDurationType Days
58+
59+
# create archive disabled policy
60+
$pol = New-AzRecoveryServicesBackupProtectionPolicy -Name $archiveDisabledPolicy -WorkloadType MSSQL -BackupManagementType AzureWorkload -RetentionPolicy $retPol -SchedulePolicy $schPol -VaultId $vault.ID -MoveToArchiveTier $false
61+
Assert-True { $pol.Name -eq $archiveDisabledPolicy }
62+
}
63+
finally
64+
{
65+
# Cleanup
66+
# Delete policy
67+
$pol = Get-AzRecoveryServicesBackupProtectionPolicy -VaultId $vault.ID | Where { $_.Name -match "Archive" }
68+
69+
foreach ($policy in $pol){
70+
Remove-AzRecoveryServicesBackupProtectionPolicy -VaultId $vault.ID -Policy $policy -Force
71+
}
72+
}
73+
}
74+
2475
function Test-AzureVmWorkloadPolicy
2576
{
2677
$vault = Get-AzRecoveryServicesVault -ResourceGroupName $resourceGroupName -Name $vaultName

src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/IaasVm/Common.ps1

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -258,7 +258,7 @@ function Enable-Protection(
258258
$resourceGroupName = $vm.ResourceGroupName
259259
}
260260

261-
if ($container -eq $null)
261+
if ($container -eq $null -or $container.Status -ne "Registered")
262262
{
263263
$policy = Get-AzRecoveryServicesBackupProtectionPolicy `
264264
-VaultId $vault.ID `
@@ -282,5 +282,24 @@ function Enable-Protection(
282282
-WorkloadType AzureVM `
283283
-Name $vm.Name
284284

285+
if ($item -eq $null)
286+
{
287+
$policy = Get-AzRecoveryServicesBackupProtectionPolicy `
288+
-VaultId $vault.ID `
289+
-Name "DefaultPolicy";
290+
291+
Enable-AzRecoveryServicesBackupProtection `
292+
-VaultId $vault.ID `
293+
-Policy $policy `
294+
-Name $vm.Name `
295+
-ResourceGroupName $resourceGroupName | Out-Null
296+
297+
$item = Get-AzRecoveryServicesBackupItem `
298+
-VaultId $vault.ID `
299+
-Container $container `
300+
-WorkloadType AzureVM `
301+
-Name $vm.Name
302+
}
303+
285304
return $item
286305
}

src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/IaasVm/ContainerTests.ps1

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -35,23 +35,20 @@ function Test-AzureVMGetContainers
3535
# VARIATION-1: Get All Containers with only mandatory parameters
3636
$containers = Get-AzRecoveryServicesBackupContainer `
3737
-VaultId $vault.ID `
38-
-ContainerType AzureVM `
39-
-Status Registered;
38+
-ContainerType AzureVM;
4039
Assert-True { $containers.FriendlyName -contains $vm.Name }
4140

4241
# VARIATION-2: Get Containers with friendly name filter
4342
$containers = Get-AzRecoveryServicesBackupContainer `
4443
-VaultId $vault.ID `
4544
-ContainerType AzureVM `
46-
-Status Registered `
4745
-FriendlyName $vm.Name;
4846
Assert-True { $containers.FriendlyName -contains $vm.Name }
4947

5048
# VARIATION-3: Get Containers with friendly name and resource group filters
5149
$containers = Get-AzRecoveryServicesBackupContainer `
5250
-VaultId $vault.ID `
5351
-ContainerType AzureVM `
54-
-Status Registered `
5552
-FriendlyName $vm.Name `
5653
-ResourceGroupName $vm.ResourceGroupName;
5754
Assert-True { $containers.FriendlyName -contains $vm.Name }
@@ -60,7 +57,6 @@ function Test-AzureVMGetContainers
6057
$containers = Get-AzRecoveryServicesBackupContainer `
6158
-VaultId $vault.ID `
6259
-ContainerType AzureVM `
63-
-Status Registered `
6460
-ResourceGroupName $vm.ResourceGroupName;
6561
Assert-True { $containers.FriendlyName -contains $vm.Name }
6662
}

0 commit comments

Comments
 (0)