Skip to content

Commit 314ee59

Browse files
committed
made changes required for E2A replication provider
1 parent 50b95fc commit 314ee59

27 files changed

+742
-235
lines changed

src/ResourceManager/SiteRecovery/Commands.SiteRecovery/Commands.SiteRecovery.csproj

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -48,8 +48,8 @@
4848
<SpecificVersion>False</SpecificVersion>
4949
<HintPath>..\..\..\packages\Microsoft.Azure.Common.2.1.0\lib\net45\Microsoft.Azure.Common.NetFramework.dll</HintPath>
5050
</Reference>
51-
<Reference Include="Microsoft.Azure.Management.SiteRecovery, Version=0.9.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
52-
<HintPath>..\..\..\packages\Microsoft.Azure.Management.SiteRecovery.0.1.0-preview\lib\net40\Microsoft.Azure.Management.SiteRecovery.dll</HintPath>
51+
<Reference Include="Microsoft.Azure.Management.SiteRecovery, Version=0.9.0.0, Culture=neutral, processorArchitecture=MSIL">
52+
<HintPath>..\..\..\packages\Microsoft.Azure.Management.SiteRecovery.0.1.7-preview\lib\net40\Microsoft.Azure.Management.SiteRecovery.dll</HintPath>
5353
<Private>True</Private>
5454
</Reference>
5555
<Reference Include="Microsoft.Threading.Tasks, Version=1.0.12.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
@@ -97,15 +97,15 @@
9797
<Reference Include="System.Xml" />
9898
</ItemGroup>
9999
<ItemGroup>
100-
<Compile Include="Common\PSRecoveryServicesClient.cs" />
101-
<Compile Include="Common\PSRecoveryServicesClientHelper.cs" />
102-
<Compile Include="Common\PSRecoveryServicesJobsClient.cs" />
103-
<Compile Include="Common\PSRecoveryServicesProtectionEntityClient.cs" />
104-
<Compile Include="Common\PSRecoveryServicesProtectionContainerClient.cs" />
105-
<Compile Include="Common\PSRecoveryServicesProtectionProfileClient.cs" />
106-
<Compile Include="Common\PSRecoveryServicesServerClient.cs" />
107-
<Compile Include="Common\PSRecoveryServicesVaultClient.cs" />
108-
<Compile Include="Common\PSRecoveryServicesVaultExtendedInfoClient.cs" />
100+
<Compile Include="Common\PSSiteRecoveryClient.cs" />
101+
<Compile Include="Common\PSSiteRecoveryClientHelper.cs" />
102+
<Compile Include="Common\PSSiteRecoveryJobsClient.cs" />
103+
<Compile Include="Common\PSSiteRecoveryProtectionEntityClient.cs" />
104+
<Compile Include="Common\PSSiteRecoveryProtectionContainerClient.cs" />
105+
<Compile Include="Common\PSSiteRecoveryProtectionProfileClient.cs" />
106+
<Compile Include="Common\PSSiteRecoveryServerClient.cs" />
107+
<Compile Include="Common\PSSiteRecoveryVaultClient.cs" />
108+
<Compile Include="Common\PSSiteRecoveryVaultExtendedInfoClient.cs" />
109109
<Compile Include="Common\SiteRecoveryCmdletBase.cs" />
110110
<Compile Include="Job\GetAzureSiteRecoveryJob.cs" />
111111
<Compile Include="Job\ResumeAzureSiteRecoveryJob.cs" />

src/ResourceManager/SiteRecovery/Commands.SiteRecovery/Common/SiteRecoveryCmdletBase.cs

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -188,5 +188,28 @@ protected void ValidateUsageById(string replicationProvider, string paramName)
188188
paramName));
189189
}
190190
}
191+
192+
/// <summary>
193+
/// Gets the current vault location.
194+
/// </summary>
195+
/// <returns>The current vault location.</returns>
196+
protected string GetCurrentValutLocation()
197+
{
198+
string location = string.Empty;
199+
200+
VaultListResponse vaultListResponse =
201+
RecoveryServicesClient.GetVaultsInResouceGroup(PSRecoveryServicesClient.asrVaultCreds.ResourceGroupName);
202+
203+
foreach (Vault vault in vaultListResponse.Vaults)
204+
{
205+
if (0 == string.Compare(PSRecoveryServicesClient.asrVaultCreds.ResourceName, vault.Name, true))
206+
{
207+
location = vault.Location;
208+
break;
209+
}
210+
}
211+
212+
return location;
213+
}
191214
}
192215
}

src/ResourceManager/SiteRecovery/Commands.SiteRecovery/Models/PSObjects.cs

Lines changed: 164 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -550,26 +550,55 @@ public ASRProtectionProfile(ProtectionProfile profile)
550550

551551
if (profile.CustomData.ReplicationProvider == Constants.HyperVReplica)
552552
{
553-
JavaScriptSerializer serializer = new JavaScriptSerializer();
554-
HyperVReplicaProtectionProfileDetails details = (HyperVReplicaProtectionProfileDetails)profile.CustomData.ReplicationProviderSettings;
553+
HyperVReplicaProtectionProfileDetails details =
554+
(HyperVReplicaProtectionProfileDetails)profile.CustomData.ReplicationProviderSettings;
555555

556-
this.ReplicationProviderSettings = new ASRHyperVReplicaProtectionProfileDetails();
557-
this.ReplicationProviderSettings.ReplicaDeletionOption =
556+
ASRHyperVReplicaProtectionProfileDetails replicationProviderSettings =
557+
new ASRHyperVReplicaProtectionProfileDetails();
558+
559+
replicationProviderSettings.ReplicaDeletionOption =
558560
details.ReplicaDeletionOption;
559-
this.ReplicationProviderSettings.ApplicationConsistentSnapshotFrequencyInHours =
561+
replicationProviderSettings.ApplicationConsistentSnapshotFrequencyInHours =
560562
details.ApplicationConsistentSnapshotFrequencyInHours;
561-
562-
this.ReplicationProviderSettings.Compression=
563+
replicationProviderSettings.Compression =
563564
details.Compression;
564-
this.ReplicationProviderSettings.ReplicationFrequencyInSeconds =
565+
replicationProviderSettings.ReplicationFrequencyInSeconds =
565566
details.ReplicationFrequencyInSeconds;
566-
this.ReplicationProviderSettings.AllowedAuthenticationType =
567-
(details.AllowedAuthenticationType == 1) ? Constants.AuthenticationTypeKerberos : Constants.AuthenticationTypeCertificate;
568-
this.ReplicationProviderSettings.RecoveryPoints = details.RecoveryPoints;
569-
this.ReplicationProviderSettings.InitialReplicationMethod =
570-
(string.Compare(details.InitialReplicationMethod, "OverNetwork", StringComparison.OrdinalIgnoreCase) == 0) ? Constants.OnlineReplicationMethod : Constants.OfflineReplicationMethod;
571-
this.ReplicationProviderSettings.ReplicationPort = details.ReplicationPort;
572-
this.ReplicationProviderSettings.OnlineReplicationStartTime = details.OnlineReplicationStartTime;
567+
replicationProviderSettings.AllowedAuthenticationType =
568+
(details.AllowedAuthenticationType == 1) ?
569+
Constants.AuthenticationTypeKerberos :
570+
Constants.AuthenticationTypeCertificate;
571+
replicationProviderSettings.RecoveryPoints = details.RecoveryPoints;
572+
replicationProviderSettings.InitialReplicationMethod =
573+
(string.Compare(details.InitialReplicationMethod, "OverNetwork", StringComparison.OrdinalIgnoreCase) == 0) ?
574+
Constants.OnlineReplicationMethod :
575+
Constants.OfflineReplicationMethod;
576+
replicationProviderSettings.ReplicationPort = details.ReplicationPort;
577+
replicationProviderSettings.OnlineReplicationStartTime = details.OnlineReplicationStartTime;
578+
579+
this.ReplicationProviderSettings = replicationProviderSettings;
580+
}
581+
else if (profile.CustomData.ReplicationProvider == Constants.HyperVReplicaAzure)
582+
{
583+
HyperVReplicaAzureProtectionProfileDetails details =
584+
(HyperVReplicaAzureProtectionProfileDetails)profile.CustomData.ReplicationProviderSettings;
585+
586+
ASRHyperVReplicaAzureProtectionProfileDetails replicationProviderSettings =
587+
new ASRHyperVReplicaAzureProtectionProfileDetails();
588+
589+
replicationProviderSettings.ApplicationConsistentSnapshotFrequencyInHours =
590+
details.ApplicationConsistentSnapshotFrequencyInHours;
591+
replicationProviderSettings.ReplicationFrequencyInSeconds = details.ReplicationInterval;
592+
replicationProviderSettings.RecoveryPoints = details.RecoveryPointHistoryDuration;
593+
replicationProviderSettings.OnlineReplicationStartTime = details.OnlineReplicationStartTime;
594+
replicationProviderSettings.Encryption = details.Encryption;
595+
replicationProviderSettings.ActiveStorageAccount = new CustomerStorageAccount();
596+
replicationProviderSettings.ActiveStorageAccount.StorageAccountName =
597+
details.ActiveStorageAccount.StorageAccountName;
598+
replicationProviderSettings.ActiveStorageAccount.SubscriptionId =
599+
details.ActiveStorageAccount.SubscriptionId;
600+
601+
this.ReplicationProviderSettings = replicationProviderSettings;
573602
}
574603
}
575604

@@ -603,14 +632,21 @@ public ASRProtectionProfile(ProtectionProfile profile)
603632
/// Gets or sets HyperVReplicaProviderSettings
604633
/// </summary>
605634
// public HyperVReplicaProviderSettings ReplicationProviderSettings { get; set; }
606-
public ASRHyperVReplicaProtectionProfileDetails ReplicationProviderSettings { get; set; }
635+
public ASRProtectionProfileProviderSettingsDetails ReplicationProviderSettings { get; set; }
607636

608637
#endregion Properties
609638
}
610639

640+
/// <summary>
641+
/// Protection profile provider settings
642+
/// </summary>
643+
public class ASRProtectionProfileProviderSettingsDetails
644+
{
645+
}
646+
611647
// Summary:
612648
// HyperV Replica Protection Profile Details.
613-
public class ASRHyperVReplicaProtectionProfileDetails
649+
public class ASRHyperVReplicaProtectionProfileDetails : ASRProtectionProfileProviderSettingsDetails
614650
{
615651

616652
// Summary:
@@ -658,6 +694,52 @@ public class ASRHyperVReplicaProtectionProfileDetails
658694
public ushort ReplicationPort { get; set; }
659695
}
660696

697+
/// <summary>
698+
/// ASR HyperV Replica Azure enable protection input.
699+
/// </summary>
700+
public class ASRHyperVReplicaAzureProtectionProfileDetails : ASRProtectionProfileProviderSettingsDetails
701+
{
702+
// Summary:
703+
// Optional.
704+
public CustomerStorageAccount ActiveStorageAccount { get; set; }
705+
//
706+
// Summary:
707+
// Optional.
708+
public int ApplicationConsistentSnapshotFrequencyInHours { get; set; }
709+
//
710+
// Summary:
711+
// Optional.
712+
public string Encryption { get; set; }
713+
//
714+
// Summary:
715+
// Optional.
716+
public TimeSpan? OnlineReplicationStartTime { get; set; }
717+
//
718+
// Summary:
719+
// Optional.
720+
public int RecoveryPoints { get; set; }
721+
//
722+
// Summary:
723+
// Optional.
724+
public int ReplicationFrequencyInSeconds { get; set; }
725+
}
726+
727+
/// <summary>
728+
/// ASR Customer Storage Account.
729+
/// </summary>
730+
public class ASRCustomerStorageAccount
731+
{
732+
/// <summary>
733+
/// Name of the storage account.
734+
/// </summary>
735+
public string StorageAccountName { get; set; }
736+
737+
/// <summary>
738+
/// Subscription ID to which the Storage Account is associated.
739+
/// </summary>
740+
public string SubscriptionId { get; set; }
741+
}
742+
661743
/// <summary>
662744
/// Azure Site Recovery Protection Entity.
663745
/// </summary>
@@ -700,19 +782,41 @@ public ASRProtectionEntity(ProtectionEntity pe)
700782
this.ReplicationHealth = pe.Properties.ReplicationHealth;
701783
this.TestFailoverStateDescription = pe.Properties.TestFailoverStateDescription;
702784

703-
/*
704-
if (!string.IsNullOrWhiteSpace(pe.ReplicationProviderSettings))
785+
if (pe.Properties.ReplicationProviderSettings != null)
705786
{
706-
AzureVmDiskDetails diskDetails;
707-
DataContractUtils.Deserialize<AzureVmDiskDetails>(
708-
pe.ReplicationProviderSettings, out diskDetails);
709-
710-
this.Disks = diskDetails.Disks;
711-
this.OSDiskId = diskDetails.VHDId;
712-
this.OSDiskName = diskDetails.OsDisk;
713-
this.OS = diskDetails.OsType;
787+
if (0 == string.Compare(
788+
pe.Properties.ReplicationProvider,
789+
Constants.HyperVReplicaAzure,
790+
StringComparison.OrdinalIgnoreCase))
791+
{
792+
if (pe.Properties.ReplicationProviderSettings is AzureProtectionEntityProviderSettings)
793+
{
794+
AzureProtectionEntityProviderSettings providerSettings =
795+
(AzureProtectionEntityProviderSettings)pe.Properties.ReplicationProviderSettings;
796+
797+
AzureVmDiskDetails diskDetails = providerSettings.VMDiskDetails;
798+
this.UpdateDiskDetails(diskDetails);
799+
800+
// also take the VM properties
801+
}
802+
else if (pe.Properties.ReplicationProviderSettings is OnPremProtectionEntityProviderSettings)
803+
{
804+
OnPremProtectionEntityProviderSettings providerSettings =
805+
(OnPremProtectionEntityProviderSettings)pe.Properties.ReplicationProviderSettings;
806+
807+
AzureVmDiskDetails diskDetails = providerSettings.VMDiskDetails;
808+
this.UpdateDiskDetails(diskDetails);
809+
}
810+
}
811+
else
812+
{
813+
OnPremProtectionEntityProviderSettings providerSettings =
814+
(OnPremProtectionEntityProviderSettings)pe.Properties.ReplicationProviderSettings;
815+
816+
AzureVmDiskDetails diskDetails = providerSettings.VMDiskDetails;
817+
this.UpdateDiskDetails(diskDetails);
818+
}
714819
}
715-
*/
716820

717821
if (pe.Properties.ProtectionProfile != null &&
718822
!string.IsNullOrWhiteSpace(pe.Properties.ProtectionProfile.Id))
@@ -721,6 +825,22 @@ public ASRProtectionEntity(ProtectionEntity pe)
721825
}
722826
}
723827

828+
private void UpdateDiskDetails(AzureVmDiskDetails diskDetails)
829+
{
830+
this.Disks = new List<VirtualHardDisk>();
831+
foreach (var disk in diskDetails.Disks)
832+
{
833+
VirtualHardDisk hd = new VirtualHardDisk();
834+
hd.Id = disk.Id;
835+
hd.Name = disk.Name;
836+
this.Disks.Add(hd);
837+
}
838+
839+
this.OSDiskId = diskDetails.VHDId;
840+
this.OSDiskName = diskDetails.OsDisk;
841+
this.OS = diskDetails.OsType;
842+
}
843+
724844
/// <summary>
725845
/// Initializes a new instance of the <see cref="ASRProtectionEntity" /> class with
726846
/// required parameters.
@@ -863,25 +983,25 @@ public ASRProtectionEntity(
863983
/// </summary>
864984
public ASRProtectionProfile ProtectionProfile { get; set; }
865985

866-
///// <summary>
867-
///// Gets or sets OSDiskVHDId.
868-
///// </summary>
869-
//public string OSDiskId { get; set; }
986+
/// <summary>
987+
/// Gets or sets OSDiskVHDId.
988+
/// </summary>
989+
public string OSDiskId { get; set; }
870990

871-
///// <summary>
872-
///// Gets or sets OS DiskName.
873-
///// </summary>
874-
//public string OSDiskName { get; set; }
991+
/// <summary>
992+
/// Gets or sets OS DiskName.
993+
/// </summary>
994+
public string OSDiskName { get; set; }
875995

876-
///// <summary>
877-
///// Gets or sets OS.
878-
///// </summary>
879-
//public string OS { get; set; }
996+
/// <summary>
997+
/// Gets or sets OS.
998+
/// </summary>
999+
public string OS { get; set; }
8801000

881-
///// <summary>
882-
///// Gets or sets OS.
883-
///// </summary>
884-
//public List<VirtualHardDisk> Disks { get; set; }
1001+
/// <summary>
1002+
/// Gets or sets OS.
1003+
/// </summary>
1004+
public List<VirtualHardDisk> Disks { get; set; }
8851005

8861006
/// <summary>
8871007
/// Gets or sets Replication provider.

src/ResourceManager/SiteRecovery/Commands.SiteRecovery/Properties/Resources.Designer.cs

Lines changed: 9 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/ResourceManager/SiteRecovery/Commands.SiteRecovery/Properties/Resources.resx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -277,4 +277,7 @@ Please provide a storage account with the same location as that of the vault.</v
277277
<data name="VaultCannotBeDeleted" xml:space="preserve">
278278
<value>Vault {0} cannot be deleted as it contains registered servers. Unregister them and then retry the operation.</value>
279279
</data>
280+
<data name="ProtectionProfileNotFound" xml:space="preserve">
281+
<value>Protection Profile {0} is not associated with the Vault {1}</value>
282+
</data>
280283
</root>

0 commit comments

Comments
 (0)