Skip to content

Commit e4b07ac

Browse files
committed
Changing the ProtectionProfile model.
Modelling settings unique to a provider in sub-objects.
1 parent c5cee45 commit e4b07ac

File tree

2 files changed

+167
-44
lines changed

2 files changed

+167
-44
lines changed

src/ServiceManagement/RecoveryServices/Commands.RecoveryServices/Service/CreateAzureSiteRecoveryProtectionProfileObject.cs

Lines changed: 26 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -222,16 +222,20 @@ private void EnterpriseToAzureProtectionProfileObject()
222222
ASRProtectionProfile protectionProfile = new ASRProtectionProfile()
223223
{
224224
ReplicationProvider = this.ReplicationProvider,
225-
ReplicationMethod = this.ReplicationMethod,
226-
RecoveryAzureSubscription = this.RecoveryAzureSubscription,
227-
RecoveryAzureStorageAccountName = this.RecoveryAzureStorageAccount,
228-
ReplicationFrequencyInSeconds = this.ReplicationFrequencyInSeconds,
229-
RecoveryPoints = this.RecoveryPoints,
230-
ApplicationConsistentSnapshotFrequencyInHours = this.ApplicationConsistentSnapshotFrequencyInHours,
231-
CompressionEnabled = this.CompressionEnabled,
232-
ReplicationPort = this.ReplicationPort,
233-
ReplicationStartTime = timeSpan,
234-
AllowReplicaDeletion = this.AllowReplicaDeletion
225+
HyperVReplicaAzureProviderSettingsObject = new HyperVReplicaAzureProviderSettings()
226+
{
227+
ReplicationMethod = this.ReplicationMethod,
228+
RecoveryAzureSubscription = this.RecoveryAzureSubscription,
229+
RecoveryAzureStorageAccountName = this.RecoveryAzureStorageAccount,
230+
ReplicationFrequencyInSeconds = this.ReplicationFrequencyInSeconds,
231+
RecoveryPoints = this.RecoveryPoints,
232+
ApplicationConsistentSnapshotFrequencyInHours = this.ApplicationConsistentSnapshotFrequencyInHours,
233+
CompressionEnabled = this.CompressionEnabled,
234+
ReplicationPort = this.ReplicationPort,
235+
ReplicationStartTime = timeSpan,
236+
AllowReplicaDeletion = this.AllowReplicaDeletion
237+
},
238+
HyperVReplicaProviderSettingsObject = null
235239
};
236240

237241
this.WriteObject(protectionProfile);
@@ -248,16 +252,18 @@ private void EnterpriseToEnterpriseProtectionProfileObject()
248252
ASRProtectionProfile protectionProfile = new ASRProtectionProfile()
249253
{
250254
ReplicationProvider = this.ReplicationProvider,
251-
ReplicationMethod = this.ReplicationMethod,
252-
RecoveryAzureSubscription = null,
253-
RecoveryAzureStorageAccountName = null,
254-
ReplicationFrequencyInSeconds = this.ReplicationFrequencyInSeconds,
255-
RecoveryPoints = this.RecoveryPoints,
256-
ApplicationConsistentSnapshotFrequencyInHours = this.ApplicationConsistentSnapshotFrequencyInHours,
257-
CompressionEnabled = this.CompressionEnabled,
258-
ReplicationPort = this.ReplicationPort,
259-
ReplicationStartTime = timeSpan,
260-
AllowReplicaDeletion = this.AllowReplicaDeletion
255+
HyperVReplicaAzureProviderSettingsObject = null,
256+
HyperVReplicaProviderSettingsObject = new HyperVReplicaProviderSettings()
257+
{
258+
ReplicationMethod = this.ReplicationMethod,
259+
ReplicationFrequencyInSeconds = this.ReplicationFrequencyInSeconds,
260+
RecoveryPoints = this.RecoveryPoints,
261+
ApplicationConsistentSnapshotFrequencyInHours = this.ApplicationConsistentSnapshotFrequencyInHours,
262+
CompressionEnabled = this.CompressionEnabled,
263+
ReplicationPort = this.ReplicationPort,
264+
ReplicationStartTime = timeSpan,
265+
AllowReplicaDeletion = this.AllowReplicaDeletion
266+
}
261267
};
262268

263269
this.WriteObject(protectionProfile);

src/ServiceManagement/RecoveryServices/Commands.RecoveryServices/lib/PSObjects.cs

Lines changed: 141 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -298,7 +298,14 @@ public ASRProtectionContainer(ProtectionContainer pc)
298298
{
299299
var asrProtectionProfile = new ASRProtectionProfile();
300300

301-
asrProtectionProfile.AssociationDetail = new List<ASRProtectionProfileAssociationDetails>();
301+
if (profile.ReplicationProvider == Constants.HyperVReplicaAzure)
302+
{
303+
asrProtectionProfile.HyperVReplicaAzureProviderSettingsObject.AssociationDetail = new List<ASRProtectionProfileAssociationDetails>();
304+
}
305+
else if (profile.ReplicationProvider == Constants.HyperVReplica)
306+
{
307+
asrProtectionProfile.HyperVReplicaProviderSettingsObject.AssociationDetail = new List<ASRProtectionProfileAssociationDetails>();
308+
}
302309
foreach (var profileAssosicationDetail in profile.AssociationDetail)
303310
{
304311
var asrProfileDetail = new ASRProtectionProfileAssociationDetails();
@@ -307,60 +314,68 @@ public ASRProtectionContainer(ProtectionContainer pc)
307314
profileAssosicationDetail.PrimaryProtectionContainerId;
308315
asrProfileDetail.RecoveryProtectionContainerId =
309316
profileAssosicationDetail.RecoveryProtectionContainerId;
310-
asrProtectionProfile.AssociationDetail.Add(asrProfileDetail);
317+
318+
if (profile.ReplicationProvider == Constants.HyperVReplicaAzure)
319+
{
320+
asrProtectionProfile.HyperVReplicaAzureProviderSettingsObject.AssociationDetail.Add(asrProfileDetail);
321+
}
322+
else if (profile.ReplicationProvider == Constants.HyperVReplica)
323+
{
324+
asrProtectionProfile.HyperVReplicaProviderSettingsObject.AssociationDetail.Add(asrProfileDetail);
325+
}
311326
}
312327

313328
if (profile.ReplicationProvider == Constants.HyperVReplicaAzure)
314329
{
315330
var details = DataContractUtils<HyperVReplicaAzureProtectionProfileDetails>.Deserialize(
316331
profile.ReplicationProviderSetting);
317332

318-
asrProtectionProfile.AllowReplicaDeletion = false;
319-
asrProtectionProfile.ReplicationPort = 0;
333+
asrProtectionProfile.HyperVReplicaAzureProviderSettingsObject.AllowReplicaDeletion = false;
334+
asrProtectionProfile.HyperVReplicaAzureProviderSettingsObject.ReplicationPort = 0;
320335

321-
asrProtectionProfile.ApplicationConsistentSnapshotFrequencyInHours =
336+
asrProtectionProfile.HyperVReplicaAzureProviderSettingsObject.ApplicationConsistentSnapshotFrequencyInHours =
322337
details.AppConsistencyFreq;
323-
asrProtectionProfile.RecoveryAzureStorageAccountName =
338+
asrProtectionProfile.HyperVReplicaAzureProviderSettingsObject.RecoveryAzureStorageAccountName =
324339
details.ActiveStorageAccount.StorageAccountName;
325-
asrProtectionProfile.RecoveryAzureSubscription =
340+
asrProtectionProfile.HyperVReplicaAzureProviderSettingsObject.RecoveryAzureSubscription =
326341
details.ActiveStorageAccount.SubscriptionId;
327-
asrProtectionProfile.ReplicationFrequencyInSeconds = details.ReplicationInterval;
328-
asrProtectionProfile.ReplicationMethod = details.OnlineIrStartTime.HasValue ?
342+
asrProtectionProfile.HyperVReplicaAzureProviderSettingsObject.ReplicationFrequencyInSeconds = details.ReplicationInterval;
343+
asrProtectionProfile.HyperVReplicaAzureProviderSettingsObject.ReplicationMethod = details.OnlineIrStartTime.HasValue ?
329344
Constants.OnlineReplicationMethod :
330345
Constants.OfflineReplicationMethod;
331-
asrProtectionProfile.ReplicationStartTime = details.OnlineIrStartTime;
332-
asrProtectionProfile.CompressionEnabled = details.IsEncryptionEnabled;
333-
asrProtectionProfile.RecoveryPoints
346+
asrProtectionProfile.HyperVReplicaAzureProviderSettingsObject.ReplicationStartTime = details.OnlineIrStartTime;
347+
asrProtectionProfile.HyperVReplicaAzureProviderSettingsObject.CompressionEnabled = details.IsEncryptionEnabled;
348+
asrProtectionProfile.HyperVReplicaAzureProviderSettingsObject.RecoveryPoints
334349
= details.RecoveryPointHistoryDuration;
350+
351+
asrProtectionProfile.HyperVReplicaAzureProviderSettingsObject.CanDissociate = profile.CanDissociate;
352+
335353
}
336354
else if (profile.ReplicationProvider == Constants.HyperVReplica)
337355
{
338356
var details = DataContractUtils<HyperVReplicaProtectionProfileDetails>.Deserialize(
339357
profile.ReplicationProviderSetting);
340358

341-
asrProtectionProfile.AllowReplicaDeletion =
359+
asrProtectionProfile.HyperVReplicaProviderSettingsObject.AllowReplicaDeletion =
342360
details.VmAutoDeleteOption == "OnRecoveryCloud";
343-
asrProtectionProfile.ApplicationConsistentSnapshotFrequencyInHours =
361+
asrProtectionProfile.HyperVReplicaProviderSettingsObject.ApplicationConsistentSnapshotFrequencyInHours =
344362
details.AppConsistencyFreq;
345363

346-
asrProtectionProfile.CompressionEnabled = details.IsCompressionEnabled;
364+
asrProtectionProfile.HyperVReplicaProviderSettingsObject.CompressionEnabled = details.IsCompressionEnabled;
365+
asrProtectionProfile.HyperVReplicaProviderSettingsObject.ReplicationFrequencyInSeconds = 0;
347366

348-
asrProtectionProfile.RecoveryAzureStorageAccountName = null;
349-
asrProtectionProfile.RecoveryAzureSubscription = null;
350-
asrProtectionProfile.ReplicationFrequencyInSeconds = 0;
351-
352-
asrProtectionProfile.RecoveryPoints = details.NosOfRps;
353-
asrProtectionProfile.ReplicationMethod = details.IsOnlineIr ?
367+
asrProtectionProfile.HyperVReplicaProviderSettingsObject.RecoveryPoints = details.NosOfRps;
368+
asrProtectionProfile.HyperVReplicaProviderSettingsObject.ReplicationMethod = details.IsOnlineIr ?
354369
Constants.OnlineReplicationMethod :
355370
Constants.OfflineReplicationMethod;
356-
asrProtectionProfile.ReplicationPort = details.RecoveryHttpsPort;
357-
asrProtectionProfile.ReplicationStartTime = details.OnlineIrStartTime;
371+
asrProtectionProfile.HyperVReplicaProviderSettingsObject.ReplicationPort = details.RecoveryHttpsPort;
372+
asrProtectionProfile.HyperVReplicaProviderSettingsObject.ReplicationStartTime = details.OnlineIrStartTime;
373+
asrProtectionProfile.HyperVReplicaProviderSettingsObject.CanDissociate = profile.CanDissociate;
358374
}
359375

360376
asrProtectionProfile.ID = profile.ID;
361377
asrProtectionProfile.Name = profile.Name;
362378
asrProtectionProfile.ReplicationProvider = profile.ReplicationProvider;
363-
asrProtectionProfile.CanDissociate = profile.CanDissociate;
364379

365380
this.AvailableProtectionProfiles.Add(asrProtectionProfile);
366381
}
@@ -495,6 +510,108 @@ public ASRProtectionProfile(ProtectionProfile protectionProfile)
495510
/// </summary>
496511
public string ReplicationProvider { get; set; }
497512

513+
/// <summary>
514+
/// Gets or sets HyperVReplicaProviderSettings
515+
/// </summary>
516+
public HyperVReplicaProviderSettings HyperVReplicaProviderSettingsObject { get; set; }
517+
518+
/// <summary>
519+
/// Gets or sets HyperVReplicaAzureProviderSettings
520+
/// </summary>
521+
public HyperVReplicaAzureProviderSettings HyperVReplicaAzureProviderSettingsObject { get; set; }
522+
523+
#endregion Properties
524+
}
525+
526+
/// <summary>
527+
/// Azure Site Recovery Protection Profile HyperVReplicaProviderSettings.
528+
/// </summary>
529+
[SuppressMessage(
530+
"Microsoft.StyleCop.CSharp.MaintainabilityRules",
531+
"SA1402:FileMayOnlyContainASingleClass",
532+
Justification = "Keeping all related objects together.")]
533+
public class HyperVReplicaProviderSettings
534+
{
535+
/// <summary>
536+
/// Initializes a new instance of the <see cref="HyperVReplicaProviderSettings" /> class.
537+
/// </summary>
538+
public HyperVReplicaProviderSettings()
539+
{
540+
}
541+
542+
#region Properties
543+
544+
/// <summary>
545+
/// Gets or sets Replication Method.
546+
/// </summary>
547+
public string ReplicationMethod { get; set; }
548+
549+
/// <summary>
550+
/// Gets or sets a value indicating whether profile can be dissociated or not.
551+
/// </summary>
552+
public bool CanDissociate { get; set; }
553+
554+
/// <summary>
555+
/// Gets or sets Association Details.
556+
/// </summary>
557+
public List<ASRProtectionProfileAssociationDetails> AssociationDetail { get; set; }
558+
559+
/// <summary>
560+
/// Gets or sets Replication Frequency in seconds.
561+
/// </summary>
562+
public int ReplicationFrequencyInSeconds { get; set; }
563+
564+
/// <summary>
565+
/// Gets or sets Recovery Points.
566+
/// </summary>
567+
public int RecoveryPoints { get; set; }
568+
569+
/// <summary>
570+
/// Gets or sets Application Consistent Snapshot Frequency in hours.
571+
/// </summary>
572+
public int ApplicationConsistentSnapshotFrequencyInHours { get; set; }
573+
574+
/// <summary>
575+
/// Gets or sets a value indicating whether Compression is Enabled.
576+
/// </summary>
577+
public bool CompressionEnabled { get; set; }
578+
579+
/// <summary>
580+
/// Gets or sets the replication port.
581+
/// </summary>
582+
public int ReplicationPort { get; set; }
583+
584+
/// <summary>
585+
/// Gets or sets Replication Start Time.
586+
/// </summary>
587+
public TimeSpan? ReplicationStartTime { get; set; }
588+
589+
/// <summary>
590+
/// Gets or sets a value indicating whether Replica Deletion should be enabled.
591+
/// </summary>
592+
public bool AllowReplicaDeletion { get; set; }
593+
594+
#endregion
595+
}
596+
597+
/// <summary>
598+
/// Azure Site Recovery Protection Profile HyperVReplicaAzureProviderSettings.
599+
/// </summary>
600+
[SuppressMessage(
601+
"Microsoft.StyleCop.CSharp.MaintainabilityRules",
602+
"SA1402:FileMayOnlyContainASingleClass",
603+
Justification = "Keeping all related objects together.")]
604+
public class HyperVReplicaAzureProviderSettings
605+
{
606+
/// <summary>
607+
/// Initializes a new instance of the <see cref="HyperVReplicaAzureProviderSettings" /> class.
608+
/// </summary>
609+
public HyperVReplicaAzureProviderSettings()
610+
{
611+
}
612+
613+
#region Properties
614+
498615
/// <summary>
499616
/// Gets or sets Replication Method.
500617
/// </summary>

0 commit comments

Comments
 (0)