/// <summary> /// Creates Replication Plan Legacy. /// </summary> private void CreateRecoveryPlanLegacy() { CreateRecoveryPlanInputProperties createRecoveryPlanInputProperties = new CreateRecoveryPlanInputProperties() { FailoverDeploymentModel = failoverDeploymentModel, Groups = new List <RecoveryPlanGroup>(), PrimaryFabricId = this.primaryserver, RecoveryFabricId = this.recoveryserver }; RecoveryPlanGroup recoveryPlanGroup = new RecoveryPlanGroup() { GroupType = Constants.Boot, ReplicationProtectedItems = new List <RecoveryPlanProtectedItem>(), StartGroupActions = new List <RecoveryPlanAction>(), EndGroupActions = new List <RecoveryPlanAction>() }; foreach (ASRProtectionEntity pe in ProtectionEntityList) { string fabricName = Utilities.GetValueFromArmId(pe.ID, ARMResourceTypeConstants.ReplicationFabrics); // fetch the latest PE object ProtectableItemResponse protectableItemResponse = RecoveryServicesClient.GetAzureSiteRecoveryProtectableItem(fabricName, pe.ProtectionContainerId, pe.Name); ReplicationProtectedItemResponse replicationProtectedItemResponse = RecoveryServicesClient.GetAzureSiteRecoveryReplicationProtectedItem(fabricName, pe.ProtectionContainerId, Utilities.GetValueFromArmId(protectableItemResponse.ProtectableItem.Properties.ReplicationProtectedItemId, ARMResourceTypeConstants.ReplicationProtectedItems)); string VmId = null; if (replicationProtectedItemResponse.ReplicationProtectedItem.Properties.ProviderSpecificDetails.GetType() == typeof(HyperVReplicaAzureReplicationDetails)) { VmId = ((HyperVReplicaAzureReplicationDetails)replicationProtectedItemResponse.ReplicationProtectedItem.Properties.ProviderSpecificDetails).VmId; } else if (replicationProtectedItemResponse.ReplicationProtectedItem.Properties.ProviderSpecificDetails.GetType() == typeof(HyperVReplica2012ReplicationDetails)) { VmId = ((HyperVReplica2012ReplicationDetails)replicationProtectedItemResponse.ReplicationProtectedItem.Properties.ProviderSpecificDetails).VmId; } RecoveryPlanProtectedItem recoveryPlanProtectedItem = new RecoveryPlanProtectedItem(); recoveryPlanProtectedItem.Id = replicationProtectedItemResponse.ReplicationProtectedItem.Id; recoveryPlanProtectedItem.VirtualMachineId = VmId; recoveryPlanGroup.ReplicationProtectedItems.Add(recoveryPlanProtectedItem); } createRecoveryPlanInputProperties.Groups.Add(recoveryPlanGroup); CreateRecoveryPlanInput createRecoveryPlanInput = new CreateRecoveryPlanInput() { Properties = createRecoveryPlanInputProperties }; CreateRecoveryPlan(this.Name, createRecoveryPlanInput); }
/// <summary> /// Update Recovery Plan: By powerShell Recovery Plan object /// </summary> private void UpdateRecoveryPlan(ASRRecoveryPlan asrRecoveryPlan) { UpdateRecoveryPlanInputProperties updateRecoveryPlanInputProperties = new UpdateRecoveryPlanInputProperties() { Groups = new List <RecoveryPlanGroup>(), }; foreach (ASRRecoveryPlanGroup asrRecoveryPlanGroup in asrRecoveryPlan.Groups) { RecoveryPlanGroup recoveryPlanGroup = new RecoveryPlanGroup() { GroupType = asrRecoveryPlanGroup.GroupType, // Initialize ReplicationProtectedItems with empty List if asrRecoveryPlanGroup.ReplicationProtectedItems is null // otherwise assign respective values ReplicationProtectedItems = asrRecoveryPlanGroup.ReplicationProtectedItems == null ? new List <RecoveryPlanProtectedItem>() : asrRecoveryPlanGroup.ReplicationProtectedItems.Select(item => { var newItem = new RecoveryPlanProtectedItem(item.Id); string VmId = null; if (item.Properties.ProviderSpecificDetails.GetType() == typeof(HyperVReplicaAzureReplicationDetails)) { VmId = ((HyperVReplicaAzureReplicationDetails)item.Properties.ProviderSpecificDetails).VmId; } else if (item.Properties.ProviderSpecificDetails.GetType() == typeof(HyperVReplica2012ReplicationDetails)) { VmId = ((HyperVReplica2012ReplicationDetails)item.Properties.ProviderSpecificDetails).VmId; } newItem.VirtualMachineId = VmId; return(newItem); }).ToList(), StartGroupActions = asrRecoveryPlanGroup.StartGroupActions, EndGroupActions = asrRecoveryPlanGroup.EndGroupActions }; updateRecoveryPlanInputProperties.Groups.Add(recoveryPlanGroup); } UpdateRecoveryPlanInput updateRecoveryPlanInput = new UpdateRecoveryPlanInput() { Properties = updateRecoveryPlanInputProperties }; UpdateRecoveryPlan(asrRecoveryPlan.Name, updateRecoveryPlanInput); }
/// <summary> /// Creates Replication Plan /// </summary> private void CreateRecoveryPlan() { var createRecoveryPlanInputProperties = new CreateRecoveryPlanInputProperties { FailoverDeploymentModel = (FailoverDeploymentModel)Enum.Parse( typeof(FailoverDeploymentModel), this.failoverDeploymentModel), Groups = new List <RecoveryPlanGroup>(), PrimaryFabricId = this.primaryserver, RecoveryFabricId = this.recoveryserver }; var recoveryPlanGroup = new RecoveryPlanGroup { GroupType = RecoveryPlanGroupType.Boot, ReplicationProtectedItems = new List <RecoveryPlanProtectedItem>(), StartGroupActions = new List <RecoveryPlanAction>(), EndGroupActions = new List <RecoveryPlanAction>() }; foreach (var rpi in this.ReplicationProtectedItem) { var fabricName = Utilities.GetValueFromArmId( rpi.ID, ARMResourceTypeConstants.ReplicationFabrics); var replicationProtectedItemResponse = this.RecoveryServicesClient .GetAzureSiteRecoveryReplicationProtectedItem( fabricName, Utilities.GetValueFromArmId( rpi.ID, ARMResourceTypeConstants.ReplicationProtectionContainers), rpi.Name); string VmId = null; if (replicationProtectedItemResponse.Properties.ProviderSpecificDetails.GetType() == typeof(HyperVReplicaAzureReplicationDetails)) { VmId = ((HyperVReplicaAzureReplicationDetails)replicationProtectedItemResponse .Properties.ProviderSpecificDetails).VmId; } else if (replicationProtectedItemResponse.Properties.ProviderSpecificDetails .GetType() == typeof(HyperVReplicaReplicationDetails)) { VmId = ((HyperVReplicaReplicationDetails)replicationProtectedItemResponse .Properties.ProviderSpecificDetails).VmId; } else if (replicationProtectedItemResponse.Properties.ProviderSpecificDetails .GetType() == typeof(HyperVReplicaBlueReplicationDetails)) { VmId = ((HyperVReplicaBlueReplicationDetails)replicationProtectedItemResponse .Properties.ProviderSpecificDetails).VmId; } else if (replicationProtectedItemResponse.Properties.ProviderSpecificDetails .GetType() == typeof(InMageAzureV2ReplicationDetails)) { VmId = ((InMageAzureV2ReplicationDetails)replicationProtectedItemResponse .Properties.ProviderSpecificDetails).VmId; } else if (replicationProtectedItemResponse.Properties.ProviderSpecificDetails .GetType() == typeof(InMageReplicationDetails)) { VmId = ((InMageReplicationDetails)replicationProtectedItemResponse .Properties.ProviderSpecificDetails).VmId; } else if (replicationProtectedItemResponse.Properties.ProviderSpecificDetails.GetType() == typeof(A2AReplicationDetails)) { A2AReplicationDetails a2aReplicationDetails = ((A2AReplicationDetails)replicationProtectedItemResponse .Properties .ProviderSpecificDetails); if (a2aReplicationDetails.FabricObjectId.IndexOf( Constants.ClassicCompute, StringComparison.OrdinalIgnoreCase) >= 0) { createRecoveryPlanInputProperties.FailoverDeploymentModel = Management.RecoveryServices.SiteRecovery.Models.FailoverDeploymentModel.Classic; } else if (a2aReplicationDetails.FabricObjectId.IndexOf( Constants.Compute, StringComparison.OrdinalIgnoreCase) >= 0) { createRecoveryPlanInputProperties.FailoverDeploymentModel = Management.RecoveryServices.SiteRecovery.Models.FailoverDeploymentModel.ResourceManager; } } var recoveryPlanProtectedItem = new RecoveryPlanProtectedItem(); recoveryPlanProtectedItem.Id = replicationProtectedItemResponse.Id; recoveryPlanProtectedItem.VirtualMachineId = VmId; recoveryPlanGroup.ReplicationProtectedItems.Add(recoveryPlanProtectedItem); } createRecoveryPlanInputProperties.Groups.Add(recoveryPlanGroup); var createRecoveryPlanInput = new CreateRecoveryPlanInput { Properties = createRecoveryPlanInputProperties }; this.CreateRecoveryPlan( this.Name, createRecoveryPlanInput); }
/// <summary> /// Creates Replication Plan /// </summary> private void CreateRecoveryPlan() { var createRecoveryPlanInputProperties = new CreateRecoveryPlanInputProperties { FailoverDeploymentModel = this.failoverDeploymentModel, Groups = new List <RecoveryPlanGroup>(), PrimaryFabricId = this.primaryserver, RecoveryFabricId = this.recoveryserver }; var recoveryPlanGroup = new RecoveryPlanGroup { GroupType = RecoveryPlanGroupType.Boot, ReplicationProtectedItems = new List <RecoveryPlanProtectedItem>(), StartGroupActions = new List <RecoveryPlanAction>(), EndGroupActions = new List <RecoveryPlanAction>() }; foreach (var rpi in this.ReplicationProtectedItem) { var fabricName = Utilities.GetValueFromArmId( rpi.ID, ARMResourceTypeConstants.ReplicationFabrics); var replicationProtectedItemResponse = this.RecoveryServicesClient .GetAzureSiteRecoveryReplicationProtectedItem( fabricName, Utilities.GetValueFromArmId( rpi.ID, ARMResourceTypeConstants.ReplicationProtectionContainers), rpi.Name); string VmId = null; if (replicationProtectedItemResponse.Properties.ProviderSpecificDetails.GetType() == typeof(HyperVReplicaAzureReplicationDetails)) { VmId = ((HyperVReplicaAzureReplicationDetails)replicationProtectedItemResponse .Properties.ProviderSpecificDetails).VmId; } else if (replicationProtectedItemResponse.Properties.ProviderSpecificDetails .GetType() == typeof(HyperVReplicaReplicationDetails)) { VmId = ((HyperVReplicaReplicationDetails)replicationProtectedItemResponse .Properties.ProviderSpecificDetails).VmId; } else if (replicationProtectedItemResponse.Properties.ProviderSpecificDetails .GetType() == typeof(HyperVReplicaBlueReplicationDetails)) { VmId = ((HyperVReplicaBlueReplicationDetails)replicationProtectedItemResponse .Properties.ProviderSpecificDetails).VmId; } else if (replicationProtectedItemResponse.Properties.ProviderSpecificDetails .GetType() == typeof(InMageAzureV2ReplicationDetails)) { VmId = ((InMageAzureV2ReplicationDetails)replicationProtectedItemResponse .Properties.ProviderSpecificDetails).VmId; } else if (replicationProtectedItemResponse.Properties.ProviderSpecificDetails .GetType() == typeof(InMageReplicationDetails)) { VmId = ((InMageReplicationDetails)replicationProtectedItemResponse .Properties.ProviderSpecificDetails).VmId; } else if (replicationProtectedItemResponse.Properties.ProviderSpecificDetails.GetType() == typeof(A2AReplicationDetails)) { A2AReplicationDetails a2aReplicationDetails = ((A2AReplicationDetails)replicationProtectedItemResponse .Properties .ProviderSpecificDetails); if (a2aReplicationDetails.FabricObjectId.IndexOf( Constants.ClassicCompute, StringComparison.OrdinalIgnoreCase) >= 0) { createRecoveryPlanInputProperties.FailoverDeploymentModel = Management.RecoveryServices.SiteRecovery.Models.FailoverDeploymentModel.Classic; } else if (a2aReplicationDetails.FabricObjectId.IndexOf( Constants.Compute, StringComparison.OrdinalIgnoreCase) >= 0) { createRecoveryPlanInputProperties.FailoverDeploymentModel = Management.RecoveryServices.SiteRecovery.Models.FailoverDeploymentModel.ResourceManager; } } else if (replicationProtectedItemResponse.Properties.ProviderSpecificDetails .GetType() == typeof(InMageRcmReplicationDetails)) { VmId = ((InMageRcmReplicationDetails)replicationProtectedItemResponse .Properties.ProviderSpecificDetails).InternalIdentifier; createRecoveryPlanInputProperties.FailoverDeploymentModel = Management.RecoveryServices.SiteRecovery.Models.FailoverDeploymentModel.ResourceManager; } else if (replicationProtectedItemResponse.Properties.ProviderSpecificDetails .GetType() == typeof(InMageRcmFailbackReplicationDetails)) { VmId = ((InMageRcmFailbackReplicationDetails)replicationProtectedItemResponse .Properties.ProviderSpecificDetails).InternalIdentifier; createRecoveryPlanInputProperties.FailoverDeploymentModel = Management.RecoveryServices.SiteRecovery.Models.FailoverDeploymentModel.ResourceManager; } var recoveryPlanProtectedItem = new RecoveryPlanProtectedItem(); recoveryPlanProtectedItem.Id = replicationProtectedItemResponse.Id; recoveryPlanProtectedItem.VirtualMachineId = VmId; recoveryPlanGroup.ReplicationProtectedItems.Add(recoveryPlanProtectedItem); } createRecoveryPlanInputProperties.Groups.Add(recoveryPlanGroup); // Add zone to zone details. if (this.ParameterSetName == ASRParameterSets.AzureZoneToZone) { var recoveryPlanA2AInput = new RecoveryPlanA2AInput { PrimaryZone = this.PrimaryZone, RecoveryZone = this.RecoveryZone, PrimaryExtendedLocation = this.IsParameterBound(c => c.PrimaryEdgeZone) ? new ExtendedLocation { Name = this.PrimaryEdgeZone } : null, RecoveryExtendedLocation = this.IsParameterBound(c => c.RecoveryEdgeZone) ? new ExtendedLocation { Name = this.RecoveryEdgeZone } : null }; createRecoveryPlanInputProperties.ProviderSpecificInput = new List <RecoveryPlanProviderSpecificInput>(); createRecoveryPlanInputProperties.ProviderSpecificInput.Add(recoveryPlanA2AInput); } var createRecoveryPlanInput = new CreateRecoveryPlanInput { Properties = createRecoveryPlanInputProperties }; this.CreateRecoveryPlan( this.Name, createRecoveryPlanInput); }
/// <summary> /// Update Recovery Plan: By powerShell Recovery Plan object /// </summary> private void UpdateRecoveryPlan( ASRRecoveryPlan asrRecoveryPlan) { var updateRecoveryPlanInputProperties = new UpdateRecoveryPlanInputProperties { Groups = new List <RecoveryPlanGroup>() }; foreach (var asrRecoveryPlanGroup in asrRecoveryPlan.Groups) { var recoveryPlanGroup = new RecoveryPlanGroup { GroupType = asrRecoveryPlanGroup.GroupType, // Initialize ReplicationProtectedItems with empty List if asrRecoveryPlanGroup.ReplicationProtectedItems is null // otherwise assign respective values ReplicationProtectedItems = asrRecoveryPlanGroup.ReplicationProtectedItems == null ? new List <RecoveryPlanProtectedItem>() : asrRecoveryPlanGroup .ReplicationProtectedItems.Select( item => { var newItem = new RecoveryPlanProtectedItem(item.ID); string VmId = null; if (item.ProviderSpecificDetails.GetType() == typeof(ASRHyperVReplicaAzureSpecificRPIDetails)) { VmId = ((ASRHyperVReplicaAzureSpecificRPIDetails)item.ProviderSpecificDetails).VmId; } else if (item.ProviderSpecificDetails.GetType() == typeof(ASRHyperVReplicaRPIDetails)) { VmId = ((ASRHyperVReplicaRPIDetails)item.ProviderSpecificDetails).VmId; } else if (item.ProviderSpecificDetails.GetType() == typeof(ASRHyperVReplicaBlueRPIDetails)) { VmId = ((ASRHyperVReplicaBlueRPIDetails)item.ProviderSpecificDetails).VmId; } else if (item.ProviderSpecificDetails.GetType() == typeof(ASRInMageSpecificRPIDetails)) { VmId = ((ASRInMageSpecificRPIDetails)item.ProviderSpecificDetails).VmId; } else if (item.ProviderSpecificDetails.GetType() == typeof(ASRInMageSpecificRPIDetails)) { VmId = ((ASRInMageSpecificRPIDetails)item.ProviderSpecificDetails).VmId; } newItem.VirtualMachineId = VmId; return(newItem); }) .ToList(), StartGroupActions = asrRecoveryPlanGroup.StartGroupActions == null ? null : asrRecoveryPlanGroup.StartGroupActions.ToList().ConvertAll( action => ASRRecoveryPlanAction.GetSrsRecoveryPlanAction(action)), EndGroupActions = asrRecoveryPlanGroup.EndGroupActions == null ? null : asrRecoveryPlanGroup.EndGroupActions.ToList().ConvertAll( action => ASRRecoveryPlanAction.GetSrsRecoveryPlanAction(action)), }; updateRecoveryPlanInputProperties.Groups.Add(recoveryPlanGroup); } var updateRecoveryPlanInput = new UpdateRecoveryPlanInput { Properties = updateRecoveryPlanInputProperties }; this.UpdateRecoveryPlan( asrRecoveryPlan.Name, updateRecoveryPlanInput); }