Skip to content

Commit 0b17685

Browse files
committed
Sets SiteRecovery and RecoveryServices Vault context without importing file
1 parent b9b7609 commit 0b17685

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
@@ -208,6 +208,10 @@
208208
<Project>{3819d8a7-c62c-4c47-8ddd-0332d9ce1252}</Project>
209209
<Name>Commands.ResourceManager.Common</Name>
210210
</ProjectReference>
211+
<ProjectReference Include="..\..\RecoveryServices\Commands.RecoveryServices\Commands.RecoveryServices.csproj">
212+
<Project>{604260dc-b392-4cf4-81ec-34b14591e2d2}</Project>
213+
<Name>Commands.RecoveryServices</Name>
214+
</ProjectReference>
211215
</ItemGroup>
212216
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
213217
</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
@@ -51,18 +51,20 @@ public override void ExecuteCmdlet()
5151
this.WriteVerbose("Vault Settings File path: " + this.Path);
5252

5353
ASRVaultCreds asrVaultCreds = null;
54+
ARSVaultCreds arsVaultCreds = null;
55+
5456
if (File.Exists(this.Path))
5557
{
5658
try
5759
{
58-
var serializer = new DataContractSerializer(typeof(ASRVaultCreds));
60+
var serializer = new DataContractSerializer(typeof(ARSVaultCreds));
5961
using (var s = new FileStream(
6062
this.Path,
6163
FileMode.Open,
6264
FileAccess.Read,
6365
FileShare.Read))
6466
{
65-
asrVaultCreds = (ASRVaultCreds)serializer.ReadObject(s);
67+
arsVaultCreds = (ARSVaultCreds)serializer.ReadObject(s);
6668
}
6769
}
6870
catch (XmlException xmlException)
@@ -72,8 +74,34 @@ public override void ExecuteCmdlet()
7274
}
7375
catch (SerializationException serializationException)
7476
{
75-
throw new SerializationException(
76-
string.Format(Properties.Resources.InvalidXml, serializationException));
77+
try
78+
{
79+
// moved here as ASR Vault is short lived
80+
var serializer = new DataContractSerializer(typeof(ASRVaultCreds));
81+
using (var s = new FileStream(
82+
this.Path,
83+
FileMode.Open,
84+
FileAccess.Read,
85+
FileShare.Read))
86+
{
87+
asrVaultCreds = (ASRVaultCreds)serializer.ReadObject(s);
88+
}
89+
}
90+
catch
91+
{
92+
throw new SerializationException(
93+
string.Format(Properties.Resources.InvalidXml, serializationException));
94+
}
95+
}
96+
if (null == asrVaultCreds)
97+
{
98+
// Copy ars to asr
99+
asrVaultCreds = new ASRVaultCreds();
100+
asrVaultCreds.ResourceName = arsVaultCreds.ResourceName;
101+
asrVaultCreds.ResourceGroupName = arsVaultCreds.ResourceGroupName;
102+
asrVaultCreds.ResourceNamespace = arsVaultCreds.ResourceNamespace;
103+
asrVaultCreds.ARMResourceType = arsVaultCreds.ARMResourceType;
104+
asrVaultCreds.ChannelIntegrityKey = arsVaultCreds.ChannelIntegrityKey;
77105
}
78106
}
79107
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

@@ -44,15 +54,63 @@ public class SetAzureSiteRecoveryVaultSettings : SiteRecoveryCmdletBase
4454
/// </summary>
4555
public override void ExecuteCmdlet()
4656
{
47-
// Validate the Vault
48-
RecoveryServicesClient.ValidateVaultSettings(
49-
this.Vault.Name,
50-
this.Vault.ResouceGroupName);
57+
switch (this.ParameterSetName)
58+
{
59+
case ASRParameterSets.ASRVault:
60+
this.setASRVaultContext(this.ASRVault);
61+
break;
62+
case ASRParameterSets.ARSVault:
63+
this.setARSVaultContext(this.ARSVault);
64+
break;
65+
}
66+
}
5167

68+
/// <summary>
69+
/// Set Azure Site Recovery Vault context.
70+
/// </summary>
71+
private void setASRVaultContext(ASRVault asrVault)
72+
{
5273
// Change the vault context
53-
ASRVaultCreds vaultCreds = RecoveryServicesClient.ChangeVaultContext(this.Vault);
74+
RecoveryServicesClient.ChangeVaultContext(asrVault);
75+
76+
// Validate the Vault
77+
RecoveryServicesClient.ValidateVaultSettings(
78+
asrVault.Name,
79+
asrVault.ResouceGroupName);
5480

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

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)