private void StartRpPlannedFailover()
{
// Refresh RP Object
var rp = RecoveryServicesClient.GetAzureSiteRecoveryRecoveryPlan(this.RecoveryPlan.Name);
var recoveryPlanPlannedFailoverInputProperties = new RecoveryPlanPlannedFailoverInputProperties()
{
FailoverDirection = this.Direction,
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()
};
recoveryPlanPlannedFailoverInputProperties.ProviderSpecificDetails.Add(recoveryPlanHyperVReplicaAzureFailoverInput);
}
else
{
var recoveryPlanHyperVReplicaAzureFailbackInput = new RecoveryPlanHyperVReplicaAzureFailbackInput()
{
InstanceType = replicationProvider + "Failback",
DataSyncOption = this.Optimize == Constants.ForDownTime ? Constants.ForDownTime : Constants.ForSynchronization,
RecoveryVmCreationOption = String.Compare(this.CreateVmIfNotFound, Constants.Yes, StringComparison.OrdinalIgnoreCase) == 0 ? Constants.CreateVmIfNotFound : Constants.NoAction
};
recoveryPlanPlannedFailoverInputProperties.ProviderSpecificDetails.Add(recoveryPlanHyperVReplicaAzureFailbackInput);
}
}
}
var recoveryPlanPlannedFailoverInput = new RecoveryPlanPlannedFailoverInput()
{
Properties = recoveryPlanPlannedFailoverInputProperties
};
LongRunningOperationResponse response = RecoveryServicesClient.StartAzureSiteRecoveryPlannedFailover(
this.RecoveryPlan.Name,
recoveryPlanPlannedFailoverInput);
JobResponse jobResponse =
RecoveryServicesClient
.GetAzureSiteRecoveryJobDetails(PSRecoveryServicesClient.GetJobIdFromReponseLocation(response.Location));
WriteObject(new ASRJob(jobResponse.Job));
}
}