Skip to content

[Az.RecoveryServices.Backup] Added sub tasks duration for IaasVM job details command #19377

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 7 commits into from
Sep 28, 2022
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 @@ -810,7 +810,8 @@ private static CmdletModel.AzureVmJob GetPSAzureVmJob(JobResource serviceClientJ
detailedResponse.SubTasks.Add(new CmdletModel.AzureVmJobSubTask()
{
Name = vmJobTask.TaskId,
Status = vmJobTask.Status
Status = vmJobTask.Status,
Duration = (vmJobTask.StartTime != null && vmJobTask.EndTime != null) ? vmJobTask.Duration : null
});
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ namespace Microsoft.Azure.Commands.RecoveryServices.Backup.Helpers
public partial class PolicyHelpers
{

public static void ValidateLongTermRetentionPolicyWithTieringPolicy(LongTermRetentionPolicy ltrPolicy, TieringPolicy tieringPolicy, bool isPreviousTieringPolicy = false) // check resx messages
public static void ValidateLongTermRetentionPolicyWithTieringPolicy(LongTermRetentionPolicy ltrPolicy, TieringPolicy tieringPolicy, bool isPreviousTieringPolicy = false)
{
// To enable Archive(either TierRecommended or TierAfter), Monthly or Yearly retention needs to be set
if(tieringPolicy != null && tieringPolicy.TieringMode != TieringMode.DoNotTier )
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
// limitations under the License.
// ----------------------------------------------------------------------------------

using System;
using System.Collections.Generic;

namespace Microsoft.Azure.Commands.RecoveryServices.Backup.Cmdlets.Models
Expand Down Expand Up @@ -57,5 +58,11 @@ public class AzureVmJobErrorInfo : AzureJobErrorInfo { }
/// <summary>
/// Azure VM specific job sub-task class.
/// </summary>
public class AzureVmJobSubTask : AzureJobSubTask { }
public class AzureVmJobSubTask : AzureJobSubTask {

/// <summary>
/// sub task duration
/// </summary>
public TimeSpan? Duration { get; set; }
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -199,6 +199,7 @@ public enum ContainerRegistrationStatus
/// Represents the registered state of the container with the recovery services vault.
/// </summary>
Registered = 1,
NotRegistered = 2,
}

/// <summary>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -340,28 +340,13 @@ public List<ProtectedItemResource> ListProtectedItemsByContainer(
{
string vaultName = (string)providerData[CmdletModel.VaultParams.VaultName];
string vaultResourceGroupName = (string)providerData[CmdletModel.VaultParams.ResourceGroupName];
string friendlyName = (string)providerData[CmdletModel.ContainerParams.FriendlyName];
CmdletModel.ContainerRegistrationStatus status =
(CmdletModel.ContainerRegistrationStatus)providerData[CmdletModel.ContainerParams.Status];
string friendlyName = (string)providerData[CmdletModel.ContainerParams.FriendlyName];

string nameQueryFilter = friendlyName;

ODataQuery<ServiceClientModel.BMSContainerQueryObject> queryParams = null;
if (status == 0)
{
queryParams = new ODataQuery<ServiceClientModel.BMSContainerQueryObject>(
ODataQuery<ServiceClientModel.BMSContainerQueryObject> queryParams = new ODataQuery<ServiceClientModel.BMSContainerQueryObject>(
q => q.FriendlyName == nameQueryFilter &&
q.BackupManagementType == backupManagementType);
}
else
{
var statusString = status.ToString();
queryParams = new ODataQuery<ServiceClientModel.BMSContainerQueryObject>(
q => q.FriendlyName == nameQueryFilter &&
q.BackupManagementType == backupManagementType &&
q.Status == statusString);
}


var listResponse = ServiceClientAdapter.ListContainers(
queryParams,
vaultName: vaultName,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,31 +54,27 @@ function Test-AzureFSContainer
# VARIATION-1: Get All Containers with only mandatory parameters
$containers = Get-AzRecoveryServicesBackupContainer `
-VaultId $vault.ID `
-ContainerType AzureStorage `
-Status Registered;
-ContainerType AzureStorage;
Assert-True { $containers.FriendlyName -contains $saName }

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

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

# VARIATION-4: Get Containers with friendly name and resource group filters
$containers = Get-AzRecoveryServicesBackupContainer `
-VaultId $vault.ID `
-ContainerType AzureStorage `
-Status Registered `
-FriendlyName $saName `
-ResourceGroupName $resourceGroupName;
Assert-True { $containers.FriendlyName -contains $saName }
Expand All @@ -97,7 +93,6 @@ function Test-AzureFSUnregisterContainer
$container = Get-AzRecoveryServicesBackupContainer `
-VaultId $vault.ID `
-ContainerType AzureStorage `
-Status Registered `
-FriendlyName $saName

# Disable Protection
Expand All @@ -114,7 +109,6 @@ function Test-AzureFSUnregisterContainer
$container = Get-AzRecoveryServicesBackupContainer `
-VaultId $vault.ID `
-ContainerType AzureStorage `
-Status Registered `
-FriendlyName $saName
Assert-Null $container
}
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,6 @@ function Test-AzureFSItem
$container = Get-AzRecoveryServicesBackupContainer `
-VaultId $vault.ID `
-ContainerType AzureStorage `
-Status Registered `
-FriendlyName $saName

# VARIATION-1: Get all items for container
Expand Down Expand Up @@ -150,7 +149,6 @@ function Test-AzureFSBackup
$container = Get-AzRecoveryServicesBackupContainer `
-VaultId $vault.ID `
-ContainerType AzureStorage `
-Status Registered `
-FriendlyName $saName

# Trigger backup and wait for completion
Expand Down Expand Up @@ -185,7 +183,6 @@ function Test-AzureFSProtection
$container = Get-AzRecoveryServicesBackupContainer `
-VaultId $vault.ID `
-ContainerType AzureStorage `
-Status Registered `
-FriendlyName $saName

$item = Get-AzRecoveryServicesBackupItem `
Expand Down Expand Up @@ -231,7 +228,6 @@ function Test-AzureFSGetRPs
$container = Get-AzRecoveryServicesBackupContainer `
-VaultId $vault.ID `
-ContainerType AzureStorage `
-Status Registered `
-FriendlyName $saName
$backupJob = Backup-Item $vault $item

Expand Down Expand Up @@ -270,7 +266,6 @@ function Test-AzureFSFullRestore
$container = Get-AzRecoveryServicesBackupContainer `
-VaultId $vault.ID `
-ContainerType AzureStorage `
-Status Registered `
-FriendlyName $saName
$backupJob = Backup-Item $vault $item

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,6 @@ function Test-AzureFSGetJob
$container = Get-AzRecoveryServicesBackupContainer `
-VaultId $vault.ID `
-ContainerType AzureStorage `
-Status Registered `
-FriendlyName $saName
}
finally
Expand Down Expand Up @@ -98,7 +97,6 @@ function Test-AzureFSWaitJob
$container = Get-AzRecoveryServicesBackupContainer `
-VaultId $vault.ID `
-ContainerType AzureStorage `
-Status Registered `
-FriendlyName $saName
}
finally
Expand All @@ -124,7 +122,6 @@ function Test-AzureFSCancelJob
$container = Get-AzRecoveryServicesBackupContainer `
-VaultId $vault.ID `
-ContainerType AzureStorage `
-Status Registered `
-FriendlyName $saName
}
finally
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,6 @@ function Test-AzureFSProtectionCheck
$container = Get-AzRecoveryServicesBackupContainer `
-VaultId $vault.ID `
-ContainerType AzureStorage `
-Status Registered `
-FriendlyName $saName
}
finally
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,31 +43,27 @@ function Get-AzureVmWorkloadContainer
# VARIATION-1: Get All Containers with only mandatory parameters
$containers = Get-AzRecoveryServicesBackupContainer `
-VaultId $vault.ID `
-ContainerType AzureVMAppContainer `
-Status Registered;
-ContainerType AzureVMAppContainer;
Assert-True { $containers[0].FriendlyName -contains $containerName }

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

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

# VARIATION-4: Get Containers with friendly name and resource group filters
$containers = Get-AzRecoveryServicesBackupContainer `
-VaultId $vault.ID `
-ContainerType AzureVMAppContainer `
-Status Registered `
-FriendlyName $containerName `
-ResourceGroupName $resourceGroupName;
Assert-True { $containers.FriendlyName -contains $containerName }
Expand Down Expand Up @@ -98,13 +94,11 @@ function Unregister-AzureWorkloadContainer
Get-AzRecoveryServicesBackupContainer `
-VaultId $vault.ID `
-ContainerType AzureVMAppContainer `
-Status Registered `
-FriendlyName $containerName | Unregister-AzRecoveryServicesBackupContainer -VaultId $vault.ID

$container = Get-AzRecoveryServicesBackupContainer `
-VaultId $vault.ID `
-ContainerType AzureVMAppContainer `
-Status Registered `
-FriendlyName $containerName
Assert-Null $container
}
Original file line number Diff line number Diff line change
Expand Up @@ -35,5 +35,17 @@ public void TestAzureVmWorkloadPolicy()
"Test-AzureVmWorkloadPolicy"
);
}

[Fact]
[Trait(Category.AcceptanceType, Category.CheckIn)]
[Trait(TestConstants.Workload, TestConstants.AzureVmWorkload)]
public void TestAzureVmWorkloadSmartTieringPolicy()
{
TestRunner.RunTestScript(
$"Import-Module {_AzureWorkloadcommonModule.AsAbsoluteLocation()}",
$"Import-Module {_AzureWorkloadtestModule.AsAbsoluteLocation()}",
"Test-AzureVmWorkloadSmartTieringPolicy"
);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,57 @@ $location = "centraluseuap"
$resourceGroupName = "iaasvm-pstest-rg"
$vaultName = "iaasvm-pstest-vault"

function Test-AzureVmWorkloadSmartTieringPolicy
{
$location = "centraluseuap"
$resourceGroupName = "hiagarg"
$vaultName = "hiagaVault"
$tierRecommendedPolicy = "hiagaSQLArchiveTierRecommended"
$tierAfterPolicy = "hiagaSQLArchiveTierAfter"
$archiveDisabledPolicy = "hiagaSQLArchiveDisabled"

try
{
$vault = Get-AzRecoveryServicesVault -ResourceGroupName $resourceGroupName -Name $vaultName

$schPol = Get-AzRecoveryServicesBackupSchedulePolicyObject -WorkloadType MSSQL -BackupManagementType AzureWorkload
$retPol = Get-AzRecoveryServicesBackupRetentionPolicyObject -WorkloadType MSSQL -BackupManagementType AzureWorkload

# error scenario - tier recommended not supported
Assert-ThrowsContains { $pol = New-AzRecoveryServicesBackupProtectionPolicy -Name $tierRecommendedPolicy -WorkloadType MSSQL -BackupManagementType AzureWorkload -RetentionPolicy $retPol -SchedulePolicy $schPol -VaultId $vault.ID -MoveToArchiveTier $true -TieringMode TierRecommended } `
"Tiering mode TierRecommended is not supported for BackupManagementType AzureWorkload";


# error scenario for tier after policy
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 } `
"TierAfterDuration needs to be >= 45 Days, at least one retention policy for full backup (daily / weekly / monthly / yearly) should be >= (TierAfter + 180) days";

# create tier after policy
$pol = New-AzRecoveryServicesBackupProtectionPolicy -Name $tierAfterPolicy -WorkloadType MSSQL -BackupManagementType AzureWorkload -RetentionPolicy $retPol -SchedulePolicy $schPol -VaultId $vault.ID -MoveToArchiveTier $true -TieringMode TierAllEligible -TierAfterDuration 45 -TierAfterDurationType Days

Assert-True { $pol.Name -eq $tierAfterPolicy }

# modify policy
$pol = Get-AzRecoveryServicesBackupProtectionPolicy -VaultId $vault.ID | Where { $_.Name -match $tierAfterPolicy }
Set-AzRecoveryServicesBackupProtectionPolicy -VaultId $vault.ID -Policy $pol[0] -MoveToArchiveTier $false
Set-AzRecoveryServicesBackupProtectionPolicy -VaultId $vault.ID -Policy $pol[0] -MoveToArchiveTier $true -TieringMode TierAllEligible -TierAfterDuration 45 -TierAfterDurationType Days

# create archive disabled policy
$pol = New-AzRecoveryServicesBackupProtectionPolicy -Name $archiveDisabledPolicy -WorkloadType MSSQL -BackupManagementType AzureWorkload -RetentionPolicy $retPol -SchedulePolicy $schPol -VaultId $vault.ID -MoveToArchiveTier $false
Assert-True { $pol.Name -eq $archiveDisabledPolicy }
}
finally
{
# Cleanup
# Delete policy
$pol = Get-AzRecoveryServicesBackupProtectionPolicy -VaultId $vault.ID | Where { $_.Name -match "Archive" }

foreach ($policy in $pol){
Remove-AzRecoveryServicesBackupProtectionPolicy -VaultId $vault.ID -Policy $policy -Force
}
}
}

function Test-AzureVmWorkloadPolicy
{
$vault = Get-AzRecoveryServicesVault -ResourceGroupName $resourceGroupName -Name $vaultName
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -258,7 +258,7 @@ function Enable-Protection(
$resourceGroupName = $vm.ResourceGroupName
}

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

if ($item -eq $null)
{
$policy = Get-AzRecoveryServicesBackupProtectionPolicy `
-VaultId $vault.ID `
-Name "DefaultPolicy";

Enable-AzRecoveryServicesBackupProtection `
-VaultId $vault.ID `
-Policy $policy `
-Name $vm.Name `
-ResourceGroupName $resourceGroupName | Out-Null

$item = Get-AzRecoveryServicesBackupItem `
-VaultId $vault.ID `
-Container $container `
-WorkloadType AzureVM `
-Name $vm.Name
}

return $item
}
Original file line number Diff line number Diff line change
Expand Up @@ -35,23 +35,20 @@ function Test-AzureVMGetContainers
# VARIATION-1: Get All Containers with only mandatory parameters
$containers = Get-AzRecoveryServicesBackupContainer `
-VaultId $vault.ID `
-ContainerType AzureVM `
-Status Registered;
-ContainerType AzureVM;
Assert-True { $containers.FriendlyName -contains $vm.Name }

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

# VARIATION-3: Get Containers with friendly name and resource group filters
$containers = Get-AzRecoveryServicesBackupContainer `
-VaultId $vault.ID `
-ContainerType AzureVM `
-Status Registered `
-FriendlyName $vm.Name `
-ResourceGroupName $vm.ResourceGroupName;
Assert-True { $containers.FriendlyName -contains $vm.Name }
Expand All @@ -60,7 +57,6 @@ function Test-AzureVMGetContainers
$containers = Get-AzRecoveryServicesBackupContainer `
-VaultId $vault.ID `
-ContainerType AzureVM `
-Status Registered `
-ResourceGroupName $vm.ResourceGroupName;
Assert-True { $containers.FriendlyName -contains $vm.Name }
}
Expand Down
Loading