/// <summary> /// Starts RP Test failover. /// </summary> private void StartRpTestFailover() { // Refresh RP Object var rp = RecoveryServicesClient.GetAzureSiteRecoveryRecoveryPlan(this.RecoveryPlan.Name); var recoveryPlanTestFailoverInputProperties = new RecoveryPlanTestFailoverInputProperties() { FailoverDirection = this.Direction, NetworkId = this.networkId, NetworkType = this.networkType, ProviderSpecificDetails = new List <RecoveryPlanProviderSpecificFailoverInput>() }; foreach (string replicationProvider in rp.RecoveryPlan.Properties.ReplicationProviders) { if (0 == string.Compare( replicationProvider, Constants.HyperVReplicaAzure, StringComparison.OrdinalIgnoreCase)) { if (this.Direction == Constants.PrimaryToRecovery) { var recoveryPlanHyperVReplicaAzureFailoverInput = new RecoveryPlanHyperVReplicaAzureFailoverInput() { InstanceType = replicationProvider, PrimaryKekCertificatePfx = primaryKekCertpfx, SecondaryKekCertificatePfx = secondaryKekCertpfx, VaultLocation = this.GetCurrentVaultLocation() }; recoveryPlanTestFailoverInputProperties.ProviderSpecificDetails.Add(recoveryPlanHyperVReplicaAzureFailoverInput); } else { new ArgumentException(Properties.Resources.UnsupportedDirectionForTFO);// Throw Unsupported Direction Exception } } } var recoveryPlanTestFailoverInput = new RecoveryPlanTestFailoverInput() { Properties = recoveryPlanTestFailoverInputProperties }; LongRunningOperationResponse response = RecoveryServicesClient.StartAzureSiteRecoveryTestFailover( this.RecoveryPlan.Name, recoveryPlanTestFailoverInput); JobResponse jobResponse = RecoveryServicesClient .GetAzureSiteRecoveryJobDetails(PSRecoveryServicesClient.GetJobIdFromReponseLocation(response.Location)); WriteObject(new ASRJob(jobResponse.Job)); }
/// <summary> /// Starts RP Test failover. /// </summary> private void StartRpTestFailover() { // Refresh RP Object var rp = this.RecoveryServicesClient.GetAzureSiteRecoveryRecoveryPlan( this.RecoveryPlan.Name); var recoveryPlanTestFailoverInputProperties = new RecoveryPlanTestFailoverInputProperties { FailoverDirection = this.Direction == PossibleOperationsDirections.PrimaryToRecovery.ToString() ? PossibleOperationsDirections.PrimaryToRecovery : PossibleOperationsDirections.RecoveryToPrimary, NetworkId = this.networkId, NetworkType = this.networkType, ProviderSpecificDetails = new List <RecoveryPlanProviderSpecificFailoverInput>(), SkipTestFailoverCleanup = bool.TrueString }; foreach (var replicationProvider in rp.Properties.ReplicationProviders) { if (0 == string.Compare( replicationProvider, Constants.HyperVReplicaAzure, StringComparison.OrdinalIgnoreCase)) { if (this.Direction == Constants.PrimaryToRecovery) { var recoveryPlanHyperVReplicaAzureFailoverInput = new RecoveryPlanHyperVReplicaAzureFailoverInput { PrimaryKekCertificatePfx = this.primaryKekCertpfx, SecondaryKekCertificatePfx = this.secondaryKekCertpfx, VaultLocation = "dummy" }; recoveryPlanTestFailoverInputProperties.ProviderSpecificDetails.Add( recoveryPlanHyperVReplicaAzureFailoverInput); } else { throw new ArgumentException( Resources .UnsupportedDirectionForTFO); // Throw Unsupported Direction Exception } } else if (string.Compare( replicationProvider, Constants.InMageAzureV2, StringComparison.OrdinalIgnoreCase) == 0) { // Check if the Direction is PrimaryToRecovery. if (this.Direction == Constants.PrimaryToRecovery) { // Set the Recovery Point Types for InMage. var recoveryPointType = this.RecoveryTag == Constants.RecoveryTagLatestAvailableApplicationConsistent ? InMageV2RpRecoveryPointType.LatestApplicationConsistent : this.RecoveryTag == Constants.RecoveryTagLatest ? InMageV2RpRecoveryPointType.Latest : InMageV2RpRecoveryPointType.LatestProcessed; // Create the InMageAzureV2 Provider specific input. var recoveryPlanInMageAzureV2FailoverInput = new RecoveryPlanInMageAzureV2FailoverInput { RecoveryPointType = recoveryPointType, VaultLocation = "dummy" }; // Add the InMageAzureV2 Provider specific input in the Test Failover Input. recoveryPlanTestFailoverInputProperties.ProviderSpecificDetails.Add( recoveryPlanInMageAzureV2FailoverInput); } } else if (string.Compare( replicationProvider, Constants.InMage, StringComparison.OrdinalIgnoreCase) == 0) { throw new InvalidOperationException( string.Format( Resources.UnsupportedReplicationProviderForTestFailover, this.ReplicationProtectedItem.ReplicationProvider)); } else if (string.Compare( replicationProvider, Constants.A2A, StringComparison.OrdinalIgnoreCase) == 0) { // Set the Recovery Point Types for InMage. var recoveryPointType = this.RecoveryTag == Constants.RecoveryTagLatestAvailableApplicationConsistent ? A2ARpRecoveryPointType.LatestApplicationConsistent : this.RecoveryTag == Constants.RecoveryTagLatest ? A2ARpRecoveryPointType.Latest : this.RecoveryTag == Constants.RecoveryTagLatestAvailableCrashConsistent ? A2ARpRecoveryPointType.LatestCrashConsistent : A2ARpRecoveryPointType.LatestProcessed; // Create the InMageAzureV2 Provider specific input. var recoveryPlanInMageAzureV2FailoverInput = new RecoveryPlanA2AFailoverInput { RecoveryPointType = recoveryPointType, CloudServiceCreationOption = this.CloudServiceCreationOption }; // Add the InMageAzureV2 Provider specific input in the Test Failover Input. recoveryPlanTestFailoverInputProperties.ProviderSpecificDetails.Add( recoveryPlanInMageAzureV2FailoverInput); } } var recoveryPlanTestFailoverInput = new RecoveryPlanTestFailoverInput { Properties = recoveryPlanTestFailoverInputProperties }; var response = this.RecoveryServicesClient.StartAzureSiteRecoveryTestFailover( this.RecoveryPlan.Name, recoveryPlanTestFailoverInput); var jobResponse = this.RecoveryServicesClient.GetAzureSiteRecoveryJobDetails( PSRecoveryServicesClient.GetJobIdFromReponseLocation(response.Location)); this.WriteObject(new ASRJob(jobResponse)); }
/// <summary> /// Starts RP Test failover. /// </summary> private void StartRpTestFailover() { // Refresh RP Object var rp = this.RecoveryServicesClient.GetAzureSiteRecoveryRecoveryPlan( this.RecoveryPlan.Name); var recoveryPlanTestFailoverInputProperties = new RecoveryPlanTestFailoverInputProperties { FailoverDirection = this.Direction == PossibleOperationsDirections.PrimaryToRecovery.ToString() ? PossibleOperationsDirections.PrimaryToRecovery : PossibleOperationsDirections.RecoveryToPrimary, NetworkId = this.networkId, NetworkType = this.networkType, ProviderSpecificDetails = new List <RecoveryPlanProviderSpecificFailoverInput>() }; foreach (var replicationProvider in rp.Properties.ReplicationProviders) { if (0 == string.Compare( replicationProvider, Constants.HyperVReplicaAzure, StringComparison.OrdinalIgnoreCase)) { if (this.Direction == Constants.PrimaryToRecovery) { var recoveryPlanHyperVReplicaAzureFailoverInput = new RecoveryPlanHyperVReplicaAzureFailoverInput { PrimaryKekCertificatePfx = this.primaryKekCertpfx, SecondaryKekCertificatePfx = this.secondaryKekCertpfx, VaultLocation = "dummy" }; recoveryPlanTestFailoverInputProperties.ProviderSpecificDetails.Add( recoveryPlanHyperVReplicaAzureFailoverInput); } else { throw new ArgumentException( Resources .UnsupportedDirectionForTFO); // Throw Unsupported Direction Exception } } } var recoveryPlanTestFailoverInput = new RecoveryPlanTestFailoverInput { Properties = recoveryPlanTestFailoverInputProperties }; var response = this.RecoveryServicesClient.StartAzureSiteRecoveryTestFailover( this.RecoveryPlan.Name, recoveryPlanTestFailoverInput); var jobResponse = this.RecoveryServicesClient.GetAzureSiteRecoveryJobDetails( PSRecoveryServicesClient.GetJobIdFromReponseLocation(response.Location)); this.WriteObject(new ASRJob(jobResponse)); }