public override void ExecuteCmdlet() { ExecutionBlock(() => { base.ExecuteCmdlet(); ResourceIdentifier resourceIdentifier = new ResourceIdentifier(VaultId); string vaultName = resourceIdentifier.ResourceName; string resourceGroupName = resourceIdentifier.ResourceGroupName; if (!OriginalWorkloadRestore.IsPresent && !AlternateWorkloadRestore.IsPresent) { throw new ArgumentException(string.Format(Resources.AzureWorkloadRestoreLocationException)); } AzureWorkloadRecoveryConfig azureWorkloadRecoveryConfig = GetConfigObject(); azureWorkloadRecoveryConfig.SourceResourceId = Item != null ? Item.SourceResourceId : GetResourceId(); DateTime currentTime = DateTime.Now; TimeSpan timeSpan = DateTime.UtcNow - new DateTime(1970, 1, 1); int offset = (int)timeSpan.TotalSeconds; string targetDb = ""; if (ParameterSetName == RpParameterSet) { Dictionary <UriEnums, string> keyValueDict = HelperUtils.ParseUri(RecoveryPoint.Id); string itemUri = HelperUtils.GetProtectedItemUri(keyValueDict, RecoveryPoint.Id); targetDb = itemUri.Split(new string[] { ";" }, StringSplitOptions.None)[2]; } if (OriginalWorkloadRestore.IsPresent) { azureWorkloadRecoveryConfig.RestoredDBName = Item != null ? ((AzureWorkloadSQLDatabaseProtectedItem)Item).FriendlyName : targetDb; azureWorkloadRecoveryConfig.OverwriteWLIfpresent = "No"; azureWorkloadRecoveryConfig.NoRecoveryMode = "Disabled"; azureWorkloadRecoveryConfig.ContainerId = Item != null ? GetContainerId(Item.Id) : GetContainerId(GetItemId(RecoveryPoint.Id)); } else if (AlternateWorkloadRestore.IsPresent && Item == null) { if (string.Compare(((AzureWorkloadProtectableItem)TargetItem).ProtectableItemType, ProtectableItemType.SQLInstance.ToString()) != 0) { throw new ArgumentException(string.Format(Resources.AzureWorkloadRestoreProtectableItemException)); } azureWorkloadRecoveryConfig.RestoredDBName = GetRestoredDBName(RecoveryPoint.ItemName, currentTime); azureWorkloadRecoveryConfig.OverwriteWLIfpresent = "No"; azureWorkloadRecoveryConfig.NoRecoveryMode = "Disabled"; List <SQLDataDirectoryMapping> targetPhysicalPath = new List <SQLDataDirectoryMapping>(); //Get target workload item ODataQuery <BMSWorkloadItemQueryObject> queryParams = null; string backupManagementType = ServiceClientModel.BackupManagementType.AzureWorkload; queryParams = new ODataQuery <BMSWorkloadItemQueryObject>( q => q.WorkloadItemType == WorkloadItemType.SQLInstance && q.BackupManagementType == backupManagementType); var itemResponses = ServiceClientAdapter.ListWorkloadItem( TargetItem.ContainerName, queryParams, vaultName: vaultName, resourceGroupName: resourceGroupName); foreach (var itemResponse in itemResponses) { if (string.Compare(((AzureVmWorkloadSQLInstanceWorkloadItem)itemResponse.Properties).FriendlyName, ((AzureWorkloadProtectableItem)TargetItem).FriendlyName) == 0 && string.Compare(((AzureVmWorkloadSQLInstanceWorkloadItem)itemResponse.Properties).ServerName, ((AzureWorkloadProtectableItem)TargetItem).ServerName) == 0) { string itemId = GetItemId(RecoveryPoint.Id); IList <SQLDataDirectory> dataDirectoryPaths = GetRpDetails(vaultName, resourceGroupName); foreach (var dataDirectoryPath in dataDirectoryPaths) { targetPhysicalPath.Add(new SQLDataDirectoryMapping() { MappingType = dataDirectoryPath.Type, SourceLogicalName = dataDirectoryPath.LogicalName, SourcePath = dataDirectoryPath.Path, TargetPath = GetTargetPath(dataDirectoryPath.Path, dataDirectoryPath.LogicalName, dataDirectoryPath.Type, ((AzureVmWorkloadSQLInstanceWorkloadItem)itemResponse.Properties).DataDirectoryPaths as List <SQLDataDirectory>, offset) }); } break; } } azureWorkloadRecoveryConfig.targetPhysicalPath = targetPhysicalPath; azureWorkloadRecoveryConfig.ContainerId = GetContainerId(TargetItem.Id); } else if (Item != null && TargetItem != null) { if (string.Compare(((AzureWorkloadProtectableItem)TargetItem).ProtectableItemType, ProtectableItemType.SQLDataBase.ToString()) == 0) { throw new ArgumentException(string.Format(Resources.AzureWorkloadRestoreProtectableItemException)); } azureWorkloadRecoveryConfig.RestoredDBName = GetRestoredDBName(Item.Name, currentTime); azureWorkloadRecoveryConfig.OverwriteWLIfpresent = "No"; azureWorkloadRecoveryConfig.NoRecoveryMode = "Disabled"; List <SQLDataDirectoryMapping> targetPhysicalPath = new List <SQLDataDirectoryMapping>(); //Get target workload item ODataQuery <BMSWorkloadItemQueryObject> queryParams = null; string backupManagementType = ServiceClientModel.BackupManagementType.AzureWorkload; queryParams = new ODataQuery <BMSWorkloadItemQueryObject>( q => q.WorkloadItemType == WorkloadItemType.SQLInstance && q.BackupManagementType == backupManagementType); var itemResponses = ServiceClientAdapter.ListWorkloadItem( TargetItem.ContainerName, queryParams, vaultName: vaultName, resourceGroupName: resourceGroupName); foreach (var itemResponse in itemResponses) { if (string.Compare(((AzureVmWorkloadSQLInstanceWorkloadItem)itemResponse.Properties).FriendlyName, ((AzureWorkloadProtectableItem)TargetItem).FriendlyName) == 0 && string.Compare(((AzureVmWorkloadSQLInstanceWorkloadItem)itemResponse.Properties).ServerName, ((AzureWorkloadProtectableItem)TargetItem).ServerName) == 0) { List <SQLDataDirectory> dataDirectory = GetDataDirectory(vaultName, resourceGroupName, Item.Id, PointInTime); foreach (var dataDirectoryPath in dataDirectory) { targetPhysicalPath.Add(new SQLDataDirectoryMapping() { MappingType = dataDirectoryPath.Type, SourceLogicalName = dataDirectoryPath.LogicalName, SourcePath = dataDirectoryPath.Path, TargetPath = GetTargetPath(dataDirectoryPath.Path, dataDirectoryPath.LogicalName, dataDirectoryPath.Type, ((AzureVmWorkloadSQLInstanceWorkloadItem)itemResponse.Properties).DataDirectoryPaths as List <SQLDataDirectory>, offset) }); } break; } } azureWorkloadRecoveryConfig.targetPhysicalPath = targetPhysicalPath; azureWorkloadRecoveryConfig.ContainerId = GetContainerId(TargetItem.Id); } RecoveryConfigBase baseobj = azureWorkloadRecoveryConfig; WriteObject(baseobj); }); }
public RestAzureNS.AzureOperationResponse TriggerRestore() { string vaultName = (string)ProviderData[VaultParams.VaultName]; string resourceGroupName = (string)ProviderData[VaultParams.ResourceGroupName]; string vaultLocation = (string)ProviderData[VaultParams.VaultLocation]; RecoveryConfigBase wLRecoveryConfigBase = (RecoveryConfigBase)ProviderData[RestoreWLBackupItemParams.WLRecoveryConfig]; AzureWorkloadRecoveryConfig wLRecoveryConfig = (AzureWorkloadRecoveryConfig)ProviderData[RestoreWLBackupItemParams.WLRecoveryConfig]; RestoreRequestResource triggerRestoreRequest = new RestoreRequestResource(); bool useSecondaryRegion = (bool)ProviderData[CRRParams.UseSecondaryRegion]; String secondaryRegion = useSecondaryRegion ? (string)ProviderData[CRRParams.SecondaryRegion] : null; if (wLRecoveryConfig.RecoveryPoint.ContainerName != null && wLRecoveryConfig.FullRP == null) { AzureWorkloadSQLRestoreRequest azureWorkloadSQLRestoreRequest = new AzureWorkloadSQLRestoreRequest(); azureWorkloadSQLRestoreRequest.SourceResourceId = wLRecoveryConfig.SourceResourceId; azureWorkloadSQLRestoreRequest.ShouldUseAlternateTargetLocation = string.Compare(wLRecoveryConfig.RestoreRequestType, "Original WL Restore") != 0 ? true : false; azureWorkloadSQLRestoreRequest.IsNonRecoverable = string.Compare(wLRecoveryConfig.NoRecoveryMode, "Enabled") == 0 ? true : false; azureWorkloadSQLRestoreRequest.RecoveryType = string.Compare(wLRecoveryConfig.RestoreRequestType, "Original WL Restore") == 0 ? RecoveryType.OriginalLocation : RecoveryType.AlternateLocation; if (azureWorkloadSQLRestoreRequest.RecoveryType == RecoveryType.AlternateLocation) { azureWorkloadSQLRestoreRequest.TargetInfo = new TargetRestoreInfo() { OverwriteOption = string.Compare(wLRecoveryConfig.OverwriteWLIfpresent, "No") == 0 ? OverwriteOptions.FailOnConflict : OverwriteOptions.Overwrite, DatabaseName = wLRecoveryConfig.TargetInstance + "/" + wLRecoveryConfig.RestoredDBName, ContainerId = wLRecoveryConfig.ContainerId }; azureWorkloadSQLRestoreRequest.AlternateDirectoryPaths = wLRecoveryConfig.targetPhysicalPath; if (wLRecoveryConfig.TargetVirtualMachineId != null && wLRecoveryConfig.TargetVirtualMachineId != "") { azureWorkloadSQLRestoreRequest.TargetVirtualMachineId = wLRecoveryConfig.TargetVirtualMachineId; } else { throw new ArgumentException(Resources.TargetVirtualMachineIdRequiredException); } } if (wLRecoveryConfig.RecoveryMode == "FileRecovery") { azureWorkloadSQLRestoreRequest.RecoveryMode = "FileRecovery"; azureWorkloadSQLRestoreRequest.TargetInfo = new TargetRestoreInfo() { OverwriteOption = string.Compare(wLRecoveryConfig.OverwriteWLIfpresent, "No") == 0 ? OverwriteOptions.FailOnConflict : OverwriteOptions.Overwrite, ContainerId = wLRecoveryConfig.ContainerId, TargetDirectoryForFileRestore = wLRecoveryConfig.FilePath }; } triggerRestoreRequest.Properties = azureWorkloadSQLRestoreRequest; } else { AzureWorkloadSQLPointInTimeRestoreRequest azureWorkloadSQLPointInTimeRestoreRequest = new AzureWorkloadSQLPointInTimeRestoreRequest(); azureWorkloadSQLPointInTimeRestoreRequest.SourceResourceId = wLRecoveryConfig.SourceResourceId; azureWorkloadSQLPointInTimeRestoreRequest.ShouldUseAlternateTargetLocation = string.Compare(wLRecoveryConfig.RestoreRequestType, "Original WL Restore") != 0 ? true : false; azureWorkloadSQLPointInTimeRestoreRequest.IsNonRecoverable = string.Compare(wLRecoveryConfig.NoRecoveryMode, "Enabled") == 0 ? true : false; azureWorkloadSQLPointInTimeRestoreRequest.RecoveryType = string.Compare(wLRecoveryConfig.RestoreRequestType, "Original WL Restore") == 0 ? RecoveryType.OriginalLocation : RecoveryType.AlternateLocation; if (azureWorkloadSQLPointInTimeRestoreRequest.RecoveryType == RecoveryType.AlternateLocation) { azureWorkloadSQLPointInTimeRestoreRequest.TargetInfo = new TargetRestoreInfo() { OverwriteOption = string.Compare(wLRecoveryConfig.OverwriteWLIfpresent, "No") == 0 ? OverwriteOptions.FailOnConflict : OverwriteOptions.Overwrite, DatabaseName = wLRecoveryConfig.TargetInstance + "/" + wLRecoveryConfig.RestoredDBName, ContainerId = wLRecoveryConfig.ContainerId }; azureWorkloadSQLPointInTimeRestoreRequest.AlternateDirectoryPaths = wLRecoveryConfig.targetPhysicalPath; if (wLRecoveryConfig.TargetVirtualMachineId != null && wLRecoveryConfig.TargetVirtualMachineId != "") { azureWorkloadSQLPointInTimeRestoreRequest.TargetVirtualMachineId = wLRecoveryConfig.TargetVirtualMachineId; } else { throw new ArgumentException(Resources.TargetVirtualMachineIdRequiredException); } } if (wLRecoveryConfig.RecoveryMode == "FileRecovery") { azureWorkloadSQLPointInTimeRestoreRequest.RecoveryMode = "FileRecovery"; azureWorkloadSQLPointInTimeRestoreRequest.TargetInfo = new TargetRestoreInfo() { OverwriteOption = string.Compare(wLRecoveryConfig.OverwriteWLIfpresent, "No") == 0 ? OverwriteOptions.FailOnConflict : OverwriteOptions.Overwrite, ContainerId = wLRecoveryConfig.ContainerId, TargetDirectoryForFileRestore = wLRecoveryConfig.FilePath }; } azureWorkloadSQLPointInTimeRestoreRequest.PointInTime = wLRecoveryConfig.PointInTime; triggerRestoreRequest.Properties = azureWorkloadSQLPointInTimeRestoreRequest; } if (useSecondaryRegion) { AzureRecoveryPoint rp = (AzureRecoveryPoint)wLRecoveryConfig.RecoveryPoint; // get access token CrrAccessToken accessToken = ServiceClientAdapter.GetCRRAccessToken(rp, secondaryRegion, vaultName: vaultName, resourceGroupName: resourceGroupName, ServiceClientModel.BackupManagementType.AzureWorkload); // AzureWorkload CRR Request Logger.Instance.WriteDebug("Triggering Restore to secondary region: " + secondaryRegion); CrossRegionRestoreRequest crrRestoreRequest = new CrossRegionRestoreRequest(); crrRestoreRequest.CrossRegionRestoreAccessDetails = accessToken; crrRestoreRequest.RestoreRequest = triggerRestoreRequest.Properties; // storage account location isn't required in case of workload restore var response = ServiceClientAdapter.RestoreDiskSecondryRegion( rp, triggerCRRRestoreRequest: crrRestoreRequest, secondaryRegion: secondaryRegion); return(response); } else { var response = ServiceClientAdapter.RestoreDisk( (AzureRecoveryPoint)wLRecoveryConfig.RecoveryPoint, "LocationNotRequired", triggerRestoreRequest, vaultName: vaultName, resourceGroupName: resourceGroupName, vaultLocation: vaultLocation); return(response); } }
public RestAzureNS.AzureOperationResponse TriggerRestore() { string vaultName = (string)ProviderData[VaultParams.VaultName]; string resourceGroupName = (string)ProviderData[VaultParams.ResourceGroupName]; string vaultLocation = (string)ProviderData[VaultParams.VaultLocation]; RecoveryConfigBase wLRecoveryConfigBase = (RecoveryConfigBase)ProviderData[RestoreWLBackupItemParams.WLRecoveryConfig]; AzureWorkloadRecoveryConfig wLRecoveryConfig = (AzureWorkloadRecoveryConfig)ProviderData[RestoreWLBackupItemParams.WLRecoveryConfig]; RestoreRequestResource triggerRestoreRequest = new RestoreRequestResource(); if (wLRecoveryConfig.RecoveryPoint.ContainerName != null && wLRecoveryConfig.FullRP == null) { // validate container name to be a full name AzureWorkloadProviderHelper.ValidateContainerName(wLRecoveryConfig.RecoveryPoint.ContainerName); AzureWorkloadSQLRestoreRequest azureWorkloadSQLRestoreRequest = new AzureWorkloadSQLRestoreRequest(); azureWorkloadSQLRestoreRequest.SourceResourceId = wLRecoveryConfig.SourceResourceId; azureWorkloadSQLRestoreRequest.ShouldUseAlternateTargetLocation = string.Compare(wLRecoveryConfig.RestoreRequestType, "Original WL Restore") != 0 ? true : false; azureWorkloadSQLRestoreRequest.IsNonRecoverable = string.Compare(wLRecoveryConfig.NoRecoveryMode, "Enabled") == 0 ? true : false; azureWorkloadSQLRestoreRequest.RecoveryType = string.Compare(wLRecoveryConfig.RestoreRequestType, "Original WL Restore") == 0 ? RecoveryType.OriginalLocation : RecoveryType.AlternateLocation; if (azureWorkloadSQLRestoreRequest.RecoveryType == RecoveryType.AlternateLocation) { azureWorkloadSQLRestoreRequest.TargetInfo = new TargetRestoreInfo() { OverwriteOption = string.Compare(wLRecoveryConfig.OverwriteWLIfpresent, "No") == 0 ? OverwriteOptions.FailOnConflict : OverwriteOptions.Overwrite, DatabaseName = wLRecoveryConfig.TargetInstance + "/" + wLRecoveryConfig.RestoredDBName, ContainerId = wLRecoveryConfig.ContainerId }; azureWorkloadSQLRestoreRequest.AlternateDirectoryPaths = wLRecoveryConfig.targetPhysicalPath; } if (wLRecoveryConfig.RecoveryMode == "FileRecovery") { azureWorkloadSQLRestoreRequest.RecoveryMode = "FileRecovery"; azureWorkloadSQLRestoreRequest.TargetInfo = new TargetRestoreInfo() { OverwriteOption = string.Compare(wLRecoveryConfig.OverwriteWLIfpresent, "No") == 0 ? OverwriteOptions.FailOnConflict : OverwriteOptions.Overwrite, ContainerId = wLRecoveryConfig.ContainerId, TargetDirectoryForFileRestore = wLRecoveryConfig.FilePath }; } triggerRestoreRequest.Properties = azureWorkloadSQLRestoreRequest; } else { AzureWorkloadSQLPointInTimeRestoreRequest azureWorkloadSQLPointInTimeRestoreRequest = new AzureWorkloadSQLPointInTimeRestoreRequest(); azureWorkloadSQLPointInTimeRestoreRequest.SourceResourceId = wLRecoveryConfig.SourceResourceId; azureWorkloadSQLPointInTimeRestoreRequest.ShouldUseAlternateTargetLocation = string.Compare(wLRecoveryConfig.RestoreRequestType, "Original WL Restore") != 0 ? true : false; azureWorkloadSQLPointInTimeRestoreRequest.IsNonRecoverable = string.Compare(wLRecoveryConfig.NoRecoveryMode, "Enabled") == 0 ? true : false; azureWorkloadSQLPointInTimeRestoreRequest.RecoveryType = string.Compare(wLRecoveryConfig.RestoreRequestType, "Original WL Restore") == 0 ? RecoveryType.OriginalLocation : RecoveryType.AlternateLocation; if (azureWorkloadSQLPointInTimeRestoreRequest.RecoveryType == RecoveryType.AlternateLocation) { azureWorkloadSQLPointInTimeRestoreRequest.TargetInfo = new TargetRestoreInfo() { OverwriteOption = string.Compare(wLRecoveryConfig.OverwriteWLIfpresent, "No") == 0 ? OverwriteOptions.FailOnConflict : OverwriteOptions.Overwrite, DatabaseName = wLRecoveryConfig.TargetInstance + "/" + wLRecoveryConfig.RestoredDBName, ContainerId = wLRecoveryConfig.ContainerId }; azureWorkloadSQLPointInTimeRestoreRequest.AlternateDirectoryPaths = wLRecoveryConfig.targetPhysicalPath; } if (wLRecoveryConfig.RecoveryMode == "FileRecovery") { azureWorkloadSQLPointInTimeRestoreRequest.RecoveryMode = "FileRecovery"; azureWorkloadSQLPointInTimeRestoreRequest.TargetInfo = new TargetRestoreInfo() { OverwriteOption = string.Compare(wLRecoveryConfig.OverwriteWLIfpresent, "No") == 0 ? OverwriteOptions.FailOnConflict : OverwriteOptions.Overwrite, ContainerId = wLRecoveryConfig.ContainerId, TargetDirectoryForFileRestore = wLRecoveryConfig.FilePath }; } azureWorkloadSQLPointInTimeRestoreRequest.PointInTime = wLRecoveryConfig.PointInTime; triggerRestoreRequest.Properties = azureWorkloadSQLPointInTimeRestoreRequest; } var response = ServiceClientAdapter.RestoreDisk( (AzureRecoveryPoint)wLRecoveryConfig.RecoveryPoint, "LocationNotRequired", triggerRestoreRequest, vaultName: vaultName, resourceGroupName: resourceGroupName, vaultLocation: vaultLocation); return(response); }
public override void ExecuteCmdlet() { ExecutionBlock(() => { base.ExecuteCmdlet(); ResourceIdentifier resourceIdentifier = new ResourceIdentifier(VaultId); string vaultName = resourceIdentifier.ResourceName; string resourceGroupName = resourceIdentifier.ResourceGroupName; AzureWorkloadRecoveryConfig azureWorkloadRecoveryConfig = new AzureWorkloadRecoveryConfig(); azureWorkloadRecoveryConfig.SourceResourceId = Item != null ? Item.SourceResourceId : GetResourceId(); DateTime currentTime = DateTime.Now; TimeSpan timeSpan = DateTime.UtcNow - new DateTime(1970, 1, 1); int offset = (int)timeSpan.TotalSeconds; string targetServer = ""; string parentName = ""; string targetDb = ""; if (ParameterSetName == RpParameterSet) { azureWorkloadRecoveryConfig.RecoveryPoint = RecoveryPoint; Dictionary <UriEnums, string> keyValueDict = HelperUtils.ParseUri(RecoveryPoint.Id); string containerUri = HelperUtils.GetContainerUri(keyValueDict, RecoveryPoint.Id); targetServer = containerUri.Split(new string[] { ";" }, StringSplitOptions.None)[3]; string itemUri = HelperUtils.GetProtectedItemUri(keyValueDict, RecoveryPoint.Id); parentName = itemUri.Split(new string[] { ";" }, StringSplitOptions.None)[1]; targetDb = itemUri.Split(new string[] { ";" }, StringSplitOptions.None)[2]; } else { azureWorkloadRecoveryConfig.PointInTime = PointInTime; } if (OriginalWorkloadRestore.IsPresent) { azureWorkloadRecoveryConfig.RestoreRequestType = "Original WL Restore"; azureWorkloadRecoveryConfig.TargetServer = Item != null ? ((AzureWorkloadSQLDatabaseProtectedItem)Item).ServerName : targetServer; azureWorkloadRecoveryConfig.TargetInstance = Item != null ? ((AzureWorkloadSQLDatabaseProtectedItem)Item).ParentName : parentName; azureWorkloadRecoveryConfig.RestoredDBName = Item != null ? ((AzureWorkloadSQLDatabaseProtectedItem)Item).FriendlyName : targetDb; azureWorkloadRecoveryConfig.OverwriteWLIfpresent = "No"; azureWorkloadRecoveryConfig.NoRecoveryMode = "Disabled"; if (RecoveryPoint == null) { Models.AzureWorkloadRecoveryPoint azureWorkloadRecoveryPoint = new Models.AzureWorkloadRecoveryPoint() { Id = Item.Id + "/recoveryPoints/DefaultRangeRecoveryPoint", RecoveryPointId = "DefaultRangeRecoveryPoint" }; azureWorkloadRecoveryConfig.RecoveryPoint = azureWorkloadRecoveryPoint; } azureWorkloadRecoveryConfig.ContainerId = Item != null ? GetContainerId(Item.Id) : GetContainerId(GetItemId(RecoveryPoint.Id)); } else if (AlternateWorkloadRestore.IsPresent && Item == null) { if (string.Compare(((AzureWorkloadProtectableItem)TargetItem).ProtectableItemType, ProtectableItemType.SQLDataBase.ToString()) == 0) { throw new ArgumentException(string.Format(Resources.AzureWorkloadRestoreProtectableItemException)); } azureWorkloadRecoveryConfig.RestoreRequestType = "Alternate WL Restore"; azureWorkloadRecoveryConfig.TargetServer = ((AzureWorkloadProtectableItem)TargetItem).ServerName; azureWorkloadRecoveryConfig.TargetInstance = ((AzureWorkloadProtectableItem)TargetItem).ParentName; azureWorkloadRecoveryConfig.RestoredDBName = GetRestoredDBName(((AzureWorkloadProtectableItem)TargetItem).ParentName, RecoveryPoint.ItemName, currentTime); azureWorkloadRecoveryConfig.OverwriteWLIfpresent = "No"; azureWorkloadRecoveryConfig.NoRecoveryMode = "Disabled"; List <SQLDataDirectoryMapping> targetPhysicalPath = new List <SQLDataDirectoryMapping>(); string itemId = GetItemId(RecoveryPoint.Id); IList <SQLDataDirectory> dataDirectoryPaths = GetRpDetails(vaultName, resourceGroupName); foreach (var dataDirectoryPath in dataDirectoryPaths) { targetPhysicalPath.Add(new SQLDataDirectoryMapping() { MappingType = dataDirectoryPath.Type, SourceLogicalName = dataDirectoryPath.LogicalName, SourcePath = dataDirectoryPath.Path, TargetPath = GetTargetPath(dataDirectoryPath.Path, dataDirectoryPath.LogicalName, offset) }); } azureWorkloadRecoveryConfig.targetPhysicalPath = targetPhysicalPath; azureWorkloadRecoveryConfig.ContainerId = GetContainerId(TargetItem.Id); } else if (Item != null && TargetItem != null) { if (string.Compare(((AzureWorkloadProtectableItem)TargetItem).ProtectableItemType, ProtectableItemType.SQLDataBase.ToString()) == 0) { throw new ArgumentException(string.Format(Resources.AzureWorkloadRestoreProtectableItemException)); } azureWorkloadRecoveryConfig.RestoreRequestType = "Alternate WL Restore to diff item"; azureWorkloadRecoveryConfig.TargetServer = ((AzureWorkloadProtectableItem)TargetItem).ServerName; azureWorkloadRecoveryConfig.TargetInstance = ((AzureWorkloadProtectableItem)TargetItem).ParentName; azureWorkloadRecoveryConfig.RestoredDBName = GetRestoredDBName(((AzureWorkloadProtectableItem)TargetItem).ParentName, Item.Name, currentTime); azureWorkloadRecoveryConfig.OverwriteWLIfpresent = "No"; azureWorkloadRecoveryConfig.NoRecoveryMode = "Disabled"; List <SQLDataDirectoryMapping> targetPhysicalPath = new List <SQLDataDirectoryMapping>(); List <SQLDataDirectory> dataDirectory = GetDataDirectory(vaultName, resourceGroupName, Item.Id, PointInTime); foreach (var dataDirectoryPath in dataDirectory) { targetPhysicalPath.Add(new SQLDataDirectoryMapping() { MappingType = dataDirectoryPath.Type, SourceLogicalName = dataDirectoryPath.LogicalName, SourcePath = dataDirectoryPath.Path, TargetPath = GetTargetPath(dataDirectoryPath.Path, dataDirectoryPath.LogicalName, offset) }); } Models.AzureWorkloadRecoveryPoint azureWorkloadRecoveryPoint = new Models.AzureWorkloadRecoveryPoint() { Id = Item.Id + "/recoveryPoints/DefaultRangeRecoveryPoint", RecoveryPointId = "DefaultRangeRecoveryPoint" }; azureWorkloadRecoveryConfig.RecoveryPoint = azureWorkloadRecoveryPoint; azureWorkloadRecoveryConfig.targetPhysicalPath = targetPhysicalPath; azureWorkloadRecoveryConfig.ContainerId = GetContainerId(TargetItem.Id); } RecoveryConfigBase baseobj = azureWorkloadRecoveryConfig; WriteObject(baseobj); }); }