public AzureWorkloadRecoveryConfig GetConfigObject() { string targetServer = ""; string parentName = ""; string restoreRequestType = ""; RecoveryPointBase recoveryPoint = RecoveryPoint; DateTime pointInTime = PointInTime; if (ParameterSetName == RpParameterSet) { Dictionary <UriEnums, string> keyValueDict = HelperUtils.ParseUri(RecoveryPoint.Id); string containerUri = HelperUtils.GetContainerUri(keyValueDict, RecoveryPoint.Id); try { targetServer = containerUri.Split(new string[] { ";" }, StringSplitOptions.None)[3]; } catch { targetServer = containerUri.Split(new string[] { ";" }, StringSplitOptions.None)[1]; } string itemUri = HelperUtils.GetProtectedItemUri(keyValueDict, RecoveryPoint.Id); parentName = itemUri.Split(new string[] { ";" }, StringSplitOptions.None)[1]; } if (OriginalWorkloadRestore.IsPresent) { restoreRequestType = "Original WL Restore"; if (Item != null) { targetServer = ((AzureWorkloadSQLDatabaseProtectedItem)Item).ServerName; parentName = ((AzureWorkloadSQLDatabaseProtectedItem)Item).ParentName; } if (RecoveryPoint == null) { Models.AzureWorkloadRecoveryPoint azureWorkloadRecoveryPoint = new Models.AzureWorkloadRecoveryPoint() { Id = Item.Id + "/recoveryPoints/DefaultRangeRecoveryPoint", RecoveryPointId = "DefaultRangeRecoveryPoint" }; recoveryPoint = azureWorkloadRecoveryPoint; } } else if (AlternateWorkloadRestore.IsPresent && Item == null) { restoreRequestType = "Alternate WL Restore"; targetServer = ((AzureWorkloadProtectableItem)TargetItem).ServerName; parentName = ((AzureWorkloadProtectableItem)TargetItem).ParentName; } else if (Item != null && TargetItem != null) { restoreRequestType = "Alternate WL Restore to diff item"; targetServer = ((AzureWorkloadProtectableItem)TargetItem).ServerName; parentName = ((AzureWorkloadProtectableItem)TargetItem).ParentName; Models.AzureWorkloadRecoveryPoint azureWorkloadRecoveryPoint = new Models.AzureWorkloadRecoveryPoint() { Id = Item.Id + "/recoveryPoints/DefaultRangeRecoveryPoint", RecoveryPointId = "DefaultRangeRecoveryPoint" }; recoveryPoint = azureWorkloadRecoveryPoint; } return(new AzureWorkloadRecoveryConfig(targetServer, parentName, restoreRequestType, recoveryPoint, pointInTime)); }
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); }); }