Skip to content

Commit bf79f3f

Browse files
author
Samuel Anudeep
committed
Merge pull request #196 from MabOneSdk/anudeeb-dev1
Get Container Fixes
2 parents 2d96f73 + 6e77249 commit bf79f3f

File tree

14 files changed

+506
-91
lines changed

14 files changed

+506
-91
lines changed

src/ResourceManager/RecoveryServices.Backup/Cmdlets/Container/GetAzureRmRecoveryServicesContainer.cs

Lines changed: 21 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -29,12 +29,8 @@ namespace Microsoft.Azure.Commands.RecoveryServices.Backup.Cmdlets
2929
/// Get list of containers
3030
/// </summary>
3131
[Cmdlet(VerbsCommon.Get, "AzureRmRecoveryServicesContainer"), OutputType(typeof(List<AzureRmRecoveryServicesContainerBase>), typeof(AzureRmRecoveryServicesContainerBase))]
32-
public class GetAzureRmRecoveryServicesContainer : RecoveryServicesBackupCmdletBase
32+
public class GetAzureRmRecoveryServicesContainer : RecoveryServicesBackupVaultCmdletBase
3333
{
34-
[Parameter(Mandatory = false, HelpMessage = ParamHelpMsg.Common.Vault, ValueFromPipeline = true)]
35-
[ValidateNotNullOrEmpty]
36-
public ARSVault Vault { get; set; }
37-
3834
[Parameter(Mandatory = true, HelpMessage = ParamHelpMsg.Container.ContainerType)]
3935
[ValidateNotNullOrEmpty]
4036
public ContainerType ContainerType { get; set; }
@@ -54,34 +50,30 @@ public class GetAzureRmRecoveryServicesContainer : RecoveryServicesBackupCmdletB
5450
public override void ExecuteCmdlet()
5551
{
5652
ExecutionBlock(() =>
57-
{
58-
base.ExecuteCmdlet();
59-
60-
ProtectionContainerListQueryParams queryParams = new ProtectionContainerListQueryParams();
61-
62-
// 1. Filter by Name
63-
queryParams.FriendlyName = Name;
53+
{
54+
base.ExecuteCmdlet();
6455

65-
// 2. Filter by ContainerType
66-
queryParams.ProviderType = HydraHelpers.GetHydraProviderType(ContainerType);
56+
PsBackupProviderManager providerManager = new PsBackupProviderManager(new Dictionary<System.Enum, object>()
57+
{
58+
{ContainerParams.Vault, Vault},
59+
{ContainerParams.ContainerType, ContainerType},
60+
{ContainerParams.Name, Name},
61+
{ContainerParams.ResourceGroupName, ResourceGroupName},
62+
{ContainerParams.Status, Status},
63+
}, HydraAdapter);
6764

68-
// 3. Filter by Status
69-
queryParams.RegistrationStatus = Status.ToString();
70-
71-
var listResponse = HydraAdapter.ListContainers(Vault.Name, Vault.ResouceGroupName, queryParams);
72-
73-
List<AzureRmRecoveryServicesContainerBase> containerModels = ConversionHelpers.GetContainerModelList(listResponse);
74-
75-
// NOTE: Should move this to provider?
76-
// 4. Filter by RG Name
77-
if (ContainerType == Models.ContainerType.AzureVM)
78-
{
79-
containerModels = containerModels.Where(containerModel =>
80-
(containerModel as AzureRmRecoveryServicesIaasVmContainer).ResourceGroupName == ResourceGroupName).ToList();
81-
}
65+
IPsBackupProvider psBackupProvider = providerManager.GetProviderInstance(ContainerType);
66+
var containerModels = psBackupProvider.ListProtectionContainers();
8267

68+
if (containerModels.Count == 1)
69+
{
70+
WriteObject(containerModels.First());
71+
}
72+
else
73+
{
8374
WriteObject(containerModels);
84-
});
75+
}
76+
});
8577
}
8678
}
8779
}

src/ResourceManager/RecoveryServices.Backup/Commands.RecoveryServices.Backup.Cmdlets.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,7 @@
8686
<DesignTime>True</DesignTime>
8787
<DependentUpon>Resources.resx</DependentUpon>
8888
</Compile>
89+
<Compile Include="RecoveryServicesBackupVaultCmdletBase.cs" />
8990
<Compile Include="RecoveryServicesBackupCmdletBase.cs" />
9091
<Compile Include="CmdletParameterHelpMessages.cs" />
9192
</ItemGroup>

src/ResourceManager/RecoveryServices.Backup/Commands.RecoveryServices.Backup.Helpers/Conversions/ConversionHelpers.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,9 @@ public static AzureRmRecoveryServicesContainerBase GetContainerModel(ProtectionC
3232
if (protectionContainer != null &&
3333
protectionContainer.Properties != null)
3434
{
35-
if (protectionContainer.Properties.GetType() == typeof(AzureIaaSVMProtectionContainer))
35+
if (protectionContainer.Properties.GetType().IsSubclassOf(typeof(AzureIaaSVMProtectionContainer)))
3636
{
37-
new AzureRmRecoveryServicesIaasVmContainer(protectionContainer);
37+
containerModel = new AzureRmRecoveryServicesIaasVmContainer(protectionContainer);
3838
}
3939
}
4040

src/ResourceManager/RecoveryServices.Backup/Commands.RecoveryServices.Backup.Models/CommonModels/Utils.cs

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
using System.Text.RegularExpressions;
2121

2222
namespace Microsoft.Azure.Commands.RecoveryServices.Backup.Cmdlets.Models
23-
{
23+
{
2424
public class PolicyConstants
2525
{
2626
public const int MaxAllowedRetentionDurationCount = 9999;
@@ -59,17 +59,30 @@ public static string GetString(IEnumerable<DayOfWeek> objList)
5959

6060
public class IdUtils
6161
{
62-
private static readonly Regex ResourceGroupRegex = new Regex(@"/subscriptions/(?<subscriptionsId>.+)/resourceGroups/(?<resourceGroupName>.+)/providers/(?<providersName>.+)/BackupVault/(?<BackupVaultName>.+)/containers/(?<containersName>.+)", RegexOptions.Compiled);
62+
static readonly Regex ResourceGroupRegex = new Regex(@"/Subscriptions/(?<subscriptionsId>.+)/resourceGroups/(?<resourceGroupName>.+)/providers/(?<providersName>.+)/vaults/(?<BackupVaultName>.+)/backupFabrics/(?<BackupFabricName>.+)/protectionContainers/(?<containersName>.+)", RegexOptions.Compiled);
63+
const string NameDelimiter = ";";
6364

6465
public static string GetResourceGroupName(string id)
6566
{
6667
var match = ResourceGroupRegex.Match(id);
6768
if (match.Success)
6869
{
69-
var vmRGName = match.Groups["containersName"];
70-
if (vmRGName != null && vmRGName.Success)
70+
var vmUniqueName = match.Groups["containersName"];
71+
if (vmUniqueName != null && vmUniqueName.Success)
7172
{
72-
return vmRGName.Value;
73+
var vmNameInfo = vmUniqueName.Value.Split(NameDelimiter.ToCharArray());
74+
if (vmNameInfo.Length == 3)
75+
{
76+
return vmNameInfo[1];
77+
}
78+
else if (vmNameInfo.Length == 4)
79+
{
80+
return vmNameInfo[2];
81+
}
82+
else
83+
{
84+
throw new Exception("Container name not in the expected format");
85+
}
7386
}
7487
}
7588

src/ResourceManager/RecoveryServices.Backup/Commands.RecoveryServices.Backup.Providers/Commands.RecoveryServices.Backup.Providers.csproj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,10 @@
6363
<Project>{3819d8a7-c62c-4c47-8ddd-0332d9ce1252}</Project>
6464
<Name>Commands.ResourceManager.Common</Name>
6565
</ProjectReference>
66+
<ProjectReference Include="..\..\RecoveryServices\Commands.RecoveryServices\Commands.RecoveryServices.csproj">
67+
<Project>{604260dc-b392-4cf4-81ec-34b14591e2d2}</Project>
68+
<Name>Commands.RecoveryServices</Name>
69+
</ProjectReference>
6670
<ProjectReference Include="..\Commands.RecoveryServices.Backup.Helpers\Commands.RecoveryServices.Backup.Helpers.csproj">
6771
<Project>{0e1d3f36-e6c8-4764-8c7d-6f9ee537490c}</Project>
6872
<Name>Commands.RecoveryServices.Backup.Helpers</Name>

src/ResourceManager/RecoveryServices.Backup/Commands.RecoveryServices.Backup.Providers/IPsBackupProvider.cs

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,13 @@
1212
// limitations under the License.
1313
// ----------------------------------------------------------------------------------
1414

15+
using Microsoft.Azure.Commands.RecoveryServices.Backup.Cmdlets.Models;
16+
using Microsoft.Azure.Management.RecoveryServices.Backup.Models;
1517
using System;
1618
using System.Collections.Generic;
1719
using System.Linq;
1820
using System.Text;
1921
using System.Threading.Tasks;
20-
using Microsoft.Azure.Commands.RecoveryServices.Backup.Cmdlets.Models;
21-
using Microsoft.Azure.Management.RecoveryServices.Backup.Models;
2222

2323
namespace Microsoft.Azure.Commands.RecoveryServices.Backup.Cmdlets.ProviderModel
2424
{
@@ -41,5 +41,11 @@ public interface IPsBackupProvider
4141
ProtectionPolicyResponse CreatePolicy();
4242

4343
List<AzureRmRecoveryServicesJobBase> ModifyPolicy();
44+
45+
ProtectionPolicyResponse GetPolicy();
46+
47+
void DeletePolicy();
48+
49+
List<AzureRmRecoveryServicesContainerBase> ListProtectionContainers();
4450
}
4551
}

src/ResourceManager/RecoveryServices.Backup/Commands.RecoveryServices.Backup.Providers/Providers/AzureSqlPsBackupProvider.cs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,5 +67,20 @@ public List<AzureRmRecoveryServicesJobBase> ModifyPolicy()
6767
{
6868
throw new NotImplementedException();
6969
}
70+
71+
public List<Models.AzureRmRecoveryServicesContainerBase> ListProtectionContainers()
72+
{
73+
throw new NotImplementedException();
74+
}
75+
76+
public Management.RecoveryServices.Backup.Models.ProtectionPolicyResponse GetPolicy()
77+
{
78+
throw new NotImplementedException();
79+
}
80+
81+
public void DeletePolicy()
82+
{
83+
throw new NotImplementedException();
84+
}
7085
}
7186
}

src/ResourceManager/RecoveryServices.Backup/Commands.RecoveryServices.Backup.Providers/Providers/IaasVmPsBackupProvider.cs

Lines changed: 75 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -18,20 +18,20 @@
1818
using System.Text;
1919
using System.Threading.Tasks;
2020
using Microsoft.Azure.Management.RecoveryServices.Backup.Models;
21-
using Microsoft.Azure.Commands.RecoveryServices.Backup.Cmdlets.Models;
2221
using Microsoft.Azure.Commands.RecoveryServices.Backup.Helpers;
22+
using Microsoft.Azure.Commands.RecoveryServices.Backup.Cmdlets.Models;
2323

2424
namespace Microsoft.Azure.Commands.RecoveryServices.Backup.Cmdlets.ProviderModel
2525
{
2626
public class IaasVmPsBackupProvider : IPsBackupProvider
2727
{
28-
ProviderData providerData;
29-
HydraAdapter.HydraAdapter hydraAdapter;
28+
ProviderData ProviderData { get; set; }
29+
HydraAdapter.HydraAdapter HydraAdapter { get; set; }
3030

3131
public void Initialize(ProviderData providerData, HydraAdapter.HydraAdapter hydraAdapter)
3232
{
33-
this.providerData = providerData;
34-
this.hydraAdapter = hydraAdapter;
33+
this.ProviderData = providerData;
34+
this.HydraAdapter = hydraAdapter;
3535
}
3636

3737
public BaseRecoveryServicesJobResponse EnableProtection()
@@ -66,16 +66,16 @@ public RecoveryPointResponse GetRecoveryPoint()
6666

6767
public ProtectionPolicyResponse CreatePolicy()
6868
{
69-
string policyName = (string)providerData.ProviderParameters[PolicyParams.PolicyName];
70-
WorkloadType workloadType = (WorkloadType)providerData.ProviderParameters[PolicyParams.WorkloadType];
71-
BackupManagementType backupManagementType = (BackupManagementType)providerData.ProviderParameters[
69+
string policyName = (string)ProviderData.ProviderParameters[PolicyParams.PolicyName];
70+
WorkloadType workloadType = (WorkloadType)ProviderData.ProviderParameters[PolicyParams.WorkloadType];
71+
BackupManagementType backupManagementType = (BackupManagementType)ProviderData.ProviderParameters[
7272
PolicyParams.BackupManagementType];
7373
AzureRmRecoveryServicesRetentionPolicyBase retentionPolicy = (AzureRmRecoveryServicesRetentionPolicyBase)
74-
providerData.ProviderParameters[PolicyParams.RetentionPolicy];
74+
ProviderData.ProviderParameters[PolicyParams.RetentionPolicy];
7575
AzureRmRecoveryServicesSchedulePolicyBase schedulePolicy = (AzureRmRecoveryServicesSchedulePolicyBase)
76-
providerData.ProviderParameters[PolicyParams.SchedulePolicy];
77-
string resourceName = (string)providerData.ProviderParameters[PolicyParams.ResourceName];
78-
string resourceGroupName = (string)providerData.ProviderParameters[PolicyParams.ResourceGroupName];
76+
ProviderData.ProviderParameters[PolicyParams.SchedulePolicy];
77+
string resourceName = (string)ProviderData.ProviderParameters[PolicyParams.ResourceName];
78+
string resourceGroupName = (string)ProviderData.ProviderParameters[PolicyParams.ResourceGroupName];
7979

8080

8181
// do validations
@@ -84,7 +84,7 @@ public ProtectionPolicyResponse CreatePolicy()
8484
// validate both RetentionPolicy and SchedulePolicy
8585
ValidateAzureVMRetentionPolicy(retentionPolicy);
8686
ValidateAzureVMSchedulePolicy(schedulePolicy);
87-
87+
8888
// construct Hydra policy request
8989
ProtectionPolicyRequest hydraRequest = new ProtectionPolicyRequest()
9090
{
@@ -100,29 +100,29 @@ public ProtectionPolicyResponse CreatePolicy()
100100
}
101101
};
102102

103-
return hydraAdapter.CreateOrUpdateProtectionPolicy(
103+
return HydraAdapter.CreateOrUpdateProtectionPolicy(
104104
resourceGroupName,
105105
resourceName,
106106
policyName,
107107
hydraRequest);
108108
}
109109

110110
public List<AzureRmRecoveryServicesJobBase> ModifyPolicy()
111-
{
111+
{
112112
AzureRmRecoveryServicesRetentionPolicyBase retentionPolicy = (AzureRmRecoveryServicesRetentionPolicyBase)
113-
providerData.ProviderParameters[PolicyParams.RetentionPolicy];
113+
ProviderData.ProviderParameters[PolicyParams.RetentionPolicy];
114114
AzureRmRecoveryServicesSchedulePolicyBase schedulePolicy = (AzureRmRecoveryServicesSchedulePolicyBase)
115-
providerData.ProviderParameters[PolicyParams.SchedulePolicy];
115+
ProviderData.ProviderParameters[PolicyParams.SchedulePolicy];
116116
AzureRmRecoveryServicesPolicyBase policy = (AzureRmRecoveryServicesPolicyBase)
117-
providerData.ProviderParameters[PolicyParams.ProtectionPolicy];
118-
string resourceName = (string)providerData.ProviderParameters[PolicyParams.ResourceName];
119-
string resourceGroupName = (string)providerData.ProviderParameters[PolicyParams.ResourceGroupName];
120-
117+
ProviderData.ProviderParameters[PolicyParams.ProtectionPolicy];
118+
string resourceName = (string)ProviderData.ProviderParameters[PolicyParams.ResourceName];
119+
string resourceGroupName = (string)ProviderData.ProviderParameters[PolicyParams.ResourceGroupName];
120+
121121
// do validations
122122
ValidateAzureVMProtectionPolicy(policy);
123-
123+
124124
// RetentionPolicy and SchedulePolicy both should not be empty
125-
if(retentionPolicy == null && schedulePolicy == null)
125+
if (retentionPolicy == null && schedulePolicy == null)
126126
{
127127
throw new ArgumentException("Both RetentionPolicy and SchedulePolicy are Empty .. nothing to update");
128128
}
@@ -132,12 +132,12 @@ public List<AzureRmRecoveryServicesJobBase> ModifyPolicy()
132132
{
133133
ValidateAzureVMSchedulePolicy(schedulePolicy);
134134
((AzureRmRecoveryServicesIaasVmPolicy)policy).SchedulePolicy = schedulePolicy;
135-
}
135+
}
136136
if (retentionPolicy != null)
137137
{
138138
ValidateAzureVMRetentionPolicy(retentionPolicy);
139-
((AzureRmRecoveryServicesIaasVmPolicy)policy).RetentionPolicy = retentionPolicy;
140-
}
139+
((AzureRmRecoveryServicesIaasVmPolicy)policy).RetentionPolicy = retentionPolicy;
140+
}
141141

142142
// Now validate both RetentionPolicy and SchedulePolicy matches or not
143143
PolicyHelpers.ValidateLongTermRetentionPolicyWithSimpleRetentionPolicy(
@@ -151,15 +151,15 @@ public List<AzureRmRecoveryServicesJobBase> ModifyPolicy()
151151
{
152152
Properties = new AzureIaaSVMProtectionPolicy()
153153
{
154-
RetentionPolicy = PolicyHelpers.GetHydraLongTermRetentionPolicy(
154+
RetentionPolicy = PolicyHelpers.GetHydraLongTermRetentionPolicy(
155155
(AzureRmRecoveryServicesLongTermRetentionPolicy)((AzureRmRecoveryServicesIaasVmPolicy)policy).RetentionPolicy),
156-
SchedulePolicy = PolicyHelpers.GetHydraSimpleSchedulePolicy(
156+
SchedulePolicy = PolicyHelpers.GetHydraSimpleSchedulePolicy(
157157
(AzureRmRecoveryServicesSimpleSchedulePolicy)((AzureRmRecoveryServicesIaasVmPolicy)policy).SchedulePolicy)
158-
}
158+
}
159159
}
160160
};
161-
162-
ProtectionPolicyResponse response = hydraAdapter.CreateOrUpdateProtectionPolicy(
161+
162+
ProtectionPolicyResponse response = HydraAdapter.CreateOrUpdateProtectionPolicy(
163163
resourceGroupName,
164164
resourceName,
165165
policy.Name,
@@ -181,10 +181,52 @@ public List<AzureRmRecoveryServicesJobBase> ModifyPolicy()
181181
return jobsList;
182182
}
183183

184+
public List<AzureRmRecoveryServicesContainerBase> ListProtectionContainers()
185+
{
186+
string name = (string)this.ProviderData.ProviderParameters[ContainerParams.Name];
187+
ContainerRegistrationStatus status = (ContainerRegistrationStatus)this.ProviderData.ProviderParameters[ContainerParams.Status];
188+
ARSVault vault = (ARSVault)this.ProviderData.ProviderParameters[ContainerParams.Vault];
189+
string resourceGroupName = (string)this.ProviderData.ProviderParameters[ContainerParams.ResourceGroupName];
190+
191+
ProtectionContainerListQueryParams queryParams = new ProtectionContainerListQueryParams();
192+
193+
// 1. Filter by Name
194+
queryParams.FriendlyName = name;
195+
196+
// 2. Filter by ContainerType
197+
queryParams.ProviderType = ProviderType.AzureIaasVM.ToString();
198+
199+
// 3. Filter by Status
200+
queryParams.RegistrationStatus = status.ToString();
201+
202+
var listResponse = HydraAdapter.ListContainers(vault.ResouceGroupName, vault.Name, queryParams);
203+
204+
List<AzureRmRecoveryServicesContainerBase> containerModels = ConversionHelpers.GetContainerModelList(listResponse);
205+
206+
// 4. Filter by RG Name
207+
if (!string.IsNullOrEmpty(resourceGroupName))
208+
{
209+
containerModels = containerModels.Where(containerModel =>
210+
(containerModel as AzureRmRecoveryServicesIaasVmContainer).ResourceGroupName == resourceGroupName).ToList();
211+
}
212+
213+
return containerModels;
214+
}
215+
216+
public ProtectionPolicyResponse GetPolicy()
217+
{
218+
throw new NotImplementedException();
219+
}
220+
221+
public void DeletePolicy()
222+
{
223+
throw new NotImplementedException();
224+
}
225+
184226
#region private
185227
private void ValidateAzureVMWorkloadType(WorkloadType type)
186228
{
187-
if(type != WorkloadType.AzureVM)
229+
if (type != WorkloadType.AzureVM)
188230
{
189231
throw new ArgumentException("ExpectedWorkloadType = " + type.ToString());
190232
}
@@ -220,11 +262,10 @@ private void ValidateAzureVMRetentionPolicy(AzureRmRecoveryServicesRetentionPoli
220262
{
221263
throw new ArgumentException("RetentionPolicy is NULL or not of type AzureRmRecoveryServicesLongTermRetentionPolicy");
222264
}
223-
265+
224266
// call validation
225267
policy.Validate();
226268
}
227-
228269
#endregion
229270
}
230271
}

0 commit comments

Comments
 (0)