// <summary> /// Helper function to convert ps recovery point model from service response. /// </summary> public static RecoveryPointBase GetPSAzureRecoveryPoints( ServiceClientModel.RecoveryPointResource rpResponse, ItemBase item) { if (rpResponse == null) { throw new ArgumentNullException(Resources.GetRPResponseIsNull); } RecoveryPointBase result = null; if (rpResponse.Properties.GetType() == typeof(ServiceClientModel.IaasVMRecoveryPoint)) { result = GetPSAzureVMRecoveryPoint(rpResponse, item); } else if (rpResponse.Properties.GetType() == typeof(ServiceClientModel.AzureFileShareRecoveryPoint)) { result = GetPSAzureFileRecoveryPoint(rpResponse, item); } else if (rpResponse.Properties.GetType().IsSubclassOf(typeof(ServiceClientModel.AzureWorkloadRecoveryPoint))) { result = GetPSAzureWorkloadRecoveryPoint(rpResponse, item); } else if (rpResponse.Properties.GetType() == typeof(ServiceClientModel.GenericRecoveryPoint)) { result = GetPSAzureGenericRecoveryPoint(rpResponse, item); } return(result); }
public string RestoreProtectedItem(string rsVaultRgName, string rsVaultName, string containerUri, string protectedItemUri, string sourceResourceId, string storageAccountId, RecoveryPointResource recoveryPointResource) { string fabricName = CommonTestHelper.GetSetting(TestConstants.ProviderTypeAzureIaasVM); RecoveryPoint recoveryPoint = (RecoveryPoint)recoveryPointResource.Properties; TriggerRestoreRequest restoreRequest = new TriggerRestoreRequest(); restoreRequest.Item = new RestoreRequestResource(); IaasVMRestoreRequest iaasVmRestoreRequest = new IaasVMRestoreRequest(); if (recoveryPoint.KeyAndSecret != null && recoveryPoint.KeyAndSecret.BekDetails != null && recoveryPoint.KeyAndSecret.KekDetails != null) { iaasVmRestoreRequest.EncryptionDetails = new EncryptionDetails(); iaasVmRestoreRequest.EncryptionDetails.EncryptionEnabled = true; iaasVmRestoreRequest.EncryptionDetails.KekUrl = recoveryPoint.KeyAndSecret.KekDetails.KeyUrl; iaasVmRestoreRequest.EncryptionDetails.KekVaultId = recoveryPoint.KeyAndSecret.KekDetails.KeyVaultId; iaasVmRestoreRequest.EncryptionDetails.SecretKeyUrl = recoveryPoint.KeyAndSecret.BekDetails.SecretUrl; iaasVmRestoreRequest.EncryptionDetails.SecretKeyVaultId = recoveryPoint.KeyAndSecret.BekDetails.SecretVaultId; } iaasVmRestoreRequest.RecoveryPointId = recoveryPointResource.Name; iaasVmRestoreRequest.RecoveryType = RecoveryType.RestoreDisks.ToString(); iaasVmRestoreRequest.SourceResourceId = sourceResourceId; iaasVmRestoreRequest.StorageAccountId = storageAccountId; restoreRequest.Item.Properties = iaasVmRestoreRequest; var response = Client.Restores.TriggerRestore(rsVaultRgName, rsVaultName, CommonTestHelper.GetCustomRequestHeaders(), fabricName, containerUri, protectedItemUri, recoveryPointResource.Name, restoreRequest); Assert.NotNull(response); Assert.Equal(HttpStatusCode.Accepted, response.StatusCode); Assert.NotNull(response.Location); Assert.NotNull(response.AzureAsyncOperation); Assert.NotNull(response.RetryAfter); var operationResponse = Client.ProtectedItems.GetProtectedItemOperationResultByURLAsync(response.Location, CommonTestHelper.GetCustomRequestHeaders()); while (operationResponse.Result.StatusCode == HttpStatusCode.Accepted) { if (HttpMockServer.Mode == HttpRecorderMode.Record) { System.Threading.Thread.Sleep(5 * 1000); } operationResponse = Client.ProtectedItems.GetProtectedItemOperationResultByURLAsync(response.Location, CommonTestHelper.GetCustomRequestHeaders()); } var operationStatusResponse = Client.GetOperationStatusByURLAsync(response.AzureAsyncOperation, CommonTestHelper.GetCustomRequestHeaders()); var operationJobResponse = (OperationStatusJobExtendedInfo)operationStatusResponse.Result.OperationStatus.Properties; Assert.NotNull(operationJobResponse.JobId); return operationJobResponse.JobId; }
public static RecoveryPointBase GetPSAzureGenericRecoveryPoint( ServiceClientModel.RecoveryPointResource rp, ItemBase item) { Dictionary <UriEnums, string> uriDict = HelperUtils.ParseUri(item.Id); string containerUri = HelperUtils.GetContainerUri(uriDict, item.Id); string protectedItemUri = HelperUtils.GetProtectedItemUri(uriDict, item.Id); string containerName = IdUtils.GetNameFromUri(containerUri); string protectedItemName = IdUtils.GetNameFromUri(protectedItemUri); ServiceClientModel.GenericRecoveryPoint recoveryPoint = rp.Properties as ServiceClientModel.GenericRecoveryPoint; DateTime recoveryPointTime = DateTime.MinValue; if (recoveryPoint.RecoveryPointTime.HasValue) { recoveryPointTime = (DateTime)recoveryPoint.RecoveryPointTime; } else { throw new ArgumentNullException("RecoveryPointTime is null"); } AzureSqlRecoveryPoint rpBase = new AzureSqlRecoveryPoint() { RecoveryPointId = rp.Name, BackupManagementType = item.BackupManagementType, ItemName = protectedItemName, ContainerName = containerUri, ContainerType = item.ContainerType, RecoveryPointTime = recoveryPointTime, RecoveryPointType = recoveryPoint.RecoveryPointType, Id = rp.Id, WorkloadType = item.WorkloadType, RecoveryPointAdditionalInfo = recoveryPoint.RecoveryPointAdditionalInfo, FriendlyName = recoveryPoint.FriendlyName, }; return(rpBase); }
public static RecoveryPointBase GetPSAzureWorkloadRecoveryPoint( ServiceClientModel.RecoveryPointResource rp, ItemBase item) { Dictionary <UriEnums, string> uriDict = HelperUtils.ParseUri(item.Id); string containerUri = HelperUtils.GetContainerUri(uriDict, item.Id); string protectedItemUri = HelperUtils.GetProtectedItemUri(uriDict, item.Id); string containerName = IdUtils.GetNameFromUri(containerUri); string protectedItemName = IdUtils.GetNameFromUri(protectedItemUri); ServiceClientModel.AzureWorkloadSQLRecoveryPoint recoveryPoint = rp.Properties as ServiceClientModel.AzureWorkloadSQLRecoveryPoint; DateTime recoveryPointTime = DateTime.MinValue; if (recoveryPoint.RecoveryPointTimeInUTC.HasValue) { recoveryPointTime = (DateTime)recoveryPoint.RecoveryPointTimeInUTC; } else { throw new ArgumentNullException("RecoveryPointTime is null"); } AzureWorkloadRecoveryPoint rpBase = new AzureWorkloadRecoveryPoint() { RecoveryPointId = rp.Name, BackupManagementType = item.BackupManagementType, ItemName = protectedItemName, ContainerName = containerName, ContainerType = item.ContainerType, RecoveryPointTime = recoveryPointTime, RecoveryPointType = recoveryPoint.Type, Id = rp.Id, WorkloadType = item.WorkloadType, DataDirectoryPaths = recoveryPoint.ExtendedInfo != null ? recoveryPoint.ExtendedInfo.DataDirectoryPaths : null }; return(rpBase); }
public static RecoveryPointBase GetPSAzureWorkloadRecoveryPoint( ServiceClientModel.RecoveryPointResource rp, ItemBase item) { Dictionary <UriEnums, string> uriDict = HelperUtils.ParseUri(item.Id); string containerUri = HelperUtils.GetContainerUri(uriDict, item.Id); string protectedItemUri = HelperUtils.GetProtectedItemUri(uriDict, item.Id); string containerName = IdUtils.GetNameFromUri(containerUri); string protectedItemName = IdUtils.GetNameFromUri(protectedItemUri); ServiceClientModel.AzureWorkloadSQLRecoveryPoint recoveryPoint = rp.Properties as ServiceClientModel.AzureWorkloadSQLRecoveryPoint; DateTime recoveryPointTime = DateTime.MinValue; if (recoveryPoint.RecoveryPointTimeInUTC.HasValue) { recoveryPointTime = (DateTime)recoveryPoint.RecoveryPointTimeInUTC; } else { throw new ArgumentNullException("RecoveryPointTime is null"); } AzureWorkloadRecoveryPoint rpBase = new AzureWorkloadRecoveryPoint() { RecoveryPointId = rp.Name, BackupManagementType = item.BackupManagementType, ItemName = protectedItemName, ContainerName = containerName, ContainerType = item.ContainerType, RecoveryPointTime = recoveryPointTime, RecoveryPointType = recoveryPoint.Type, Id = rp.Id, WorkloadType = item.WorkloadType, DataDirectoryPaths = recoveryPoint.ExtendedInfo != null ? recoveryPoint.ExtendedInfo.DataDirectoryPaths : null, RehydrationExpiryTime = (DateTime?)null }; if (recoveryPoint.RecoveryPointTierDetails != null) { bool isHardenedRP = false; bool isInstantRecoverable = false; bool isArchived = false; bool isRehydrated = false; foreach (ServiceClientModel.RecoveryPointTierInformation tierInfo in recoveryPoint.RecoveryPointTierDetails) { if (tierInfo.Status == ServiceClientModel.RecoveryPointTierStatus.Rehydrated) { if (tierInfo.Type == ServiceClientModel.RecoveryPointTierType.ArchivedRP) { isRehydrated = true; rpBase.RehydrationExpiryTime = (tierInfo.ExtendedInfo.ContainsKey("RehydratedRPExpiryTime")) ? DateTime.Parse(tierInfo.ExtendedInfo["RehydratedRPExpiryTime"]) : (DateTime?)null; } } if (tierInfo.Status == ServiceClientModel.RecoveryPointTierStatus.Valid) { if (tierInfo.Type == ServiceClientModel.RecoveryPointTierType.InstantRP) { isInstantRecoverable = true; } if (tierInfo.Type == ServiceClientModel.RecoveryPointTierType.HardenedRP) { isHardenedRP = true; } if (tierInfo.Type == ServiceClientModel.RecoveryPointTierType.ArchivedRP) { isArchived = true; } } } if ((isHardenedRP && isArchived) || (isRehydrated)) { rpBase.RecoveryPointTier = RecoveryPointTier.VaultStandardRehydrated; } else if (isInstantRecoverable && isHardenedRP) { rpBase.RecoveryPointTier = RecoveryPointTier.SnapshotAndVaultStandard; } else if (isInstantRecoverable && isArchived) { rpBase.RecoveryPointTier = RecoveryPointTier.SnapshotAndVaultArchive; } else if (isArchived) { rpBase.RecoveryPointTier = RecoveryPointTier.VaultArchive; } else if (isInstantRecoverable) { rpBase.RecoveryPointTier = RecoveryPointTier.Snapshot; } else if (isHardenedRP) { rpBase.RecoveryPointTier = RecoveryPointTier.VaultStandard; } } if (recoveryPoint.RecoveryPointMoveReadinessInfo != null) { rpBase.RecoveryPointMoveReadinessInfo = new Dictionary <string, RecoveryPointMoveReadinessInfo>(); foreach (var moveInfo in recoveryPoint.RecoveryPointMoveReadinessInfo) { RecoveryPointMoveReadinessInfo AzureVmMoveInfo = new RecoveryPointMoveReadinessInfo(); AzureVmMoveInfo.IsReadyForMove = moveInfo.Value.IsReadyForMove; AzureVmMoveInfo.AdditionalInfo = moveInfo.Value.AdditionalInfo; rpBase.RecoveryPointMoveReadinessInfo.Add(moveInfo.Key, AzureVmMoveInfo); } } return(rpBase); }
public static RecoveryPointBase GetPSAzureVMRecoveryPoint( ServiceClientModel.RecoveryPointResource rp, ItemBase item) { Dictionary <UriEnums, string> uriDict = HelperUtils.ParseUri(item.Id); string containerUri = HelperUtils.GetContainerUri(uriDict, item.Id); string protectedItemUri = HelperUtils.GetProtectedItemUri(uriDict, item.Id); string containerName = IdUtils.GetNameFromUri(containerUri); string protectedItemName = IdUtils.GetNameFromUri(protectedItemUri); ServiceClientModel.IaasVMRecoveryPoint recoveryPoint = rp.Properties as ServiceClientModel.IaasVMRecoveryPoint; DateTime recoveryPointTime = DateTime.MinValue; if (recoveryPoint.RecoveryPointTime.HasValue) { recoveryPointTime = (DateTime)recoveryPoint.RecoveryPointTime; } else { throw new ArgumentNullException("RecoveryPointTime is null"); } bool isInstantILRSessionActive = recoveryPoint.IsInstantIlrSessionActive.HasValue ? (bool)recoveryPoint.IsInstantIlrSessionActive : false; AzureVmRecoveryPoint rpBase = new AzureVmRecoveryPoint() { RecoveryPointId = rp.Name, BackupManagementType = item.BackupManagementType, ItemName = protectedItemName, ContainerName = containerName, ContainerType = item.ContainerType, RecoveryPointTime = recoveryPointTime, RecoveryPointType = recoveryPoint.RecoveryPointType, Id = rp.Id, WorkloadType = item.WorkloadType, RecoveryPointAdditionalInfo = recoveryPoint.RecoveryPointAdditionalInfo, SourceVMStorageType = recoveryPoint.SourceVMStorageType, SourceResourceId = item.SourceResourceId, EncryptionEnabled = recoveryPoint.IsSourceVMEncrypted.HasValue ? recoveryPoint.IsSourceVMEncrypted.Value : false, IlrSessionActive = isInstantILRSessionActive, IsManagedVirtualMachine = recoveryPoint.IsManagedVirtualMachine.HasValue ? recoveryPoint.IsManagedVirtualMachine.Value : false, OriginalSAEnabled = recoveryPoint.OriginalStorageAccountOption.HasValue ? recoveryPoint.OriginalStorageAccountOption.Value : false, Zones = recoveryPoint.Zones, RehydrationExpiryTime = (DateTime?)null, }; if (recoveryPoint.RecoveryPointTierDetails != null) { bool isHardenedRP = false; bool isInstantRecoverable = false; bool isArchived = false; bool isRehydrated = false; foreach (ServiceClientModel.RecoveryPointTierInformation tierInfo in recoveryPoint.RecoveryPointTierDetails) { if (tierInfo.Status == ServiceClientModel.RecoveryPointTierStatus.Rehydrated) { if (tierInfo.Type == ServiceClientModel.RecoveryPointTierType.ArchivedRP) { isRehydrated = true; rpBase.RehydrationExpiryTime = (tierInfo.ExtendedInfo.ContainsKey("RehydratedRPExpiryTime")) ? DateTime.Parse(tierInfo.ExtendedInfo["RehydratedRPExpiryTime"]) : (DateTime?)null; } } if (tierInfo.Status == ServiceClientModel.RecoveryPointTierStatus.Valid) { if (tierInfo.Type == ServiceClientModel.RecoveryPointTierType.InstantRP) { isInstantRecoverable = true; } if (tierInfo.Type == ServiceClientModel.RecoveryPointTierType.HardenedRP) { isHardenedRP = true; } if (tierInfo.Type == ServiceClientModel.RecoveryPointTierType.ArchivedRP) { isArchived = true; } } } if ((isHardenedRP && isArchived) || (isRehydrated)) { rpBase.RecoveryPointTier = RecoveryPointTier.VaultStandardRehydrated; } else if (isInstantRecoverable && isHardenedRP) { rpBase.RecoveryPointTier = RecoveryPointTier.SnapshotAndVaultStandard; } else if (isInstantRecoverable && isArchived) { rpBase.RecoveryPointTier = RecoveryPointTier.SnapshotAndVaultArchive; } else if (isArchived) { rpBase.RecoveryPointTier = RecoveryPointTier.VaultArchive; } else if (isInstantRecoverable) { rpBase.RecoveryPointTier = RecoveryPointTier.Snapshot; } else if (isHardenedRP) { rpBase.RecoveryPointTier = RecoveryPointTier.VaultStandard; } } if (recoveryPoint.RecoveryPointMoveReadinessInfo != null) { rpBase.RecoveryPointMoveReadinessInfo = new Dictionary <string, RecoveryPointMoveReadinessInfo>(); foreach (var moveInfo in recoveryPoint.RecoveryPointMoveReadinessInfo) { RecoveryPointMoveReadinessInfo AzureVmMoveInfo = new RecoveryPointMoveReadinessInfo(); AzureVmMoveInfo.IsReadyForMove = moveInfo.Value.IsReadyForMove; AzureVmMoveInfo.AdditionalInfo = moveInfo.Value.AdditionalInfo; rpBase.RecoveryPointMoveReadinessInfo.Add(moveInfo.Key, AzureVmMoveInfo); } } if (rpBase.EncryptionEnabled && recoveryPoint.KeyAndSecret != null) { rpBase.KeyAndSecretDetails = new KeyAndSecretDetails() { SecretUrl = recoveryPoint.KeyAndSecret.BekDetails.SecretUrl, KeyUrl = recoveryPoint.KeyAndSecret.KekDetails.KeyUrl, SecretData = recoveryPoint.KeyAndSecret.BekDetails.SecretData, KeyBackupData = recoveryPoint.KeyAndSecret.KekDetails.KeyBackupData, KeyVaultId = recoveryPoint.KeyAndSecret.KekDetails.KeyVaultId, SecretVaultId = recoveryPoint.KeyAndSecret.BekDetails.SecretVaultId, }; } return(rpBase); }
// <summary> /// Helper function to convert ps recovery point model from service response. /// </summary> public static RecoveryPointBase GetPSAzureRecoveryPoints( ServiceClientModel.RecoveryPointResource rpResponse, ItemBase item) { if (rpResponse == null) { throw new ArgumentNullException(Resources.GetRPResponseIsNull); } RecoveryPointBase result = null; Dictionary <UriEnums, string> uriDict = HelperUtils.ParseUri(item.Id); string containerUri = HelperUtils.GetContainerUri(uriDict, item.Id); string containerName = IdUtils.GetNameFromUri(containerUri); string protectedItemUri = HelperUtils.GetProtectedItemUri(uriDict, item.Id); string protectedItemName = IdUtils.GetNameFromUri(protectedItemUri); if (rpResponse.Properties.GetType() == typeof(ServiceClientModel.IaasVMRecoveryPoint)) { ServiceClientModel.IaasVMRecoveryPoint recPoint = rpResponse.Properties as ServiceClientModel.IaasVMRecoveryPoint; DateTime recPointTime = DateTime.MinValue; if (recPoint.RecoveryPointTime.HasValue) { recPointTime = (DateTime)recPoint.RecoveryPointTime; } else { throw new ArgumentNullException("RecoveryPointTime is null"); } bool isInstantILRSessionActive = recPoint.IsInstantIlrSessionActive.HasValue ? (bool)recPoint.IsInstantIlrSessionActive : false; AzureVmRecoveryPoint vmResult = new AzureVmRecoveryPoint() { RecoveryPointId = rpResponse.Name, BackupManagementType = item.BackupManagementType, ItemName = protectedItemName, ContainerName = containerName, ContainerType = item.ContainerType, RecoveryPointTime = recPointTime, RecoveryPointType = recPoint.RecoveryPointType, Id = rpResponse.Id, WorkloadType = item.WorkloadType, RecoveryPointAdditionalInfo = recPoint.RecoveryPointAdditionalInfo, EncryptionEnabled = recPoint.IsSourceVMEncrypted.HasValue ? recPoint.IsSourceVMEncrypted.Value : false, IlrSessionActive = isInstantILRSessionActive, SourceResourceId = item.SourceResourceId, SourceVMStorageType = recPoint.SourceVMStorageType, OriginalSAEnabled = recPoint.OriginalStorageAccountOption.HasValue ? recPoint.OriginalStorageAccountOption.Value : false, }; if (vmResult.EncryptionEnabled && recPoint.KeyAndSecret != null) { vmResult.KeyAndSecretDetails = new KeyAndSecretDetails() { SecretUrl = recPoint.KeyAndSecret.BekDetails.SecretUrl, KeyUrl = recPoint.KeyAndSecret.KekDetails.KeyUrl, SecretData = recPoint.KeyAndSecret.BekDetails.SecretData, KeyBackupData = recPoint.KeyAndSecret.KekDetails.KeyBackupData, KeyVaultId = recPoint.KeyAndSecret.KekDetails.KeyVaultId, SecretVaultId = recPoint.KeyAndSecret.BekDetails.SecretVaultId, }; } result = vmResult; } if (rpResponse.Properties.GetType() == typeof(ServiceClientModel.GenericRecoveryPoint)) { ServiceClientModel.GenericRecoveryPoint recPoint = rpResponse.Properties as ServiceClientModel.GenericRecoveryPoint; DateTime recPointTime = DateTime.MinValue; if (recPoint.RecoveryPointTime.HasValue) { recPointTime = (DateTime)recPoint.RecoveryPointTime; } else { throw new ArgumentNullException("RecoveryPointTime is null"); } AzureSqlRecoveryPoint sqlResult = new AzureSqlRecoveryPoint() { RecoveryPointId = rpResponse.Name, BackupManagementType = item.BackupManagementType, ItemName = protectedItemName, ContainerName = containerName, ContainerType = item.ContainerType, RecoveryPointTime = recPointTime, RecoveryPointType = recPoint.RecoveryPointType, Id = rpResponse.Id, WorkloadType = item.WorkloadType, RecoveryPointAdditionalInfo = recPoint.RecoveryPointAdditionalInfo, SourceResourceId = item.SourceResourceId, FriendlyName = recPoint.FriendlyName }; result = sqlResult; } return(result); }