示例#1
0
        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);
            });
        }