Skip to content

Commit c40cc2b

Browse files
committed
Merge pull request #8 from AsrOneSdk/A2APolicyEnumerationCreationAndAssociation
A2A Policy enumeration, creation, association
2 parents 0608985 + 7b81943 commit c40cc2b

File tree

5 files changed

+183
-1
lines changed

5 files changed

+183
-1
lines changed

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

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,11 @@ public static class Constants
152152
/// </summary>
153153
public const string HyperVReplicaAzure = "HyperVReplicaAzure";
154154

155+
/// <summary>
156+
/// Represents AzureToAzure string constant.
157+
/// </summary>
158+
public const string AzureToAzure = "AzureToAzure";
159+
155160
/// <summary>
156161
/// Represents HyperVReplicaAzureReplicationDetails string constant.
157162
/// </summary>
@@ -356,6 +361,16 @@ public static class Constants
356361
/// JSON field: InstanceType
357362
/// </summary>
358363
public const string InstanceType = "InstanceType";
364+
365+
/// <summary>
366+
/// Enable.
367+
/// </summary>
368+
public const string Enable = "Enable";
369+
370+
/// <summary>
371+
/// Disable.
372+
/// </summary>
373+
public const string Disable = "Disable";
359374
}
360375

361376
/// <summary>

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

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -666,6 +666,26 @@ public ASRPolicy(Policy policy)
666666

667667
this.ReplicationProviderSettings = replicationProviderSettings;
668668
}
669+
else if (policy.Properties.ProviderSpecificDetails.InstanceType == Constants.AzureToAzure)
670+
{
671+
A2APolicyDetails details =
672+
(A2APolicyDetails)policy.Properties.ProviderSpecificDetails;
673+
674+
ASRAzureToAzurePolicyDetails replicationProviderSettings =
675+
new ASRAzureToAzurePolicyDetails();
676+
677+
replicationProviderSettings.AppConsistentFrequencyInMinutes =
678+
details.AppConsistentFrequencyInMinutes;
679+
replicationProviderSettings.CrashConsistentFrequencyInMinutes =
680+
details.CrashConsistentFrequencyInMinutes;
681+
replicationProviderSettings.MultiVmSyncStatus =
682+
details.MultiVmSyncStatus;
683+
replicationProviderSettings.RecoveryPointHistory = details.RecoveryPointHistory;
684+
replicationProviderSettings.RecoveryPointThresholdInMinutes =
685+
details.RecoveryPointThresholdInMinutes;
686+
687+
this.ReplicationProviderSettings = replicationProviderSettings;
688+
}
669689
}
670690

671691
#region Properties
@@ -790,6 +810,32 @@ public class ASRHyperVReplicaAzurePolicyDetails : ASRPolicyProviderSettingsDetai
790810
public int ReplicationFrequencyInSeconds { get; set; }
791811
}
792812

813+
/// <summary>
814+
/// ASR AzureToAzure policy details.
815+
/// </summary>
816+
public class ASRAzureToAzurePolicyDetails : ASRPolicyProviderSettingsDetails
817+
{
818+
// Summary:
819+
// Optional.
820+
public int AppConsistentFrequencyInMinutes { get; set; }
821+
//
822+
// Summary:
823+
// Optional.
824+
public int CrashConsistentFrequencyInMinutes { get; set; }
825+
//
826+
// Summary:
827+
// Optional.
828+
public string MultiVmSyncStatus { get; set; }
829+
//
830+
// Summary:
831+
// Optional.
832+
public int RecoveryPointHistory { get; set; }
833+
//
834+
// Summary:
835+
// Optional.
836+
public int RecoveryPointThresholdInMinutes { get; set; }
837+
}
838+
793839
/// <summary>
794840
/// ASR Customer Storage Account.
795841
/// </summary>

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -229,6 +229,11 @@ internal static class ASRParameterSets
229229
/// </summary>
230230
internal const string EnterpriseToAzure = "EnterpriseToAzure";
231231

232+
/// <summary>
233+
/// To define Azure to Azure parameter set.
234+
/// </summary>
235+
internal const string AzureToAzure = "AzureToAzure";
236+
232237
/// <summary>
233238
/// Mapping between HyperV Site to Azure.
234239
/// </summary>

src/ResourceManager/SiteRecovery/Commands.SiteRecovery/Policy/NewAzureSiteRecoveryPolicy.cs

Lines changed: 89 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,18 +40,21 @@ public class NewAzureSiteRecoveryPolicy : SiteRecoveryCmdletBase
4040
/// </summary>
4141
[Parameter(ParameterSetName = ASRParameterSets.EnterpriseToEnterprise, Mandatory = true)]
4242
[Parameter(ParameterSetName = ASRParameterSets.EnterpriseToAzure, Mandatory = true)]
43+
[Parameter(ParameterSetName = ASRParameterSets.AzureToAzure, Mandatory = true)]
4344
public string Name { get; set; }
4445

4546
/// <summary>
4647
/// Gets or sets Replication Provider of the Policy.
4748
/// </summary>
4849
[Parameter(ParameterSetName = ASRParameterSets.EnterpriseToEnterprise, Mandatory = true)]
4950
[Parameter(ParameterSetName = ASRParameterSets.EnterpriseToAzure, Mandatory = true)]
51+
[Parameter(ParameterSetName = ASRParameterSets.AzureToAzure, Mandatory = true)]
5052
[ValidateNotNullOrEmpty]
5153
[ValidateSet(
5254
Constants.HyperVReplica2012R2,
5355
Constants.HyperVReplica2012,
54-
Constants.HyperVReplicaAzure)]
56+
Constants.HyperVReplicaAzure,
57+
Constants.AzureToAzure)]
5558
public string ReplicationProvider { get; set; }
5659

5760
/// <summary>
@@ -147,6 +150,41 @@ public class NewAzureSiteRecoveryPolicy : SiteRecoveryCmdletBase
147150
[Parameter(ParameterSetName = ASRParameterSets.EnterpriseToAzure)]
148151
public SwitchParameter Encrypt { get; set; }
149152

153+
/* TODO: SriramVu:
154+
* Revise the mandatory inputs for A2A prameterset and use defaults if req.
155+
* Check out the possible allowed values (if any) and use ValidateSet.
156+
*/
157+
158+
/// <summary>
159+
/// Gets or sets Recovery point threshold in minutes.
160+
/// </summary>
161+
[Parameter(ParameterSetName = ASRParameterSets.AzureToAzure, Mandatory = true)]
162+
public int RecoveryPointThresholdInMinutes { get; set; }
163+
164+
/// <summary>
165+
/// Gets or sets Recovery point history.
166+
/// </summary>
167+
[Parameter(ParameterSetName = ASRParameterSets.AzureToAzure, Mandatory = true)]
168+
public int RecoveryPointHistory { get; set; }
169+
170+
/// <summary>
171+
/// Gets or sets Crash consistent frequency in minutes.
172+
/// </summary>
173+
[Parameter(ParameterSetName = ASRParameterSets.AzureToAzure, Mandatory = true)]
174+
public int CrashConsistentFrequencyInMinutes { get; set; }
175+
176+
/// <summary>
177+
/// Gets or sets App consistent frequency in minutes.
178+
/// </summary>
179+
[Parameter(ParameterSetName = ASRParameterSets.AzureToAzure, Mandatory = true)]
180+
public int AppConsistentFrequencyInMinutes { get; set; }
181+
182+
/// <summary>
183+
/// Gets or sets EnableMultiVmSync parameter. On passing, MultiVmSync will be enabled.
184+
/// </summary>
185+
[Parameter(ParameterSetName = ASRParameterSets.AzureToAzure)]
186+
public SwitchParameter EnableMultiVmSync { get; set; }
187+
150188
#endregion Parameters
151189

152190
/// <summary>
@@ -164,6 +202,9 @@ public override void ExecuteSiteRecoveryCmdlet()
164202
case ASRParameterSets.EnterpriseToAzure:
165203
this.EnterpriseToAzurePolicyObject();
166204
break;
205+
case ASRParameterSets.AzureToAzure:
206+
this.CreateAzureToAzurePolicy();
207+
break;
167208
}
168209
}
169210

@@ -294,5 +335,52 @@ private void EnterpriseToAzurePolicyObject()
294335

295336
WriteObject(new ASRJob(jobResponse.Job));
296337
}
338+
339+
/// <summary>
340+
/// Creates an A2A Policy.
341+
/// </summary>
342+
private void CreateAzureToAzurePolicy()
343+
{
344+
if (string.Compare(
345+
this.ReplicationProvider,
346+
Constants.AzureToAzure,
347+
StringComparison.OrdinalIgnoreCase) != 0)
348+
{
349+
throw new InvalidOperationException(
350+
string.Format(
351+
Properties.Resources.IncorrectReplicationProvider,
352+
this.ReplicationProvider));
353+
}
354+
355+
var a2aPolicyCreationInput = new A2APolicyCreationInput()
356+
{
357+
AppConsistentFrequencyInMinutes = this.AppConsistentFrequencyInMinutes,
358+
CrashConsistentFrequencyInMinutes = this.CrashConsistentFrequencyInMinutes,
359+
MultiVmSyncStatus = this.EnableMultiVmSync ? Constants.Enable: Constants.Disable,
360+
RecoveryPointHistory = this.RecoveryPointHistory,
361+
RecoveryPointThresholdInMinutes = this.RecoveryPointThresholdInMinutes
362+
};
363+
364+
var createPolicyInputProperties = new CreatePolicyInputProperties()
365+
{
366+
ProviderSpecificInput = a2aPolicyCreationInput
367+
};
368+
369+
var createPolicyInput = new CreatePolicyInput()
370+
{
371+
Properties = createPolicyInputProperties
372+
};
373+
374+
LongRunningOperationResponse response =
375+
RecoveryServicesClient.CreatePolicy(this.Name, createPolicyInput);
376+
377+
string jobId = PSRecoveryServicesClient.GetJobIdFromReponseLocation(response.Location);
378+
379+
JobResponse jobResponse =
380+
RecoveryServicesClient
381+
.GetAzureSiteRecoveryJobDetails(jobId);
382+
383+
WriteObject(new ASRJob(jobResponse.Job));
384+
}
297385
}
298386
}

src/ResourceManager/SiteRecovery/Commands.SiteRecovery/ProtectionContainerMapping/NewAzureRmSiteRecoveryProtectionContainerMapping.cs

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,9 @@ public override void ExecuteSiteRecoveryCmdlet()
8080
case ASRParameterSets.EnterpriseToEnterprise:
8181
this.EnterpriseToEnterpriseAssociation();
8282
break;
83+
////case ASRParameterSets.AzureToAzure:
84+
//// this.EnterpriseToEnterpriseAssociation();
85+
//// break;
8386
}
8487
}
8588

@@ -88,12 +91,18 @@ public override void ExecuteSiteRecoveryCmdlet()
8891
/// </summary>
8992
private void EnterpriseToEnterpriseAssociation()
9093
{
94+
// TODO: SriramVu: Same parameter set can be used for both E2E and A2A - update
95+
// methods and validations.
96+
9197
if (string.Compare(
9298
this.Policy.ReplicationProvider,
9399
Constants.HyperVReplica2012,
94100
StringComparison.OrdinalIgnoreCase) != 0 && string.Compare(
95101
this.Policy.ReplicationProvider,
96102
Constants.HyperVReplica2012R2,
103+
StringComparison.OrdinalIgnoreCase) != 0 && string.Compare(
104+
this.Policy.ReplicationProvider,
105+
"A2A",
97106
StringComparison.OrdinalIgnoreCase) != 0)
98107
{
99108
throw new InvalidOperationException(
@@ -125,6 +134,25 @@ private void EnterpriseToAzureAssociation()
125134
Associate(Constants.AzureContainer);
126135
}
127136

137+
/// <summary>
138+
/// Associates Policy with Azure based protection containers
139+
/// </summary>
140+
private void AzureToAzureAssociation()
141+
{
142+
if (string.Compare(
143+
this.Policy.ReplicationProvider,
144+
Constants.AzureToAzure,
145+
StringComparison.OrdinalIgnoreCase) != 0)
146+
{
147+
throw new InvalidOperationException(
148+
string.Format(
149+
Properties.Resources.IncorrectReplicationProvider,
150+
this.Policy.ReplicationProvider));
151+
}
152+
153+
Associate(this.RecoveryProtectionContainer.ID);
154+
}
155+
128156
/// <summary>
129157
/// Helper to configure cloud
130158
/// </summary>

0 commit comments

Comments
 (0)