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 - { - } -}