private void SetPEReprotect()
{
ReverseReplicationInputProperties plannedFailoverInputProperties = new ReverseReplicationInputProperties()
{
FailoverDirection = this.Direction,
ProviderSpecificDetails = new ReverseReplicationProviderSpecificInput()
};
ReverseReplicationInput input = new ReverseReplicationInput()
{
Properties = plannedFailoverInputProperties
};
// fetch the latest PE object
ProtectableItemResponse protectableItemResponse =
RecoveryServicesClient.GetAzureSiteRecoveryProtectableItem(this.fabricName,
this.ProtectionEntity.ProtectionContainerId, this.ProtectionEntity.Name);
ReplicationProtectedItemResponse replicationProtectedItemResponse =
RecoveryServicesClient.GetAzureSiteRecoveryReplicationProtectedItem(this.fabricName,
this.ProtectionEntity.ProtectionContainerId, Utilities.GetValueFromArmId(protectableItemResponse.ProtectableItem.Properties.ReplicationProtectedItemId, ARMResourceTypeConstants.ReplicationProtectedItems));
PolicyResponse policyResponse = RecoveryServicesClient.GetAzureSiteRecoveryPolicy(Utilities.GetValueFromArmId(replicationProtectedItemResponse.ReplicationProtectedItem.Properties.PolicyID, ARMResourceTypeConstants.ReplicationPolicies));
this.ProtectionEntity = new ASRProtectionEntity(protectableItemResponse.ProtectableItem, replicationProtectedItemResponse.ReplicationProtectedItem);
if (0 == string.Compare(
this.ProtectionEntity.ReplicationProvider,
Constants.HyperVReplicaAzure,
StringComparison.OrdinalIgnoreCase))
{
if (this.Direction == Constants.PrimaryToRecovery)
{
HyperVReplicaAzureReprotectInput reprotectInput = new HyperVReplicaAzureReprotectInput()
{
HvHostVmId = this.ProtectionEntity.FabricObjectId,
VmName = this.ProtectionEntity.FriendlyName,
OSType = ((string.Compare(this.ProtectionEntity.OS, "Windows") == 0) || (string.Compare(this.ProtectionEntity.OS, "Linux") == 0)) ? this.ProtectionEntity.OS : "Windows",
VHDId = this.ProtectionEntity.OSDiskId
};
HyperVReplicaAzureReplicationDetails providerSpecificDetails =
(HyperVReplicaAzureReplicationDetails)replicationProtectedItemResponse.ReplicationProtectedItem.Properties.ProviderSpecificDetails;
reprotectInput.StorageAccountId = providerSpecificDetails.RecoveryAzureStorageAccount;
input.Properties.ProviderSpecificDetails = reprotectInput;
}
}
LongRunningOperationResponse response =
RecoveryServicesClient.StartAzureSiteRecoveryReprotection(
this.fabricName,
this.protectionContainerName,
Utilities.GetValueFromArmId(replicationProtectedItemResponse.ReplicationProtectedItem.Id, ARMResourceTypeConstants.ReplicationProtectedItems),
input);
JobResponse jobResponse =
RecoveryServicesClient
.GetAzureSiteRecoveryJobDetails(PSRecoveryServicesClient.GetJobIdFromReponseLocation(response.Location));
WriteObject(new ASRJob(jobResponse.Job));
}