diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/RegisterAzureBackupContainer.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/RegisterAzureBackupContainer.cs
index 2b3d175c37dd..e6352835df05 100644
--- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/RegisterAzureBackupContainer.cs
+++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/RegisterAzureBackupContainer.cs
@@ -24,36 +24,60 @@
using Microsoft.Azure.Management.BackupServices.Models;
using MBS = Microsoft.Azure.Management.BackupServices;
using Microsoft.Azure.Commands.Compute.Models;
+using Microsoft.WindowsAzure.Commands.ServiceManagement.Model;
namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets
{
///
/// Get list of containers
///
- [Cmdlet(VerbsLifecycle.Register, "AzureBackupContainer"), OutputType(typeof(Guid))]
+ [Cmdlet(VerbsLifecycle.Register, "AzureBackupContainer", DefaultParameterSetName = V1VMParameterSet), OutputType(typeof(Guid))]
public class RegisterAzureBackupContainer : AzureBackupVaultCmdletBase
{
- //[Parameter(Position = 2, Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.VirtualMachine)]
- //[ValidateNotNullOrEmpty]
- //public PSVirtualMachineInstanceView VirtualMachine { get; set; }
- [Parameter(Position = 2, Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.VirtualMachine)]
- [ValidateNotNullOrEmpty]
- public string VirtualMachineName { get; set; }
+ internal const string V1VMParameterSet = "V1VM";
+ internal const string V2VMParameterSet = "V2VM";
- [Parameter(Position = 3, Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.VirtualMachine)]
- [ValidateNotNullOrEmpty]
- public string VirtualMachineRGName { get; set; }
+ [Parameter(Mandatory = false, ValueFromPipelineByPropertyName = true, ParameterSetName = V1VMParameterSet, HelpMessage = AzureBackupCmdletHelpMessage.VirtualMachine)]
+ [Parameter(Mandatory = false, ValueFromPipelineByPropertyName = true, ParameterSetName = V2VMParameterSet, HelpMessage = AzureBackupCmdletHelpMessage.VirtualMachine)]
+ public string Name { get; set; }
+ [Parameter(Mandatory = false, ValueFromPipelineByPropertyName = true, ParameterSetName = V1VMParameterSet, HelpMessage = AzureBackupCmdletHelpMessage.VirtualMachine)]
+ public string ServiceName { get; set; }
+
+ [Parameter(Mandatory = false, ValueFromPipelineByPropertyName = true, ParameterSetName = V2VMParameterSet, HelpMessage = AzureBackupCmdletHelpMessage.VirtualMachine)]
+ public string VMResourceGroupName { get; set; }
+
+
public override void ExecuteCmdlet()
{
base.ExecuteCmdlet();
ExecutionBlock(() =>
{
- //string vmName = VirtualMachine.Name;
- //string rgName = VirtualMachine.ResourceGroupName;
- string vmName = VirtualMachineName;
- string rgName = VirtualMachineRGName;
+ string vmName = String.Empty;
+ string rgName = String.Empty;
+ string ServiceOrRG = String.Empty;
+
+ if(this.ParameterSetName == V1VMParameterSet)
+ {
+ vmName = Name;
+ rgName = ServiceName;
+ WriteDebug(String.Format("Registering ARM-V1 VM, VMName: {0}, CloudServiceName: {1}", vmName, rgName));
+ ServiceOrRG = "CloudServiceName";
+ }
+ else if(this.ParameterSetName == V2VMParameterSet)
+ {
+ vmName = Name;
+ rgName = VMResourceGroupName;
+ WriteDebug(String.Format("Registering ARM-V2 VM, VMName: {0}, ResourceGroupName: {1}", vmName, rgName));
+ ServiceOrRG = "ResourceGroupName";
+ }
+
+ else
+ {
+ throw new PSArgumentException("Please make sure you have pass right set of parameters"); //TODO: PM scrub needed
+ }
+
Guid jobId = Guid.Empty;
bool isDiscoveryNeed = false;
MBS.OperationResponse operationResponse;
@@ -62,16 +86,20 @@ public override void ExecuteCmdlet()
isDiscoveryNeed = IsDiscoveryNeeded(vmName, rgName, out container);
if(isDiscoveryNeed)
{
+ WriteDebug(String.Format("VM {0} is not yet discovered. Triggering Discovery", vmName));
RefreshContainer();
isDiscoveryNeed = IsDiscoveryNeeded(vmName, rgName, out container);
if ((isDiscoveryNeed == true) || (container == null))
{
//Container is not discovered. Throw exception
- throw new NotImplementedException();
+ string errMsg = String.Format("Failed to discover VM {0} under {1} {2}. Please make sure names are correct and VM is not deleted", vmName, ServiceOrRG, rgName);
+ WriteDebug(errMsg);
+ throw new Exception(errMsg); //TODO: Sync with piyush and srub error msg
}
}
//Container is discovered. Register the container
+ WriteDebug(String.Format("Going to register VM {0}", vmName));
List containerNameList = new List();
containerNameList.Add(container.Name);
RegisterContainerRequestInput registrationRequest = new RegisterContainerRequestInput(containerNameList, AzureBackupContainerType.IaasVMContainer.ToString());
@@ -108,16 +136,14 @@ private void RefreshContainer()
private bool WaitForDiscoveryToCOmplete(string operationId, out bool isDiscoverySuccessful)
{
bool isRetryNeeded = false;
-
-
- BMSOperationStatusResponse status = new BMSOperationStatusResponse()
+ AzureBackupOperationStatusResponse status = new AzureBackupOperationStatusResponse()
{
OperationStatus = AzureBackupOperationStatus.InProgress.ToString()
};
-
while (status.OperationStatus != AzureBackupOperationStatus.Completed.ToString())
{
status = AzureBackupClient.OperationStatus.GetAsync(operationId, GetCustomRequestHeaders(), CmdletCancellationToken).Result;
+ WriteDebug(String.Format("Status of DiscoveryOperation: {0}", status.OperationStatus));
System.Threading.Thread.Sleep(TimeSpan.FromSeconds(15));
}
@@ -126,11 +152,13 @@ private bool WaitForDiscoveryToCOmplete(string operationId, out bool isDiscovery
if (status.OperationResult != AzureBackupOperationResult.Succeeded.ToString())
{
isDiscoverySuccessful = false;
+ WriteDebug(String.Format("DiscoveryOperation failed wit ErrorCOde: {0}", status.ErrorCode));
if ((status.ErrorCode == AzureBackupOperationErrorCode.DiscoveryInProgress.ToString() ||
(status.ErrorCode == AzureBackupOperationErrorCode.BMSUserErrorObjectLocked.ToString())))
{
//Need to retry for this errors
isRetryNeeded = true;
+ WriteDebug(String.Format("Going to retry Discovery if retry count is not exceeded"));
}
}
return isRetryNeeded;
@@ -148,10 +176,11 @@ private bool IsDiscoveryNeeded(string vmName, string rgName, out ContainerInfo c
ListContainerResponse containers = AzureBackupClient.Container.ListAsync(queryString,
GetCustomRequestHeaders(), CmdletCancellationToken).Result;
+ WriteDebug(String.Format("Container count returned from service: {0}.", containers.Objects.Count()));
if (containers.Objects.Count() == 0)
{
//Container is not discover
- WriteVerbose("Container is not discovered");
+ WriteDebug("Container is not discovered");
container = null;
isDiscoveryNeed = true;
}
@@ -159,11 +188,12 @@ private bool IsDiscoveryNeeded(string vmName, string rgName, out ContainerInfo c
else
{
//We can have multiple container with same friendly name.
- //Look for resourceGroup name in the container unoque name
+ //Look for resourceGroup name in the container unoque name
container = containers.Objects.Where(c => c.ParentContainerFriendlyName.ToLower().Equals(rgName.ToLower())).FirstOrDefault();
if (container == null)
{
//Container is not in list of registered container
+ WriteDebug(String.Format("Desired Container is not found. Returning with isDiscoveryNeed = true"));
isDiscoveryNeed = true;
}
}
diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/UnregisterAzureBackupContainer.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/UnregisterAzureBackupContainer.cs
index 0d7ec45cbd7b..65004e79333a 100644
--- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/UnregisterAzureBackupContainer.cs
+++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/UnregisterAzureBackupContainer.cs
@@ -33,9 +33,9 @@ namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets
[Cmdlet(VerbsLifecycle.Unregister, "AzureBackupContainer"), OutputType(typeof(Guid))]
public class UnregisterAzureBackupContainer : AzureBackupVaultCmdletBase
{
- [Parameter(Position = 2, Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.VirtualMachine, ValueFromPipelineByPropertyName = true)]
+ [Parameter(Position = 2, Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.VirtualMachine, ValueFromPipeline = true)]
[ValidateNotNullOrEmpty]
- public string ContainerUniqueName { get; set; }
+ public AzureBackupContainer AzureBackupContainer { get; set; }
public override void ExecuteCmdlet()
{
@@ -43,7 +43,8 @@ public override void ExecuteCmdlet()
ExecutionBlock(() =>
{
- UnregisterContainerRequestInput unregRequest = new UnregisterContainerRequestInput(ContainerUniqueName, AzureBackupContainerType.IaasVMContainer.ToString());
+ string containerUniqueName = AzureBackupContainer.ContainerUniqueName;
+ UnregisterContainerRequestInput unregRequest = new UnregisterContainerRequestInput(containerUniqueName, AzureBackupContainerType.IaasVMContainer.ToString());
MBS.OperationResponse operationResponse = AzureBackupClient.Container.UnregisterAsync(unregRequest, GetCustomRequestHeaders(), CmdletCancellationToken).Result;
Guid jobId = operationResponse.OperationId; //TODO: Fix it once PiyushKa publish the rest APi to get jobId based on operationId
diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/RegisterContainer/RegisterAzureBackupContainer.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/RegisterContainer/RegisterAzureBackupContainer.cs
deleted file mode 100644
index 86ce6b337f0a..000000000000
--- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/RegisterContainer/RegisterAzureBackupContainer.cs
+++ /dev/null
@@ -1,14 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using System.Management.Automation;
-
-namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets.RegisterContainer
-{
- //[Cmdlet(VerbsCommon.Get, ProfileNouns.VirtualMachine, DefaultParameterSetName = ListAllVirtualMachinesParamSet)]
- class RegisterAzureBackupContainer
- {
- }
-}