Skip to content

Commit 9f27fce

Browse files
Merge pull request #3 from AsrOneSdk/SetRSVaultSettings
Sets SiteRecovery and RecoveryServices Vault context without importin…
2 parents 3d7ba2e + 7d161c2 commit 9f27fce

File tree

5 files changed

+118
-12
lines changed

5 files changed

+118
-12
lines changed

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -214,6 +214,10 @@
214214
<Project>{3819d8a7-c62c-4c47-8ddd-0332d9ce1252}</Project>
215215
<Name>Commands.ResourceManager.Common</Name>
216216
</ProjectReference>
217+
<ProjectReference Include="..\..\RecoveryServices\Commands.RecoveryServices\Commands.RecoveryServices.csproj">
218+
<Project>{604260dc-b392-4cf4-81ec-34b14591e2d2}</Project>
219+
<Name>Commands.RecoveryServices</Name>
220+
</ProjectReference>
217221
</ItemGroup>
218222
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
219223
</Project>

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

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -233,5 +233,15 @@ internal static class ASRParameterSets
233233
/// For Disable replication group parameter set.
234234
/// </summary>
235235
internal const string DisableReplicationGroup = "DisableReplicationGroup";
236+
237+
/// <summary>
238+
/// Handle ASR Vault.
239+
/// </summary>
240+
internal const string ASRVault = "AzureSiteRecoveryVault";
241+
242+
/// <summary>
243+
/// Handle ARS Vault.
244+
/// </summary>
245+
internal const string ARSVault = "AzureRecoveryServicesVault";
236246
}
237247
}

src/ResourceManager/SiteRecovery/Commands.SiteRecovery/Vault/ImportAzureSiteRecoveryVaultSettingsFile.cs

Lines changed: 32 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -53,18 +53,20 @@ public override void ExecuteSiteRecoveryCmdlet()
5353
this.WriteVerbose("Vault Settings File path: " + this.Path);
5454

5555
ASRVaultCreds asrVaultCreds = null;
56+
ARSVaultCreds arsVaultCreds = null;
57+
5658
if (File.Exists(this.Path))
5759
{
5860
try
5961
{
60-
var serializer = new DataContractSerializer(typeof(ASRVaultCreds));
62+
var serializer = new DataContractSerializer(typeof(ARSVaultCreds));
6163
using (var s = new FileStream(
6264
this.Path,
6365
FileMode.Open,
6466
FileAccess.Read,
6567
FileShare.Read))
6668
{
67-
asrVaultCreds = (ASRVaultCreds)serializer.ReadObject(s);
69+
arsVaultCreds = (ARSVaultCreds)serializer.ReadObject(s);
6870
}
6971
}
7072
catch (XmlException xmlException)
@@ -74,8 +76,34 @@ public override void ExecuteSiteRecoveryCmdlet()
7476
}
7577
catch (SerializationException serializationException)
7678
{
77-
throw new SerializationException(
78-
string.Format(Properties.Resources.InvalidXml, serializationException));
79+
try
80+
{
81+
// moved here as ASR Vault is short lived
82+
var serializer = new DataContractSerializer(typeof(ASRVaultCreds));
83+
using (var s = new FileStream(
84+
this.Path,
85+
FileMode.Open,
86+
FileAccess.Read,
87+
FileShare.Read))
88+
{
89+
asrVaultCreds = (ASRVaultCreds)serializer.ReadObject(s);
90+
}
91+
}
92+
catch
93+
{
94+
throw new SerializationException(
95+
string.Format(Properties.Resources.InvalidXml, serializationException));
96+
}
97+
}
98+
if (null == asrVaultCreds)
99+
{
100+
// Copy ars to asr
101+
asrVaultCreds = new ASRVaultCreds();
102+
asrVaultCreds.ResourceName = arsVaultCreds.ResourceName;
103+
asrVaultCreds.ResourceGroupName = arsVaultCreds.ResourceGroupName;
104+
asrVaultCreds.ResourceNamespace = arsVaultCreds.ResourceNamespace;
105+
asrVaultCreds.ARMResourceType = arsVaultCreds.ARMResourceType;
106+
asrVaultCreds.ChannelIntegrityKey = arsVaultCreds.ChannelIntegrityKey;
79107
}
80108
}
81109
else

src/ResourceManager/SiteRecovery/Commands.SiteRecovery/Vault/SetAzureSiteRecoveryVaultSettings.cs

Lines changed: 66 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,9 @@
1818
using System.Management.Automation;
1919
using Microsoft.WindowsAzure.Commands.Utilities.Common;
2020
using Microsoft.Azure.Portal.RecoveryServices.Models.Common;
21+
using Microsoft.Azure.Commands.RecoveryServices;
22+
using System.Diagnostics;
23+
using System.Collections.ObjectModel;
2124

2225
namespace Microsoft.Azure.Commands.SiteRecovery
2326
{
@@ -31,11 +34,18 @@ public class SetAzureSiteRecoveryVaultSettings : SiteRecoveryCmdletBase
3134
#region Parameters
3235

3336
/// <summary>
34-
/// Gets or sets vault Object.
37+
/// Gets or sets ASR vault Object.
3538
/// </summary>
36-
[Parameter(Mandatory = true, ValueFromPipeline = true)]
39+
[Parameter(ParameterSetName = ASRParameterSets.ASRVault, Mandatory = true)]
3740
[ValidateNotNullOrEmpty]
38-
public ASRVault Vault { get; set; }
41+
public ASRVault ASRVault { get; set; }
42+
43+
/// <summary>
44+
/// Gets or sets ARS vault Object.
45+
/// </summary>
46+
[Parameter(ParameterSetName = ASRParameterSets.ARSVault, Mandatory = true)]
47+
[ValidateNotNullOrEmpty]
48+
public ARSVault ARSVault { get; set; }
3949

4050
#endregion Parameters
4151

@@ -46,15 +56,63 @@ public override void ExecuteSiteRecoveryCmdlet()
4656
{
4757
base.ExecuteSiteRecoveryCmdlet();
4858

49-
// Validate the Vault
50-
RecoveryServicesClient.ValidateVaultSettings(
51-
this.Vault.Name,
52-
this.Vault.ResouceGroupName);
59+
switch (this.ParameterSetName)
60+
{
61+
case ASRParameterSets.ASRVault:
62+
this.setASRVaultContext(this.ASRVault);
63+
break;
64+
case ASRParameterSets.ARSVault:
65+
this.setARSVaultContext(this.ARSVault);
66+
break;
67+
}
68+
}
5369

70+
/// <summary>
71+
/// Set Azure Site Recovery Vault context.
72+
/// </summary>
73+
private void setASRVaultContext(ASRVault asrVault)
74+
{
5475
// Change the vault context
55-
ASRVaultCreds vaultCreds = RecoveryServicesClient.ChangeVaultContext(this.Vault);
76+
RecoveryServicesClient.ChangeVaultContext(asrVault);
77+
78+
// Validate the Vault
79+
RecoveryServicesClient.ValidateVaultSettings(
80+
asrVault.Name,
81+
asrVault.ResouceGroupName);
5682

5783
this.WriteObject(new ASRVaultSettings(PSRecoveryServicesClient.asrVaultCreds));
5884
}
85+
86+
/// <summary>
87+
/// Set Azure Recovery Services Vault context.
88+
/// </summary>
89+
private void setARSVaultContext(ARSVault arsVault)
90+
{
91+
try
92+
{
93+
using (System.Management.Automation.PowerShell powerShell = System.Management.Automation.PowerShell.Create())
94+
{
95+
Collection<PSObject> result =
96+
powerShell
97+
.AddCommand("Get-AzureRmRecoveryServicesVaultSettingsFile")
98+
.AddParameter("Vault", arsVault)
99+
.Invoke();
100+
101+
string vaultSettingspath = (string)result[0].Members["FilePath"].Value;
102+
powerShell.Commands.Clear();
103+
104+
result =
105+
powerShell
106+
.AddCommand("Import-AzureRmSiteRecoveryVaultSettingsFile")
107+
.AddParameter("Path", vaultSettingspath)
108+
.Invoke();
109+
WriteObject(result);
110+
powerShell.Commands.Clear();
111+
}
112+
}
113+
catch (InvalidOperationException e)
114+
{
115+
}
116+
}
59117
}
60118
}

src/ResourceManager/SiteRecovery/SiteRecovery.sln

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".nuget", ".nuget", "{5BA788
2121
.nuget\packages.config = .nuget\packages.config
2222
EndProjectSection
2323
EndProject
24+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Commands.RecoveryServices", "..\RecoveryServices\Commands.RecoveryServices\Commands.RecoveryServices.csproj", "{604260DC-B392-4CF4-81EC-34B14591E2D2}"
25+
EndProject
2426
Global
2527
GlobalSection(SolutionConfigurationPlatforms) = preSolution
2628
Debug|Any CPU = Debug|Any CPU
@@ -51,6 +53,10 @@ Global
5153
{5EE72C53-1720-4309-B54B-5FB79703195F}.Debug|Any CPU.Build.0 = Debug|Any CPU
5254
{5EE72C53-1720-4309-B54B-5FB79703195F}.Release|Any CPU.ActiveCfg = Release|Any CPU
5355
{5EE72C53-1720-4309-B54B-5FB79703195F}.Release|Any CPU.Build.0 = Release|Any CPU
56+
{604260DC-B392-4CF4-81EC-34B14591E2D2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
57+
{604260DC-B392-4CF4-81EC-34B14591E2D2}.Debug|Any CPU.Build.0 = Debug|Any CPU
58+
{604260DC-B392-4CF4-81EC-34B14591E2D2}.Release|Any CPU.ActiveCfg = Release|Any CPU
59+
{604260DC-B392-4CF4-81EC-34B14591E2D2}.Release|Any CPU.Build.0 = Release|Any CPU
5460
EndGlobalSection
5561
GlobalSection(SolutionProperties) = preSolution
5662
HideSolutionNode = FALSE

0 commit comments

Comments
 (0)