Skip to content

Commit 59a90f0

Browse files
committed
temp changes
1 parent f3428a9 commit 59a90f0

File tree

6 files changed

+214
-29
lines changed

6 files changed

+214
-29
lines changed

src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupCmdletHelpMessage.cs

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,13 +25,10 @@ internal static class AzureBackupCmdletHelpMessage
2525
public const string ContainerId = "The container ID.";
2626
public const string ContainerRegistrationStatus = "The container registration status.";
2727
public const string ContainerType = "The container type.";
28-
<<<<<<< HEAD
2928
public const string VirtualMachine = "Virtual Machine.";
30-
=======
3129
public const string ContainerResourceGroupName = "The container resource group name.";
3230
public const string ProtectionStatus = "Protection Status of the azure backup item.";
3331
public const string AzureBackUpItem = "Azure BackUp Item.";
3432
public const string RecoveryPointId = "Recovery Point Id.";
35-
>>>>>>> d3cf61941b7653ba9a2edf165b1ae23e38921395
3633
}
3734
}

src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/RegisterAzureBackupContainer.cs

Lines changed: 98 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,9 @@
1313
// ----------------------------------------------------------------------------------
1414

1515
using System;
16+
using System.Web;
1617
using System.Collections.Generic;
18+
using System.Collections.Specialized;
1719
using System.Linq;
1820
using System.Management.Automation;
1921
using System.Text;
@@ -23,7 +25,6 @@
2325
using MBS = Microsoft.Azure.Management.BackupServices;
2426
using Microsoft.Azure.Commands.Compute.Models;
2527

26-
2728
namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets
2829
{
2930
/// <summary>
@@ -32,18 +33,27 @@ namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets
3233
[Cmdlet(VerbsLifecycle.Register, "AzureBackupContainer"), OutputType(typeof(Guid))]
3334
public class RegisterAzureBackupContainer : AzureBackupVaultCmdletBase
3435
{
36+
//[Parameter(Position = 2, Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.VirtualMachine)]
37+
//[ValidateNotNullOrEmpty]
38+
//public PSVirtualMachineInstanceView VirtualMachine { get; set; }
3539
[Parameter(Position = 2, Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.VirtualMachine)]
3640
[ValidateNotNullOrEmpty]
37-
public PSVirtualMachineInstanceView VirtualMachine { get; set; }
41+
public string VirtualMachineName { get; set; }
42+
43+
[Parameter(Position = 3, Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.VirtualMachine)]
44+
[ValidateNotNullOrEmpty]
45+
public string VirtualMachineRGName { get; set; }
3846

3947
public override void ExecuteCmdlet()
4048
{
4149
base.ExecuteCmdlet();
4250

4351
ExecutionBlock(() =>
4452
{
45-
string vmName = VirtualMachine.Name;
46-
string rgName = VirtualMachine.ResourceGroupName;
53+
//string vmName = VirtualMachine.Name;
54+
//string rgName = VirtualMachine.ResourceGroupName;
55+
string vmName = VirtualMachineName;
56+
string rgName = VirtualMachineRGName;
4757
Guid jobId = Guid.Empty;
4858
bool isDiscoveryNeed = false;
4959
MBS.OperationResponse operationResponse;
@@ -66,7 +76,7 @@ public override void ExecuteCmdlet()
6676
//Container is discovered. Register the container
6777
List<string> containerNameList = new List<string>();
6878
containerNameList.Add(container.Name);
69-
RegisterContainerRequest registrationRequest = new RegisterContainerRequest(containerNameList, "IaasVMContainer"); //TODO: Container type from enum
79+
RegisterContainerRequest registrationRequest = new RegisterContainerRequest(containerNameList, AzureBackupContainerType.IaasVMContainer.ToString());
7080
operationResponse = AzureBackupClient.Container.RegisterAsync(registrationRequest, GetCustomRequestHeaders(), CmdletCancellationToken).Result;
7181

7282
//TODO fix the OperationResponse to JobID conversion
@@ -78,22 +88,69 @@ public override void ExecuteCmdlet()
7888

7989
private void RefreshContainer()
8090
{
81-
MBS.OperationResponse opResponse =
82-
AzureBackupClient.Container.RefreshAsync(GetCustomRequestHeaders(), CmdletCancellationToken).Result;
91+
bool isRetyNeeded = true;
92+
int retryCount = 1;
93+
bool isDiscoverySuccessful = false;
94+
while (isRetyNeeded && retryCount <= 3)
95+
{
96+
MBS.OperationResponse opResponse =
97+
AzureBackupClient.Container.RefreshAsync(GetCustomRequestHeaders(), CmdletCancellationToken).Result;
98+
99+
//Now wait for the operation to Complete
100+
isRetyNeeded = WaitForDiscoveryToCOmplete(opResponse.OperationId.ToString(), out isDiscoverySuccessful);
101+
retryCount++;
102+
}
103+
104+
if (!isDiscoverySuccessful)
105+
{
106+
//Discovery failed
107+
throw new Exception(); //TODO:
108+
}
109+
}
110+
111+
private bool WaitForDiscoveryToCOmplete(string operationId, out bool isDiscoverySuccessful)
112+
{
113+
bool isRetryNeeded = false;
114+
115+
116+
BMSOperationStatusResponse status = new BMSOperationStatusResponse()
117+
{
118+
OperationStatus = AzureBackupOperationStatus.InProgress.ToString()
119+
};
83120

84-
//Now wait for the operation to Complete
121+
while (status.OperationStatus != AzureBackupOperationStatus.Completed.ToString())
122+
{
123+
status = AzureBackupClient.OperationStatus.GetAsync(operationId, GetCustomRequestHeaders(), CmdletCancellationToken).Result;
124+
System.Threading.Thread.Sleep(TimeSpan.FromSeconds(15));
125+
}
85126

86-
//If operat
87-
throw new NotImplementedException();
127+
isDiscoverySuccessful = true;
128+
//If operation fails check if retry is needed or not
129+
if (status.OperationResult != AzureBackupOperationResult.Succeeded.ToString())
130+
{
131+
isDiscoverySuccessful = false;
132+
if ((status.ErrorCode == AzureBackupOperationErrorCode.DiscoveryInProgress.ToString() ||
133+
(status.ErrorCode == AzureBackupOperationErrorCode.BMSUserErrorObjectLocked.ToString())))
134+
{
135+
//Need to retry for this errors
136+
isRetryNeeded = true;
137+
}
138+
}
139+
return isRetryNeeded;
88140
}
89141

90142
private bool IsDiscoveryNeeded(string vmName, string rgName, out ContainerInfo container)
91143
{
92144
bool isDiscoveryNeed = false;
93145
//First check if container is discoverd or not
94146
ListContainerQueryParameter queryParams = new ListContainerQueryParameter();
95-
queryParams.ContainerFriendlyNameField = vmName;
96-
ListContainerResponse containers = AzureBackupClient.Container.ListAsync(queryParams,
147+
queryParams.ContainerTypeField = String.Empty; // AzureBackupContainerType.IaasVMContainer.ToString();
148+
queryParams.ContainerStatusField = String.Empty;
149+
// queryParams.ContainerFriendlyNameField = vmName;
150+
queryParams.ContainerFriendlyNameField = String.Empty;
151+
string queryString = GetQueryFileter(queryParams);
152+
153+
ListContainerResponse containers = AzureBackupClient.Container.ListAsync(queryString,
97154
GetCustomRequestHeaders(), CmdletCancellationToken).Result;
98155
if (containers.Objects.Count() == 0)
99156
{
@@ -116,5 +173,34 @@ private bool IsDiscoveryNeeded(string vmName, string rgName, out ContainerInfo c
116173
}
117174
return isDiscoveryNeed;
118175
}
176+
177+
private string GetQueryFileter(ListContainerQueryParameter queryParams)
178+
{
179+
NameValueCollection collection = new NameValueCollection();
180+
if (!String.IsNullOrEmpty(queryParams.ContainerTypeField))
181+
{
182+
collection.Add("ContainerType", queryParams.ContainerTypeField);
183+
}
184+
185+
if (!String.IsNullOrEmpty(queryParams.ContainerStatusField))
186+
{
187+
collection.Add("ContainerStatus", queryParams.ContainerStatusField);
188+
}
189+
190+
if (!String.IsNullOrEmpty(queryParams.ContainerFriendlyNameField))
191+
{
192+
collection.Add("FriendlyName", queryParams.ContainerFriendlyNameField);
193+
}
194+
195+
if (collection == null || collection.Count == 0)
196+
{
197+
return String.Empty;
198+
}
199+
200+
var httpValueCollection = HttpUtility.ParseQueryString(String.Empty);
201+
httpValueCollection.Add(collection);
202+
203+
return "&" + httpValueCollection.ToString();
204+
}
119205
}
120206
}

src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/UnregisterAzureBackupContainer.cs

Lines changed: 39 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,9 @@
1313
// ----------------------------------------------------------------------------------
1414

1515
using System;
16+
using System.Web;
1617
using System.Collections.Generic;
18+
using System.Collections.Specialized;
1719
using System.Linq;
1820
using System.Management.Automation;
1921
using System.Text;
@@ -23,7 +25,6 @@
2325
using MBS = Microsoft.Azure.Management.BackupServices;
2426
using Microsoft.Azure.Commands.Compute.Models;
2527

26-
2728
namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets
2829
{
2930
/// <summary>
@@ -47,12 +48,14 @@ public override void ExecuteCmdlet()
4748
Guid jobId = Guid.Empty;
4849

4950
ListContainerQueryParameter queryParams = new ListContainerQueryParameter();
50-
queryParams.ContainerStatusField = "Registered"; //TODO: Use enum
51+
queryParams.ContainerTypeField = AzureBackupContainerType.IaasVMContainer.ToString();
52+
queryParams.ContainerStatusField = AzureBackupContainerRegistrationStatus.Registered.ToString();
5153
queryParams.ContainerFriendlyNameField = vmName;
5254

53-
ListContainerResponse containers =
54-
AzureBackupClient.Container.ListAsync(queryParams,
55-
GetCustomRequestHeaders(), CmdletCancellationToken).Result;
55+
string queryString = GetQueryFileter(queryParams);
56+
57+
ListContainerResponse containers =
58+
AzureBackupClient.Container.ListAsync(queryString, GetCustomRequestHeaders(), CmdletCancellationToken).Result;
5659
if(containers.Objects.Count() == 0)
5760
{
5861
WriteVerbose("Container is not in the registered list");
@@ -71,7 +74,7 @@ public override void ExecuteCmdlet()
7174
}
7275
else
7376
{
74-
UnregisterContainerRequest unregRequest = new UnregisterContainerRequest(containerToUnreg.Name, "IaasVMContainer"); //TODO: Use enum
77+
UnregisterContainerRequest unregRequest = new UnregisterContainerRequest(containerToUnreg.Name, AzureBackupContainerType.IaasVMContainer.ToString());
7578
MBS.OperationResponse operationResponse = AzureBackupClient.Container.UnregisterAsync(unregRequest, GetCustomRequestHeaders(), CmdletCancellationToken).Result;
7679
jobId = operationResponse.OperationId; //TODO: Fix it once PiyushKa publish the rest APi to get jobId based on operationId
7780
}
@@ -80,5 +83,35 @@ public override void ExecuteCmdlet()
8083
WriteObject(jobId);
8184
});
8285
}
86+
87+
private string GetQueryFileter(ListContainerQueryParameter queryParams)
88+
{
89+
NameValueCollection collection = new NameValueCollection();
90+
if (!String.IsNullOrEmpty(queryParams.ContainerTypeField))
91+
{
92+
collection.Add("ContainerType", queryParams.ContainerTypeField);
93+
}
94+
95+
if (!String.IsNullOrEmpty(queryParams.ContainerStatusField))
96+
{
97+
collection.Add("ContainerStatus", queryParams.ContainerStatusField);
98+
}
99+
100+
if (!String.IsNullOrEmpty(queryParams.ContainerFriendlyNameField))
101+
{
102+
collection.Add("FriendlyName", queryParams.ContainerFriendlyNameField);
103+
}
104+
105+
if (collection == null || collection.Count == 0)
106+
{
107+
return String.Empty;
108+
}
109+
110+
var httpValueCollection = HttpUtility.ParseQueryString(String.Empty);
111+
httpValueCollection.Add(collection);
112+
113+
return "&" + httpValueCollection.ToString();
114+
115+
}
83116
}
84117
}

src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,7 @@
109109
<Reference Include="System.Runtime.Caching" />
110110
<Reference Include="System.Runtime.Serialization" />
111111
<Reference Include="System.Security" />
112+
<Reference Include="System.Web" />
112113
<Reference Include="System.Xml.Linq" />
113114
<Reference Include="System.Data.DataSetExtensions" />
114115
<Reference Include="Microsoft.CSharp" />
@@ -122,7 +123,7 @@
122123
<Compile Include="AzureBackupCmdletHelpMessage.cs" />
123124
<Compile Include="Cmdlets\BackUp\TriggerBackUp.cs" />
124125
<Compile Include="Cmdlets\RecoveryPoint\GetAzureBackupRecoveryPoint.cs" />
125-
<Compile Include="Cmdlets\Container\GetAzureBackupContainer.cs" />
126+
<None Include="Cmdlets\Container\GetAzureBackupContainer.cs" />
126127
<Compile Include="Cmdlets\Container\RegisterAzureBackupContainer.cs" />
127128
<Compile Include="Cmdlets\Container\UnregisterAzureBackupContainer.cs" />
128129
<Compile Include="Cmdlets\Jobs\GetAzureBackupJob.cs" />
@@ -134,10 +135,10 @@
134135
<Compile Include="Cmdlets\VaultCredentials\VaultCredentials.cs" />
135136
<Compile Include="Models\AzureBackupBaseObjects.cs" />
136137
<Compile Include="Models\AzureBackupContainer.cs" />
137-
<Compile Include="Models\AzureBackupContainerStatus.cs" />
138-
<Compile Include="Models\AzureBackupContainerType.cs" />
138+
<Compile Include="Models\AzureBackupEnums.cs" />
139139
<Compile Include="Models\AzureBackupItem.cs" />
140140
<Compile Include="Models\AzureBackupRecoveryPoint.cs" />
141+
<Compile Include="Models\ListContainerQueryParameter.cs" />
141142
<Compile Include="Models\ProtectionPolicy.cs" />
142143
<Compile Include="Properties\Resources.Designer.cs">
143144
<AutoGen>True</AutoGen>
@@ -189,6 +190,10 @@
189190
<Error Condition="!Exists('..\..\..\packages\Microsoft.Bcl.Build.1.0.21\build\Microsoft.Bcl.Build.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\packages\Microsoft.Bcl.Build.1.0.21\build\Microsoft.Bcl.Build.targets'))" />
190191
</Target>
191192
<Import Project="..\..\..\packages\Microsoft.Bcl.Build.1.0.21\build\Microsoft.Bcl.Build.targets" Condition="Exists('..\..\..\packages\Microsoft.Bcl.Build.1.0.21\build\Microsoft.Bcl.Build.targets')" />
193+
<PropertyGroup>
194+
<PostBuildEvent>
195+
</PostBuildEvent>
196+
</PropertyGroup>
192197
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
193198
Other similar extension points exist, see Microsoft.Common.targets.
194199
<Target Name="BeforeBuild">

src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupContainerType.cs renamed to src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupEnums.cs

Lines changed: 53 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,16 +12,68 @@
1212
// limitations under the License.
1313
// ----------------------------------------------------------------------------------
1414

15+
using Microsoft.Azure.Management.BackupServices.Models;
1516
using System;
1617
using System.Collections.Generic;
1718
using System.Linq;
1819
using System.Text;
1920
using System.Threading.Tasks;
2021

2122
namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets
23+
2224
{
2325
public enum AzureBackupContainerType
2426
{
25-
AzureVirtualMachine
27+
Invalid = 0,
28+
29+
Unknown,
30+
31+
// used by fabric adapter to populate discovered VMs
32+
IaasVMContainer,
33+
34+
// used by fabric adapter to populate discovered services
35+
// VMs are child containers of services they belong to
36+
IaasVMServiceContainer
37+
}
38+
39+
public enum AzureBackupContainerRegistrationStatus
40+
{
41+
Invalid = 0,
42+
43+
Unknown,
44+
45+
NotRegistered,
46+
47+
Registered,
48+
49+
Registering,
50+
}
51+
52+
public enum AzureBackupOperationStatus
53+
{
54+
Invalid = 0,
55+
56+
InProgress,
57+
58+
Completed
59+
}
60+
61+
public enum AzureBackupOperationResult
62+
{
63+
Invalid = 0,
64+
65+
Cancelled,
66+
67+
Succeeded,
68+
69+
Failed,
70+
71+
PartialSuccess
72+
}
73+
74+
public enum AzureBackupOperationErrorCode
75+
{
76+
BMSUserErrorObjectLocked = 390026,
77+
DiscoveryInProgress = 410002,
2678
}
2779
}

0 commit comments

Comments
 (0)