From cc0a07cff9dbefb9b5aa0d80edca090a7455cce3 Mon Sep 17 00:00:00 2001 From: piyushka17 Date: Mon, 25 May 2015 16:28:46 +0530 Subject: [PATCH 001/155] Change Set 1 --- src/ResourceManager.AzureBackup.sln | 22 + .../AzureBackupCmdletBase.cs | 160 +++++ .../AzureBackupCmdletHelpMessage.cs | 24 + .../Cmdlets/Jobs/GetAzureBackupJob.cs | 33 + .../GetAzureBackupProtectionPolicy.cs | 63 ++ .../Commands.AzureBackup.csproj | 168 +++++ ...t.Azure.Commands.AzureBackup.format.ps1xml | 669 ++++++++++++++++++ ...ft.Azure.Commands.AzureBackup.types.ps1xml | 16 + ...owsAzure.Commands.StorSimple.dll-help.psd1 | 88 +++ .../Models/AzureBackupBaseObjects.cs | 39 + .../Models/ProtectionPolicy.cs | 65 ++ .../Properties/AssemblyInfo.cs | 35 + .../Properties/Resources.Designer.cs | 72 ++ .../Properties/Resources.resx | 123 ++++ .../Commands.AzureBackup/packages.config | 17 + 15 files changed, 1594 insertions(+) create mode 100644 src/ResourceManager.AzureBackup.sln create mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupCmdletBase.cs create mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupCmdletHelpMessage.cs create mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Jobs/GetAzureBackupJob.cs create mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/GetAzureBackupProtectionPolicy.cs create mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj create mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup/Microsoft.Azure.Commands.AzureBackup.format.ps1xml create mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup/Microsoft.Azure.Commands.AzureBackup.types.ps1xml create mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup/Microsoft.WindowsAzure.Commands.StorSimple.dll-help.psd1 create mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupBaseObjects.cs create mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/ProtectionPolicy.cs create mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup/Properties/AssemblyInfo.cs create mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup/Properties/Resources.Designer.cs create mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup/Properties/Resources.resx create mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup/packages.config diff --git a/src/ResourceManager.AzureBackup.sln b/src/ResourceManager.AzureBackup.sln new file mode 100644 index 000000000000..7e69df5fb3c6 --- /dev/null +++ b/src/ResourceManager.AzureBackup.sln @@ -0,0 +1,22 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Express 2013 for Web +VisualStudioVersion = 12.0.31101.0 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Commands.AzureBackup", "ResourceManager\AzureBackup\Commands.AzureBackup\Commands.AzureBackup.csproj", "{6C8D2337-C9D1-4F52-94B3-AB63A19F3453}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {6C8D2337-C9D1-4F52-94B3-AB63A19F3453}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6C8D2337-C9D1-4F52-94B3-AB63A19F3453}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6C8D2337-C9D1-4F52-94B3-AB63A19F3453}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6C8D2337-C9D1-4F52-94B3-AB63A19F3453}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupCmdletBase.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupCmdletBase.cs new file mode 100644 index 000000000000..973a5489cf40 --- /dev/null +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupCmdletBase.cs @@ -0,0 +1,160 @@ +// ---------------------------------------------------------------------------------- +// +// Copyright Microsoft Corporation +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// ---------------------------------------------------------------------------------- + +using System; +using System.Management.Automation; +using System.Collections.Generic; +using System.Xml; +using Microsoft.WindowsAzure.Commands.Utilities.Common; +using Microsoft.WindowsAzure.Management.BackupServices; +using Microsoft.Azure.Common.Authentication; +using Microsoft.Azure.Common.Authentication.Models; +using System.Threading; +using Hyak.Common; +using Microsoft.Azure.Commands.AzureBackup.Properties; +using System.Net; + +namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets +{ + public abstract class AzureBackupCmdletBase : AzurePSCmdlet + { + /// + /// ResourceGroup context for the operation + /// + protected string ResourceGroupName { get; set; } + + /// + /// Resource context for the operation + /// + protected string ResourceName { get; set; } + + /// + /// Client request id. + /// + protected string clientRequestId; + + /// + /// Azure backup client. + /// + private BackupServicesManagementClient azureBackupClient; + + /// + /// Cancellation Token Source + /// + private CancellationTokenSource cancellationTokenSource = new CancellationTokenSource(); + protected CancellationToken CmdletCancellationToken; + + /// + /// Get Azure backup client. + /// + protected BackupServicesManagementClient AzureBackupClient + { + get + { + if (this.azureBackupClient == null) + { + this.azureBackupClient = AzureSession.ClientFactory.CreateClient(Profile, Profile.Context.Subscription, AzureEnvironment.Endpoint.ResourceManager); + // this.azureBackupClient.ResourceGroupName = resourceGroupName; + // this.azureBackupClient.ResourceName = resourceName; + } + + return this.azureBackupClient; + } + } + + public override void ExecuteCmdlet() + { + base.ExecuteCmdlet(); + + // Vaildate RGName, RName? + + clientRequestId = Guid.NewGuid().ToString() + "-" + DateTime.Now.ToUniversalTime().ToString("yyyy-MM-dd HH:mm:ssZ") + "-PS"; + + WriteVerbose(string.Format("ClientRequestId: {0}", this.clientRequestId)); + + CmdletCancellationToken = cancellationTokenSource.Token; + } + + protected void ExecutionBlock(Action execAction) + { + try + { + execAction(); + } + catch (Exception exception) + { + WriteDebug(String.Format("Caught exception, type: {0}", exception.GetType())); + HandleException(exception); + } + } + + /// + /// Handles set of exceptions thrown by client + /// + /// + private void HandleException(Exception exception) + { + if (exception is AggregateException && ((AggregateException)exception).InnerExceptions != null + && ((AggregateException)exception).InnerExceptions.Count != 0) + { + WriteDebug("Handling aggregate exception"); + foreach (var innerEx in ((AggregateException)exception).InnerExceptions) + { + HandleException(innerEx); + } + } + else + { + Exception targetEx = exception; + string targetErrorId = String.Empty; + ErrorCategory targetErrorCategory = ErrorCategory.NotSpecified; + + if (exception is CloudException) + { + var cloudEx = exception as CloudException; + if (cloudEx.Response != null && cloudEx.Response.StatusCode == HttpStatusCode.NotFound) + { + WriteDebug(String.Format("Received CloudException, StatusCode: {0}", cloudEx.Response.StatusCode)); + + targetEx = new Exception(Resources.ResourceNotFoundMessage); + targetErrorCategory = ErrorCategory.InvalidArgument; + } + else if (cloudEx.Error != null) + { + WriteDebug(String.Format("Received CloudException, ErrorCode: {0}, Message: {1}", cloudEx.Error.Code, cloudEx.Error.Message)); + + targetErrorId = cloudEx.Error.Code; + targetErrorCategory = ErrorCategory.InvalidOperation; + } + } + else if (exception is WebException) + { + var webEx = exception as WebException; + WriteDebug(string.Format("Received WebException, Response: {0}, Status: {1}", webEx.Response, webEx.Status)); + + targetErrorCategory = ErrorCategory.ConnectionError; + } + else if (exception is ArgumentException || exception is ArgumentNullException) + { + WriteDebug(string.Format("Received ArgumentException")); + targetErrorCategory = ErrorCategory.InvalidArgument; + } + + var errorRecord = new ErrorRecord(targetEx, targetErrorId, targetErrorCategory, null); + WriteError(errorRecord); + } + } + } +} + diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupCmdletHelpMessage.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupCmdletHelpMessage.cs new file mode 100644 index 000000000000..c0622a7d8c60 --- /dev/null +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupCmdletHelpMessage.cs @@ -0,0 +1,24 @@ +// ---------------------------------------------------------------------------------- +// +// Copyright Microsoft Corporation +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// ---------------------------------------------------------------------------------- + +namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets +{ + + internal static class AzureBackupCmdletHelpMessage + { + public const string ResourceGroupName = "The resource group name."; + public const string ResourceName = "The resource name."; + public const string PolicyName = "The protection policy name."; + } +} diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Jobs/GetAzureBackupJob.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Jobs/GetAzureBackupJob.cs new file mode 100644 index 000000000000..62cb2471c907 --- /dev/null +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Jobs/GetAzureBackupJob.cs @@ -0,0 +1,33 @@ +// ---------------------------------------------------------------------------------- +// +// Copyright Microsoft Corporation +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// ---------------------------------------------------------------------------------- + +using System; +using System.Management.Automation; +using System.Collections.Generic; +using System.Xml; + +namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets +{ + /// + /// Get list of containers + /// + [Cmdlet(VerbsCommon.Get, "AzureBackupJob"), OutputType(typeof(string))] + public class GetAzureBackupJob : AzureBackupCmdletBase + { + public override void ExecuteCmdlet() + { + } + } +} + diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/GetAzureBackupProtectionPolicy.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/GetAzureBackupProtectionPolicy.cs new file mode 100644 index 000000000000..874842e65521 --- /dev/null +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/GetAzureBackupProtectionPolicy.cs @@ -0,0 +1,63 @@ +// ---------------------------------------------------------------------------------- +// +// Copyright Microsoft Corporation +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// ---------------------------------------------------------------------------------- + +using System; +using System.Management.Automation; +using System.Collections.Generic; +using System.Xml; +using Microsoft.WindowsAzure.Management.BackupServices.Models; + +namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets +{ + /// + /// Get list of containers + /// + [Cmdlet(VerbsCommon.Get, "AzureBackupProtectionPolicy"), OutputType(typeof(ProtectionPolicyInfo), typeof(List))] + public class GetAzureBackupProtectionPolicy : AzureBackupCmdletBase + { + [Parameter(Position = 2, Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.PolicyName)] + [ValidateNotNullOrEmpty] + public string Name { get; set; } + + public override void ExecuteCmdlet() + { + base.ExecuteCmdlet(); + + ExecutionBlock(() => + { + var policyListResponse = AzureBackupClient.ProtectionPolicy.ListAsync("1234", CmdletCancellationToken).Result; + + WriteAzureBackupProtectionPolicy(policyListResponse.ProtectionPolicies.Objects); + }); + } + + public void WriteAzureBackupProtectionPolicy(ProtectionPolicyInfo sourcePolicy) + { + this.WriteObject(new AzureBackupProtectionPolicy(ResourceGroupName, ResourceName, sourcePolicy)); + } + + public void WriteAzureBackupProtectionPolicy(IList sourcePolicyList) + { + List targetList = new List(); + + foreach (var sourcePolicy in sourcePolicyList) + { + targetList.Add(new AzureBackupProtectionPolicy(ResourceGroupName, ResourceName, sourcePolicy)); + } + + this.WriteObject(targetList, true); + } + } +} + diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj new file mode 100644 index 000000000000..ee9508407cd6 --- /dev/null +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj @@ -0,0 +1,168 @@ + + + + + Debug + AnyCPU + {6C8D2337-C9D1-4F52-94B3-AB63A19F3453} + Library + Properties + Microsoft.Azure.Commands.AzureBackup + Microsoft.Azure.Commands.AzureBackup + v4.5 + 512 + + ..\..\..\ + true + + + true + full + false + ..\..\..\Package\Debug\ResourceManager\AzureResourceManager\AzureBackup\ + DEBUG;TRACE + prompt + 4 + false + false + true + true + MinimumRecommendedRules.ruleset + + + ..\..\..\Package\Release\ServiceManagement\Azure\StorSimple\ + TRACE;SIGN + true + pdbonly + AnyCPU + prompt + MinimumRecommendedRules.ruleset + true + MSSharedLibKey.snk + true + false + + + + ..\..\..\packages\Hyak.Common.1.0.2\lib\portable-net403+win+wpa81\Hyak.Common.dll + + + ..\..\..\packages\Microsoft.Azure.Common.2.1.0\lib\net45\Microsoft.Azure.Common.dll + + + False + ..\..\..\packages\Microsoft.Azure.Common.Authentication.1.0.25-preview\lib\net45\Microsoft.Azure.Common.Authentication.dll + + + ..\..\..\packages\Microsoft.Azure.Common.2.1.0\lib\net45\Microsoft.Azure.Common.NetFramework.dll + + + ..\..\..\packages\Microsoft.Azure.Management.Resources.2.18.0-preview\lib\net40\Microsoft.Azure.ResourceManager.dll + + + ..\..\..\packages\Microsoft.IdentityModel.Clients.ActiveDirectory.2.14.201151115\lib\net45\Microsoft.IdentityModel.Clients.ActiveDirectory.dll + + + ..\..\..\packages\Microsoft.IdentityModel.Clients.ActiveDirectory.2.14.201151115\lib\net45\Microsoft.IdentityModel.Clients.ActiveDirectory.WindowsForms.dll + + + ..\..\..\packages\Microsoft.Bcl.Async.1.0.168\lib\net40\Microsoft.Threading.Tasks.dll + + + ..\..\..\packages\Microsoft.Bcl.Async.1.0.168\lib\net40\Microsoft.Threading.Tasks.Extensions.dll + + + ..\..\..\packages\Microsoft.Bcl.Async.1.0.168\lib\net40\Microsoft.Threading.Tasks.Extensions.Desktop.dll + + + ..\..\..\packages\Microsoft.WindowsAzure.Management.4.1.1\lib\net40\Microsoft.WindowsAzure.Management.dll + + + ..\..\..\Microsoft.WindowsAzure.Management.BackupServicesManagment.dll + + + ..\..\..\packages\Microsoft.WindowsAzure.Management.Scheduler.6.0.0\lib\net40\Microsoft.WindowsAzure.Management.Scheduler.dll + + + ..\..\..\packages\Newtonsoft.Json.6.0.8\lib\net45\Newtonsoft.Json.dll + + + + + + + + False + ..\..\..\packages\Microsoft.Net.Http.2.2.28\lib\net45\System.Net.Http.Extensions.dll + + + False + ..\..\..\packages\Microsoft.Net.Http.2.2.28\lib\net45\System.Net.Http.Primitives.dll + + + + + + + + + + + + + + + + + + True + True + Resources.resx + + + + + + {5ee72c53-1720-4309-b54b-5fb79703195f} + Commands.Common + + + + + Always + + + Always + + + Designer + + + + + ResXFileCodeGenerator + Designer + Resources.Designer.cs + + + + + + + + + + This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. + + + + + + + \ No newline at end of file diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Microsoft.Azure.Commands.AzureBackup.format.ps1xml b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Microsoft.Azure.Commands.AzureBackup.format.ps1xml new file mode 100644 index 000000000000..adc17aa5aabe --- /dev/null +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Microsoft.Azure.Commands.AzureBackup.format.ps1xml @@ -0,0 +1,669 @@ + + + + + Microsoft.WindowsAzure.Management.StorSimple.Models.TaskStatusInfo + + Microsoft.WindowsAzure.Management.StorSimple.Models.TaskStatusInfo + + + + + + 36 + + + + 16 + + + + + + + + + + + + + + TaskId + + + AsyncTaskAggregatedResult + + + $_.GetSteps + + + $_.GetErrors + + + + + + + + Microsoft.WindowsAzure.Management.StorSimple.Models.TaskStep + + Microsoft.WindowsAzure.Management.StorSimple.Models.TaskStep + + + + + + + + + + + + Message + + + + + + + + Microsoft.WindowsAzure.Management.StorSimple.Models.ErrorDetails + + Microsoft.WindowsAzure.Management.StorSimple.Models.ErrorDetails + + + + + + + + + + + + + + + Message + + + Code + + + + + + + + Microsoft.WindowsAzure.Management.StorSimple.Models.DeviceJobDetails + + Microsoft.WindowsAzure.Management.StorSimple.Models.DeviceJobDetails + + + + + + 36 + + + + 28 + + + + + + + + + + + + + + + + + + + + InstanceId + + + Type + + + Status + + + $_.Device.Name + + + $_.TimeStats.StartTimestamp + + + Progress + + + + + + + + Microsoft.WindowsAzure.Management.StorSimple.Models.Backup + + Microsoft.WindowsAzure.Management.StorSimple.Models.Backup + + + + + + 36 + + + + + + + 13 + + + + + + + + + + + + + + + + + + + + + + + InstanceId + + + Name + + + Type + + + BackupJobCreationType + + + CreatedOn + + + SizeInBytes + + + Snapshots + + + SSMHostName + + + + + + + + Microsoft.WindowsAzure.Management.StorSimple.Models.BackupPolicy + + Microsoft.WindowsAzure.Management.StorSimple.Models.BackupPolicy + + + + + + 36 + + + + + + + 14 + + + + + + + + + + + + + + + + + + + + + + + InstanceId + + + Name + + + SchedulesCount + + + VolumesCount + + + BackupPolicyCreationType + + + LastBackup + + + NextBackup + + + SSMHostName + + + + + + + + Microsoft.WindowsAzure.Management.StorSimple.Models.BackupPolicyDetails + + Microsoft.WindowsAzure.Management.StorSimple.Models.BackupPolicyDetails + + + + + + + InstanceId + + + Name + + + SchedulesCount + + + BackupSchedules + + + VolumesCount + + + Volumes + + + BackupPolicyCreationType + + + LastBackup + + + NextBackup + + + SSMHostName + + + + + + + + Microsoft.WindowsAzure.Management.StorSimple.Models.VirtualDisk + + Microsoft.WindowsAzure.Management.StorSimple.Models.VirtualDisk + + + + + + + InstanceId + + + Name + + + Online + + + SizeInBytes + + + AccessType + + + AcrList + + + AppType + + + DataContainerId + + + IsBackupEnabled + + + IsDefaultBackupEnabled + + + IsMonitoringEnabled + + + VSN + + + + + + + + Microsoft.WindowsAzure.Management.StorSimple.Models.DataContainer + + Microsoft.WindowsAzure.Management.StorSimple.Models.DataContainer + + + + + + 36 + + + + + + + 20 + + + + 5 + + + + + + + + + + + + + + + + + InstanceId + + + Name + + + IsEncryptionEnabled + + + Owned + + + BandwidthRate + + + $_.PrimaryStorageAccountCredential.Name + + + VolumeCount + + + + + + + + Microsoft.WindowsAzure.Management.StorSimple.Models.DeviceInfo + + Microsoft.WindowsAzure.Management.StorSimple.Models.DeviceInfo + + + + + + + DeviceId + + + + FriendlyName + + + SerialNumber + + + DeviceSoftwareVersion + + + Location + + + ModelDescription + + + Status + + + Type + + + TargetIQN + + + TimeZone + + + ActivationTime + + + AvailableStorageInBytes + + + ProvisionedStorageInBytes + + + TotalStorageInBytes + + + UsingStorageInBytes + + + + + + + + Microsoft.WindowsAzure.Management.StorSimple.Models.AccessControlRecord + + Microsoft.WindowsAzure.Management.StorSimple.Models.AccessControlRecord + + + + + + 36 + + + + + + + + + + + + + + + + InstanceId + + + Name + + + InitiatorName + + + VolumeCount + + + + + + + + Microsoft.WindowsAzure.Commands.StorSimple.ResourceCredentials + + Microsoft.WindowsAzure.Commands.StorSimple.ResourceCredentials + + + + + + + + + 20 + + + + + + + + + + ResourceName + + + ResourceId + + + ResourceState + + + + + + + + Microsoft.WindowsAzure.Commands.StorSimple.StorSimpleResourceContext + + Microsoft.WindowsAzure.Commands.StorSimple.StorSimpleResourceContext + + + + + + 20 + + + + + + + + + + ResourceId + + + ResourceName + + + + + + + + Microsoft.WindowsAzure.Management.StorSimple.Models.StorageAccountCredentialResponse + + Microsoft.WindowsAzure.Management.StorSimple.Models.StorageAccountCredentialResponse + + + + + + 36 + + + + + + + + + + 6 + + + + + + + 12 + + + + + + + + + + InstanceId + + + Login + + + Name + + + UseSSL + + + VolumeCount + + + CloudType + + + Location + + + + + + + + diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Microsoft.Azure.Commands.AzureBackup.types.ps1xml b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Microsoft.Azure.Commands.AzureBackup.types.ps1xml new file mode 100644 index 000000000000..1429986fb1b3 --- /dev/null +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Microsoft.Azure.Commands.AzureBackup.types.ps1xml @@ -0,0 +1,16 @@ + + + + Microsoft.WindowsAzure.Management.StorSimple.Models.TaskStatusInfo + + + GetSteps + if( ($_.TaskSteps | Select Message -ExpandProperty Message) -ne $null ) { [string]::Join(" `n", ($_.TaskSteps | Select -ExpandProperty Message)) } else { "No Steps" } + + + GetErrors + if( ($_.Error | Select Message -ExpandProperty Message) -ne $null ) { [string]::Join(" `n", ($_.Error | Select -ExpandProperty Message)) } else { "No Errors" } + + + + \ No newline at end of file diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Microsoft.WindowsAzure.Commands.StorSimple.dll-help.psd1 b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Microsoft.WindowsAzure.Commands.StorSimple.dll-help.psd1 new file mode 100644 index 000000000000..ead8aec13057 --- /dev/null +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Microsoft.WindowsAzure.Commands.StorSimple.dll-help.psd1 @@ -0,0 +1,88 @@ +# +# Module manifest for module 'Microsoft.WindowsAzure.Commands.StorSimple' +# +# Generated by: Microsoft Corporation +# +# Generated on: 1/18/2015 +# + +@{ + +# Version number of this module. +ModuleVersion = '0.8.13' + +# ID used to uniquely identify this module +GUID = 'd52ed268-64c7-46bd-9cf8-1814d07409f8' + +# Author of this module +Author = 'Microsoft Corporation' + +# Company or vendor of this module +CompanyName = 'Microsoft Corporation' + +# Copyright statement for this module +Copyright = '© Microsoft Corporation. All rights reserved.' + +# Description of the functionality provided by this module +Description = '' + +# Minimum version of the Windows PowerShell engine required by this module +PowerShellVersion = '3.0' + +# Name of the Windows PowerShell host required by this module +PowerShellHostName = '' + +# Minimum version of the Windows PowerShell host required by this module +PowerShellHostVersion = '' + +# Minimum version of the .NET Framework required by this module +DotNetFrameworkVersion = '4.0' + +# Minimum version of the common language runtime (CLR) required by this module +CLRVersion='4.0' + +# Processor architecture (None, X86, Amd64, IA64) required by this module +ProcessorArchitecture = 'None' + +# Modules that must be imported into the global environment prior to importing this module +RequiredModules = @() + +# Assemblies that must be loaded prior to importing this module +RequiredAssemblies = @() + +# Script files (.ps1) that are run in the caller's environment prior to importing this module +ScriptsToProcess = @() + +# Type files (.ps1xml) to be loaded when importing this module +TypesToProcess = @() + +# Format files (.ps1xml) to be loaded when importing this module +FormatsToProcess = @() + +# Modules to import as nested modules of the module specified in ModuleToProcess +NestedModules = @( + '..\..\..\Package\Debug\ServiceManagement\Azure\StorSimple\Microsoft.WindowsAzure.Commands.StorSimple.dll' +) + +# Functions to export from this module +FunctionsToExport = '*' + +# Cmdlets to export from this module +CmdletsToExport = '*' + +# Variables to export from this module +VariablesToExport = '*' + +# Aliases to export from this module +AliasesToExport = @() + +# List of all modules packaged with this module +ModuleList = @() + +# List of all files packaged with this module +FileList = @() + +# Private data to pass to the module specified in ModuleToProcess +PrivateData = '' + +} diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupBaseObjects.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupBaseObjects.cs new file mode 100644 index 000000000000..f5f4c58c6f26 --- /dev/null +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupBaseObjects.cs @@ -0,0 +1,39 @@ +// ---------------------------------------------------------------------------------- +// +// Copyright Microsoft Corporation +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// ---------------------------------------------------------------------------------- + +namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets +{ + public abstract class AzureBackupVaultContextObject + { + /// + /// ResourceGroupName of the azurebackup object + /// + public string ResourceGroupName { get; set; } + + /// + /// ResourceName of the azurebackup object + /// + public string ResourceName { get; set; } + + public AzureBackupVaultContextObject() + { + } + + public AzureBackupVaultContextObject(string resourceGroupName, string resourceName) + { + ResourceGroupName = resourceGroupName; + ResourceName = resourceName; + } + } +} diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/ProtectionPolicy.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/ProtectionPolicy.cs new file mode 100644 index 000000000000..48986ca9be50 --- /dev/null +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/ProtectionPolicy.cs @@ -0,0 +1,65 @@ +// ---------------------------------------------------------------------------------- +// +// Copyright Microsoft Corporation +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// ---------------------------------------------------------------------------------- + +using Microsoft.WindowsAzure.Management.BackupServices.Models; +using System; +using System.Collections.Generic; +namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets +{ + /// + /// Represents ProtectionPolicy object + /// + public class AzureBackupProtectionPolicy : AzureBackupVaultContextObject + { + /// + /// InstanceId of the azurebackup object + /// + public string InstanceId { get; set; } + + /// + /// Name of the azurebackup object + /// + public string Name { get; set; } + + public string WorkloadType { get; set; } + + public string BackupType { get; set; } + + public DateTime ScheduleStartTime { get; set; } + + public IList ScheduleRunTimes { get; set; } + + public string RetentionType { get; set; } + + public int RetentionDuration { get; set; } + + public AzureBackupProtectionPolicy() + { + } + + public AzureBackupProtectionPolicy(string resourceGroupName, string resourceName, ProtectionPolicyInfo sourcePolicy) : base(resourceGroupName, resourceName) + { + InstanceId = sourcePolicy.InstanceId; + Name = sourcePolicy.Name; + WorkloadType = sourcePolicy.WorkloadType; + + BackupType = sourcePolicy.Schedule.BackupType; + ScheduleStartTime = sourcePolicy.Schedule.ScheduleStartTime; + ScheduleRunTimes = sourcePolicy.Schedule.ScheduleRunTimes; + + RetentionType = sourcePolicy.Schedule.RetentionPolicy.RetentionType.ToString(); + RetentionDuration = sourcePolicy.Schedule.RetentionPolicy.RetentionDuration; + } + } +} diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Properties/AssemblyInfo.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Properties/AssemblyInfo.cs new file mode 100644 index 000000000000..9cea209aa6cd --- /dev/null +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Properties/AssemblyInfo.cs @@ -0,0 +1,35 @@ +// ---------------------------------------------------------------------------------- +// +// Copyright Microsoft Corporation +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// ---------------------------------------------------------------------------------- + +using System; +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("Microsoft Azure Powershell")] +[assembly: AssemblyCompany(Microsoft.WindowsAzure.Commands.Common.AzurePowerShell.AssemblyCompany)] +[assembly: AssemblyProduct(Microsoft.WindowsAzure.Commands.Common.AzurePowerShell.AssemblyProduct)] +[assembly: AssemblyCopyright(Microsoft.WindowsAzure.Commands.Common.AzurePowerShell.AssemblyCopyright)] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] +[assembly: CLSCompliant(false)] + +[assembly: AssemblyVersion(Microsoft.WindowsAzure.Commands.Common.AzurePowerShell.AssemblyVersion)] +[assembly: AssemblyFileVersion(Microsoft.WindowsAzure.Commands.Common.AzurePowerShell.AssemblyFileVersion)] \ No newline at end of file diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Properties/Resources.Designer.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Properties/Resources.Designer.cs new file mode 100644 index 000000000000..86135b355019 --- /dev/null +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Properties/Resources.Designer.cs @@ -0,0 +1,72 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.34014 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Microsoft.Azure.Commands.AzureBackup.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Microsoft.Azure.Commands.AzureBackup.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Looks up a localized string similar to The specified resource does not exist.. + /// + internal static string ResourceNotFoundMessage { + get { + return ResourceManager.GetString("ResourceNotFoundMessage", resourceCulture); + } + } + } +} diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Properties/Resources.resx b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Properties/Resources.resx new file mode 100644 index 000000000000..11366ab53caa --- /dev/null +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Properties/Resources.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + The specified resource does not exist. + + \ No newline at end of file diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/packages.config b/src/ResourceManager/AzureBackup/Commands.AzureBackup/packages.config new file mode 100644 index 000000000000..88711c491451 --- /dev/null +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/packages.config @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file From 7566d0d75b7166d069329a9a91faf22444193347 Mon Sep 17 00:00:00 2001 From: piyushka17 Date: Wed, 27 May 2015 15:50:06 +0530 Subject: [PATCH 002/155] Reference cmdlet --- .../AzureBackupCmdletBase.cs | 38 +++++++++----- .../AzureBackupCmdletHelpMessage.cs | 5 +- .../AzureBackupVaultCmdletBase.cs | 50 +++++++++++++++++++ .../GetAzureBackupProtectionPolicy.cs | 28 ++++++++--- 4 files changed, 101 insertions(+), 20 deletions(-) create mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupVaultCmdletBase.cs diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupCmdletBase.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupCmdletBase.cs index 973a5489cf40..c0aec687272e 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupCmdletBase.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupCmdletBase.cs @@ -17,13 +17,15 @@ using System.Collections.Generic; using System.Xml; using Microsoft.WindowsAzure.Commands.Utilities.Common; -using Microsoft.WindowsAzure.Management.BackupServices; using Microsoft.Azure.Common.Authentication; using Microsoft.Azure.Common.Authentication.Models; using System.Threading; using Hyak.Common; using Microsoft.Azure.Commands.AzureBackup.Properties; using System.Net; +using Microsoft.WindowsAzure.Management.Scheduler; +using Microsoft.Azure.Management.BackupServices; +using Microsoft.Azure.Management.BackupServices.Models; namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets { @@ -32,17 +34,17 @@ public abstract class AzureBackupCmdletBase : AzurePSCmdlet /// /// ResourceGroup context for the operation /// - protected string ResourceGroupName { get; set; } + private string resourceGroupName { get; set; } /// /// Resource context for the operation /// - protected string ResourceName { get; set; } + private string resourceName { get; set; } /// /// Client request id. /// - protected string clientRequestId; + private string clientRequestId; /// /// Azure backup client. @@ -64,24 +66,25 @@ protected BackupServicesManagementClient AzureBackupClient { if (this.azureBackupClient == null) { - this.azureBackupClient = AzureSession.ClientFactory.CreateClient(Profile, Profile.Context.Subscription, AzureEnvironment.Endpoint.ResourceManager); - // this.azureBackupClient.ResourceGroupName = resourceGroupName; - // this.azureBackupClient.ResourceName = resourceName; + // Temp code to be able to test internal env. + ServicePointManager.ServerCertificateValidationCallback = delegate { return true; }; + + var cloudServicesClient = AzureSession.ClientFactory.CreateClient(Profile, Profile.Context.Subscription, AzureEnvironment.Endpoint.ResourceManager); + this.azureBackupClient = AzureSession.ClientFactory.CreateCustomClient(resourceName, resourceGroupName, cloudServicesClient.Credentials, cloudServicesClient.BaseUri); } return this.azureBackupClient; } } - public override void ExecuteCmdlet() + public void InitializeAzureBackupCmdlet(string rgName, string rName) { - base.ExecuteCmdlet(); - - // Vaildate RGName, RName? + resourceGroupName = rgName; + resourceName = rName; clientRequestId = Guid.NewGuid().ToString() + "-" + DateTime.Now.ToUniversalTime().ToString("yyyy-MM-dd HH:mm:ssZ") + "-PS"; - WriteVerbose(string.Format("ClientRequestId: {0}", this.clientRequestId)); + WriteDebug(string.Format("Initialized AzureBackup Cmdlet, ClientRequestId: {0}, ResourceGroupName: {1}, ResourceName : {2}", this.clientRequestId, resourceGroupName, resourceName)); CmdletCancellationToken = cancellationTokenSource.Token; } @@ -155,6 +158,17 @@ private void HandleException(Exception exception) WriteError(errorRecord); } } + + protected CustomRequestHeaders GetCustomRequestHeaders() + { + var hdrs = new CustomRequestHeaders() + { + // ClientRequestId is a unique ID for every request to backend service. + ClientRequestId = this.clientRequestId, + }; + + return hdrs; + } } } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupCmdletHelpMessage.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupCmdletHelpMessage.cs index c0622a7d8c60..ec188f3d5ee5 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupCmdletHelpMessage.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupCmdletHelpMessage.cs @@ -17,8 +17,9 @@ namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets internal static class AzureBackupCmdletHelpMessage { - public const string ResourceGroupName = "The resource group name."; - public const string ResourceName = "The resource name."; + public const string Vault = "The vault details"; public const string PolicyName = "The protection policy name."; + public const string ResourceGroupName = "The ResourceGroup name."; + public const string ResourceName = "The Resource name."; } } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupVaultCmdletBase.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupVaultCmdletBase.cs new file mode 100644 index 000000000000..b95e48760f6a --- /dev/null +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupVaultCmdletBase.cs @@ -0,0 +1,50 @@ +// ---------------------------------------------------------------------------------- +// +// Copyright Microsoft Corporation +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// ---------------------------------------------------------------------------------- + +using System; +using System.Management.Automation; +using System.Collections.Generic; +using System.Xml; +using Microsoft.WindowsAzure.Commands.Utilities.Common; +using Microsoft.Azure.Common.Authentication; +using Microsoft.Azure.Common.Authentication.Models; +using System.Threading; +using Hyak.Common; +using Microsoft.Azure.Commands.AzureBackup.Properties; +using System.Net; + +namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets +{ + public abstract class AzureBackupVaultCmdletBase : AzureBackupCmdletBase + { + [Parameter(Position = 0, Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.ResourceGroupName, ValueFromPipelineByPropertyName = true)] + [ValidateNotNullOrEmpty] + public string ResourceGroupName { get; set; } + + [Parameter(Position = 1, Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.ResourceName, ValueFromPipelineByPropertyName = true)] + [ValidateNotNullOrEmpty] + public string ResourceName { get; set; } + + + public override void ExecuteCmdlet() + { + base.ExecuteCmdlet(); + + WriteDebug(String.Format("Cmdlet called for ResourceGroupName: {0}, ResourceName: {1}", ResourceGroupName, ResourceName)); + + InitializeAzureBackupCmdlet(ResourceGroupName, ResourceName); + } + } +} + diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/GetAzureBackupProtectionPolicy.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/GetAzureBackupProtectionPolicy.cs index 874842e65521..54c34a781f4c 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/GetAzureBackupProtectionPolicy.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/GetAzureBackupProtectionPolicy.cs @@ -16,15 +16,16 @@ using System.Management.Automation; using System.Collections.Generic; using System.Xml; -using Microsoft.WindowsAzure.Management.BackupServices.Models; +using System.Linq; +using Microsoft.Azure.Management.BackupServices.Models; namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets { /// /// Get list of containers /// - [Cmdlet(VerbsCommon.Get, "AzureBackupProtectionPolicy"), OutputType(typeof(ProtectionPolicyInfo), typeof(List))] - public class GetAzureBackupProtectionPolicy : AzureBackupCmdletBase + [Cmdlet(VerbsCommon.Get, "AzureBackupProtectionPolicy"), OutputType(typeof(AzureBackupProtectionPolicy), typeof(List))] + public class GetAzureBackupProtectionPolicy : AzureBackupVaultCmdletBase { [Parameter(Position = 2, Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.PolicyName)] [ValidateNotNullOrEmpty] @@ -36,9 +37,24 @@ public override void ExecuteCmdlet() ExecutionBlock(() => { - var policyListResponse = AzureBackupClient.ProtectionPolicy.ListAsync("1234", CmdletCancellationToken).Result; + WriteVerbose("Making client call"); - WriteAzureBackupProtectionPolicy(policyListResponse.ProtectionPolicies.Objects); + ProtectionPolicyListResponse policyListResponse = AzureBackupClient.ProtectionPolicy.ListAsync(GetCustomRequestHeaders(), CmdletCancellationToken).Result; + + WriteVerbose("Received policy response"); + + IEnumerable policyObjects = null; + if (Name != null) + { + policyObjects = policyListResponse.ProtectionPolicies.Objects.Where(x => x.Name.Equals(Name, System.StringComparison.InvariantCultureIgnoreCase)); + } + else + { + policyObjects = policyListResponse.ProtectionPolicies.Objects; + } + + WriteVerbose("Converting response"); + WriteAzureBackupProtectionPolicy(policyObjects); }); } @@ -47,7 +63,7 @@ public void WriteAzureBackupProtectionPolicy(ProtectionPolicyInfo sourcePolicy) this.WriteObject(new AzureBackupProtectionPolicy(ResourceGroupName, ResourceName, sourcePolicy)); } - public void WriteAzureBackupProtectionPolicy(IList sourcePolicyList) + public void WriteAzureBackupProtectionPolicy(IEnumerable sourcePolicyList) { List targetList = new List(); From 5fc6998446620c773fb2308b07ceca1e8aafd785 Mon Sep 17 00:00:00 2001 From: piyushka17 Date: Wed, 27 May 2015 17:07:19 +0530 Subject: [PATCH 003/155] check in 2 --- src/AzurePowershell.sln | 8 +++++++- .../GetAzureBackupProtectionPolicy.cs | 8 ++++---- .../Commands.AzureBackup/Commands.AzureBackup.csproj | 11 +++++++---- .../Models/AzureBackupBaseObjects.cs | 2 +- .../Commands.AzureBackup/Models/ProtectionPolicy.cs | 2 +- 5 files changed, 20 insertions(+), 11 deletions(-) diff --git a/src/AzurePowershell.sln b/src/AzurePowershell.sln index c162b0682a80..598c91723ee5 100644 --- a/src/AzurePowershell.sln +++ b/src/AzurePowershell.sln @@ -1,5 +1,5 @@ Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 2013 +# Visual Studio Express 2013 for Web VisualStudioVersion = 12.0.31101.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{8531411A-0137-4E27-9C5E-49E07C245048}" @@ -210,6 +210,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Commands.ApiManagement", "R EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Commands.ApiManagement.Test", "ResourceManager\ApiManagement\Commands.ApiManagement.Test\Commands.ApiManagement.Test.csproj", "{BEC9ECE9-A3D6-4B24-A682-1FA890647D9D}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Commands.AzureBackup", "ResourceManager\AzureBackup\Commands.AzureBackup\Commands.AzureBackup.csproj", "{6C8D2337-C9D1-4F52-94B3-AB63A19F3453}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -512,6 +514,10 @@ Global {BEC9ECE9-A3D6-4B24-A682-1FA890647D9D}.Debug|Any CPU.Build.0 = Debug|Any CPU {BEC9ECE9-A3D6-4B24-A682-1FA890647D9D}.Release|Any CPU.ActiveCfg = Release|Any CPU {BEC9ECE9-A3D6-4B24-A682-1FA890647D9D}.Release|Any CPU.Build.0 = Release|Any CPU + {6C8D2337-C9D1-4F52-94B3-AB63A19F3453}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6C8D2337-C9D1-4F52-94B3-AB63A19F3453}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6C8D2337-C9D1-4F52-94B3-AB63A19F3453}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6C8D2337-C9D1-4F52-94B3-AB63A19F3453}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/GetAzureBackupProtectionPolicy.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/GetAzureBackupProtectionPolicy.cs index 54c34a781f4c..5ab989901c70 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/GetAzureBackupProtectionPolicy.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/GetAzureBackupProtectionPolicy.cs @@ -39,18 +39,18 @@ public override void ExecuteCmdlet() { WriteVerbose("Making client call"); - ProtectionPolicyListResponse policyListResponse = AzureBackupClient.ProtectionPolicy.ListAsync(GetCustomRequestHeaders(), CmdletCancellationToken).Result; + var policyListResponse = AzureBackupClient.ProtectionPolicy.ListAsync(GetCustomRequestHeaders(), CmdletCancellationToken).Result; WriteVerbose("Received policy response"); - + WriteVerbose("Received policy response2"); IEnumerable policyObjects = null; if (Name != null) { - policyObjects = policyListResponse.ProtectionPolicies.Objects.Where(x => x.Name.Equals(Name, System.StringComparison.InvariantCultureIgnoreCase)); + policyObjects = policyListResponse.Objects.Where(x => x.Name.Equals(Name, System.StringComparison.InvariantCultureIgnoreCase)); } else { - policyObjects = policyListResponse.ProtectionPolicies.Objects; + policyObjects = policyListResponse.Objects; } WriteVerbose("Converting response"); diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj index ee9508407cd6..7e47d90c23c7 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj @@ -77,7 +77,8 @@ ..\..\..\packages\Microsoft.WindowsAzure.Management.4.1.1\lib\net40\Microsoft.WindowsAzure.Management.dll - + + False ..\..\..\Microsoft.WindowsAzure.Management.BackupServicesManagment.dll @@ -110,10 +111,13 @@ + + + True True @@ -130,6 +134,7 @@ Always + Designer Always @@ -145,9 +150,7 @@ Resources.Designer.cs - - - + diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupBaseObjects.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupBaseObjects.cs index f5f4c58c6f26..0d18c1d0987e 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupBaseObjects.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupBaseObjects.cs @@ -14,7 +14,7 @@ namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets { - public abstract class AzureBackupVaultContextObject + public class AzureBackupVaultContextObject { /// /// ResourceGroupName of the azurebackup object diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/ProtectionPolicy.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/ProtectionPolicy.cs index 48986ca9be50..85ee3774d7dd 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/ProtectionPolicy.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/ProtectionPolicy.cs @@ -12,7 +12,7 @@ // limitations under the License. // ---------------------------------------------------------------------------------- -using Microsoft.WindowsAzure.Management.BackupServices.Models; +using Microsoft.Azure.Management.BackupServices.Models; using System; using System.Collections.Generic; namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets From f83a9fd5183ad346d2ab97072bca20867bea20cb Mon Sep 17 00:00:00 2001 From: piyushka17 Date: Wed, 27 May 2015 17:58:09 +0530 Subject: [PATCH 004/155] Adding refresh for clientRequestId --- .../Commands.AzureBackup/AzureBackupCmdletBase.cs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupCmdletBase.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupCmdletBase.cs index c0aec687272e..3ee539817118 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupCmdletBase.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupCmdletBase.cs @@ -77,13 +77,17 @@ protected BackupServicesManagementClient AzureBackupClient } } + protected void RefreshClientRequestId() + { + clientRequestId = Guid.NewGuid().ToString() + "-" + DateTime.Now.ToUniversalTime().ToString("yyyy-MM-dd HH:mm:ssZ") + "-PS"; + } + public void InitializeAzureBackupCmdlet(string rgName, string rName) { resourceGroupName = rgName; resourceName = rName; - clientRequestId = Guid.NewGuid().ToString() + "-" + DateTime.Now.ToUniversalTime().ToString("yyyy-MM-dd HH:mm:ssZ") + "-PS"; - + RefreshClientRequestId(); WriteDebug(string.Format("Initialized AzureBackup Cmdlet, ClientRequestId: {0}, ResourceGroupName: {1}, ResourceName : {2}", this.clientRequestId, resourceGroupName, resourceName)); CmdletCancellationToken = cancellationTokenSource.Token; From 2bfd5ca49081970063cb880d54d6066453294072 Mon Sep 17 00:00:00 2001 From: dragonfly91 Date: Thu, 28 May 2015 16:56:28 +0530 Subject: [PATCH 005/155] Adding AzureBackupContainer model (initial draft). --- .../Models/AzureBackupContainer.cs | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupContainer.cs diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupContainer.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupContainer.cs new file mode 100644 index 000000000000..9df507bef631 --- /dev/null +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupContainer.cs @@ -0,0 +1,42 @@ +// ---------------------------------------------------------------------------------- +// +// Copyright Microsoft Corporation +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// ---------------------------------------------------------------------------------- + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets +{ + /// + /// Represents Azure Backup Container + /// + public class AzureBackupContainer : AzureBackupVaultCmdletBase + { + public string ContainerType { get; set; } + + public string FriendlyName { get; set; } + + public string HealthStatus { get; set; } + + public string ParentContainerFriendlyName { get; set; } + + public string ParentContainerName { get; set; } + + public string Region { get; set; } + + public string RegistrationStatus { get; set; } + } +} From 028a9c438b96a9c03caffabad95aed72562f6f4d Mon Sep 17 00:00:00 2001 From: dragonfly91 Date: Thu, 28 May 2015 17:14:30 +0530 Subject: [PATCH 006/155] Added extra properties --- .../Commands.AzureBackup/Models/AzureBackupContainer.cs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupContainer.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupContainer.cs index 9df507bef631..f6689e04d51c 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupContainer.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupContainer.cs @@ -31,6 +31,10 @@ public class AzureBackupContainer : AzureBackupVaultCmdletBase public string HealthStatus { get; set; } + public string InstanceId { get; set; } + + public string Name { get; set; } + public string ParentContainerFriendlyName { get; set; } public string ParentContainerName { get; set; } From 4bba690d7488338415d8646add5de226a86ee7ea Mon Sep 17 00:00:00 2001 From: dragonfly91 Date: Fri, 29 May 2015 11:57:53 +0530 Subject: [PATCH 007/155] Fixed a mistake in AzureBackupContainer and added comments for each field. --- .../Models/AzureBackupContainer.cs | 29 ++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupContainer.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupContainer.cs index f6689e04d51c..1a7f9b6c6c3a 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupContainer.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupContainer.cs @@ -23,24 +23,51 @@ namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets /// /// Represents Azure Backup Container /// - public class AzureBackupContainer : AzureBackupVaultCmdletBase + public class AzureBackupContainer : AzureBackupVaultContextObject { + /// + /// Type of the Azure Backup container + /// public string ContainerType { get; set; } + /// + /// Friendly name for the Azure Backup container + /// public string FriendlyName { get; set; } + /// + /// Status of health of the Azure Backup container + /// public string HealthStatus { get; set; } + /// + /// Id of the Azure Backup Container + /// public string InstanceId { get; set; } + /// + /// Name of the Azure Backup container + /// public string Name { get; set; } + /// + /// Friendly name of the parent container + /// public string ParentContainerFriendlyName { get; set; } + /// + /// Name of the parent container + /// public string ParentContainerName { get; set; } + /// + /// Region where this container is present + /// public string Region { get; set; } + /// + /// Status of registration of the container + /// public string RegistrationStatus { get; set; } } } From fc61f75323e90d5c9875b60d706e9766ebac32f6 Mon Sep 17 00:00:00 2001 From: dragonfly91 Date: Fri, 29 May 2015 12:04:11 +0530 Subject: [PATCH 008/155] Renamed InstanceId to ContainerId due to conflicts with top level objects. --- .../Commands.AzureBackup/Models/AzureBackupContainer.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupContainer.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupContainer.cs index 1a7f9b6c6c3a..313fb0afbfb9 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupContainer.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupContainer.cs @@ -43,7 +43,7 @@ public class AzureBackupContainer : AzureBackupVaultContextObject /// /// Id of the Azure Backup Container /// - public string InstanceId { get; set; } + public string ContainerId { get; set; } /// /// Name of the Azure Backup container From cb54fe3b3c69aa6990075a93bc1a9454da329ceb Mon Sep 17 00:00:00 2001 From: dragonfly91 Date: Fri, 29 May 2015 13:58:18 +0530 Subject: [PATCH 009/155] 1. Renamed ContainerId back to InstanceId. 2. Created ContainerContext base class. --- .../Models/AzureBackupBaseObjects.cs | 18 ++++++++++++++++++ .../Models/AzureBackupContainer.cs | 2 +- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupBaseObjects.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupBaseObjects.cs index 0d18c1d0987e..cfee78bec859 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupBaseObjects.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupBaseObjects.cs @@ -36,4 +36,22 @@ public AzureBackupVaultContextObject(string resourceGroupName, string resourceNa ResourceName = resourceName; } } + + public class AzureBackupContainerContextObject : AzureBackupVaultContextObject + { + /// + /// Type of the Azure Backup container + /// + public string ContainerType { get; set; } + + /// + /// Name of the Azure Backup container + /// + public string ContainerName { get; set; } + + /// + /// Id of the Azure Backup Container + /// + public string ContainerId { get; set; } + } } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupContainer.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupContainer.cs index 313fb0afbfb9..1a7f9b6c6c3a 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupContainer.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupContainer.cs @@ -43,7 +43,7 @@ public class AzureBackupContainer : AzureBackupVaultContextObject /// /// Id of the Azure Backup Container /// - public string ContainerId { get; set; } + public string InstanceId { get; set; } /// /// Name of the Azure Backup container From 3c1cd49e98ffc1def2fd4bdf3cf592b60ed434aa Mon Sep 17 00:00:00 2001 From: pikumarmsft Date: Fri, 29 May 2015 15:29:15 +0530 Subject: [PATCH 010/155] Adding AzureBackupItemContextObject class and AzureBackupItem.cs file --- .../Models/AzureBackupBaseObjects.cs | 8 ++ .../Models/AzureBackupItem.cs | 83 +++++++++++++++++++ 2 files changed, 91 insertions(+) create mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupItem.cs diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupBaseObjects.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupBaseObjects.cs index cfee78bec859..227412839abf 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupBaseObjects.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupBaseObjects.cs @@ -54,4 +54,12 @@ public class AzureBackupContainerContextObject : AzureBackupVaultContextObject /// public string ContainerId { get; set; } } + + public class AzureBackupItemContextObject : AzureBackupContainerContextObject + { + /// + /// DataSourceId of Azure Backup Item + /// + public string DataSourceId { get; set; } + } } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupItem.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupItem.cs new file mode 100644 index 000000000000..28f6e6607364 --- /dev/null +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupItem.cs @@ -0,0 +1,83 @@ +// ---------------------------------------------------------------------------------- +// +// Copyright Microsoft Corporation +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// ---------------------------------------------------------------------------------- + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets +{ + /// + /// Represents Azure Backup Container + /// + public class AzureBackupItem : AzureBackupItemContextObject + { + /// + /// Status for the Azure Backup Item + /// + public string Status { get; set; } + + /// + /// Protection Status for the Azure Backup Item + /// + public string ProtectionStatus { get; set; } + + /// + /// Protectable Object Name for the Azure Backup Item + /// + public string ProtectableObjectName { get; set; } + + /// + /// Protection Policy Name for the Azure Backup Item + /// + public string ProtectionPolicyName { get; set; } + + /// + /// Protection Policy Id for the Azure Backup Item + /// + public string ProtectionPolicyId { get; set; } + + /// + /// Policy Inconsistent for the Azure Backup Item + /// + public bool PolicyInconsistent { get; set; } + + /// + /// Recovery Points Count for the Azure Backup Item + /// + public int RecoveryPointsCount { get; set; } + + /// + /// Last Recovery Point for the Azure Backup Item + /// + public DateTime? LastRecoveryPoint { get; set; } + + /// + /// Last Backup Time for the Azure Backup Item + /// + public DateTime? LastBackupTime { get; set; } + + /// + /// Last Backup Status for the Azure Backup Item + /// + public string LastBackupStatus { get; set; } + + /// + /// Last Backup Job Id for the Azure Backup Item + /// + public string LastBackupJobId { get; set; } + } +} \ No newline at end of file From e571e451fffb1ccc84bdaa718d8ef4f4d206c56e Mon Sep 17 00:00:00 2001 From: pikumarmsft Date: Fri, 29 May 2015 16:18:47 +0530 Subject: [PATCH 011/155] Adding DataSourceType in AzureBackupItemContextObject class --- .../Commands.AzureBackup/Models/AzureBackupBaseObjects.cs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupBaseObjects.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupBaseObjects.cs index 227412839abf..b50deee0f03e 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupBaseObjects.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupBaseObjects.cs @@ -61,5 +61,10 @@ public class AzureBackupItemContextObject : AzureBackupContainerContextObject /// DataSourceId of Azure Backup Item /// public string DataSourceId { get; set; } + + /// + /// DataSourceId of Azure Backup Item + /// + public string DataSourceType { get; set; } } } From e6548f78f14a757232157de4f94b90952c95d864 Mon Sep 17 00:00:00 2001 From: panbha Date: Tue, 2 Jun 2015 09:23:08 +0530 Subject: [PATCH 012/155] Local Changes for Commandlets --- .../AzureBackupDSCmdletBase.cs | 47 ++++++++++ .../Cmdlets/BackUp/TriggerBackUp.cs | 80 +++++++++++++++++ .../GetAzureBackupRecoveryPoint.cs | 86 +++++++++++++++++++ .../Models/AzureBackupRecoveryPoint.cs | 46 ++++++++++ 4 files changed, 259 insertions(+) create mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupDSCmdletBase.cs create mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/BackUp/TriggerBackUp.cs create mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/RecoveryPoint/GetAzureBackupRecoveryPoint.cs create mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupRecoveryPoint.cs diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupDSCmdletBase.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupDSCmdletBase.cs new file mode 100644 index 000000000000..a998ce6ca367 --- /dev/null +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupDSCmdletBase.cs @@ -0,0 +1,47 @@ +// ---------------------------------------------------------------------------------- +// +// Copyright Microsoft Corporation +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// ---------------------------------------------------------------------------------- + +using System; +using System.Management.Automation; +using System.Collections.Generic; +using System.Xml; +using Microsoft.WindowsAzure.Commands.Utilities.Common; +using Microsoft.Azure.Common.Authentication; +using Microsoft.Azure.Common.Authentication.Models; +using System.Threading; +using Hyak.Common; +using Microsoft.Azure.Commands.AzureBackup.Properties; +using System.Net; + +namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets +{ + public abstract class AzureBackupDSCmdletBase : AzureBackupCmdletBase + { + // ToDO: + // Correct Help message and other attributes related to paameters + [Parameter(Position = 0, Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.ResourceGroupName, ValueFromPipelineByPropertyName = true)] + [ValidateNotNullOrEmpty] + public AzureBackupItem AzureBackupItem { get; set; } + + public override void ExecuteCmdlet() + { + base.ExecuteCmdlet(); + + WriteDebug(String.Format("Cmdlet called for ResourceGroupName: {0}, ResourceName: {1}", AzureBackupItem.ResourceGroupName, AzureBackupItem.ResourceName)); + + InitializeAzureBackupCmdlet(AzureBackupItem.ResourceGroupName, AzureBackupItem.ResourceName); + } + } +} + diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/BackUp/TriggerBackUp.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/BackUp/TriggerBackUp.cs new file mode 100644 index 000000000000..643b5f89d35a --- /dev/null +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/BackUp/TriggerBackUp.cs @@ -0,0 +1,80 @@ +// ---------------------------------------------------------------------------------- +// +// Copyright Microsoft Corporation +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// ---------------------------------------------------------------------------------- + +using System; +using System.Management.Automation; +using System.Collections.Generic; +using System.Xml; +using System.Linq; +using Microsoft.Azure.Management.BackupServices.Models; +using MBS = Microsoft.Azure.Management.BackupServices; + +namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets +{ + // ToDo: + // Correct the Commandlet + // Coorect the OperationResponse + // Get Tracking API from Piyush and Get JobResponse + // Get JobResponse Object from Aditya + + /// + /// Get list of containers + /// + [Cmdlet(VerbsCommon.New, "AzureBackup"), OutputType(typeof(MBS.OperationResponse))] + public class TriggerAzureBackup : AzureBackupDSCmdletBase + { + public override void ExecuteCmdlet() + { + base.ExecuteCmdlet(); + + ExecutionBlock(() => + { + WriteVerbose("Making client call"); + + MBS.OperationResponse triggerBackUpInfo = + AzureBackupClient.BackUp.TriggerBackUpAsync(GetCustomRequestHeaders(), + AzureBackupItem.ContainerName, + AzureBackupItem.DataSourceType, + AzureBackupItem.DataSourceId, + CmdletCancellationToken).Result; + + WriteVerbose("Received policy response"); + WriteVerbose("Received policy response2"); + + WriteVerbose("Converting response"); + WriteAzureBackupProtectionPolicy(triggerBackUpInfo); + }); + } + + public void WriteAzureBackupProtectionPolicy(MBS.OperationResponse sourceOperationResponse) + { + // this needs to be uncommented once we have proper constructor + //this.WriteObject(new AzureBackupRecoveryPoint(ResourceGroupName, ResourceName, sourceOperationResponse)); + } + + public void WriteAzureBackupProtectionPolicy(IEnumerable sourceOperationResponseList) + { + List targetList = new List(); + + foreach (var sourceOperationResponse in sourceOperationResponseList) + { + // this needs to be uncommented once we have proper constructor + //targetList.Add(new TriggerBackUpInfo(ResourceGroupName, ResourceName, sourceOperationResponse)); + } + + this.WriteObject(targetList, true); + } + } +} + diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/RecoveryPoint/GetAzureBackupRecoveryPoint.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/RecoveryPoint/GetAzureBackupRecoveryPoint.cs new file mode 100644 index 000000000000..29a8d63522f1 --- /dev/null +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/RecoveryPoint/GetAzureBackupRecoveryPoint.cs @@ -0,0 +1,86 @@ +// ---------------------------------------------------------------------------------- +// +// Copyright Microsoft Corporation +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// ---------------------------------------------------------------------------------- + +using System; +using System.Management.Automation; +using System.Collections.Generic; +using System.Xml; +using System.Linq; +using Microsoft.Azure.Management.BackupServices.Models; + +namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets +{ + /// + /// Get list of containers + /// + [Cmdlet(VerbsCommon.Get, "AzureBackupRecoveryPoint"), OutputType(typeof(AzureBackupRecoveryPoint), typeof(List))] + public class GetAzureBackupRecoveryPoint : AzureBackupDSCmdletBase + { + [Parameter(Position = 2, Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.PolicyName)] + [ValidateNotNullOrEmpty] + public string Id { get; set; } + + public override void ExecuteCmdlet() + { + base.ExecuteCmdlet(); + + ExecutionBlock(() => + { + WriteVerbose("Making client call"); + + RecoveryPointListResponse recoveryPointListResponse = + AzureBackupClient.RecoveryPoint.ListAsync(GetCustomRequestHeaders(), + AzureBackupItem.ContainerName, + AzureBackupItem.DataSourceType, + AzureBackupItem.DataSourceId, + CmdletCancellationToken).Result; + + WriteVerbose("Received policy response"); + WriteVerbose("Received policy response2"); + IEnumerable recoveryPointObjects = null; + if (Id != null) + { + recoveryPointObjects = recoveryPointListResponse.RecoveryPoints.Objects.Where(x => x.Name.Equals(Id, System.StringComparison.InvariantCultureIgnoreCase)); + } + else + { + recoveryPointObjects = recoveryPointListResponse.RecoveryPoints.Objects; + } + + WriteVerbose("Converting response"); + WriteAzureBackupProtectionPolicy(recoveryPointObjects); + }); + } + + public void WriteAzureBackupProtectionPolicy(RecoveryPointInfo sourceRecoverPoint) + { + // this needs to be uncommented once we have proper constructor + //this.WriteObject(new AzureBackupRecoveryPoint(AzureBackupItem.ResourceGroupName, AzureBackupItem.ResourceName, sourceRecoverPoint)); + } + + public void WriteAzureBackupProtectionPolicy(IEnumerable sourceRecoverPointList) + { + List targetList = new List(); + + foreach (var sourceRecoverPoint in sourceRecoverPointList) + { + // this needs to be uncommented once we have proper constructor + //targetList.Add(new AzureBackupRecoveryPoint(AzureBackupItem.ResourceGroupName, AzureBackupItem.ResourceName, sourceRecoverPoint)); + } + + this.WriteObject(targetList, true); + } + } +} + diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupRecoveryPoint.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupRecoveryPoint.cs new file mode 100644 index 000000000000..c6e647380f64 --- /dev/null +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupRecoveryPoint.cs @@ -0,0 +1,46 @@ +// ---------------------------------------------------------------------------------- +// +// Copyright Microsoft Corporation +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// ---------------------------------------------------------------------------------- + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets +{ + public class AzureBackupRecoveryPointContextObject : AzureBackupItemContextObject + { + /// + /// RecoveryPointId of Azure Backup Item + /// + public string RecoveryPointId { get; set; } + } + + /// + /// Represents Azure Backup Container + /// + public class AzureBackupRecoveryPoint : AzureBackupRecoveryPointContextObject + { + /// + /// Last Recovery Point for the Azure Backup Item + /// + public DateTime RecoveryPointTime { get; set; } + + /// + /// DataSourceId of Azure Backup Item + /// + public string RecoveryPointType { get; set; } + } +} \ No newline at end of file From b22b9b4445c52ffece1f50afeef3fb76ec07c8ff Mon Sep 17 00:00:00 2001 From: panbha Date: Tue, 2 Jun 2015 12:45:55 +0530 Subject: [PATCH 013/155] Changes For Object --- .../Cmdlets/BackUp/TriggerBackUp.cs | 4 +-- .../GetAzureBackupProtectionPolicy.cs | 4 +-- .../GetAzureBackupRecoveryPoint.cs | 14 +++++----- .../Commands.AzureBackup.csproj | 11 +++++--- .../Models/AzureBackupBaseObjects.cs | 25 ++++++++++++++++++ .../Models/AzureBackupRecoveryPoint.cs | 26 ++++++++++++++++++- 6 files changed, 68 insertions(+), 16 deletions(-) diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/BackUp/TriggerBackUp.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/BackUp/TriggerBackUp.cs index 643b5f89d35a..ebda269195ee 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/BackUp/TriggerBackUp.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/BackUp/TriggerBackUp.cs @@ -24,14 +24,14 @@ namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets { // ToDo: // Correct the Commandlet - // Coorect the OperationResponse + // Correct the OperationResponse // Get Tracking API from Piyush and Get JobResponse // Get JobResponse Object from Aditya /// /// Get list of containers /// - [Cmdlet(VerbsCommon.New, "AzureBackup"), OutputType(typeof(MBS.OperationResponse))] + [Cmdlet(VerbsCommon.New, "AzureBackupItem"), OutputType(typeof(MBS.OperationResponse))] public class TriggerAzureBackup : AzureBackupDSCmdletBase { public override void ExecuteCmdlet() diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/GetAzureBackupProtectionPolicy.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/GetAzureBackupProtectionPolicy.cs index 5ab989901c70..322690782d8c 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/GetAzureBackupProtectionPolicy.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/GetAzureBackupProtectionPolicy.cs @@ -46,11 +46,11 @@ public override void ExecuteCmdlet() IEnumerable policyObjects = null; if (Name != null) { - policyObjects = policyListResponse.Objects.Where(x => x.Name.Equals(Name, System.StringComparison.InvariantCultureIgnoreCase)); + policyObjects = policyListResponse.ProtectionPolicies.Objects.Where(x => x.Name.Equals(Name, System.StringComparison.InvariantCultureIgnoreCase)); } else { - policyObjects = policyListResponse.Objects; + policyObjects = policyListResponse.ProtectionPolicies.Objects; } WriteVerbose("Converting response"); diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/RecoveryPoint/GetAzureBackupRecoveryPoint.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/RecoveryPoint/GetAzureBackupRecoveryPoint.cs index 29a8d63522f1..1ade5956fa4b 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/RecoveryPoint/GetAzureBackupRecoveryPoint.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/RecoveryPoint/GetAzureBackupRecoveryPoint.cs @@ -51,7 +51,7 @@ public override void ExecuteCmdlet() IEnumerable recoveryPointObjects = null; if (Id != null) { - recoveryPointObjects = recoveryPointListResponse.RecoveryPoints.Objects.Where(x => x.Name.Equals(Id, System.StringComparison.InvariantCultureIgnoreCase)); + recoveryPointObjects = recoveryPointListResponse.RecoveryPoints.Objects.Where(x => x.InstanceId.Equals(Id, System.StringComparison.InvariantCultureIgnoreCase)); } else { @@ -59,24 +59,22 @@ public override void ExecuteCmdlet() } WriteVerbose("Converting response"); - WriteAzureBackupProtectionPolicy(recoveryPointObjects); + WriteAzureBackupProtectionPolicy(recoveryPointObjects, AzureBackupItem); }); } - public void WriteAzureBackupProtectionPolicy(RecoveryPointInfo sourceRecoverPoint) + public void WriteAzureBackupProtectionPolicy(RecoveryPointInfo sourceRecoverPoint, AzureBackupItem azureBackupItem) { - // this needs to be uncommented once we have proper constructor - //this.WriteObject(new AzureBackupRecoveryPoint(AzureBackupItem.ResourceGroupName, AzureBackupItem.ResourceName, sourceRecoverPoint)); + this.WriteObject(new AzureBackupRecoveryPoint(sourceRecoverPoint, azureBackupItem)); } - public void WriteAzureBackupProtectionPolicy(IEnumerable sourceRecoverPointList) + public void WriteAzureBackupProtectionPolicy(IEnumerable sourceRecoverPointList, AzureBackupItem azureBackupItem) { List targetList = new List(); foreach (var sourceRecoverPoint in sourceRecoverPointList) { - // this needs to be uncommented once we have proper constructor - //targetList.Add(new AzureBackupRecoveryPoint(AzureBackupItem.ResourceGroupName, AzureBackupItem.ResourceName, sourceRecoverPoint)); + targetList.Add(new AzureBackupRecoveryPoint(sourceRecoverPoint, azureBackupItem)); } this.WriteObject(targetList, true); diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj index 7e47d90c23c7..eac24317ee67 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj @@ -77,9 +77,8 @@ ..\..\..\packages\Microsoft.WindowsAzure.Management.4.1.1\lib\net40\Microsoft.WindowsAzure.Management.dll - - False - ..\..\..\Microsoft.WindowsAzure.Management.BackupServicesManagment.dll + + ..\..\..\..\..\azure-sdk-for-net\src\ResourceManagement\AzureBackup\BackupServicesManagment\bin\Net40-Debug\Microsoft.WindowsAzure.Management.BackupServicesManagment.dll ..\..\..\packages\Microsoft.WindowsAzure.Management.Scheduler.6.0.0\lib\net40\Microsoft.WindowsAzure.Management.Scheduler.dll @@ -111,12 +110,18 @@ + + + + + + True diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupBaseObjects.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupBaseObjects.cs index b50deee0f03e..1c1c77a0a5fb 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupBaseObjects.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupBaseObjects.cs @@ -53,6 +53,19 @@ public class AzureBackupContainerContextObject : AzureBackupVaultContextObject /// Id of the Azure Backup Container /// public string ContainerId { get; set; } + + public AzureBackupContainerContextObject() + : base() + { + } + + public AzureBackupContainerContextObject(AzureBackupContainerContextObject azureBackupContainerContextObject) + : base(azureBackupContainerContextObject.ResourceGroupName, azureBackupContainerContextObject.ResourceName) + { + ContainerType = azureBackupContainerContextObject.ContainerType; + ContainerName = azureBackupContainerContextObject.ContainerName; + ContainerId = azureBackupContainerContextObject.ContainerId; + } } public class AzureBackupItemContextObject : AzureBackupContainerContextObject @@ -66,5 +79,17 @@ public class AzureBackupItemContextObject : AzureBackupContainerContextObject /// DataSourceId of Azure Backup Item /// public string DataSourceType { get; set; } + + public AzureBackupItemContextObject() + : base() + { + } + + public AzureBackupItemContextObject(AzureBackupItemContextObject azureBackupItemContextObject) + : base(azureBackupItemContextObject) + { + DataSourceId = azureBackupItemContextObject.DataSourceId; + DataSourceType = azureBackupItemContextObject.DataSourceType; + } } } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupRecoveryPoint.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupRecoveryPoint.cs index c6e647380f64..6d7c95a0d57e 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupRecoveryPoint.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupRecoveryPoint.cs @@ -12,6 +12,7 @@ // limitations under the License. // ---------------------------------------------------------------------------------- +using Microsoft.Azure.Management.BackupServices.Models; using System; using System.Collections.Generic; using System.Linq; @@ -26,6 +27,17 @@ public class AzureBackupRecoveryPointContextObject : AzureBackupItemContextObjec /// RecoveryPointId of Azure Backup Item /// public string RecoveryPointId { get; set; } + + public AzureBackupRecoveryPointContextObject() + : base() + { + } + + public AzureBackupRecoveryPointContextObject(RecoveryPointInfo recoveryPointInfo, AzureBackupItem azureBackupItem) + : base(azureBackupItem) + { + RecoveryPointId = recoveryPointInfo.InstanceId; + } } /// @@ -41,6 +53,18 @@ public class AzureBackupRecoveryPoint : AzureBackupRecoveryPointContextObject /// /// DataSourceId of Azure Backup Item /// - public string RecoveryPointType { get; set; } + public string RecoveryPointType { get; set; } + + public AzureBackupRecoveryPoint() + : base() + { + } + + public AzureBackupRecoveryPoint(RecoveryPointInfo recoveryPointInfo, AzureBackupItem azureBackupItem) + : base(recoveryPointInfo, azureBackupItem) + { + RecoveryPointTime = recoveryPointInfo.RecoveryPointTime; + RecoveryPointType = recoveryPointInfo.RecoveryPointType; + } } } \ No newline at end of file From 01f643760f9c6f5dae0442497be8f2d7524eadf0 Mon Sep 17 00:00:00 2001 From: dragonfly91 Date: Wed, 3 Jun 2015 12:19:33 +0530 Subject: [PATCH 014/155] Download vault creds (testing in progress) --- .../GetAzureBackupProtectionPolicy.cs | 4 ++-- ...crosoft.WindowsAzure.Management.Common.dll | Bin 0 -> 1339904 bytes .../Resources/Security.Cryptography.dll | Bin 0 -> 51200 bytes 3 files changed, 2 insertions(+), 2 deletions(-) create mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup/Resources/Microsoft.WindowsAzure.Management.Common.dll create mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup/Resources/Security.Cryptography.dll diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/GetAzureBackupProtectionPolicy.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/GetAzureBackupProtectionPolicy.cs index 5ab989901c70..322690782d8c 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/GetAzureBackupProtectionPolicy.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/GetAzureBackupProtectionPolicy.cs @@ -46,11 +46,11 @@ public override void ExecuteCmdlet() IEnumerable policyObjects = null; if (Name != null) { - policyObjects = policyListResponse.Objects.Where(x => x.Name.Equals(Name, System.StringComparison.InvariantCultureIgnoreCase)); + policyObjects = policyListResponse.ProtectionPolicies.Objects.Where(x => x.Name.Equals(Name, System.StringComparison.InvariantCultureIgnoreCase)); } else { - policyObjects = policyListResponse.Objects; + policyObjects = policyListResponse.ProtectionPolicies.Objects; } WriteVerbose("Converting response"); diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Resources/Microsoft.WindowsAzure.Management.Common.dll b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Resources/Microsoft.WindowsAzure.Management.Common.dll new file mode 100644 index 0000000000000000000000000000000000000000..0ff26b7d81defff03593e658d1307662ae2db7d7 GIT binary patch literal 1339904 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�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

W@Zw^+!hLXR9qG~;R&ifK;zqF~It8)vx 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 m$ARmuLOJvE7!Zuv1{6S4eI3oQy3 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

sn( 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

HtgpGl@ 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 z

public string ParentContainerName { get; set; } - /// - /// Region where this container is present - /// - public string Region { get; set; } - /// /// Status of registration of the container /// diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Resources/BMSCommonInterface.dll b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Resources/BMSCommonInterface.dll new file mode 100644 index 0000000000000000000000000000000000000000..eefd5479ee443adb4f7520305d9b78643499a3e7 GIT binary patch literal 17608 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 CogZBQ literal 0 HcmV?d00001 From 684ce132c02746917adcb61671c1b94e188b5dc0 Mon Sep 17 00:00:00 2001 From: pikumarmsft Date: Fri, 5 Jun 2015 15:08:03 +0530 Subject: [PATCH 020/155] Added Filters and help message --- .../AzureBackupCmdletHelpMessage.cs | 1 + .../Cmdlets/DataSource/GetAzureBackupItem.cs | 54 +++++++++++++------ .../Models/AzureBackupBaseObjects.cs | 8 +-- .../Models/AzureBackupItem.cs | 36 ++----------- 4 files changed, 49 insertions(+), 50 deletions(-) diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupCmdletHelpMessage.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupCmdletHelpMessage.cs index 36ba804e8e69..fb9e946417c3 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupCmdletHelpMessage.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupCmdletHelpMessage.cs @@ -25,5 +25,6 @@ internal static class AzureBackupCmdletHelpMessage public const string ContainerId = "The container ID."; public const string ContainerRegistrationStatus = "The container registration status."; public const string ContainerType = "The container type."; + public const string ProtectionStatus = "Protection Status of item."; } } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/DataSource/GetAzureBackupItem.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/DataSource/GetAzureBackupItem.cs index 3f088a0a0a23..2a6b955551eb 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/DataSource/GetAzureBackupItem.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/DataSource/GetAzureBackupItem.cs @@ -18,6 +18,7 @@ using System.Xml; using System.Linq; using Microsoft.Azure.Management.BackupServices.Models; +using System.Runtime.Serialization; namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets { @@ -27,9 +28,9 @@ namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets [Cmdlet(VerbsCommon.Get, "AzureBackupItem"), OutputType(typeof(AzureBackupItem), typeof(List))] public class GetAzureBackupItem : AzureBackupContainerCmdletBase { - [Parameter(Position = 2, Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.PolicyName)] + [Parameter(Position = 2, Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.ProtectionStatus)] [ValidateNotNullOrEmpty] - public string Id { get; set; } + public protectionStatus ProtectionStatus { get; set; } public override void ExecuteCmdlet() { @@ -39,23 +40,38 @@ public override void ExecuteCmdlet() { WriteVerbose("Making client call"); - var azureBackupDatasourceListResponse = AzureBackupClient.DataSource.ListAsync(GetCustomRequestHeaders(), CmdletCancellationToken).Result; - var azureBackupPOListResponse = AzureBackupClient.ProtectableObject. ListAsync(GetCustomRequestHeaders(), CmdletCancellationToken).Result; + DataSourceQueryParameter dsQueryParameter = new DataSourceQueryParameter() + { + ContainerName = AzureBackupContainer.ContainerName + }; + + POQueryParameter pOQueryParameter = new POQueryParameter() + { + Status = this.ProtectionStatus.ToString() + }; + + var azureBackupDatasourceListResponse = AzureBackupClient.DataSource.ListAsync(dsQueryParameter,GetCustomRequestHeaders(), CmdletCancellationToken).Result; + var azureBackupPOListResponse = AzureBackupClient.ProtectableObject. ListAsync(pOQueryParameter, GetCustomRequestHeaders(), CmdletCancellationToken).Result; WriteVerbose("Received policy response"); WriteVerbose("Received policy response2"); - IEnumerable azureBackupDatasourceObjects = null; - IEnumerable azureBackupPOObjects = null; + List azureBackupDatasourceObjects = null; + List azureBackupPOObjects = null; - if (Id != null) - { - azureBackupDatasourceObjects = azureBackupDatasourceListResponse.DataSources.Objects.Where(x => x.InstanceId.Equals(Id, System.StringComparison.InvariantCultureIgnoreCase)); - azureBackupPOObjects = azureBackupPOListResponse.ProtectableObject.Objects.Where(x => x.InstanceId.Equals(Id, System.StringComparison.InvariantCultureIgnoreCase)); - } - else + azureBackupDatasourceObjects = azureBackupDatasourceListResponse.DataSources.Objects.ToList(); + azureBackupPOObjects = azureBackupPOListResponse.ProtectableObject.Objects.Where(x => x.ContainerName.Equals(AzureBackupContainer.ContainerName, System.StringComparison.InvariantCultureIgnoreCase)).ToList(); + + //If user has stopped protection for some datasoure then we will have duplicate items(po and ds). + //So in this case removing poitem. + foreach (var DSItem in azureBackupDatasourceObjects) { - azureBackupDatasourceObjects = azureBackupDatasourceListResponse.DataSources.Objects; - azureBackupPOObjects = azureBackupPOListResponse.ProtectableObject.Objects; + foreach(var POItem in azureBackupPOObjects) + { + if(DSItem.ProtectableObjectName == POItem.Name) + { + azureBackupPOObjects.Remove(POItem); + } + } } WriteVerbose("Converting response"); @@ -68,7 +84,7 @@ public void WriteAzureBackupProtectionPolicy(DataSourceInfo sourceItem, AzureBac this.WriteObject(new AzureBackupItem(sourceItem, azureBackupItem)); } - public void WriteAzureBackupProtectionPolicy(IEnumerable sourceDataSourceList,IEnumerable sourcePOList, AzureBackupContainer azureBackupContainer) + public void WriteAzureBackupProtectionPolicy(List sourceDataSourceList, List sourcePOList, AzureBackupContainer azureBackupContainer) { List targetList = new List(); @@ -85,5 +101,13 @@ public void WriteAzureBackupProtectionPolicy(IEnumerable sourceD this.WriteObject(targetList, true); } + public enum protectionStatus + { + [EnumMember] + NotProtected = 0, + + [EnumMember] + Protected, + } } } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupBaseObjects.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupBaseObjects.cs index 711b119e6c04..566984af2932 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupBaseObjects.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupBaseObjects.cs @@ -86,7 +86,7 @@ public class AzureBackupItemContextObject : AzureBackupContainerContextObject /// /// DataSourceId of Azure Backup Item /// - public string DataSourceType { get; set; } + public string Type { get; set; } public AzureBackupItemContextObject() : base() @@ -97,20 +97,20 @@ public AzureBackupItemContextObject(AzureBackupItemContextObject azureBackupItem : base(azureBackupItemContextObject) { DataSourceId = azureBackupItemContextObject.DataSourceId; - DataSourceType = azureBackupItemContextObject.DataSourceType; + Type = azureBackupItemContextObject.Type; } public AzureBackupItemContextObject(DataSourceInfo item, AzureBackupContainer azureBackupContainer) : base(azureBackupContainer) { DataSourceId = item.InstanceId; - DataSourceType = item.Type; + Type = item.Type; } public AzureBackupItemContextObject(ProtectableObjectInfo item, AzureBackupContainer azureBackupContainer) : base(azureBackupContainer) { - DataSourceType = item.Type; + Type = item.Type; } } } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupItem.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupItem.cs index d8bec9419989..ef480554c6fe 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupItem.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupItem.cs @@ -29,7 +29,7 @@ public class AzureBackupItem : AzureBackupItemContextObject /// /// Status for the Azure Backup Item /// - public string Status { get; set; } + public string DataSourceStatus { get; set; } /// /// Protection Status for the Azure Backup Item @@ -39,7 +39,7 @@ public class AzureBackupItem : AzureBackupItemContextObject /// /// Protectable Object Name for the Azure Backup Item /// - public string ProtectableObjectName { get; set; } + public string Name { get; set; } /// /// Protection Policy Name for the Azure Backup Item @@ -51,11 +51,6 @@ public class AzureBackupItem : AzureBackupItemContextObject /// public string ProtectionPolicyId { get; set; } - /// - /// Policy Inconsistent for the Azure Backup Item - /// - public bool PolicyInconsistent { get; set; } - /// /// Recovery Points Count for the Azure Backup Item /// @@ -64,22 +59,6 @@ public class AzureBackupItem : AzureBackupItemContextObject /// /// Last Recovery Point for the Azure Backup Item /// - public DateTime? LastRecoveryPoint { get; set; } - - /// - /// Last Backup Time for the Azure Backup Item - /// - public DateTime? LastBackupTime { get; set; } - - /// - /// Last Backup Status for the Azure Backup Item - /// - public string LastBackupStatus { get; set; } - - /// - /// Last Backup Job Id for the Azure Backup Item - /// - public string LastBackupJobId { get; set; } public AzureBackupItem() : base() @@ -89,24 +68,19 @@ public AzureBackupItem() public AzureBackupItem(DataSourceInfo datasource, AzureBackupContainer azureBackupContainer) : base(datasource, azureBackupContainer) { - Status = datasource.Status; + DataSourceStatus = datasource.Status; ProtectionStatus = datasource.ProtectionStatus; - ProtectableObjectName = datasource.ProtectableObjectName; + Name = datasource.Name; ProtectionPolicyName = datasource.ProtectionPolicyName; ProtectionPolicyId = datasource.ProtectionPolicyId; - PolicyInconsistent = datasource.PolicyInconsistent; RecoveryPointsCount = datasource.RecoveryPointsCount; - LastRecoveryPoint = datasource.LastRecoveryPoint; - LastBackupTime = datasource.LastBackupTime; - LastBackupStatus = datasource.LastBackupStatus; - LastBackupJobId = datasource.LastBackupJobId; } public AzureBackupItem(ProtectableObjectInfo pPOItem, AzureBackupContainer azureBackupContainer) : base(pPOItem, azureBackupContainer) { ProtectionStatus = pPOItem.ProtectionStatus; - ProtectableObjectName = pPOItem.Name; + Name = pPOItem.Name; } } } \ No newline at end of file From 90242f3e811c655d3a434eaa86f6571180dab524 Mon Sep 17 00:00:00 2001 From: pikumarmsft Date: Fri, 5 Jun 2015 17:20:28 +0530 Subject: [PATCH 021/155] Changes DataSourceType field name to Type --- .../Commands.AzureBackup/Cmdlets/BackUp/TriggerBackUp.cs | 2 +- .../Cmdlets/RecoveryPoint/GetAzureBackupRecoveryPoint.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/BackUp/TriggerBackUp.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/BackUp/TriggerBackUp.cs index ebda269195ee..8db57fbc6997 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/BackUp/TriggerBackUp.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/BackUp/TriggerBackUp.cs @@ -45,7 +45,7 @@ public override void ExecuteCmdlet() MBS.OperationResponse triggerBackUpInfo = AzureBackupClient.BackUp.TriggerBackUpAsync(GetCustomRequestHeaders(), AzureBackupItem.ContainerName, - AzureBackupItem.DataSourceType, + AzureBackupItem.Type, AzureBackupItem.DataSourceId, CmdletCancellationToken).Result; diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/RecoveryPoint/GetAzureBackupRecoveryPoint.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/RecoveryPoint/GetAzureBackupRecoveryPoint.cs index 1ade5956fa4b..8a873fa88bf8 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/RecoveryPoint/GetAzureBackupRecoveryPoint.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/RecoveryPoint/GetAzureBackupRecoveryPoint.cs @@ -42,7 +42,7 @@ public override void ExecuteCmdlet() RecoveryPointListResponse recoveryPointListResponse = AzureBackupClient.RecoveryPoint.ListAsync(GetCustomRequestHeaders(), AzureBackupItem.ContainerName, - AzureBackupItem.DataSourceType, + AzureBackupItem.Type, AzureBackupItem.DataSourceId, CmdletCancellationToken).Result; From 4c0f04dec82d150585d28ec5368189cf951694c3 Mon Sep 17 00:00:00 2001 From: dragonfly91 Date: Fri, 5 Jun 2015 18:28:37 +0530 Subject: [PATCH 022/155] Implemented query filters for Get-AzureBackupContainer --- .../AzureBackupCmdletHelpMessage.cs | 3 +- .../Cmdlets/BackUp/TriggerBackUp.cs | 2 +- .../Container/GetAzureBackupContainer.cs | 93 ++++++++---------- .../Models/AzureBackupBaseObjects.cs | 26 ++--- .../Models/AzureBackupContainer.cs | 40 ++------ .../Resources/BMSCommonInterface.dll | Bin 17608 -> 17608 bytes .../Resources/BackupManagementInterface.dll | Bin 63688 -> 64712 bytes 7 files changed, 71 insertions(+), 93 deletions(-) diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupCmdletHelpMessage.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupCmdletHelpMessage.cs index 36ba804e8e69..cccf33ea3a12 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupCmdletHelpMessage.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupCmdletHelpMessage.cs @@ -21,9 +21,10 @@ internal static class AzureBackupCmdletHelpMessage public const string ResourceGroupName = "The ResourceGroup name."; public const string ResourceName = "The Resource name."; public const string TargetLocation = "The directory where the credentials file will be saved."; - public const string ContainerName = "The container name."; + public const string ContainerResourceName = "The container resource name aka friendly name."; public const string ContainerId = "The container ID."; public const string ContainerRegistrationStatus = "The container registration status."; public const string ContainerType = "The container type."; + public const string ContainerResourceGroupName = "The container resource group name."; } } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/BackUp/TriggerBackUp.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/BackUp/TriggerBackUp.cs index ebda269195ee..d2d93f57f65f 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/BackUp/TriggerBackUp.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/BackUp/TriggerBackUp.cs @@ -44,7 +44,7 @@ public override void ExecuteCmdlet() MBS.OperationResponse triggerBackUpInfo = AzureBackupClient.BackUp.TriggerBackUpAsync(GetCustomRequestHeaders(), - AzureBackupItem.ContainerName, + AzureBackupItem.ContainerUniqueName, AzureBackupItem.DataSourceType, AzureBackupItem.DataSourceId, CmdletCancellationToken).Result; diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/GetAzureBackupContainer.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/GetAzureBackupContainer.cs index 54d03adbd282..e9d6f7e074d9 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/GetAzureBackupContainer.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/GetAzureBackupContainer.cs @@ -30,15 +30,19 @@ namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets [Cmdlet(VerbsCommon.Get, "AzureBackupContainer"), OutputType(typeof(AzureBackupContainer), typeof(List))] public class GetAzureBackupContainer : AzureBackupVaultCmdletBase { - [Parameter(Position = 2, Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.ContainerName)] + [Parameter(Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.ContainerResourceGroupName)] [ValidateNotNullOrEmpty] - public string VirtualMachine { get; set; } + public string ContainerResourceGroupName { get; set; } - [Parameter(Position = 2, Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.ContainerRegistrationStatus)] + [Parameter(Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.ContainerResourceName)] + [ValidateNotNullOrEmpty] + public string ContainerResourceName { get; set; } + + [Parameter(Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.ContainerRegistrationStatus)] [ValidateNotNullOrEmpty] public AzureBackupContainerStatus Status { get; set; } - [Parameter(Position = 2, Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.ContainerType)] + [Parameter(Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.ContainerType)] [ValidateNotNullOrEmpty] public AzureBackupContainerType Type { get; set; } @@ -49,74 +53,63 @@ public override void ExecuteCmdlet() ExecutionBlock(() => { string queryFilterString = string.Empty; - // TODO: Construct query filter string based on input filters. - //queryFilterString = ConstructQueryFilterString(); - + queryFilterString = ConstructQueryFilterString(); ListContainerResponse listContainerResponse = AzureBackupClient.Container.ListAsync(queryFilterString, GetCustomRequestHeaders(), CmdletCancellationToken).Result; - IEnumerable containers = listContainerResponse.Objects.ToList().ConvertAll(containerInfo => + List containerInfos = listContainerResponse.Objects.ToList(); + + // When resource group name is specified, remove all containers whose resource group name + // doesn't match the given resource group name + if (!string.IsNullOrEmpty(ContainerResourceGroupName)) { - return new AzureBackupContainer() + containerInfos.RemoveAll(containerInfo => { - ContainerType = containerInfo.ContainerType, - FriendlyName = containerInfo.FriendlyName, - HealthStatus = containerInfo.HealthStatus, - InstanceId = containerInfo.InstanceId, - Name = containerInfo.Name, - ParentContainerFriendlyName = containerInfo.ParentContainerFriendlyName, - ParentContainerName = containerInfo.ParentContainerName, - RegistrationStatus = containerInfo.RegistrationStatus, - ResourceGroupName = ResourceGroupName, - ResourceName = ResourceName, - }; - }); + return containerInfo.ParentContainerName != ContainerResourceGroupName; + }); + } - WriteObject(containers); + WriteObject(containerInfos.ConvertAll(containerInfo => + { + return new AzureBackupContainer(containerInfo); + })); }); } private string ConstructQueryFilterString() { - string queryFilterString = string.Empty; BMI.ContainerQueryObject containerQueryObject = new BMI.ContainerQueryObject(); - if (Type != null) + switch (Type) { - switch (Type) - { - case AzureBackupContainerType.AzureVirtualMachine: - containerQueryObject.Type = BCI.ContainerType.IaasVMContainer.ToString(); - break; - default: - break; - } + case AzureBackupContainerType.AzureVirtualMachine: + containerQueryObject.Type = BCI.ContainerType.IaasVMContainer.ToString(); + break; + default: + break; } - if (Status != null) + switch (Status) { - switch (Status) - { - case AzureBackupContainerStatus.Registered: - containerQueryObject.Status = BCI.RegistrationStatus.Registered.ToString(); - break; - case AzureBackupContainerStatus.Registering: - containerQueryObject.Status = BCI.RegistrationStatus.Registering.ToString(); - break; - case AzureBackupContainerStatus.NotRegistered: - containerQueryObject.Status = BCI.RegistrationStatus.NotRegistered.ToString(); - break; - default: - break; - } + case AzureBackupContainerStatus.Registered: + containerQueryObject.Status = BCI.RegistrationStatus.Registered.ToString(); + break; + case AzureBackupContainerStatus.Registering: + containerQueryObject.Status = BCI.RegistrationStatus.Registering.ToString(); + break; + case AzureBackupContainerStatus.NotRegistered: + containerQueryObject.Status = BCI.RegistrationStatus.NotRegistered.ToString(); + break; + default: + break; } - if (VirtualMachine != null) + if (!string.IsNullOrEmpty(ContainerResourceName)) { - + containerQueryObject.FriendlyName = ContainerResourceName; } - return queryFilterString; + return BMI.BackupManagementAPIHelper.GetQueryString(containerQueryObject.GetNameValueCollection()); } } } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupBaseObjects.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupBaseObjects.cs index 711b119e6c04..721baf34383b 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupBaseObjects.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupBaseObjects.cs @@ -38,6 +38,10 @@ public AzureBackupVaultContextObject(string resourceGroupName, string resourceNa } } + /// + /// This class encapsulates all the properties of the container object + /// that are needed by higher level objects (data source, recovery point etc). + /// public class AzureBackupContainerContextObject : AzureBackupVaultContextObject { /// @@ -46,14 +50,9 @@ public class AzureBackupContainerContextObject : AzureBackupVaultContextObject public string ContainerType { get; set; } /// - /// Name of the Azure Backup container + /// Unique name of the Azure Backup Container /// - public string ContainerName { get; set; } - - /// - /// Id of the Azure Backup Container - /// - public string ContainerId { get; set; } + public string ContainerUniqueName { get; set; } public AzureBackupContainerContextObject() : base() @@ -64,15 +63,20 @@ public AzureBackupContainerContextObject(AzureBackupContainerContextObject azure : base(azureBackupContainerContextObject.ResourceGroupName, azureBackupContainerContextObject.ResourceName) { ContainerType = azureBackupContainerContextObject.ContainerType; - ContainerName = azureBackupContainerContextObject.ContainerName; - ContainerId = azureBackupContainerContextObject.ContainerId; + ContainerUniqueName = azureBackupContainerContextObject.ContainerUniqueName; } public AzureBackupContainerContextObject(AzureBackupContainer azureBackupContainer) : base(azureBackupContainer.ResourceGroupName, azureBackupContainer.ResourceName) { ContainerType = azureBackupContainer.ContainerType; - ContainerName = azureBackupContainer.ContainerName; - ContainerId = azureBackupContainer.ContainerId; + ContainerUniqueName = azureBackupContainer.ContainerUniqueName; + } + + public AzureBackupContainerContextObject(ContainerInfo containerInfo) + : base(containerInfo.ParentContainerName, containerInfo.FriendlyName) + { + ContainerType = containerInfo.ContainerType; + ContainerUniqueName = containerInfo.Name; } } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupContainer.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupContainer.cs index cdf29939106c..0e0114cc293f 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupContainer.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupContainer.cs @@ -12,6 +12,7 @@ // limitations under the License. // ---------------------------------------------------------------------------------- +using Microsoft.Azure.Management.BackupServices.Models; using System; using System.Collections.Generic; using System.Linq; @@ -25,44 +26,23 @@ namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets /// public class AzureBackupContainer : AzureBackupContainerContextObject { - /// - /// Type of the Azure Backup container - /// - public string ContainerType { get; set; } - - /// - /// Friendly name for the Azure Backup container - /// - public string FriendlyName { get; set; } - /// /// Status of health of the Azure Backup container /// public string HealthStatus { get; set; } - /// - /// Id of the Azure Backup Container - /// - public string InstanceId { get; set; } - - /// - /// Name of the Azure Backup container - /// - public string Name { get; set; } - - /// - /// Friendly name of the parent container - /// - public string ParentContainerFriendlyName { get; set; } - - /// - /// Name of the parent container - /// - public string ParentContainerName { get; set; } - /// /// Status of registration of the container /// public string RegistrationStatus { get; set; } + + public AzureBackupContainer() : base() { } + + public AzureBackupContainer(ContainerInfo containerInfo) + : base(containerInfo) + { + HealthStatus = containerInfo.HealthStatus; + RegistrationStatus = containerInfo.RegistrationStatus; + } } } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Resources/BMSCommonInterface.dll b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Resources/BMSCommonInterface.dll index eefd5479ee443adb4f7520305d9b78643499a3e7..adc7d99efcdbc2f02869b8a63fa1dc1e10a89697 100644 GIT binary patch delta 1555 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 F003-gz3Bh| diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Resources/BackupManagementInterface.dll b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Resources/BackupManagementInterface.dll index 3c3ab6d62c08a8aa2c15c933e2294c870f63848c..7b6a6c7ee7421c9c4ecaccb5991528d3a3d0557b 100644 GIT binary patch delta 24001 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 VJ~Mjt^fvuW<2sn!{E-vU{{fMv9$Wwb delta 22990 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 Date: Sat, 6 Jun 2015 12:58:32 +0530 Subject: [PATCH 023/155] Update AzureBackupContainer.cs --- .../Models/AzureBackupContainer.cs | 47 +++++-------------- 1 file changed, 11 insertions(+), 36 deletions(-) diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupContainer.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupContainer.cs index 428ac72cb0bc..529f0671bbbd 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupContainer.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupContainer.cs @@ -1,4 +1,4 @@ -// ---------------------------------------------------------------------------------- +// ---------------------------------------------------------------------------------- // // Copyright Microsoft Corporation // Licensed under the Apache License, Version 2.0 (the "License"); @@ -12,6 +12,7 @@ // limitations under the License. // ---------------------------------------------------------------------------------- +using Microsoft.Azure.Management.BackupServices.Models; using System; using System.Collections.Generic; using System.Linq; @@ -25,49 +26,23 @@ namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets /// public class AzureBackupContainer : AzureBackupContainerContextObject { - /// - /// Type of the Azure Backup container - /// - public string ContainerType { get; set; } - - /// - /// Friendly name for the Azure Backup container - /// - public string FriendlyName { get; set; } - /// /// Status of health of the Azure Backup container /// public string HealthStatus { get; set; } - /// - /// Id of the Azure Backup Container - /// - public string InstanceId { get; set; } - - /// - /// Name of the Azure Backup container - /// - public string Name { get; set; } - - /// - /// Friendly name of the parent container - /// - public string ParentContainerFriendlyName { get; set; } - - /// - /// Name of the parent container - /// - public string ParentContainerName { get; set; } - - /// - /// Region where this container is present - /// - public string Region { get; set; } - /// /// Status of registration of the container /// public string RegistrationStatus { get; set; } + + public AzureBackupContainer() : base() { } + + public AzureBackupContainer(ContainerInfo containerInfo) + : base(containerInfo) + { + HealthStatus = containerInfo.HealthStatus; + RegistrationStatus = containerInfo.RegistrationStatus; + } } } From fe68cf4f23a7180c19d222680c27d87991ed618f Mon Sep 17 00:00:00 2001 From: panbha Date: Sat, 6 Jun 2015 16:52:50 +0530 Subject: [PATCH 024/155] changes few function names --- .../AzureBackupCmdletHelpMessage.cs | 2 ++ .../AzureBackupDSCmdletBase.cs | 8 ++++---- .../Cmdlets/BackUp/TriggerBackUp.cs | 16 ++++++++-------- .../RecoveryPoint/GetAzureBackupRecoveryPoint.cs | 14 +++++++------- .../Commands.AzureBackup.csproj | 1 + 5 files changed, 22 insertions(+), 19 deletions(-) diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupCmdletHelpMessage.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupCmdletHelpMessage.cs index 68f92d525aa6..3183106a5db1 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupCmdletHelpMessage.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupCmdletHelpMessage.cs @@ -27,5 +27,7 @@ internal static class AzureBackupCmdletHelpMessage public const string ContainerType = "The container type."; public const string ContainerResourceGroupName = "The container resource group name."; public const string ProtectionStatus = "Protection Status of the azure backup item."; + public const string AzureBackUpItem = "Azure BackUp Item."; + public const string RecoveryPointId = "Recovery Point Id."; } } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupDSCmdletBase.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupDSCmdletBase.cs index a998ce6ca367..819c16f11e9b 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupDSCmdletBase.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupDSCmdletBase.cs @@ -30,17 +30,17 @@ public abstract class AzureBackupDSCmdletBase : AzureBackupCmdletBase { // ToDO: // Correct Help message and other attributes related to paameters - [Parameter(Position = 0, Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.ResourceGroupName, ValueFromPipelineByPropertyName = true)] + [Parameter(Position = 0, Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.AzureBackUpItem, ValueFromPipelineByPropertyName = true)] [ValidateNotNullOrEmpty] - public AzureBackupItem AzureBackupItem { get; set; } + public AzureBackupItem item { get; set; } public override void ExecuteCmdlet() { base.ExecuteCmdlet(); - WriteDebug(String.Format("Cmdlet called for ResourceGroupName: {0}, ResourceName: {1}", AzureBackupItem.ResourceGroupName, AzureBackupItem.ResourceName)); + WriteDebug(String.Format("Cmdlet called for ResourceGroupName: {0}, ResourceName: {1}", item.ResourceGroupName, item.ResourceName)); - InitializeAzureBackupCmdlet(AzureBackupItem.ResourceGroupName, AzureBackupItem.ResourceName); + InitializeAzureBackupCmdlet(item.ResourceGroupName, item.ResourceName); } } } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/BackUp/TriggerBackUp.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/BackUp/TriggerBackUp.cs index cc24865b0cce..743af3ae54d5 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/BackUp/TriggerBackUp.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/BackUp/TriggerBackUp.cs @@ -31,7 +31,7 @@ namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets /// /// Get list of containers /// - [Cmdlet(VerbsCommon.New, "AzureBackupItem"), OutputType(typeof(MBS.OperationResponse))] + [Cmdlet(VerbsData.Backup, "AzureBackupItem"), OutputType(typeof(MBS.OperationResponse))] public class TriggerAzureBackup : AzureBackupDSCmdletBase { public override void ExecuteCmdlet() @@ -44,26 +44,26 @@ public override void ExecuteCmdlet() MBS.OperationResponse triggerBackUpInfo = AzureBackupClient.BackUp.TriggerBackUpAsync(GetCustomRequestHeaders(), - AzureBackupItem.ContainerUniqueName, - AzureBackupItem.Type, - AzureBackupItem.DataSourceId, + item.ContainerUniqueName, + item.Type, + item.DataSourceId, CmdletCancellationToken).Result; WriteVerbose("Received policy response"); WriteVerbose("Received policy response2"); WriteVerbose("Converting response"); - WriteAzureBackupProtectionPolicy(triggerBackUpInfo); + WriteAzureBackupOperationId(triggerBackUpInfo); }); } - public void WriteAzureBackupProtectionPolicy(MBS.OperationResponse sourceOperationResponse) + public void WriteAzureBackupOperationId(MBS.OperationResponse sourceOperationResponse) { // this needs to be uncommented once we have proper constructor - //this.WriteObject(new AzureBackupRecoveryPoint(ResourceGroupName, ResourceName, sourceOperationResponse)); + // this.WriteObject(new AzureBackupRecoveryPoint(ResourceGroupName, ResourceName, sourceOperationResponse)); } - public void WriteAzureBackupProtectionPolicy(IEnumerable sourceOperationResponseList) + public void WriteAzureBackupOperationId(IEnumerable sourceOperationResponseList) { List targetList = new List(); diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/RecoveryPoint/GetAzureBackupRecoveryPoint.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/RecoveryPoint/GetAzureBackupRecoveryPoint.cs index 61fdbc83a74d..2d50b7592b68 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/RecoveryPoint/GetAzureBackupRecoveryPoint.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/RecoveryPoint/GetAzureBackupRecoveryPoint.cs @@ -27,7 +27,7 @@ namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets [Cmdlet(VerbsCommon.Get, "AzureBackupRecoveryPoint"), OutputType(typeof(AzureBackupRecoveryPoint), typeof(List))] public class GetAzureBackupRecoveryPoint : AzureBackupDSCmdletBase { - [Parameter(Position = 2, Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.PolicyName)] + [Parameter(Position = 2, Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.RecoveryPointId)] [ValidateNotNullOrEmpty] public string Id { get; set; } @@ -41,9 +41,9 @@ public override void ExecuteCmdlet() RecoveryPointListResponse recoveryPointListResponse = AzureBackupClient.RecoveryPoint.ListAsync(GetCustomRequestHeaders(), - AzureBackupItem.ContainerUniqueName, - AzureBackupItem.Type, - AzureBackupItem.DataSourceId, + item.ContainerUniqueName, + item.Type, + item.DataSourceId, CmdletCancellationToken).Result; WriteVerbose("Received policy response"); @@ -59,16 +59,16 @@ public override void ExecuteCmdlet() } WriteVerbose("Converting response"); - WriteAzureBackupProtectionPolicy(recoveryPointObjects, AzureBackupItem); + WriteAzureBackupRecoveryPoint(recoveryPointObjects, item); }); } - public void WriteAzureBackupProtectionPolicy(RecoveryPointInfo sourceRecoverPoint, AzureBackupItem azureBackupItem) + public void WriteAzureBackupRecoveryPoint(RecoveryPointInfo sourceRecoverPoint, AzureBackupItem azureBackupItem) { this.WriteObject(new AzureBackupRecoveryPoint(sourceRecoverPoint, azureBackupItem)); } - public void WriteAzureBackupProtectionPolicy(IEnumerable sourceRecoverPointList, AzureBackupItem azureBackupItem) + public void WriteAzureBackupRecoveryPoint(IEnumerable sourceRecoverPointList, AzureBackupItem azureBackupItem) { List targetList = new List(); diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj index d844b2eabb8f..ecc3662b0c45 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj @@ -121,6 +121,7 @@ + From 4858155aaaaf6d1d981321bc4f9e9d1dea3fab6f Mon Sep 17 00:00:00 2001 From: panbha Date: Sat, 6 Jun 2015 17:02:09 +0530 Subject: [PATCH 025/155] changes few parameters --- .../Cmdlets/RecoveryPoint/GetAzureBackupRecoveryPoint.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/RecoveryPoint/GetAzureBackupRecoveryPoint.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/RecoveryPoint/GetAzureBackupRecoveryPoint.cs index 2d50b7592b68..2db0c571e424 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/RecoveryPoint/GetAzureBackupRecoveryPoint.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/RecoveryPoint/GetAzureBackupRecoveryPoint.cs @@ -27,7 +27,7 @@ namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets [Cmdlet(VerbsCommon.Get, "AzureBackupRecoveryPoint"), OutputType(typeof(AzureBackupRecoveryPoint), typeof(List))] public class GetAzureBackupRecoveryPoint : AzureBackupDSCmdletBase { - [Parameter(Position = 2, Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.RecoveryPointId)] + [Parameter(Position = 1, Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.RecoveryPointId)] [ValidateNotNullOrEmpty] public string Id { get; set; } From fb4ba52a7d922312933954a174d2ae2d39210cdf Mon Sep 17 00:00:00 2001 From: dragonfly91 Date: Mon, 8 Jun 2015 18:39:17 +0530 Subject: [PATCH 026/155] Including necessary resource DLLs in the csproj --- .../Commands.AzureBackup/Commands.AzureBackup.csproj | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj index ecc3662b0c45..9368865fe23e 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj @@ -43,6 +43,14 @@ false + + False + Resources\BackupManagementInterface.dll + + + False + Resources\BMSCommonInterface.dll + ..\..\..\packages\Hyak.Common.1.0.2\lib\portable-net403+win+wpa81\Hyak.Common.dll @@ -116,6 +124,7 @@ + @@ -170,6 +179,8 @@ + + From fe83f275f4a85dc66bfe9f1325db92b32d48987d Mon Sep 17 00:00:00 2001 From: mkherani Date: Mon, 8 Jun 2015 19:05:42 +0530 Subject: [PATCH 027/155] My changes --- .../AzureBackupCmdletHelpMessage.cs | 1 + .../Container/RegisterAzureBackupContainer.cs | 120 ++++++++++++++++++ .../UnregisterAzureBackupContainer.cs | 84 ++++++++++++ .../RegisterAzureBackupContainer.cs | 14 ++ .../Commands.AzureBackup.csproj | 6 + .../RegisterContainer/RegisterContainer.cs | 66 ++++++++++ 6 files changed, 291 insertions(+) create mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/RegisterAzureBackupContainer.cs create mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/UnregisterAzureBackupContainer.cs create mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/RegisterContainer/RegisterAzureBackupContainer.cs create mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/RegisterContainer/RegisterContainer.cs diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupCmdletHelpMessage.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupCmdletHelpMessage.cs index 36ba804e8e69..15331e043040 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupCmdletHelpMessage.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupCmdletHelpMessage.cs @@ -25,5 +25,6 @@ internal static class AzureBackupCmdletHelpMessage public const string ContainerId = "The container ID."; public const string ContainerRegistrationStatus = "The container registration status."; public const string ContainerType = "The container type."; + public const string VirtualMachine = "Virtual Machine."; } } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/RegisterAzureBackupContainer.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/RegisterAzureBackupContainer.cs new file mode 100644 index 000000000000..d060fc17fc9c --- /dev/null +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/RegisterAzureBackupContainer.cs @@ -0,0 +1,120 @@ +// ---------------------------------------------------------------------------------- +// +// Copyright Microsoft Corporation +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// ---------------------------------------------------------------------------------- + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Management.Automation; +using System.Text; +using System.Threading.Tasks; +using Microsoft.Azure.Commands.Compute; +using Microsoft.Azure.Management.BackupServices.Models; +using MBS = Microsoft.Azure.Management.BackupServices; +using Microsoft.Azure.Commands.Compute.Models; + + +namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets +{ + /// + /// Get list of containers + /// + [Cmdlet(VerbsLifecycle.Register, "AzureBackupContainer"), OutputType(typeof(Guid))] + public class RegisterAzureBackupContainer : AzureBackupVaultCmdletBase + { + [Parameter(Position = 2, Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.VirtualMachine)] + [ValidateNotNullOrEmpty] + public PSVirtualMachineInstanceView VirtualMachine { get; set; } + + public override void ExecuteCmdlet() + { + base.ExecuteCmdlet(); + + ExecutionBlock(() => + { + string vmName = VirtualMachine.Name; + string rgName = VirtualMachine.ResourceGroupName; + Guid jobId = Guid.Empty; + bool isDiscoveryNeed = false; + MBS.OperationResponse operationResponse; + + ContainerInfo container = null; + isDiscoveryNeed = IsDiscoveryNeeded(vmName, rgName, out container); + if(isDiscoveryNeed) + { + RefreshContainer(); + } + + isDiscoveryNeed = IsDiscoveryNeeded(vmName, rgName, out container); + if((isDiscoveryNeed == false) && (container == null)) + { + //Container is not discovered. Throw exception + throw new NotImplementedException(); + } + else + { + //Container is discovered. Register the container + List containerNameList = new List(); + containerNameList.Add(container.Name); + RegisterContainerRequest registrationRequest = new RegisterContainerRequest(containerNameList, "IaasVMContainer"); //TODO: Container type from enum + operationResponse = AzureBackupClient.Container.RegisterAsync(registrationRequest, GetCustomRequestHeaders(), CmdletCancellationToken).Result; + + //TODO fix the OperationResponse to JobID conversion + jobId = operationResponse.OperationId; + WriteObject(jobId); + } + }); + } + + private void RefreshContainer() + { + MBS.OperationResponse opResponse = + AzureBackupClient.Container.RefreshAsync(GetCustomRequestHeaders(), CmdletCancellationToken).Result; + + //Now wait for the operation to Complete + + //If operat + throw new NotImplementedException(); + } + + private bool IsDiscoveryNeeded(string vmName, string rgName, out ContainerInfo container) + { + bool isDiscoveryNeed = false; + //First check if container is discoverd or not + ListContainerQueryParameter queryParams = new ListContainerQueryParameter(); + queryParams.ContainerFriendlyNameField = vmName; + ListContainerResponse containers = AzureBackupClient.Container.ListAsync(queryParams, + GetCustomRequestHeaders(), CmdletCancellationToken).Result; + if (containers.Objects.Count() == 0) + { + //Container is not discover + WriteVerbose("Container is not discovered"); + container = null; + isDiscoveryNeed = true; + } + + else + { + //We can have multiple container with same friendly 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 + isDiscoveryNeed = true; + } + } + return isDiscoveryNeed; + } + } +} diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/UnregisterAzureBackupContainer.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/UnregisterAzureBackupContainer.cs new file mode 100644 index 000000000000..1488830062a4 --- /dev/null +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/UnregisterAzureBackupContainer.cs @@ -0,0 +1,84 @@ +// ---------------------------------------------------------------------------------- +// +// Copyright Microsoft Corporation +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// ---------------------------------------------------------------------------------- + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Management.Automation; +using System.Text; +using System.Threading.Tasks; +using Microsoft.Azure.Commands.Compute; +using Microsoft.Azure.Management.BackupServices.Models; +using MBS = Microsoft.Azure.Management.BackupServices; +using Microsoft.Azure.Commands.Compute.Models; + + +namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets +{ + /// + /// Get list of containers + /// + [Cmdlet(VerbsLifecycle.Unregister, "AzureBackupContainer"), OutputType(typeof(Guid))] + public class UnregisterAzureBackupContainer : AzureBackupVaultCmdletBase + { + [Parameter(Position = 2, Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.VirtualMachine)] + [ValidateNotNullOrEmpty] + public PSVirtualMachineInstanceView VirtualMachine { get; set; } + + public override void ExecuteCmdlet() + { + base.ExecuteCmdlet(); + + ExecutionBlock(() => + { + string vmName = VirtualMachine.Name; + string rgName = VirtualMachine.ResourceGroupName; + Guid jobId = Guid.Empty; + + ListContainerQueryParameter queryParams = new ListContainerQueryParameter(); + queryParams.ContainerStatusField = "Registered"; //TODO: Use enum + queryParams.ContainerFriendlyNameField = vmName; + + ListContainerResponse containers = + AzureBackupClient.Container.ListAsync(queryParams, + GetCustomRequestHeaders(), CmdletCancellationToken).Result; + if(containers.Objects.Count() == 0) + { + WriteVerbose("Container is not in the registered list"); + jobId = Guid.Empty; + } + + else + { + //We can havemultiple container with same friendly name. + //Look for resourceGroup name in the ParentFriendlyName + ContainerInfo containerToUnreg = containers.Objects.Where(c => c.ParentContainerFriendlyName.ToLower().Equals(rgName.ToLower())).FirstOrDefault(); + if (containerToUnreg == null) + { + //Container is not in list of registered container + jobId = Guid.Empty; + } + else + { + UnregisterContainerRequest unregRequest = new UnregisterContainerRequest(containerToUnreg.Name, "IaasVMContainer"); //TODO: Use enum + MBS.OperationResponse operationResponse = AzureBackupClient.Container.UnregisterAsync(unregRequest, GetCustomRequestHeaders(), CmdletCancellationToken).Result; + jobId = operationResponse.OperationId; //TODO: Fix it once PiyushKa publish the rest APi to get jobId based on operationId + } + } + + WriteObject(jobId); + }); + } + } +} diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/RegisterContainer/RegisterAzureBackupContainer.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/RegisterContainer/RegisterAzureBackupContainer.cs new file mode 100644 index 000000000000..1f896324275f --- /dev/null +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/RegisterContainer/RegisterAzureBackupContainer.cs @@ -0,0 +1,14 @@ +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 + { + } +} diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj index d844b2eabb8f..c1724cd33cb7 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj @@ -122,6 +122,8 @@ + + @@ -148,6 +150,10 @@ {5ee72c53-1720-4309-b54b-5fb79703195f} Commands.Common + + {52643bd5-6378-49bd-9f6e-dac9dd8a867b} + Commands.Compute + diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/RegisterContainer/RegisterContainer.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/RegisterContainer/RegisterContainer.cs new file mode 100644 index 000000000000..f35a9dc0b509 --- /dev/null +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/RegisterContainer/RegisterContainer.cs @@ -0,0 +1,66 @@ +// ---------------------------------------------------------------------------------- +// +// Copyright Microsoft Corporation +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// ---------------------------------------------------------------------------------- + +using Microsoft.Azure.Management.BackupServices.Models; +using System; +using System.Collections.Generic; +namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets +{ + /// + /// Represents ProtectionPolicy object + /// + public class AzureBackupRegisterContainer : AzureBackupVaultContextObject + { + /// + /// InstanceId of the azurebackup object + /// + public string InstanceId { get; set; } + + /// + /// Name of the azurebackup object + /// + public string Name { get; set; } + + public string WorkloadType { get; set; } + + public string BackupType { get; set; } + + public DateTime ScheduleStartTime { get; set; } + + public IList ScheduleRunTimes { get; set; } + + public string RetentionType { get; set; } + + public int RetentionDuration { get; set; } + + public AzureBackupRegisterContainer() + { + } + + public AzureBackupRegisterContainer(string resourceGroupName, string resourceName, ProtectionPolicyInfo sourcePolicy) + : base(resourceGroupName, resourceName) + { + InstanceId = sourcePolicy.InstanceId; + Name = sourcePolicy.Name; + WorkloadType = sourcePolicy.WorkloadType; + + BackupType = sourcePolicy.Schedule.BackupType; + ScheduleStartTime = sourcePolicy.Schedule.ScheduleStartTime; + ScheduleRunTimes = sourcePolicy.Schedule.ScheduleRunTimes; + + RetentionType = sourcePolicy.Schedule.RetentionPolicy.RetentionType.ToString(); + RetentionDuration = sourcePolicy.Schedule.RetentionPolicy.RetentionDuration; + } + } +} From cf7435b5ac9d7b27e8e012b50de371c02f328162 Mon Sep 17 00:00:00 2001 From: dragonfly91 Date: Tue, 9 Jun 2015 15:28:14 +0530 Subject: [PATCH 028/155] Download Vault Creds cmdlet fixes post component testing. --- .../GetAzureBackupVaultCredentials.cs | 20 ++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/VaultCredentials/GetAzureBackupVaultCredentials.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/VaultCredentials/GetAzureBackupVaultCredentials.cs index c3169e239210..70f4908cec92 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/VaultCredentials/GetAzureBackupVaultCredentials.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/VaultCredentials/GetAzureBackupVaultCredentials.cs @@ -45,8 +45,11 @@ public override void ExecuteCmdlet() ExecutionBlock(() => { - WriteVerbose(string.Format("Profile == null : {0}", (Profile == null).ToString())); - WriteVerbose(string.Format("Profile.DefaultSubscription == null : {0}", (Profile.DefaultSubscription == null).ToString())); + if (!Directory.Exists(TargetLocation)) + { + throw new ArgumentException("The target location provided is not a directory. Please provide a directory."); + } + string subscriptionId = Profile.DefaultSubscription.Id.ToString(); string resourceType = "resourceType"; string displayName = subscriptionId + "_" + ResourceGroupName + "_" + ResourceName; @@ -62,7 +65,6 @@ public override void ExecuteCmdlet() DateTime.UtcNow.AddHours(this.GetCertificateExpiryInHours())); AcsNamespace acsNamespace = new AcsNamespace(); - string channelIntegrityKey = string.Empty; try { @@ -80,8 +82,16 @@ public override void ExecuteCmdlet() string vaultCredsFileContent = GenerateVaultCreds(cert, subscriptionId, resourceType, acsNamespace); // prepare for download - string fileName = string.Format("{0}_{1}.VaultCredentials", displayName, DateTime.UtcNow.ToLongDateString()); - string filePath = Path.Combine(Path.GetDirectoryName(TargetLocation), fileName); + string fileName = string.Format("{0}_{1}.VaultCredentials", displayName, DateTime.UtcNow.ToString("yyyy-dd-M--HH-mm-ss")); + string directoryPath = Path.GetDirectoryName(TargetLocation); + if (directoryPath == null) + { + // TargetLocation is a root path + directoryPath = TargetLocation; + } + string filePath = Path.Combine(directoryPath, fileName); + WriteVerbose(string.Format("Saving Vault Credentials to file : {0}", filePath)); + File.WriteAllBytes(filePath, Encoding.UTF8.GetBytes(vaultCredsFileContent)); // Output filename back to user From 2f530aafbc2d83459b7c87841a9af13aa4b755c0 Mon Sep 17 00:00:00 2001 From: panbha Date: Tue, 9 Jun 2015 17:53:40 +0530 Subject: [PATCH 029/155] addingLocation --- .../AzureBackupCmdletBase.cs | 8 +++++++- .../AzureBackupCmdletHelpMessage.cs | 1 + .../AzureBackupDSCmdletBase.cs | 2 +- .../AzureBackupVaultCmdletBase.cs | 5 ++++- .../Container/GetAzureBackupContainer.cs | 2 +- .../GetAzureBackupProtectionPolicy.cs | 4 ++-- .../Commands.AzureBackup.csproj | 10 ++++++++++ .../Models/AzureBackupBaseObjects.cs | 18 ++++++++++++------ .../Models/AzureBackupContainer.cs | 4 ++-- .../Models/ProtectionPolicy.cs | 18 +++++++++++++++++- 10 files changed, 57 insertions(+), 15 deletions(-) diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupCmdletBase.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupCmdletBase.cs index 3ee539817118..b73ff2db7947 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupCmdletBase.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupCmdletBase.cs @@ -41,6 +41,11 @@ public abstract class AzureBackupCmdletBase : AzurePSCmdlet /// private string resourceName { get; set; } + /// + /// Resource context for the operation + /// + private string location { get; set; } + /// /// Client request id. /// @@ -82,10 +87,11 @@ protected void RefreshClientRequestId() clientRequestId = Guid.NewGuid().ToString() + "-" + DateTime.Now.ToUniversalTime().ToString("yyyy-MM-dd HH:mm:ssZ") + "-PS"; } - public void InitializeAzureBackupCmdlet(string rgName, string rName) + public void InitializeAzureBackupCmdlet(string rgName, string rName, string locationName) { resourceGroupName = rgName; resourceName = rName; + location = locationName; RefreshClientRequestId(); WriteDebug(string.Format("Initialized AzureBackup Cmdlet, ClientRequestId: {0}, ResourceGroupName: {1}, ResourceName : {2}", this.clientRequestId, resourceGroupName, resourceName)); diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupCmdletHelpMessage.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupCmdletHelpMessage.cs index 3183106a5db1..eca778111c9f 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupCmdletHelpMessage.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupCmdletHelpMessage.cs @@ -20,6 +20,7 @@ internal static class AzureBackupCmdletHelpMessage public const string PolicyName = "The protection policy name."; public const string ResourceGroupName = "The ResourceGroup name."; public const string ResourceName = "The Resource name."; + public const string Location = "Location."; public const string TargetLocation = "The directory where the credentials file will be saved."; public const string ContainerResourceName = "The container resource name aka friendly name."; public const string ContainerId = "The container ID."; diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupDSCmdletBase.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupDSCmdletBase.cs index 819c16f11e9b..aecbd3dcbe01 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupDSCmdletBase.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupDSCmdletBase.cs @@ -40,7 +40,7 @@ public override void ExecuteCmdlet() WriteDebug(String.Format("Cmdlet called for ResourceGroupName: {0}, ResourceName: {1}", item.ResourceGroupName, item.ResourceName)); - InitializeAzureBackupCmdlet(item.ResourceGroupName, item.ResourceName); + InitializeAzureBackupCmdlet(item.ResourceGroupName, item.ResourceName, item.Location); } } } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupVaultCmdletBase.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupVaultCmdletBase.cs index b95e48760f6a..c57d742345c1 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupVaultCmdletBase.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupVaultCmdletBase.cs @@ -36,6 +36,9 @@ public abstract class AzureBackupVaultCmdletBase : AzureBackupCmdletBase [ValidateNotNullOrEmpty] public string ResourceName { get; set; } + [Parameter(Position = 2, Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.Location, ValueFromPipelineByPropertyName = true)] + [ValidateNotNullOrEmpty] + public string Location { get; set; } public override void ExecuteCmdlet() { @@ -43,7 +46,7 @@ public override void ExecuteCmdlet() WriteDebug(String.Format("Cmdlet called for ResourceGroupName: {0}, ResourceName: {1}", ResourceGroupName, ResourceName)); - InitializeAzureBackupCmdlet(ResourceGroupName, ResourceName); + InitializeAzureBackupCmdlet(ResourceGroupName, ResourceName, Location); } } } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/GetAzureBackupContainer.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/GetAzureBackupContainer.cs index e9d6f7e074d9..8607be5ce212 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/GetAzureBackupContainer.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/GetAzureBackupContainer.cs @@ -71,7 +71,7 @@ public override void ExecuteCmdlet() WriteObject(containerInfos.ConvertAll(containerInfo => { - return new AzureBackupContainer(containerInfo); + return new AzureBackupContainer(containerInfo, ResourceGroupName, ResourceName, Location); })); }); } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/GetAzureBackupProtectionPolicy.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/GetAzureBackupProtectionPolicy.cs index ab0e95779733..3bd6dbafa893 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/GetAzureBackupProtectionPolicy.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/GetAzureBackupProtectionPolicy.cs @@ -60,7 +60,7 @@ public override void ExecuteCmdlet() public void WriteAzureBackupProtectionPolicy(ProtectionPolicyInfo sourcePolicy) { - this.WriteObject(new AzureBackupProtectionPolicy(ResourceGroupName, ResourceName, sourcePolicy)); + this.WriteObject(new AzureBackupProtectionPolicy(ResourceGroupName, ResourceName, Location, sourcePolicy)); } public void WriteAzureBackupProtectionPolicy(IEnumerable sourcePolicyList) @@ -69,7 +69,7 @@ public void WriteAzureBackupProtectionPolicy(IEnumerable s foreach (var sourcePolicy in sourcePolicyList) { - targetList.Add(new AzureBackupProtectionPolicy(ResourceGroupName, ResourceName, sourcePolicy)); + targetList.Add(new AzureBackupProtectionPolicy(ResourceGroupName, ResourceName, Location, sourcePolicy)); } this.WriteObject(targetList, true); diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj index ecc3662b0c45..e2143b92e726 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj @@ -43,6 +43,14 @@ false + + False + Resources\BackupManagementInterface.dll + + + False + Resources\BMSCommonInterface.dll + ..\..\..\packages\Hyak.Common.1.0.2\lib\portable-net403+win+wpa81\Hyak.Common.dll @@ -170,6 +178,8 @@ + + diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupBaseObjects.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupBaseObjects.cs index d5c471790ef2..c96a61694e83 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupBaseObjects.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupBaseObjects.cs @@ -27,14 +27,20 @@ public class AzureBackupVaultContextObject /// public string ResourceName { get; set; } + /// + /// ResourceName of the azurebackup object + /// + public string Location { get; set; } + public AzureBackupVaultContextObject() { } - - public AzureBackupVaultContextObject(string resourceGroupName, string resourceName) + + public AzureBackupVaultContextObject(string resourceGroupName, string resourceName, string locationName) { ResourceGroupName = resourceGroupName; ResourceName = resourceName; + Location = locationName; } } @@ -60,20 +66,20 @@ public AzureBackupContainerContextObject() } public AzureBackupContainerContextObject(AzureBackupContainerContextObject azureBackupContainerContextObject) - : base(azureBackupContainerContextObject.ResourceGroupName, azureBackupContainerContextObject.ResourceName) + : base(azureBackupContainerContextObject.ResourceGroupName, azureBackupContainerContextObject.ResourceName, azureBackupContainerContextObject.Location) { ContainerType = azureBackupContainerContextObject.ContainerType; ContainerUniqueName = azureBackupContainerContextObject.ContainerUniqueName; } public AzureBackupContainerContextObject(AzureBackupContainer azureBackupContainer) - : base(azureBackupContainer.ResourceGroupName, azureBackupContainer.ResourceName) + : base(azureBackupContainer.ResourceGroupName, azureBackupContainer.ResourceName, azureBackupContainer.Location) { ContainerType = azureBackupContainer.ContainerType; ContainerUniqueName = azureBackupContainer.ContainerUniqueName; } - public AzureBackupContainerContextObject(ContainerInfo containerInfo) - : base(containerInfo.ParentContainerName, containerInfo.FriendlyName) + public AzureBackupContainerContextObject(ContainerInfo containerInfo, string rgName, string rName, string location) + : base(rgName, rName, location) { ContainerType = containerInfo.ContainerType; ContainerUniqueName = containerInfo.Name; diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupContainer.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupContainer.cs index 529f0671bbbd..e79b51fa276e 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupContainer.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupContainer.cs @@ -38,8 +38,8 @@ public class AzureBackupContainer : AzureBackupContainerContextObject public AzureBackupContainer() : base() { } - public AzureBackupContainer(ContainerInfo containerInfo) - : base(containerInfo) + public AzureBackupContainer(ContainerInfo containerInfo, string rgName, string rName, string location) + : base(containerInfo, rgName, rName, location) { HealthStatus = containerInfo.HealthStatus; RegistrationStatus = containerInfo.RegistrationStatus; diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/ProtectionPolicy.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/ProtectionPolicy.cs index 85ee3774d7dd..45f30b2db6d5 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/ProtectionPolicy.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/ProtectionPolicy.cs @@ -48,7 +48,23 @@ public AzureBackupProtectionPolicy() { } - public AzureBackupProtectionPolicy(string resourceGroupName, string resourceName, ProtectionPolicyInfo sourcePolicy) : base(resourceGroupName, resourceName) + public AzureBackupProtectionPolicy(string resourceGroupName, string resourceName, ProtectionPolicyInfo sourcePolicy) + : base(resourceGroupName, resourceName, "dfsdf") + { + InstanceId = sourcePolicy.InstanceId; + Name = sourcePolicy.Name; + WorkloadType = sourcePolicy.WorkloadType; + + BackupType = sourcePolicy.Schedule.BackupType; + ScheduleStartTime = sourcePolicy.Schedule.ScheduleStartTime; + ScheduleRunTimes = sourcePolicy.Schedule.ScheduleRunTimes; + + RetentionType = sourcePolicy.Schedule.RetentionPolicy.RetentionType.ToString(); + RetentionDuration = sourcePolicy.Schedule.RetentionPolicy.RetentionDuration; + } + + public AzureBackupProtectionPolicy(string resourceGroupName, string resourceName, string location, ProtectionPolicyInfo sourcePolicy) + : base(resourceGroupName, resourceName, location) { InstanceId = sourcePolicy.InstanceId; Name = sourcePolicy.Name; From d78f8c20d9910efa24008990c6e30a949540db8e Mon Sep 17 00:00:00 2001 From: panbha Date: Tue, 9 Jun 2015 17:57:21 +0530 Subject: [PATCH 030/155] addingLocation1 --- .../GetAzureBackupProtectionPolicy.cs | 2 +- .../Models/ProtectionPolicy.cs | 15 --------------- 2 files changed, 1 insertion(+), 16 deletions(-) diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/GetAzureBackupProtectionPolicy.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/GetAzureBackupProtectionPolicy.cs index 3bd6dbafa893..7ae230fb76db 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/GetAzureBackupProtectionPolicy.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/GetAzureBackupProtectionPolicy.cs @@ -27,7 +27,7 @@ namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets [Cmdlet(VerbsCommon.Get, "AzureBackupProtectionPolicy"), OutputType(typeof(AzureBackupProtectionPolicy), typeof(List))] public class GetAzureBackupProtectionPolicy : AzureBackupVaultCmdletBase { - [Parameter(Position = 2, Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.PolicyName)] + [Parameter(Position = 3, Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.PolicyName)] [ValidateNotNullOrEmpty] public string Name { get; set; } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/ProtectionPolicy.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/ProtectionPolicy.cs index 45f30b2db6d5..291a7ca3d7d4 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/ProtectionPolicy.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/ProtectionPolicy.cs @@ -48,21 +48,6 @@ public AzureBackupProtectionPolicy() { } - public AzureBackupProtectionPolicy(string resourceGroupName, string resourceName, ProtectionPolicyInfo sourcePolicy) - : base(resourceGroupName, resourceName, "dfsdf") - { - InstanceId = sourcePolicy.InstanceId; - Name = sourcePolicy.Name; - WorkloadType = sourcePolicy.WorkloadType; - - BackupType = sourcePolicy.Schedule.BackupType; - ScheduleStartTime = sourcePolicy.Schedule.ScheduleStartTime; - ScheduleRunTimes = sourcePolicy.Schedule.ScheduleRunTimes; - - RetentionType = sourcePolicy.Schedule.RetentionPolicy.RetentionType.ToString(); - RetentionDuration = sourcePolicy.Schedule.RetentionPolicy.RetentionDuration; - } - public AzureBackupProtectionPolicy(string resourceGroupName, string resourceName, string location, ProtectionPolicyInfo sourcePolicy) : base(resourceGroupName, resourceName, location) { From eab1f727b6d2fd492890e435bf16a3b1cc1495b8 Mon Sep 17 00:00:00 2001 From: dragonfly91 Date: Wed, 10 Jun 2015 16:01:12 +0530 Subject: [PATCH 031/155] Fixes for build break --- .../Commands.AzureBackup/AzureBackupContainerCmdletBase.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupContainerCmdletBase.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupContainerCmdletBase.cs index bffc98a2f8c6..f7731aec3a62 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupContainerCmdletBase.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupContainerCmdletBase.cs @@ -38,9 +38,9 @@ public override void ExecuteCmdlet() { base.ExecuteCmdlet(); - WriteDebug(String.Format("Cmdlet called for ResourceGroupName: {0}, ResourceName: {1}", AzureBackupContainer.ResourceGroupName, AzureBackupContainer.ResourceName)); + WriteDebug(String.Format("Cmdlet called for ResourceGroupName: {0}, ResourceName: {1}, Location: {2}", AzureBackupContainer.ResourceGroupName, AzureBackupContainer.ResourceName, AzureBackupContainer.Location)); - InitializeAzureBackupCmdlet(AzureBackupContainer.ResourceGroupName, AzureBackupContainer.ResourceName); + InitializeAzureBackupCmdlet(AzureBackupContainer.ResourceGroupName, AzureBackupContainer.ResourceName, AzureBackupContainer.Location); } } } \ No newline at end of file From a76f1a69cb9f25502d56c6e3a534816402b17e16 Mon Sep 17 00:00:00 2001 From: dragonfly91 Date: Wed, 10 Jun 2015 17:33:09 +0530 Subject: [PATCH 032/155] Get-AzureBackupContainer bug fixes --- .../Container/GetAzureBackupContainer.cs | 22 ++++++++++++++++--- .../Models/AzureBackupContainerStatus.cs | 3 ++- .../Models/AzureBackupContainerType.cs | 3 ++- 3 files changed, 23 insertions(+), 5 deletions(-) diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/GetAzureBackupContainer.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/GetAzureBackupContainer.cs index 8607be5ce212..0e3edf307f2d 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/GetAzureBackupContainer.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/GetAzureBackupContainer.cs @@ -57,6 +57,8 @@ public override void ExecuteCmdlet() ListContainerResponse listContainerResponse = AzureBackupClient.Container.ListAsync(queryFilterString, GetCustomRequestHeaders(), CmdletCancellationToken).Result; + WriteVerbose(string.Format("# of fetched containers = {0}", listContainerResponse.Objects.Count)); + List containerInfos = listContainerResponse.Objects.ToList(); // When resource group name is specified, remove all containers whose resource group name @@ -69,10 +71,24 @@ public override void ExecuteCmdlet() }); } - WriteObject(containerInfos.ConvertAll(containerInfo => + WriteVerbose(string.Format("# of containers after resource group filter = {0}", listContainerResponse.Objects.Count)); + + List containers = containerInfos.ConvertAll(containerInfo => + { + return new AzureBackupContainer(containerInfo, ResourceGroupName, ResourceName, Location); + }); + + if (!string.IsNullOrEmpty(ResourceName) & !string.IsNullOrEmpty(ResourceGroupName)) { - return new AzureBackupContainer(containerInfo, ResourceGroupName, ResourceName, Location); - })); + if (containers.Any()) + { + WriteObject(containers.First()); + } + } + else + { + WriteObject(containers); + } }); } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupContainerStatus.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupContainerStatus.cs index ed3d37517fa6..5888ecf2be98 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupContainerStatus.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupContainerStatus.cs @@ -22,8 +22,9 @@ namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets { public enum AzureBackupContainerStatus { + All, Registered, Registering, - NotRegistered + NotRegistered, } } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupContainerType.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupContainerType.cs index 6875a8cbd60f..01ff635bdb93 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupContainerType.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupContainerType.cs @@ -22,6 +22,7 @@ namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets { public enum AzureBackupContainerType { - AzureVirtualMachine + All, + AzureVirtualMachine, } } From 59a90f08c0758e11d1e75b428e459ae0da1156d2 Mon Sep 17 00:00:00 2001 From: mkherani Date: Wed, 10 Jun 2015 17:52:58 +0530 Subject: [PATCH 033/155] temp changes --- .../AzureBackupCmdletHelpMessage.cs | 3 - .../Container/RegisterAzureBackupContainer.cs | 110 ++++++++++++++++-- .../UnregisterAzureBackupContainer.cs | 45 ++++++- .../Commands.AzureBackup.csproj | 11 +- ...upContainerType.cs => AzureBackupEnums.cs} | 54 ++++++++- ...atus.cs => ListContainerQueryParameter.cs} | 20 +++- 6 files changed, 214 insertions(+), 29 deletions(-) rename src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/{AzureBackupContainerType.cs => AzureBackupEnums.cs} (51%) rename src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/{AzureBackupContainerStatus.cs => ListContainerQueryParameter.cs} (62%) diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupCmdletHelpMessage.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupCmdletHelpMessage.cs index 8bb2e661b57e..1e0053c0a732 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupCmdletHelpMessage.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupCmdletHelpMessage.cs @@ -25,13 +25,10 @@ internal static class AzureBackupCmdletHelpMessage public const string ContainerId = "The container ID."; public const string ContainerRegistrationStatus = "The container registration status."; public const string ContainerType = "The container type."; -<<<<<<< HEAD public const string VirtualMachine = "Virtual Machine."; -======= public const string ContainerResourceGroupName = "The container resource group name."; public const string ProtectionStatus = "Protection Status of the azure backup item."; public const string AzureBackUpItem = "Azure BackUp Item."; public const string RecoveryPointId = "Recovery Point Id."; ->>>>>>> d3cf61941b7653ba9a2edf165b1ae23e38921395 } } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/RegisterAzureBackupContainer.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/RegisterAzureBackupContainer.cs index d060fc17fc9c..ec871d8bcac3 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/RegisterAzureBackupContainer.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/RegisterAzureBackupContainer.cs @@ -13,7 +13,9 @@ // ---------------------------------------------------------------------------------- using System; +using System.Web; using System.Collections.Generic; +using System.Collections.Specialized; using System.Linq; using System.Management.Automation; using System.Text; @@ -23,7 +25,6 @@ using MBS = Microsoft.Azure.Management.BackupServices; using Microsoft.Azure.Commands.Compute.Models; - namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets { /// @@ -32,9 +33,16 @@ namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets [Cmdlet(VerbsLifecycle.Register, "AzureBackupContainer"), 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 PSVirtualMachineInstanceView VirtualMachine { get; set; } + public string VirtualMachineName { get; set; } + + [Parameter(Position = 3, Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.VirtualMachine)] + [ValidateNotNullOrEmpty] + public string VirtualMachineRGName { get; set; } public override void ExecuteCmdlet() { @@ -42,8 +50,10 @@ public override void ExecuteCmdlet() ExecutionBlock(() => { - string vmName = VirtualMachine.Name; - string rgName = VirtualMachine.ResourceGroupName; + //string vmName = VirtualMachine.Name; + //string rgName = VirtualMachine.ResourceGroupName; + string vmName = VirtualMachineName; + string rgName = VirtualMachineRGName; Guid jobId = Guid.Empty; bool isDiscoveryNeed = false; MBS.OperationResponse operationResponse; @@ -66,7 +76,7 @@ public override void ExecuteCmdlet() //Container is discovered. Register the container List containerNameList = new List(); containerNameList.Add(container.Name); - RegisterContainerRequest registrationRequest = new RegisterContainerRequest(containerNameList, "IaasVMContainer"); //TODO: Container type from enum + RegisterContainerRequest registrationRequest = new RegisterContainerRequest(containerNameList, AzureBackupContainerType.IaasVMContainer.ToString()); operationResponse = AzureBackupClient.Container.RegisterAsync(registrationRequest, GetCustomRequestHeaders(), CmdletCancellationToken).Result; //TODO fix the OperationResponse to JobID conversion @@ -78,13 +88,55 @@ public override void ExecuteCmdlet() private void RefreshContainer() { - MBS.OperationResponse opResponse = - AzureBackupClient.Container.RefreshAsync(GetCustomRequestHeaders(), CmdletCancellationToken).Result; + bool isRetyNeeded = true; + int retryCount = 1; + bool isDiscoverySuccessful = false; + while (isRetyNeeded && retryCount <= 3) + { + MBS.OperationResponse opResponse = + AzureBackupClient.Container.RefreshAsync(GetCustomRequestHeaders(), CmdletCancellationToken).Result; + + //Now wait for the operation to Complete + isRetyNeeded = WaitForDiscoveryToCOmplete(opResponse.OperationId.ToString(), out isDiscoverySuccessful); + retryCount++; + } + + if (!isDiscoverySuccessful) + { + //Discovery failed + throw new Exception(); //TODO: + } + } + + private bool WaitForDiscoveryToCOmplete(string operationId, out bool isDiscoverySuccessful) + { + bool isRetryNeeded = false; + + + BMSOperationStatusResponse status = new BMSOperationStatusResponse() + { + OperationStatus = AzureBackupOperationStatus.InProgress.ToString() + }; - //Now wait for the operation to Complete + while (status.OperationStatus != AzureBackupOperationStatus.Completed.ToString()) + { + status = AzureBackupClient.OperationStatus.GetAsync(operationId, GetCustomRequestHeaders(), CmdletCancellationToken).Result; + System.Threading.Thread.Sleep(TimeSpan.FromSeconds(15)); + } - //If operat - throw new NotImplementedException(); + isDiscoverySuccessful = true; + //If operation fails check if retry is needed or not + if (status.OperationResult != AzureBackupOperationResult.Succeeded.ToString()) + { + isDiscoverySuccessful = false; + if ((status.ErrorCode == AzureBackupOperationErrorCode.DiscoveryInProgress.ToString() || + (status.ErrorCode == AzureBackupOperationErrorCode.BMSUserErrorObjectLocked.ToString()))) + { + //Need to retry for this errors + isRetryNeeded = true; + } + } + return isRetryNeeded; } private bool IsDiscoveryNeeded(string vmName, string rgName, out ContainerInfo container) @@ -92,8 +144,13 @@ private bool IsDiscoveryNeeded(string vmName, string rgName, out ContainerInfo c bool isDiscoveryNeed = false; //First check if container is discoverd or not ListContainerQueryParameter queryParams = new ListContainerQueryParameter(); - queryParams.ContainerFriendlyNameField = vmName; - ListContainerResponse containers = AzureBackupClient.Container.ListAsync(queryParams, + queryParams.ContainerTypeField = String.Empty; // AzureBackupContainerType.IaasVMContainer.ToString(); + queryParams.ContainerStatusField = String.Empty; + // queryParams.ContainerFriendlyNameField = vmName; + queryParams.ContainerFriendlyNameField = String.Empty; + string queryString = GetQueryFileter(queryParams); + + ListContainerResponse containers = AzureBackupClient.Container.ListAsync(queryString, GetCustomRequestHeaders(), CmdletCancellationToken).Result; if (containers.Objects.Count() == 0) { @@ -116,5 +173,34 @@ private bool IsDiscoveryNeeded(string vmName, string rgName, out ContainerInfo c } return isDiscoveryNeed; } + + private string GetQueryFileter(ListContainerQueryParameter queryParams) + { + NameValueCollection collection = new NameValueCollection(); + if (!String.IsNullOrEmpty(queryParams.ContainerTypeField)) + { + collection.Add("ContainerType", queryParams.ContainerTypeField); + } + + if (!String.IsNullOrEmpty(queryParams.ContainerStatusField)) + { + collection.Add("ContainerStatus", queryParams.ContainerStatusField); + } + + if (!String.IsNullOrEmpty(queryParams.ContainerFriendlyNameField)) + { + collection.Add("FriendlyName", queryParams.ContainerFriendlyNameField); + } + + if (collection == null || collection.Count == 0) + { + return String.Empty; + } + + var httpValueCollection = HttpUtility.ParseQueryString(String.Empty); + httpValueCollection.Add(collection); + + return "&" + httpValueCollection.ToString(); + } } } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/UnregisterAzureBackupContainer.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/UnregisterAzureBackupContainer.cs index 1488830062a4..3f9b1702899c 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/UnregisterAzureBackupContainer.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/UnregisterAzureBackupContainer.cs @@ -13,7 +13,9 @@ // ---------------------------------------------------------------------------------- using System; +using System.Web; using System.Collections.Generic; +using System.Collections.Specialized; using System.Linq; using System.Management.Automation; using System.Text; @@ -23,7 +25,6 @@ using MBS = Microsoft.Azure.Management.BackupServices; using Microsoft.Azure.Commands.Compute.Models; - namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets { /// @@ -47,12 +48,14 @@ public override void ExecuteCmdlet() Guid jobId = Guid.Empty; ListContainerQueryParameter queryParams = new ListContainerQueryParameter(); - queryParams.ContainerStatusField = "Registered"; //TODO: Use enum + queryParams.ContainerTypeField = AzureBackupContainerType.IaasVMContainer.ToString(); + queryParams.ContainerStatusField = AzureBackupContainerRegistrationStatus.Registered.ToString(); queryParams.ContainerFriendlyNameField = vmName; - ListContainerResponse containers = - AzureBackupClient.Container.ListAsync(queryParams, - GetCustomRequestHeaders(), CmdletCancellationToken).Result; + string queryString = GetQueryFileter(queryParams); + + ListContainerResponse containers = + AzureBackupClient.Container.ListAsync(queryString, GetCustomRequestHeaders(), CmdletCancellationToken).Result; if(containers.Objects.Count() == 0) { WriteVerbose("Container is not in the registered list"); @@ -71,7 +74,7 @@ public override void ExecuteCmdlet() } else { - UnregisterContainerRequest unregRequest = new UnregisterContainerRequest(containerToUnreg.Name, "IaasVMContainer"); //TODO: Use enum + UnregisterContainerRequest unregRequest = new UnregisterContainerRequest(containerToUnreg.Name, AzureBackupContainerType.IaasVMContainer.ToString()); MBS.OperationResponse operationResponse = AzureBackupClient.Container.UnregisterAsync(unregRequest, GetCustomRequestHeaders(), CmdletCancellationToken).Result; jobId = operationResponse.OperationId; //TODO: Fix it once PiyushKa publish the rest APi to get jobId based on operationId } @@ -80,5 +83,35 @@ public override void ExecuteCmdlet() WriteObject(jobId); }); } + + private string GetQueryFileter(ListContainerQueryParameter queryParams) + { + NameValueCollection collection = new NameValueCollection(); + if (!String.IsNullOrEmpty(queryParams.ContainerTypeField)) + { + collection.Add("ContainerType", queryParams.ContainerTypeField); + } + + if (!String.IsNullOrEmpty(queryParams.ContainerStatusField)) + { + collection.Add("ContainerStatus", queryParams.ContainerStatusField); + } + + if (!String.IsNullOrEmpty(queryParams.ContainerFriendlyNameField)) + { + collection.Add("FriendlyName", queryParams.ContainerFriendlyNameField); + } + + if (collection == null || collection.Count == 0) + { + return String.Empty; + } + + var httpValueCollection = HttpUtility.ParseQueryString(String.Empty); + httpValueCollection.Add(collection); + + return "&" + httpValueCollection.ToString(); + + } } } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj index 4db165325d26..d8b2848ded8e 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj @@ -109,6 +109,7 @@ + @@ -122,7 +123,7 @@ - + @@ -134,10 +135,10 @@ - - + + True @@ -189,6 +190,10 @@ + + + + + \ No newline at end of file diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/Properties/AssemblyInfo.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/Properties/AssemblyInfo.cs new file mode 100644 index 000000000000..03491411ad2d --- /dev/null +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("Commands.AzureBackup.Test")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("Commands.AzureBackup.Test")] +[assembly: AssemblyCopyright("Copyright © 2015")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("49823b4f-deb2-4cf5-a8e7-5118fc6a05d6")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupTestBase.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupTestBase.cs new file mode 100644 index 000000000000..d8cafcf029e9 --- /dev/null +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupTestBase.cs @@ -0,0 +1,151 @@ +// ---------------------------------------------------------------------------------- +// +// Copyright Microsoft Corporation +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// ---------------------------------------------------------------------------------- + +using System; +using System.Configuration; +using System.Net; +using System.Net.Http; +using System.Net.Security; +using System.Reflection; +using Microsoft.Azure.Common.Authentication; +using Microsoft.Azure.Management.BackupServices; +using Microsoft.Azure.Test; +using Microsoft.Azure.Test.HttpRecorder; +using Microsoft.WindowsAzure.Commands.ScenarioTest; + +namespace Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests +{ + public abstract class AzureBackupTestsBase + { + private CSMTestEnvironmentFactory csmTestFactory; + private EnvironmentSetupHelper helper; + + public BackupServicesManagementClient BackupServicesMgmtClient { get; private set; } + + protected AzureBackupTestsBase() + { + this.helper = new EnvironmentSetupHelper(); + this.csmTestFactory = new CSMTestEnvironmentFactory(); + } + + protected void SetupManagementClients() + { + BackupServicesMgmtClient = GetBackupServicesManagementClient(); + //helper.SetupManagementClients(BackupServicesMgmtClient); + helper.SetupSomeOfManagementClients(BackupServicesMgmtClient); + } + + protected void RunPowerShellTest(params string[] scripts) + { + using (UndoContext context = UndoContext.Current) + { + context.Start(TestUtilities.GetCallingClass(2), TestUtilities.GetCurrentMethodName(2)); + + SetupManagementClients(); + + helper.SetupEnvironment(AzureModule.AzureResourceManager); + helper.SetupModules(AzureModule.AzureResourceManager, "ScenarioTests\\" + this.GetType().Name + ".ps1"); + + helper.RunPowerShellTest(scripts); + } + } + + private BackupServicesManagementClient GetBackupServicesManagementClient() + { + return GetServiceClient(); + } + + public static T GetServiceClient() where T : class + { + var factory = (TestEnvironmentFactory)new CSMTestEnvironmentFactory(); + + var testEnvironment = factory.GetTestEnvironment(); + + ServicePointManager.ServerCertificateValidationCallback = IgnoreCertificateErrorHandler; + + BackupServicesManagementClient client; + string resourceName = ConfigurationManager.AppSettings["ResourceName"]; + string resourceGroupName = ConfigurationManager.AppSettings["ResourceGroupName"]; + + + if (testEnvironment.UsesCustomUri()) + { + client = new BackupServicesManagementClient( + resourceName, + resourceGroupName, + testEnvironment.Credentials as SubscriptionCloudCredentials, + testEnvironment.BaseUri); + } + + else + { + client = new BackupServicesManagementClient( + resourceName, + resourceGroupName, + testEnvironment.Credentials as SubscriptionCloudCredentials); + } + + return GetServiceClient(factory, client); + } + + public static T GetServiceClient(TestEnvironmentFactory factory, BackupServicesManagementClient client) where T : class + { + TestEnvironment testEnvironment = factory.GetTestEnvironment(); + + HttpMockServer instance; + try + { + instance = HttpMockServer.CreateInstance(); + } + catch (ApplicationException) + { + HttpMockServer.Initialize("TestEnvironment", "InitialCreation"); + instance = HttpMockServer.CreateInstance(); + } + T obj2 = typeof(T).GetMethod("WithHandler", new Type[1] + { + typeof (DelegatingHandler) + }).Invoke((object)client, new object[1] + { + (object) instance + }) as T; + + if (HttpMockServer.Mode == HttpRecorderMode.Record) + { + HttpMockServer.Variables[TestEnvironment.SubscriptionIdKey] = testEnvironment.SubscriptionId; + } + + if (HttpMockServer.Mode == HttpRecorderMode.Playback) + { + PropertyInfo property1 = typeof(T).GetProperty("LongRunningOperationInitialTimeout", typeof(int)); + PropertyInfo property2 = typeof(T).GetProperty("LongRunningOperationRetryTimeout", typeof(int)); + if (property1 != (PropertyInfo)null && property2 != (PropertyInfo)null) + { + property1.SetValue((object)obj2, (object)0); + property2.SetValue((object)obj2, (object)0); + } + } + return obj2; + } + + private static bool IgnoreCertificateErrorHandler + (object sender, + System.Security.Cryptography.X509Certificates.X509Certificate certificate, + System.Security.Cryptography.X509Certificates.X509Chain chain, + SslPolicyErrors sslPolicyErrors) + { + return true; + } + } +} \ No newline at end of file diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupTests.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupTests.cs new file mode 100644 index 000000000000..97a25779fd49 --- /dev/null +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupTests.cs @@ -0,0 +1,28 @@ +// ---------------------------------------------------------------------------------- +// +// Copyright Microsoft Corporation +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// ---------------------------------------------------------------------------------- + +using Microsoft.WindowsAzure.Commands.ScenarioTest; +using Xunit; + +namespace Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests +{ + public class AzureBackupTests : AzureBackupTestsBase + { + [Fact] + public void ListProtectionPolicyTests() + { + this.RunPowerShellTest("Test-GetAzureBackupProtectionPolicyTests"); + } + } +} diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupTests.ps1 b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupTests.ps1 new file mode 100644 index 000000000000..1b4589e511f7 --- /dev/null +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupTests.ps1 @@ -0,0 +1,39 @@ +# ---------------------------------------------------------------------------------- +# +# Copyright Microsoft Corporation +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# http://www.apache.org/licenses/LICENSE-2.0 +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ---------------------------------------------------------------------------------- + +$ResourceGroupName = "swatirg1"; +$ResourceName = "swatirn1" + +<# +.SYNOPSIS +Tests creating new resource group and a simple resource. +#> +function Test-GetAzureBackupProtectionPolicyTests +{ + $protectionPolicies = Get-AzureBackupProtectionPolicy -ResourceGroupName $ResourceGroupName -ResourceName $ResourceName + Assert-NotNull $protectionPolicies 'Protection Policies should not be null' + foreach($protectionPolicy in $protectionPolicies) + { + Assert-NotNull $protectionPolicy.InstanceId 'InstanceId should not be null' + Assert-NotNull $protectionPolicy.Name 'Name should not be null' + Assert-NotNull $protectionPolicy.WorkloadType 'WorkloadType should not be null' + Assert-NotNull $protectionPolicy.BackupType 'BackupType should not be null' + Assert-NotNull $protectionPolicy.ScheduleRunTimes 'ScheduleRunTimes should not be null' + Assert-NotNull $protectionPolicy.RetentionDuration 'RetentionDuration should not be null' + Assert-NotNull $protectionPolicy.ResourceGroupName 'ResourceGroupName should not be null' + Assert-NotNull $protectionPolicy.ResourceName 'ResourceName should not be null' + } +} + + diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupTests/ListProtectionPolicyTests.json b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupTests/ListProtectionPolicyTests.json new file mode 100644 index 000000000000..a3f9ef25bf99 --- /dev/null +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupTests/ListProtectionPolicyTests.json @@ -0,0 +1,69 @@ +{ + "Entries": [ + { + "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/swatirg1/providers/Microsoft.Backupseadev01/BackupVault/swatirn1/protectionpolicies?api-version=2014-09-01", + "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL3N3YXRpcmcxL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvc3dhdGlybjEvcHJvdGVjdGlvbnBvbGljaWVzP2FwaS12ZXJzaW9uPTIwMTQtMDktMDE=", + "RequestMethod": "GET", + "RequestBody": "", + "RequestHeaders": { + "Accept-Language": [ + "en-us" + ], + "User-Agent": [ + "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" + ] + }, + "ResponseBody": "{\r\n \"Objects\": [\r\n {\r\n \"WorkloadType\": \"VM\",\r\n \"Schedule\": {\r\n \"BackupType\": \"Full\",\r\n \"ScheduleRun\": \"Daily\",\r\n \"ScheduleStartTime\": \"0001-01-01T00:00:00\",\r\n \"ScheduleRunDays\": null,\r\n \"ScheduleRunTimes\": [\r\n \"2015-06-11T15:30:00\"\r\n ],\r\n \"RetentionPolicy\": {\r\n \"RetentionType\": 1,\r\n \"RetentionDuration\": 30\r\n }\r\n },\r\n \"InstanceId\": \"40716838-2fa2-453b-8901-3f16ecb5359b\",\r\n \"Name\": \"DefaultPolicy\",\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"WorkloadType\": \"VM\",\r\n \"Schedule\": {\r\n \"BackupType\": \"Full\",\r\n \"ScheduleRun\": \"Daily\",\r\n \"ScheduleStartTime\": \"0001-01-01T00:00:00\",\r\n \"ScheduleRunDays\": null,\r\n \"ScheduleRunTimes\": [\r\n \"2001-01-01T09:00:00\",\r\n \"2001-01-01T21:00:00\"\r\n ],\r\n \"RetentionPolicy\": {\r\n \"RetentionType\": 1,\r\n \"RetentionDuration\": 30\r\n }\r\n },\r\n \"InstanceId\": \"a4ae9969-2de5-40aa-97ce-19889b979d09\",\r\n \"Name\": \"TestPolicyName\",\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"WorkloadType\": \"VM\",\r\n \"Schedule\": {\r\n \"BackupType\": \"Full\",\r\n \"ScheduleRun\": \"Daily\",\r\n \"ScheduleStartTime\": \"0001-01-01T00:00:00\",\r\n \"ScheduleRunDays\": null,\r\n \"ScheduleRunTimes\": [\r\n \"2001-01-01T09:00:00\",\r\n \"2001-01-01T21:00:00\"\r\n ],\r\n \"RetentionPolicy\": {\r\n \"RetentionType\": 1,\r\n \"RetentionDuration\": 30\r\n }\r\n },\r\n \"InstanceId\": \"c5fe92c5-b779-4a2f-bd6e-bc4121ccf599\",\r\n \"Name\": \"TestPolicyName2\",\r\n \"OperationInProgress\": false\r\n }\r\n ],\r\n \"ResultCount\": 3,\r\n \"Skiptoken\": null\r\n}", + "ResponseHeaders": { + "Content-Length": [ + "1140" + ], + "Content-Type": [ + "application/json" + ], + "Expires": [ + "-1" + ], + "Pragma": [ + "no-cache" + ], + "x-ms-request-id": [ + "75e6dba7-07f4-44ee-b5d5-d1b03063e1e6" + ], + "x-ms-client-request-id": [ + "57d3ee70-242e-4a3d-84f8-1fa388afd8b2", + "57d3ee70-242e-4a3d-84f8-1fa388afd8b2" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "x-ms-ratelimit-remaining-subscription-reads": [ + "14999" + ], + "x-ms-correlation-request-id": [ + "75e6dba7-07f4-44ee-b5d5-d1b03063e1e6" + ], + "x-ms-routing-request-id": [ + "CENTRALUS:20150611T060229Z:75e6dba7-07f4-44ee-b5d5-d1b03063e1e6" + ], + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Thu, 11 Jun 2015 06:02:28 GMT" + ], + "Server": [ + "Microsoft-IIS/8.0" + ], + "X-Powered-By": [ + "ASP.NET" + ] + }, + "StatusCode": 200 + } + ], + "Names": {}, + "Variables": { + "SubscriptionId": "f5303a0b-fae4-4cdb-b44d-0e4c032dde26" + } +} \ No newline at end of file diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/packages.config b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/packages.config new file mode 100644 index 000000000000..c7826ee5d690 --- /dev/null +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/packages.config @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/ResourceManager/Resources/Commands.Resources/AzureResourceManager.psd1 b/src/ResourceManager/Resources/Commands.Resources/AzureResourceManager.psd1 index 43d9982a2e48..2b1c551ff950 100644 --- a/src/ResourceManager/Resources/Commands.Resources/AzureResourceManager.psd1 +++ b/src/ResourceManager/Resources/Commands.Resources/AzureResourceManager.psd1 @@ -1,4 +1,4 @@ -# +# # Module manifest for module 'Microsoft.Azure.Commands.Resources' # # Generated by: Microsoft Corporation @@ -93,7 +93,8 @@ NestedModules = @( '.\Network\Microsoft.Azure.Commands.Network.dll', '.\Storage\Microsoft.WindowsAzure.Commands.Storage.dll', '.\ResourceManager\Microsoft.Azure.Commands.ResourceManager.Cmdlets.dll', - '.\ApiManagement\Microsoft.Azure.Commands.ApiManagement.dll' + '.\ApiManagement\Microsoft.Azure.Commands.ApiManagement.dll', + '.\AzureBackup\Microsoft.Azure.Commands.AzureBackup.dll' ) # Functions to export from this module From 64b5eef981f89e15d698aa1600f8fbf19662bf99 Mon Sep 17 00:00:00 2001 From: dragonfly91 Date: Thu, 11 Jun 2015 15:57:03 +0530 Subject: [PATCH 040/155] Set-AzureBackupVaultStorageType cmdlet --- .../AzureBackupCmdletHelpMessage.cs | 1 + .../AcsNamespace.cs | 0 .../CertUtils.cs | 0 .../Constants.cs | 0 .../GetAzureBackupVaultCredentials.cs | 2 +- .../VaultCredentials.cs | 0 .../Vault/SetAzureBackupVaultStorageType.cs | 62 +++++++++++++++++++ .../Commands.AzureBackup.csproj | 11 ++-- 8 files changed, 70 insertions(+), 6 deletions(-) rename src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/{VaultCredentials => Vault/GetAzureBackupVaultCredentials}/AcsNamespace.cs (100%) rename src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/{VaultCredentials => Vault/GetAzureBackupVaultCredentials}/CertUtils.cs (100%) rename src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/{VaultCredentials => Vault/GetAzureBackupVaultCredentials}/Constants.cs (100%) rename src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/{VaultCredentials => Vault/GetAzureBackupVaultCredentials}/GetAzureBackupVaultCredentials.cs (99%) rename src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/{VaultCredentials => Vault/GetAzureBackupVaultCredentials}/VaultCredentials.cs (100%) create mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/SetAzureBackupVaultStorageType.cs diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupCmdletHelpMessage.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupCmdletHelpMessage.cs index eca778111c9f..abe03e909e18 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupCmdletHelpMessage.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupCmdletHelpMessage.cs @@ -30,5 +30,6 @@ internal static class AzureBackupCmdletHelpMessage public const string ProtectionStatus = "Protection Status of the azure backup item."; public const string AzureBackUpItem = "Azure BackUp Item."; public const string RecoveryPointId = "Recovery Point Id."; + public const string StorageType = "The vault back-end storage type."; } } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/VaultCredentials/AcsNamespace.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/GetAzureBackupVaultCredentials/AcsNamespace.cs similarity index 100% rename from src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/VaultCredentials/AcsNamespace.cs rename to src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/GetAzureBackupVaultCredentials/AcsNamespace.cs diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/VaultCredentials/CertUtils.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/GetAzureBackupVaultCredentials/CertUtils.cs similarity index 100% rename from src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/VaultCredentials/CertUtils.cs rename to src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/GetAzureBackupVaultCredentials/CertUtils.cs diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/VaultCredentials/Constants.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/GetAzureBackupVaultCredentials/Constants.cs similarity index 100% rename from src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/VaultCredentials/Constants.cs rename to src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/GetAzureBackupVaultCredentials/Constants.cs diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/VaultCredentials/GetAzureBackupVaultCredentials.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/GetAzureBackupVaultCredentials/GetAzureBackupVaultCredentials.cs similarity index 99% rename from src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/VaultCredentials/GetAzureBackupVaultCredentials.cs rename to src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/GetAzureBackupVaultCredentials/GetAzureBackupVaultCredentials.cs index 70f4908cec92..4cd996cc30b7 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/VaultCredentials/GetAzureBackupVaultCredentials.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/GetAzureBackupVaultCredentials/GetAzureBackupVaultCredentials.cs @@ -131,7 +131,7 @@ private AcsNamespace UploadCert(X509Certificate2 cert, string subscriptionId, st string response = string.Empty; VaultCredUploadCertResponse vaultCredUploadCertResponse = - AzureBackupClient.VaultCredentials.UploadCertificateAsync( + AzureBackupClient.Vault.UploadCertificateAsync( "IdMgmtInternalCert", vaultCredUploadCertRequest, GetCustomRequestHeaders(), diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/VaultCredentials/VaultCredentials.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/GetAzureBackupVaultCredentials/VaultCredentials.cs similarity index 100% rename from src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/VaultCredentials/VaultCredentials.cs rename to src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/GetAzureBackupVaultCredentials/VaultCredentials.cs diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/SetAzureBackupVaultStorageType.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/SetAzureBackupVaultStorageType.cs new file mode 100644 index 000000000000..046277de2eae --- /dev/null +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/SetAzureBackupVaultStorageType.cs @@ -0,0 +1,62 @@ +// ---------------------------------------------------------------------------------- +// +// Copyright Microsoft Corporation +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// ---------------------------------------------------------------------------------- + +using Microsoft.Azure.Management.BackupServices.Models; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Management.Automation; +using System.Text; +using System.Threading.Tasks; + +namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets +{ + [Cmdlet(VerbsCommon.Set, "AzureBackupVaultStorageType")] + public class SetAzureBackupVaultStorageType : AzureBackupVaultCmdletBase + { + [Parameter(Position = 2, Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.StorageType)] + [ValidateNotNullOrEmpty] + public AzureBackupVaultStorageType Type { get; set; } + + public override void ExecuteCmdlet() + { + base.ExecuteCmdlet(); + + ExecutionBlock(() => + { + if (Type == 0) + { + throw new ArgumentException("Please provide a vaild storage type."); + } + + UpdateVaultStorageTypeRequest updateVaultStorageTypeRequest = new UpdateVaultStorageTypeRequest() + { + StorageTypeProperties = new StorageTypeProperties() + { + StorageModelType = Type.ToString(), + }, + }; + + AzureBackupClient.Vault.UpdateStorageTypeAsync(updateVaultStorageTypeRequest, GetCustomRequestHeaders(), CmdletCancellationToken); + }); + } + } + + // TODO: Move to common enums cs file. + public enum AzureBackupVaultStorageType + { + GeoRedundant = 1, + LocallyRedundant, + } +} diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj index 9368865fe23e..2c28f0beb773 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj @@ -134,11 +134,12 @@ - - - - - + + + + + + From b66a58702d165e25c70a4d8532f62199249b72c9 Mon Sep 17 00:00:00 2001 From: pikumarmsft Date: Thu, 11 Jun 2015 16:03:11 +0530 Subject: [PATCH 041/155] Added help message. --- .../AzureBackupCmdletHelpMessage.cs | 4 ++++ .../AzureBackupItemCmdletBase.cs | 4 ++-- .../Disable-AzureBackupProtection .cs | 18 +++++++++++++++--- .../Enable-AzureBackupProtection .cs | 2 +- .../Cmdlets/DataSource/GetAzureBackupItem.cs | 2 -- 5 files changed, 22 insertions(+), 8 deletions(-) diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupCmdletHelpMessage.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupCmdletHelpMessage.cs index f37ba9056020..6318bfeb0385 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupCmdletHelpMessage.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupCmdletHelpMessage.cs @@ -33,5 +33,9 @@ internal static class AzureBackupCmdletHelpMessage public const string Type = "Type of Azure Backup Item."; public const string Status = "Status of Azure Backup Item"; public const string AzureBackupContainer = "Azure Backup Container for Azure Backup Item."; + public const string AzureBackupItem = "Azure Backup Item for enabling protection"; + public const string RemoveProtectionOption = "Remove Protection Option"; + public const string Reason = "Reson for removing protection"; + public const string Comments = "Comments for for removing protection"; } } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupItemCmdletBase.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupItemCmdletBase.cs index 8bb1f3756a3b..e6fc682eb4f9 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupItemCmdletBase.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupItemCmdletBase.cs @@ -30,14 +30,14 @@ public abstract class AzureBackupItemCmdletBase : AzureBackupCmdletBase { // ToDO: // Correct Help message and other attributes related to paameters - [Parameter(Position = 0, Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.ResourceGroupName, ValueFromPipelineByPropertyName = true)] + [Parameter(Position = 0, Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.AzureBackupItem, ValueFromPipelineByPropertyName = true)] [ValidateNotNullOrEmpty] public AzureBackupContainerContextObject Item { get; set; } public override void ExecuteCmdlet() { base.ExecuteCmdlet(); - WriteDebug(String.Format("Cmdlet called for ResourceGroupName: {0}, ResourceName: {1}", Item.ResourceGroupName, Item.ResourceName)); + WriteDebug(String.Format("Cmdlet called for ResourceGroupName: {0}, ResourceName: {1}, Location: {2}", Item.ResourceGroupName, Item.ResourceName, Item.Location)); InitializeAzureBackupCmdlet(Item.ResourceGroupName, Item.ResourceName, Item.Location); } } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/DataSource/Disable-AzureBackupProtection .cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/DataSource/Disable-AzureBackupProtection .cs index 450fd716b60e..45ca97de97ab 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/DataSource/Disable-AzureBackupProtection .cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/DataSource/Disable-AzureBackupProtection .cs @@ -22,9 +22,16 @@ namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets.DataSource [Cmdlet(VerbsLifecycle.Disable, "AzureBackupProtection"), OutputType(typeof(OperationResponse))] public class DisableAzureBackupProtection : AzureBackupDSCmdletBase { - [Parameter(Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.PolicyName)] + [Parameter(Position = 1, Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.RemoveProtectionOption)] [ValidateSet("Invalid", "RetainBackupData", "DeleteBackupData")] public string RemoveProtectionOption { get; set; } + + [Parameter(Position = 2, Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.Reason)] + public string Reason { get; set; } + + [Parameter(Position = 3, Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.Comments)] + public string Comments { get; set; } + public override void ExecuteCmdlet() { base.ExecuteCmdlet(); @@ -32,8 +39,13 @@ public override void ExecuteCmdlet() ExecutionBlock(() => { WriteVerbose("Making client call"); - RemoveProtectionRequestInput input = new RemoveProtectionRequestInput(); - input.RemoveProtectionOption = this.RemoveProtectionOption == null ? "RetainBackupData" : this.RemoveProtectionOption; + RemoveProtectionRequestInput input = new RemoveProtectionRequestInput() + { + RemoveProtectionOption = this.RemoveProtectionOption == null ? "RetainBackupData" : this.RemoveProtectionOption, + Reason = this.Reason, + Comments = this.Comments, + }; + WriteVerbose("RemoveProtectionOption = " + input.RemoveProtectionOption); var disbaleAzureBackupProtection = AzureBackupClient.DataSource.DisableProtectionAsync(GetCustomRequestHeaders(), item.ContainerUniqueName, item.Type, item.DataSourceId, input, CmdletCancellationToken).Result; diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/DataSource/Enable-AzureBackupProtection .cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/DataSource/Enable-AzureBackupProtection .cs index 8c0ba614e5f4..0d0edc1937dd 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/DataSource/Enable-AzureBackupProtection .cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/DataSource/Enable-AzureBackupProtection .cs @@ -63,7 +63,7 @@ public override void ExecuteCmdlet() } else { - + throw new Exception("Uknown item type"); } var enableAzureBackupProtection = AzureBackupClient.DataSource.EnableProtectionAsync(GetCustomRequestHeaders(), input, CmdletCancellationToken).Result; diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/DataSource/GetAzureBackupItem.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/DataSource/GetAzureBackupItem.cs index ec4fecff4216..9fc7aa523a32 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/DataSource/GetAzureBackupItem.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/DataSource/GetAzureBackupItem.cs @@ -92,7 +92,6 @@ public void WriteAzureBackupProtectionPolicy(List sourceDataSour foreach (var item in sourceDataSourceList) { - WriteVerbose("Type of DS is = " + item.Type); targetList.Add(new AzureBackupItem(item, azureBackupContainer)); } @@ -100,7 +99,6 @@ public void WriteAzureBackupProtectionPolicy(List sourceDataSour { foreach (var item in sourcePOList) { - WriteVerbose("Type of PO is = " + item.Type); //If user has stopped protection for some datasoure then we will have duplicate items(po and ds). //So in this case removing poitems from the list. if (targetList.FindIndex(element => element.Name == item.Name) < 0) From 2cb24a4cf43319077e17391b7cfcab206e2d3692 Mon Sep 17 00:00:00 2001 From: dragonfly91 Date: Thu, 11 Jun 2015 17:05:33 +0530 Subject: [PATCH 042/155] commit post merge --- .../Cmdlets/Vault/SetAzureBackupVaultStorageType.cs | 7 ------- .../Commands.AzureBackup/Models/AzureBackupEnums.cs | 12 ++++++++---- 2 files changed, 8 insertions(+), 11 deletions(-) diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/SetAzureBackupVaultStorageType.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/SetAzureBackupVaultStorageType.cs index 046277de2eae..25d3eb0ecb15 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/SetAzureBackupVaultStorageType.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/SetAzureBackupVaultStorageType.cs @@ -52,11 +52,4 @@ public override void ExecuteCmdlet() }); } } - - // TODO: Move to common enums cs file. - public enum AzureBackupVaultStorageType - { - GeoRedundant = 1, - LocallyRedundant, - } } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupEnums.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupEnums.cs index 718b5d43eef0..54eeb2133599 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupEnums.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupEnums.cs @@ -23,14 +23,12 @@ namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets { public enum AzureBackupContainerTypeInput { - All, - AzureVirtualMachine, + AzureVirtualMachine = 1, } public enum AzureBackupContainerStatusInput { - All, - Registering, + Registering = 1, Registered, } @@ -88,4 +86,10 @@ public enum AzureBackupOperationErrorCode BMSUserErrorObjectLocked = 390026, DiscoveryInProgress = 410002, } + + public enum AzureBackupVaultStorageType + { + GeoRedundant = 1, + LocallyRedundant, + } } From 482ddef9284baa46062a28cf78ca7b1987013a3d Mon Sep 17 00:00:00 2001 From: AditTulasi Date: Fri, 12 Jun 2015 14:06:24 +0530 Subject: [PATCH 043/155] Saving temporary changes --- .../Cmdlets/Jobs/GetAzureBackupJob.cs | 40 +++--- .../Cmdlets/Jobs/WaitAzureBackupJob.cs | 119 +++++++++++++----- 2 files changed, 106 insertions(+), 53 deletions(-) diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Jobs/GetAzureBackupJob.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Jobs/GetAzureBackupJob.cs index be7e399761b4..8d2da8017d65 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Jobs/GetAzureBackupJob.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Jobs/GetAzureBackupJob.cs @@ -33,17 +33,17 @@ public class GetAzureBackupJob : AzureBackupVaultCmdletBase [ValidateNotNullOrEmpty] public string JobId { get; set; } - [Parameter(Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.JobFilterJobHelpMessage)] + [Parameter(Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.JobFilterJobHelpMessage)] [ValidateNotNull] public AzureBackupJob Job { get; set; } [Parameter(Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.JobFilterStartTimeHelpMessage)] [ValidateNotNull] - public DateTime? StartTime { get; set; } + public DateTime? From { get; set; } [Parameter(Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.JobFilterEndTimeHelpMessage)] [ValidateNotNull] - public DateTime? EndTime { get; set; } + public DateTime? To { get; set; } [Parameter(Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.JobFilterStatusHelpMessage)] [ValidateSet("Cancelled", "Cancelling", "Completed", "CompletedWithWarnings", "Failed", "InProgress")] @@ -80,47 +80,47 @@ public override void ExecuteCmdlet() } // validations - if (!StartTime.HasValue) + if (!From.HasValue) { WriteDebug("Setting StartTime to min value."); - StartTime = new DateTime(); - StartTime = DateTime.MinValue; + From = new DateTime(); + From = DateTime.MinValue; } - if (EndTime.HasValue && EndTime.Value <= StartTime.Value) + if (To.HasValue && To.Value <= From.Value) { throw new Exception("StartTime should be greater than EndTime."); } else { - if (StartTime != DateTime.MinValue) + if (From != DateTime.MinValue) { WriteDebug("End time not set. Setting it to current time."); - EndTime = DateTime.Now; + To = DateTime.Now; } else { WriteDebug("Setting EndTime to min value."); - EndTime = new DateTime(); - EndTime = DateTime.MinValue; + To = new DateTime(); + To = DateTime.MinValue; } } - StartTime = TimeZoneInfo.ConvertTimeToUtc(StartTime.Value); - EndTime = TimeZoneInfo.ConvertTimeToUtc(EndTime.Value); + From = TimeZoneInfo.ConvertTimeToUtc(From.Value); + To = TimeZoneInfo.ConvertTimeToUtc(To.Value); // if user hasn't specified any filters, then default filter fetches // all jobs that were created in last 24 hours. - if (StartTime == DateTime.MinValue && EndTime == DateTime.MinValue && + if (From == DateTime.MinValue && To == DateTime.MinValue && Operation == string.Empty && Status == string.Empty && Type == string.Empty && JobId == string.Empty) { - StartTime = DateTime.UtcNow.AddDays(-1); - EndTime = DateTime.UtcNow; + From = DateTime.UtcNow.AddDays(-1); + To = DateTime.UtcNow; } - WriteDebug("StartTime filter is: " + System.Uri.EscapeDataString(StartTime.Value.ToString("yyyy-MM-dd hh:mm:ss tt"))); - WriteDebug("EndTime filter is: " + System.Uri.EscapeDataString(EndTime.Value.ToString("yyyy-MM-dd hh:mm:ss tt"))); + WriteDebug("StartTime filter is: " + System.Uri.EscapeDataString(From.Value.ToString("yyyy-MM-dd hh:mm:ss tt"))); + WriteDebug("EndTime filter is: " + System.Uri.EscapeDataString(To.Value.ToString("yyyy-MM-dd hh:mm:ss tt"))); WriteDebug("Operation filter is: " + Operation); WriteDebug("Status filter is: " + Status); WriteDebug("Type filter is: " + Type); @@ -128,8 +128,8 @@ public override void ExecuteCmdlet() JobQueryParameter queryParams = new JobQueryParameter() { - StartTime = StartTime.Value.ToString("yyyy-MM-dd hh:mm:ss tt"), - EndTime = EndTime.Value.ToString("yyyy-MM-dd hh:mm:ss tt"), + StartTime = From.Value.ToString("yyyy-MM-dd hh:mm:ss tt"), + EndTime = To.Value.ToString("yyyy-MM-dd hh:mm:ss tt"), Operation = Operation, Status = Status, Type = Type, diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Jobs/WaitAzureBackupJob.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Jobs/WaitAzureBackupJob.cs index a4709569a6d4..d08aa191d70b 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Jobs/WaitAzureBackupJob.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Jobs/WaitAzureBackupJob.cs @@ -26,11 +26,11 @@ public class WaitAzureBackupJob : AzureBackupVaultCmdletBase { [Parameter(Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.WaitJobFilterJobIdHelpMessage, ValueFromPipeline = true)] [ValidateNotNull] - public List JobID { get; set; } + public object JobID { get; set; } [Parameter(Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.WaitJobFilterJobHelpMessage, ValueFromPipeline = true)] [ValidateNotNullOrEmpty] - public List Job { get; set; } + public object Job { get; set; } [Parameter(Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.WaitJobFilterTimeoutHelpMessage)] [ValidateRange(1, Int64.MaxValue)] @@ -38,50 +38,98 @@ public class WaitAzureBackupJob : AzureBackupVaultCmdletBase public override void ExecuteCmdlet() { - // ValidateNotNullNotEmpty makes sure that there exists at least one element - this.ResourceGroupName = Job[0].ResourceGroupName; - this.ResourceName = Job[0].ResourceName; + List specifiedJobs = new List(); - base.ExecuteCmdlet(); - - ExecutionBlock(() => + if (Job != null) { - List specifiedJobs = new List(); + WriteDebug("Job is Powershell: " + (Job is PSObject)); + WriteDebug("Job type: " + Job.GetType()); - if (!TimeOut.HasValue) + if ((Job is PSObject) && (((PSObject)Job).ImmediateBaseObject is List)) { - TimeOut = new long(); - TimeOut = Int64.MaxValue; + WriteDebug("Type of input paramter is List"); + foreach (AzureBackupJob jobToWait in ((Job as PSObject).ImmediateBaseObject as List)) + { + this.ResourceGroupName = jobToWait.ResourceGroupName; + this.ResourceName = jobToWait.ResourceName; + this.Location = jobToWait.Location; + + specifiedJobs.Add(jobToWait.InstanceId); + } } + else if (Job is List) + { + WriteDebug("Type of input paramter is List second case"); + foreach (AzureBackupJob jobToWait in (Job as List)) + { + this.ResourceGroupName = jobToWait.ResourceGroupName; + this.ResourceName = jobToWait.ResourceName; + this.Location = jobToWait.Location; - //if (JobID != null && Job != null) - //{ - // foreach(string job in JobID) - // { - // WriteDebug("JobID: " + job); - // } - // foreach (AzureBackupJob job in Job) - // { - // WriteDebug("Job: " + job.InstanceId); - // } - // throw new Exception("Please use either JobID filter or Job filter but not both."); - //} - - if(Job != null) + specifiedJobs.Add(jobToWait.InstanceId); + } + } + else if ((Job is PSObject) && (((PSObject)Job).ImmediateBaseObject is AzureBackupJob)) { - foreach(AzureBackupJob inpJob in Job) + AzureBackupJob azureJob = ((Job as PSObject).ImmediateBaseObject as AzureBackupJob); + this.ResourceGroupName = azureJob.ResourceGroupName; + this.ResourceName = azureJob.ResourceName; + this.Location = azureJob.Location; + + specifiedJobs.Add(azureJob.InstanceId); + } + else if (Job is AzureBackupJob) + { + this.ResourceName = (Job as AzureBackupJob).ResourceName; + this.ResourceGroupName = (Job as AzureBackupJob).ResourceGroupName; + this.Location = (Job as AzureBackupJob).Location; + + specifiedJobs.Add((Job as AzureBackupJob).InstanceId); + } + } + else + { + if ((JobID is PSObject) && (((PSObject)JobID).ImmediateBaseObject is List)) + { + foreach (string idOfJobToWait in ((JobID as PSObject).ImmediateBaseObject as List)) { - specifiedJobs.Add(inpJob.InstanceId); + WriteDebug("Type of JobID filter is List."); + specifiedJobs.Add(idOfJobToWait); } } - else + else if (JobID is List) { - foreach(string jobID in JobID) + foreach (string idOfJobToWait in (JobID as List)) { - specifiedJobs.Add(jobID); + WriteDebug("Type of JobID filter is List."); + specifiedJobs.Add(idOfJobToWait); } } + else if ((JobID is PSObject) && (((PSObject)JobID).ImmediateBaseObject is string)) + { + WriteDebug("Type of JobID filter is string."); + specifiedJobs.Add((JobID as PSObject).ImmediateBaseObject as string); + } + else if (JobID is string) + { + WriteDebug("Type of JobID filter is string."); + specifiedJobs.Add(JobID as string); + } + } + + WriteDebug("Number of jobs to wait on: " + specifiedJobs.Count); + + base.ExecuteCmdlet(); + + ExecutionBlock(() => + { + if (!TimeOut.HasValue) + { + TimeOut = new long(); + TimeOut = Int64.MaxValue; + } + List pendingJobs = new List(specifiedJobs); DateTime waitingStartTime = DateTime.UtcNow; while (true) @@ -94,11 +142,16 @@ public override void ExecuteCmdlet() bool areJobsRunning = false; - foreach (string jobId in specifiedJobs) + for (int i = 0; i < pendingJobs.Count; i++) { - Mgmt.Job retrievedJob = AzureBackupClient.Job.GetAsync(jobId, GetCustomRequestHeaders(), CmdletCancellationToken).Result.Job; + Mgmt.Job retrievedJob = AzureBackupClient.Job.GetAsync(pendingJobs[i], GetCustomRequestHeaders(), CmdletCancellationToken).Result.Job; if (AzureBackupJobHelper.IsJobRunning(retrievedJob.Status)) areJobsRunning = true; + else + { + pendingJobs.RemoveAt(i); + i--; + } } if (!areJobsRunning) From 03fce5b0c484ca86906f878e439e324c123b4860 Mon Sep 17 00:00:00 2001 From: pikumarmsft Date: Fri, 12 Jun 2015 16:35:14 +0530 Subject: [PATCH 044/155] pipeline changes. --- .../AzureBackupContainerCmdletBase.cs | 8 ++++---- .../AzureBackupDSCmdletBase.cs | 2 +- .../AzureBackupItemCmdletBase.cs | 8 ++++---- .../Disable-AzureBackupProtection .cs | 2 +- .../Enable-AzureBackupProtection .cs | 20 ++++++++++++------- .../Cmdlets/DataSource/GetAzureBackupItem.cs | 12 +++++------ .../Models/AzureBackupItem.cs | 4 ---- 7 files changed, 29 insertions(+), 27 deletions(-) diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupContainerCmdletBase.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupContainerCmdletBase.cs index d4c17e373bbf..2f1f78d82a56 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupContainerCmdletBase.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupContainerCmdletBase.cs @@ -28,17 +28,17 @@ namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets { public abstract class AzureBackupContainerCmdletBase : AzureBackupCmdletBase { - [Parameter(Position = 0, Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.AzureBackupContainer, ValueFromPipelineByPropertyName = true)] + [Parameter(Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.AzureBackupContainer, ValueFromPipeline = true)] [ValidateNotNullOrEmpty] - public AzureBackupContainer AzureBackupContainer { get; set; } + public AzureBackupContainer container { get; set; } public override void ExecuteCmdlet() { base.ExecuteCmdlet(); - WriteDebug(String.Format("Cmdlet called for ResourceGroupName: {0}, ResourceName: {1}, Location: {2}", AzureBackupContainer.ResourceGroupName, AzureBackupContainer.ResourceName, AzureBackupContainer.Location)); + WriteDebug(String.Format("Cmdlet called for ResourceGroupName: {0}, ResourceName: {1}, Location: {2}", container.ResourceGroupName, container.ResourceName, container.Location)); - InitializeAzureBackupCmdlet(AzureBackupContainer.ResourceGroupName, AzureBackupContainer.ResourceName, AzureBackupContainer.Location); + InitializeAzureBackupCmdlet(container.ResourceGroupName, container.ResourceName, container.Location); } } } \ No newline at end of file diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupDSCmdletBase.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupDSCmdletBase.cs index aecbd3dcbe01..02840cbdddfc 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupDSCmdletBase.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupDSCmdletBase.cs @@ -30,7 +30,7 @@ public abstract class AzureBackupDSCmdletBase : AzureBackupCmdletBase { // ToDO: // Correct Help message and other attributes related to paameters - [Parameter(Position = 0, Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.AzureBackUpItem, ValueFromPipelineByPropertyName = true)] + [Parameter(Position = 0, Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.AzureBackUpItem, ValueFromPipeline = true)] [ValidateNotNullOrEmpty] public AzureBackupItem item { get; set; } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupItemCmdletBase.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupItemCmdletBase.cs index e6fc682eb4f9..ab544518328d 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupItemCmdletBase.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupItemCmdletBase.cs @@ -30,15 +30,15 @@ public abstract class AzureBackupItemCmdletBase : AzureBackupCmdletBase { // ToDO: // Correct Help message and other attributes related to paameters - [Parameter(Position = 0, Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.AzureBackupItem, ValueFromPipelineByPropertyName = true)] + [Parameter(Position = 0, Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.AzureBackupItem, ValueFromPipeline = true)] [ValidateNotNullOrEmpty] - public AzureBackupContainerContextObject Item { get; set; } + public AzureBackupContainerContextObject item { get; set; } public override void ExecuteCmdlet() { base.ExecuteCmdlet(); - WriteDebug(String.Format("Cmdlet called for ResourceGroupName: {0}, ResourceName: {1}, Location: {2}", Item.ResourceGroupName, Item.ResourceName, Item.Location)); - InitializeAzureBackupCmdlet(Item.ResourceGroupName, Item.ResourceName, Item.Location); + WriteDebug(String.Format("Cmdlet called for ResourceGroupName: {0}, ResourceName: {1}, Location: {2}", item.ResourceGroupName, item.ResourceName, item.Location)); + InitializeAzureBackupCmdlet(item.ResourceGroupName, item.ResourceName, item.Location); } } } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/DataSource/Disable-AzureBackupProtection .cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/DataSource/Disable-AzureBackupProtection .cs index 45ca97de97ab..7e319cb0b413 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/DataSource/Disable-AzureBackupProtection .cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/DataSource/Disable-AzureBackupProtection .cs @@ -23,7 +23,7 @@ namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets.DataSource public class DisableAzureBackupProtection : AzureBackupDSCmdletBase { [Parameter(Position = 1, Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.RemoveProtectionOption)] - [ValidateSet("Invalid", "RetainBackupData", "DeleteBackupData")] + [ValidateSet("RetainBackupData", "DeleteBackupData")] public string RemoveProtectionOption { get; set; } [Parameter(Position = 2, Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.Reason)] diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/DataSource/Enable-AzureBackupProtection .cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/DataSource/Enable-AzureBackupProtection .cs index 0d0edc1937dd..f4c204d21aa8 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/DataSource/Enable-AzureBackupProtection .cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/DataSource/Enable-AzureBackupProtection .cs @@ -36,7 +36,7 @@ namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets [Cmdlet(VerbsLifecycle.Enable, "AzureBackupProtection"), OutputType(typeof(OperationResponse))] public class EnableAzureBackupProtection : AzureBackupItemCmdletBase { - [Parameter(Position = 1, Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.PolicyName)] + [Parameter(Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.PolicyName)] [ValidateNotNullOrEmpty] public AzureBackupProtectionPolicy Policy { get; set; } public override void ExecuteCmdlet() @@ -48,17 +48,23 @@ public override void ExecuteCmdlet() WriteVerbose("Making client call"); SetProtectionRequestInput input = new SetProtectionRequestInput(); input.PolicyId = Policy.InstanceId; - if (Item.GetType() == ((AzureBackupItem)Item).GetType()) + if (item.GetType() == typeof(AzureBackupItem)) { - input.ProtectableObjectType = (Item as AzureBackupItem).Type; - input.ProtectableObjects.Add((Item as AzureBackupItem).Name); + input.ProtectableObjectType = (item as AzureBackupItem).Type; + input.ProtectableObjects.Add((item as AzureBackupItem).Name); } - else if (Item.GetType() == ((AzureBackupContainer)Item).GetType()) + else if (item.GetType() == typeof(AzureBackupContainer)) { - if((Item as AzureBackupContainer).ContainerType == ContainerType.IaasVMContainer.ToString()) + WriteVerbose("Input is container Type = "+item.GetType()); + if((item as AzureBackupContainer).ContainerType == ContainerType.IaasVMContainer.ToString()) { + WriteVerbose("container Type = " + (item as AzureBackupContainer).ContainerType); input.ProtectableObjectType = DataSourceType.VM.ToString(); - input.ProtectableObjects.Add((Item as AzureBackupContainer).ContainerUniqueName); + input.ProtectableObjects.Add((item as AzureBackupContainer).ContainerUniqueName); + } + else + { + throw new Exception("Uknown item type"); } } else diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/DataSource/GetAzureBackupItem.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/DataSource/GetAzureBackupItem.cs index 9fc7aa523a32..9861eb893cff 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/DataSource/GetAzureBackupItem.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/DataSource/GetAzureBackupItem.cs @@ -31,15 +31,15 @@ namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets public class GetAzureBackupItem : AzureBackupContainerCmdletBase { [Parameter(Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.ProtectionStatus)] - [ValidateSet("NotProtected","Protected","Protecting","NotProtected")] + [ValidateSet("Protected","Protecting","NotProtected")] public string ProtectionStatus { get; set; } [Parameter(Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.Status)] - [ValidateSet("Invalid", "IRPending", "ProtectionStopped", "ProtectionError", "Protected")] + [ValidateSet("IRPending", "ProtectionStopped", "ProtectionError", "Protected")] public string Status { get; set; } [Parameter(Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.Type)] - [ValidateSet("Invalid", "VM")] + [ValidateSet("VM")] public string Type { get; set; } public override void ExecuteCmdlet() @@ -67,17 +67,17 @@ public override void ExecuteCmdlet() }; azureBackupDatasourceListResponse = AzureBackupClient.DataSource.ListAsync(DSQueryParam, GetCustomRequestHeaders(), CmdletCancellationToken).Result; - azureBackupDatasourceObjects = azureBackupDatasourceListResponse.DataSources.Objects.Where(x => x.ContainerName.Equals(AzureBackupContainer.ContainerUniqueName, System.StringComparison.InvariantCultureIgnoreCase)).ToList(); + azureBackupDatasourceObjects = azureBackupDatasourceListResponse.DataSources.Objects.Where(x => x.ContainerName.Equals(container.ContainerUniqueName, System.StringComparison.InvariantCultureIgnoreCase)).ToList(); if (this.Status == null) { azureBackupPOListResponse = AzureBackupClient.ProtectableObject.ListAsync(POQueryParam, GetCustomRequestHeaders(), CmdletCancellationToken).Result; - azureBackupPOObjects = azureBackupPOListResponse.ProtectableObject.Objects.Where(x => x.ContainerName.Equals(AzureBackupContainer.ContainerUniqueName, System.StringComparison.InvariantCultureIgnoreCase)).ToList(); + azureBackupPOObjects = azureBackupPOListResponse.ProtectableObject.Objects.Where(x => x.ContainerName.Equals(container.ContainerUniqueName, System.StringComparison.InvariantCultureIgnoreCase)).ToList(); } WriteVerbose("Received response"); WriteVerbose("Converting response"); - WriteAzureBackupProtectionPolicy(azureBackupDatasourceObjects, azureBackupPOObjects, AzureBackupContainer); + WriteAzureBackupProtectionPolicy(azureBackupDatasourceObjects, azureBackupPOObjects, container); }); } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupItem.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupItem.cs index ef480554c6fe..fda0be4c2bca 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupItem.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupItem.cs @@ -56,10 +56,6 @@ public class AzureBackupItem : AzureBackupItemContextObject /// public int RecoveryPointsCount { get; set; } - /// - /// Last Recovery Point for the Azure Backup Item - /// - public AzureBackupItem() : base() { From 39907dfc4395fd712c8776389007b17ae44e57a5 Mon Sep 17 00:00:00 2001 From: panbha Date: Fri, 12 Jun 2015 20:12:50 +0530 Subject: [PATCH 045/155] TestCases --- .../Commands.AzureBackup.Test/App.config | 4 +- .../Commands.AzureBackup.Test.csproj | 4 +- .../ScenarioTests/AzureBackupTests.cs | 12 ++++ .../ScenarioTests/AzureBackupTests.ps1 | 41 ++++++++++- .../BackUpAzureBackUpItem.json | 69 +++++++++++++++++++ .../GetRecoveryPointTests.json | 69 +++++++++++++++++++ 6 files changed, 194 insertions(+), 5 deletions(-) create mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupTests/BackUpAzureBackUpItem.json create mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupTests/GetRecoveryPointTests.json diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/App.config b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/App.config index 3b4ad2203e51..749e8d87fdbd 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/App.config +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/App.config @@ -1,8 +1,8 @@  - - + + diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/Commands.AzureBackup.Test.csproj b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/Commands.AzureBackup.Test.csproj index 27d0e0d2f5f1..6dd20038948d 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/Commands.AzureBackup.Test.csproj +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/Commands.AzureBackup.Test.csproj @@ -153,7 +153,9 @@ PreserveNewest - + + + PreserveNewest diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupTests.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupTests.cs index 97a25779fd49..46dad36884c2 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupTests.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupTests.cs @@ -24,5 +24,17 @@ public void ListProtectionPolicyTests() { this.RunPowerShellTest("Test-GetAzureBackupProtectionPolicyTests"); } + + [Fact] + public void GetRecoveryPointTests() + { + this.RunPowerShellTest("GetAzureRecoveryPointTest"); + } + + [Fact] + public void BackUpAzureBackUpItem() + { + this.RunPowerShellTest("BackUpAzureBackUpItemTest"); + } } } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupTests.ps1 b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupTests.ps1 index 1b4589e511f7..da3bbf0c8961 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupTests.ps1 +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupTests.ps1 @@ -12,8 +12,13 @@ # limitations under the License. # ---------------------------------------------------------------------------------- -$ResourceGroupName = "swatirg1"; -$ResourceName = "swatirn1" +$ResourceGroupName = "backuprg"; +$ResourceName = "backuprn" +$ContainerName = "iaasvmcontainer;dev01testing;dev01testing" +$ContainerType = "IaasVMContainer" +$DataSourceType = "VM" +$DataSourceId = "17593283453810" +$Location = "SouthEast Asia" <# .SYNOPSIS @@ -36,4 +41,36 @@ function Test-GetAzureBackupProtectionPolicyTests } } +function GetAzureRecoveryPointTest +{ + $azureBackUpItem = New-Object Microsoft.Azure.Commands.AzureBackup.Cmdlets.AzureBackupItem + $azureBackUpItem.ResourceGroupName = $ResourceGroupName + $azureBackUpItem.ResourceName = $ResourceGroupName + $azureBackUpItem.Location = $Location + $azureBackUpItem.ContainerUniqueName = $ContainerName + $azureBackUpItem.ContainerType = $ContainerType + $azureBackUpItem.DataSourceId = $DataSourceId + $azureBackUpItem.Type = $DataSourceType + $recoveryPoints = Get-AzureBackupRecoveryPoint -item $azureBackUpItem + Assert-NotNull $recoveryPoints 'Recovery Points should not be null' + foreach($recoveryPoint in $recoveryPoints) + { + Assert-NotNull $recoveryPoint.RecoveryPointTime 'RecoveryPointTime should not be null' + Assert-NotNull $recoveryPoint.RecoveryPointType 'RecoveryPointType should not be null' + } +} + +function BackUpAzureBackUpItemTest +{ + $azureBackUpItem = New-Object Microsoft.Azure.Commands.AzureBackup.Cmdlets.AzureBackupItem + $azureBackUpItem.ResourceGroupName = $ResourceGroupName + $azureBackUpItem.ResourceName = $ResourceName + $azureBackUpItem.Location = $Location + $azureBackUpItem.ContainerUniqueName = $ContainerName + $azureBackUpItem.ContainerType = $ContainerType + $azureBackUpItem.DataSourceId = $DataSourceId + $azureBackUpItem.Type = $DataSourceType + $operationId = Backup-AzureBackupItem -item $azureBackUpItem +} + diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupTests/BackUpAzureBackUpItem.json b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupTests/BackUpAzureBackUpItem.json new file mode 100644 index 000000000000..c7a2412615bc --- /dev/null +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupTests/BackUpAzureBackUpItem.json @@ -0,0 +1,69 @@ +{ + "Entries": [ + { + "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/containers/iaasvmcontainer%3Bdev01testing%3Bdev01testing/datasources/VM/17593283453810/backup?api-version=2014-09-01", + "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vY29udGFpbmVycy9pYWFzdm1jb250YWluZXIlM0JkZXYwMXRlc3RpbmclM0JkZXYwMXRlc3RpbmcvZGF0YXNvdXJjZXMvVk0vMTc1OTMyODM0NTM4MTAvYmFja3VwP2FwaS12ZXJzaW9uPTIwMTQtMDktMDE=", + "RequestMethod": "POST", + "RequestBody": "", + "RequestHeaders": { + "Accept-Language": [ + "en-us" + ], + "User-Agent": [ + "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" + ] + }, + "ResponseBody": "\"062c55cd-a201-4464-a628-4ee1cc20397a\"", + "ResponseHeaders": { + "Content-Length": [ + "38" + ], + "Content-Type": [ + "application/json" + ], + "Expires": [ + "-1" + ], + "Pragma": [ + "no-cache" + ], + "x-ms-request-id": [ + "7bd6b748-c6b1-4bf1-8583-841a4292e5aa" + ], + "x-ms-client-request-id": [ + "76b831b2-0644-4703-becd-5831a9deae65", + "76b831b2-0644-4703-becd-5831a9deae65" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "x-ms-ratelimit-remaining-subscription-writes": [ + "1197" + ], + "x-ms-correlation-request-id": [ + "7bd6b748-c6b1-4bf1-8583-841a4292e5aa" + ], + "x-ms-routing-request-id": [ + "CENTRALUS:20150612T143521Z:7bd6b748-c6b1-4bf1-8583-841a4292e5aa" + ], + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Fri, 12 Jun 2015 14:35:21 GMT" + ], + "Server": [ + "Microsoft-IIS/8.0" + ], + "X-Powered-By": [ + "ASP.NET" + ] + }, + "StatusCode": 202 + } + ], + "Names": {}, + "Variables": { + "SubscriptionId": "f5303a0b-fae4-4cdb-b44d-0e4c032dde26" + } +} \ No newline at end of file diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupTests/GetRecoveryPointTests.json b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupTests/GetRecoveryPointTests.json new file mode 100644 index 000000000000..456622690c7a --- /dev/null +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupTests/GetRecoveryPointTests.json @@ -0,0 +1,69 @@ +{ + "Entries": [ + { + "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/containers/iaasvmcontainer%3Bdev01testing%3Bdev01testing/datasources/VM/17593283453810/recoverypoints?api-version=2014-09-01", + "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vY29udGFpbmVycy9pYWFzdm1jb250YWluZXIlM0JkZXYwMXRlc3RpbmclM0JkZXYwMXRlc3RpbmcvZGF0YXNvdXJjZXMvVk0vMTc1OTMyODM0NTM4MTAvcmVjb3Zlcnlwb2ludHM/YXBpLXZlcnNpb249MjAxNC0wOS0wMQ==", + "RequestMethod": "GET", + "RequestBody": "", + "RequestHeaders": { + "Accept-Language": [ + "en-us" + ], + "User-Agent": [ + "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" + ] + }, + "ResponseBody": "{\r\n \"Objects\": [\r\n {\r\n \"RecoveryPointType\": \"AppConsistent\",\r\n \"RecoveryPointTime\": \"2015-06-11T10:52:30.0345282Z\",\r\n \"RecoveryPointAdditionalInfo\": \"\",\r\n \"InstanceId\": \"19591702463836\",\r\n \"Name\": null,\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"RecoveryPointType\": \"AppConsistent\",\r\n \"RecoveryPointTime\": \"2015-06-12T06:05:46.9189974Z\",\r\n \"RecoveryPointAdditionalInfo\": \"\",\r\n \"InstanceId\": \"20483888156836\",\r\n \"Name\": null,\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"RecoveryPointType\": \"AppConsistent\",\r\n \"RecoveryPointTime\": \"2015-06-12T05:49:51.2034409Z\",\r\n \"RecoveryPointAdditionalInfo\": \"\",\r\n \"InstanceId\": \"20920255378610\",\r\n \"Name\": null,\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"RecoveryPointType\": \"AppConsistent\",\r\n \"RecoveryPointTime\": \"2015-06-12T06:24:33.0768703Z\",\r\n \"RecoveryPointAdditionalInfo\": \"\",\r\n \"InstanceId\": \"26453384139263\",\r\n \"Name\": null,\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"RecoveryPointType\": \"AppConsistent\",\r\n \"RecoveryPointTime\": \"2015-06-11T14:41:46.0950893Z\",\r\n \"RecoveryPointAdditionalInfo\": \"\",\r\n \"InstanceId\": \"32528401668178\",\r\n \"Name\": null,\r\n \"OperationInProgress\": false\r\n }\r\n ],\r\n \"ResultCount\": 5,\r\n \"Skiptoken\": null\r\n}", + "ResponseHeaders": { + "Content-Length": [ + "1006" + ], + "Content-Type": [ + "application/json" + ], + "Expires": [ + "-1" + ], + "Pragma": [ + "no-cache" + ], + "x-ms-request-id": [ + "3e21bbb3-afb6-4d88-a2f7-4af14d817853" + ], + "x-ms-client-request-id": [ + "0762a614-5fd9-468c-97f1-f0742060deef", + "0762a614-5fd9-468c-97f1-f0742060deef" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "x-ms-ratelimit-remaining-subscription-reads": [ + "14996" + ], + "x-ms-correlation-request-id": [ + "3e21bbb3-afb6-4d88-a2f7-4af14d817853" + ], + "x-ms-routing-request-id": [ + "CENTRALUS:20150612T133209Z:3e21bbb3-afb6-4d88-a2f7-4af14d817853" + ], + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Fri, 12 Jun 2015 13:32:08 GMT" + ], + "Server": [ + "Microsoft-IIS/8.0" + ], + "X-Powered-By": [ + "ASP.NET" + ] + }, + "StatusCode": 200 + } + ], + "Names": {}, + "Variables": { + "SubscriptionId": "f5303a0b-fae4-4cdb-b44d-0e4c032dde26" + } +} \ No newline at end of file From f96e12ffc550e9f5e8c26abdf80076da05243aaa Mon Sep 17 00:00:00 2001 From: panbha Date: Fri, 12 Jun 2015 20:34:33 +0530 Subject: [PATCH 046/155] Verbose Logs --- .../Commands.AzureBackup/Cmdlets/BackUp/TriggerBackUp.cs | 5 ++--- .../Cmdlets/RecoveryPoint/GetAzureBackupRecoveryPoint.cs | 4 ++-- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/BackUp/TriggerBackUp.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/BackUp/TriggerBackUp.cs index 743af3ae54d5..25bf0c2ad64f 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/BackUp/TriggerBackUp.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/BackUp/TriggerBackUp.cs @@ -49,9 +49,8 @@ public override void ExecuteCmdlet() item.DataSourceId, CmdletCancellationToken).Result; - WriteVerbose("Received policy response"); - WriteVerbose("Received policy response2"); - + WriteVerbose("Received backup response"); + WriteVerbose("Converting response"); WriteAzureBackupOperationId(triggerBackUpInfo); }); diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/RecoveryPoint/GetAzureBackupRecoveryPoint.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/RecoveryPoint/GetAzureBackupRecoveryPoint.cs index 2db0c571e424..69e4c64f9dca 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/RecoveryPoint/GetAzureBackupRecoveryPoint.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/RecoveryPoint/GetAzureBackupRecoveryPoint.cs @@ -46,8 +46,8 @@ public override void ExecuteCmdlet() item.DataSourceId, CmdletCancellationToken).Result; - WriteVerbose("Received policy response"); - WriteVerbose("Received policy response2"); + WriteVerbose("Received recovery point response"); + IEnumerable recoveryPointObjects = null; if (Id != null) { From 7eccec81895d4bb5489beabb93166698820ed654 Mon Sep 17 00:00:00 2001 From: panbha Date: Fri, 12 Jun 2015 23:24:38 +0530 Subject: [PATCH 047/155] Ps format --- ...t.Azure.Commands.AzureBackup.format.ps1xml | 51 +++++++++++++++++++ 1 file changed, 51 insertions(+) diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Microsoft.Azure.Commands.AzureBackup.format.ps1xml b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Microsoft.Azure.Commands.AzureBackup.format.ps1xml index adc17aa5aabe..3fa8e6771f06 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Microsoft.Azure.Commands.AzureBackup.format.ps1xml +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Microsoft.Azure.Commands.AzureBackup.format.ps1xml @@ -665,5 +665,56 @@ + + Microsoft.Azure.Commands.AzureBackup.Cmdlets.AzureBackupRecoveryPoint + + Microsoft.Azure.Commands.AzureBackup.Cmdlets.AzureBackupRecoveryPoint + + + + + + 36 + + + + 18 + + + + 18 + + + + 18 + + + + 18 + + + + + + + RecoveryPointId + + + RecoveryPointType + + + RecoveryPointTime + + + ContainerType + + + ContainerUniqueName + + + + + + From 502d82768ba8df80cc099162def88eff0afac063 Mon Sep 17 00:00:00 2001 From: pragrawa Date: Sat, 13 Jun 2015 06:28:44 +0530 Subject: [PATCH 048/155] ProtectionPolicy Commandlets --- .../AzureBackupPolicyCmdletBase.cs | 122 ++++++++++++++++++ .../GetAzureBackupProtectionPolicy.cs | 25 +--- .../NewAzureBackupProtectionPolicy.cs | 115 ++++------------- .../RemoveAzureBackupProtectionPolicy.cs | 10 +- .../SetAzureBackupProtectionPolicy.cs | 121 +++++------------ .../Commands.AzureBackup.csproj | 4 +- .../Models/ProtectionPolicy.cs | 13 +- 7 files changed, 196 insertions(+), 214 deletions(-) create mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupPolicyCmdletBase.cs diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupPolicyCmdletBase.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupPolicyCmdletBase.cs new file mode 100644 index 000000000000..e41024298aa2 --- /dev/null +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupPolicyCmdletBase.cs @@ -0,0 +1,122 @@ +// ---------------------------------------------------------------------------------- +// +// Copyright Microsoft Corporation +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// ---------------------------------------------------------------------------------- + +using System; +using System.Management.Automation; +using System.Collections.Generic; +using System.Xml; +using Microsoft.WindowsAzure.Commands.Utilities.Common; +using Microsoft.Azure.Common.Authentication; +using Microsoft.Azure.Common.Authentication.Models; +using System.Threading; +using Hyak.Common; +using Microsoft.Azure.Commands.AzureBackup.Properties; +using System.Net; +using Microsoft.Azure.Management.BackupServices.Models; + +namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets +{ + public abstract class AzureBackupPolicyCmdletBase : AzureBackupVaultCmdletBase + { + public override void ExecuteCmdlet() + { + base.ExecuteCmdlet(); + + WriteDebug(String.Format("Cmdlet called for ResourceGroupName: {0}, ResourceName: {1}, Location: {2}", ResourceGroupName, ResourceName, Location)); + } + + public void WriteAzureBackupProtectionPolicy(ProtectionPolicyInfo sourcePolicy) + { + this.WriteObject(new AzureBackupProtectionPolicy(ResourceGroupName, ResourceName, Location, sourcePolicy)); + } + + public void WriteAzureBackupProtectionPolicy(IEnumerable sourcePolicyList) + { + List targetList = new List(); + + foreach (var sourcePolicy in sourcePolicyList) + { + targetList.Add(new AzureBackupProtectionPolicy(ResourceGroupName, ResourceName, Location, sourcePolicy)); + } + + this.WriteObject(targetList, true); + } + + public BackupSchedule GetBackupSchedule(string backupType, string scheduleType, DateTime scheduleStartTime, + string retentionType, int retentionDuration, string[] scheduleRunDays = null) + { + var backupSchedule = new BackupSchedule(); + + backupSchedule.BackupType = backupType; + backupSchedule.RetentionPolicy = GetRetentionPolicy(retentionType, retentionDuration); + //Enum.Parse(ScheduleRunType, this.ScheduleType), + backupSchedule.ScheduleRun = scheduleType; + if (string.Compare(scheduleType, "Weekly", true) == 0) + { + backupSchedule.ScheduleRunDays = GetScheduleRunDays(scheduleRunDays); + } + + DateTime scheduleRunTime = GetScheduleRunTime(scheduleStartTime); + + backupSchedule.ScheduleRunTimes = new List { scheduleRunTime }; + + WriteDebug("Exiting GetBackupSchedule"); + return backupSchedule; + } + + private RetentionPolicy GetRetentionPolicy(string retentionType, int retentionDuration) + { + var retentionPolicy = new RetentionPolicy + { + RetentionType = (RetentionDurationType)Enum.Parse(typeof(RetentionDurationType), retentionType, true), + RetentionDuration = retentionDuration + }; + + return retentionPolicy; + } + + private IList GetScheduleRunDays(string[] scheduleRunDays) + { + if (scheduleRunDays == null || scheduleRunDays.Length <= 0) + { + var exception = new Exception("For weekly scheduletype , ScheduleRunDays param is required."); + var errorRecord = new ErrorRecord(exception, string.Empty, ErrorCategory.InvalidData, null); + WriteError(errorRecord); + } + + IList ListofWeekDays = new List(); + + foreach (var dayOfWeek in scheduleRunDays) + { + WriteDebug("dayOfWeek" + dayOfWeek.ToString()); + DayOfWeek item = (DayOfWeek)Enum.Parse(typeof(DayOfWeek), dayOfWeek, true); + WriteDebug("Item" + item.ToString()); + if (!ListofWeekDays.Contains(item)) + { + ListofWeekDays.Add(item); + } + } + + return ListofWeekDays; + } + + private DateTime GetScheduleRunTime(DateTime scheduleStartTime) + { + scheduleStartTime = scheduleStartTime.ToUniversalTime(); + DateTime scheduleRunTime = new DateTime(scheduleStartTime.Year, scheduleStartTime.Month, + scheduleStartTime.Day, scheduleStartTime.Hour, scheduleStartTime.Minute - (scheduleStartTime.Minute % 30), 0); + return scheduleRunTime; + } + } +} \ No newline at end of file diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/GetAzureBackupProtectionPolicy.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/GetAzureBackupProtectionPolicy.cs index e43e98978bd3..6da99d9b3a33 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/GetAzureBackupProtectionPolicy.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/GetAzureBackupProtectionPolicy.cs @@ -25,7 +25,7 @@ namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets /// Get list of protection policies /// [Cmdlet(VerbsCommon.Get, "AzureBackupProtectionPolicy"), OutputType(typeof(AzureBackupProtectionPolicy), typeof(List))] - public class GetAzureBackupProtectionPolicy : AzureBackupVaultCmdletBase + public class GetAzureBackupProtectionPolicy : AzureBackupPolicyCmdletBase { [Parameter(Position = 3, Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.PolicyName)] [ValidateNotNullOrEmpty] @@ -37,11 +37,11 @@ public override void ExecuteCmdlet() ExecutionBlock(() => { - WriteVerbose("Making client call"); + WriteDebug("Making client call"); var policyListResponse = AzureBackupClient.ProtectionPolicy.ListAsync(GetCustomRequestHeaders(), CmdletCancellationToken).Result; - WriteVerbose("Received policy response"); + WriteDebug("Received policy response"); IEnumerable policyObjects = null; if (Name != null) { @@ -52,27 +52,10 @@ public override void ExecuteCmdlet() policyObjects = policyListResponse.ProtectionPolicies.Objects; } - WriteVerbose("Converting response"); + WriteDebug("Converting response"); WriteAzureBackupProtectionPolicy(policyObjects); }); } - - public void WriteAzureBackupProtectionPolicy(ProtectionPolicyInfo sourcePolicy) - { - this.WriteObject(new AzureBackupProtectionPolicy(ResourceGroupName, ResourceName, Location, sourcePolicy)); - } - - public void WriteAzureBackupProtectionPolicy(IEnumerable sourcePolicyList) - { - List targetList = new List(); - - foreach (var sourcePolicy in sourcePolicyList) - { - targetList.Add(new AzureBackupProtectionPolicy(ResourceGroupName, ResourceName, Location, sourcePolicy)); - } - - this.WriteObject(targetList, true); - } } } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/NewAzureBackupProtectionPolicy.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/NewAzureBackupProtectionPolicy.cs index cc3aa2791a36..6a5be3176f75 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/NewAzureBackupProtectionPolicy.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/NewAzureBackupProtectionPolicy.cs @@ -25,139 +25,70 @@ namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets /// Create new protection policy /// [Cmdlet(VerbsCommon.Add, "AzureBackupProtectionPolicy"), OutputType(typeof(AzureBackupProtectionPolicy))] - public class NewAzureBackupProtectionPolicy : AzureBackupVaultCmdletBase - { - [Parameter(Position = 0, Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.PolicyName, ValueFromPipelineByPropertyName = true)] + public class NewAzureBackupProtectionPolicy : AzureBackupPolicyCmdletBase + { + [Parameter(Position = 3, Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.PolicyName)] [ValidateNotNullOrEmpty] public string Name { get; set; } - [Parameter(Position = 1, Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.WorkloadType, ValueFromPipelineByPropertyName = true)] + [Parameter(Position = 4, Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.WorkloadType, ValueFromPipelineByPropertyName = true)] [ValidateSet("VM")] public string WorkloadType { get; set; } - [Parameter(Position = 2, Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.BackupType, ValueFromPipelineByPropertyName = true)] + [Parameter(Position = 5, Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.BackupType, ValueFromPipelineByPropertyName = true)] [ValidateSet("Full")] public string BackupType { get; set; } - [Parameter(Position = 3, Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.ScheduleType, ValueFromPipelineByPropertyName = true)] - [ValidateSet("Daily","Weekly")] + [Parameter(Position = 6, Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.ScheduleType, ValueFromPipelineByPropertyName = true)] + [ValidateSet("Daily", "Weekly")] public string ScheduleType { get; set; } - [Parameter(Position = 4, Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.ScheduleRunDays, ValueFromPipelineByPropertyName = true)] - [AllowEmptyCollection] - public string[] ScheduleRunDays { get; set; } - - [Parameter(Position = 5, Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.ScheduleRunTimes, ValueFromPipelineByPropertyName = true)] - [ValidateNotNullOrEmpty] + [Parameter(Position = 7, Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.ScheduleRunTimes, ValueFromPipelineByPropertyName = true)] public DateTime ScheduleRunTimes { get; set; } - [Parameter(Position = 6, Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.RetentionType, ValueFromPipelineByPropertyName = true)] - [ValidateSet("Days")] + [Parameter(Position = 8, Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.RetentionType, ValueFromPipelineByPropertyName = true)] + [ValidateSet("Days", IgnoreCase = true)] public string RetentionType { get; set; } - [Parameter(Position = 7, Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.RententionDuration, ValueFromPipelineByPropertyName = true)] + [Parameter(Position = 9, Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.RententionDuration, ValueFromPipelineByPropertyName = true)] [ValidateRange(1,30)] public int RetentionDuration { get; set; } + [Parameter(Position = 10, Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.ScheduleRunDays, ValueFromPipelineByPropertyName = true)] + [ValidateSet("Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday", IgnoreCase = true)] + public string[] ScheduleRunDays { get; set; } + public override void ExecuteCmdlet() { base.ExecuteCmdlet(); ExecutionBlock(() => { - WriteVerbose("Making client call"); + WriteDebug("Making client call"); - var backupSchedule = GetBackupSchedule(); + var backupSchedule = GetBackupSchedule(BackupType, ScheduleType, ScheduleRunTimes, + RetentionType, RetentionDuration, ScheduleRunDays); var addProtectionPolicyRequest = new AddProtectionPolicyRequest(); addProtectionPolicyRequest.PolicyName = this.Name; addProtectionPolicyRequest.Schedule = backupSchedule; addProtectionPolicyRequest.WorkloadType = this.WorkloadType; - var OperationId = AzureBackupClient.ProtectionPolicy.AddAsync(addProtectionPolicyRequest, GetCustomRequestHeaders(), CmdletCancellationToken).Result; + var operationId = AzureBackupClient.ProtectionPolicy.AddAsync(addProtectionPolicyRequest, GetCustomRequestHeaders(), CmdletCancellationToken).Result; WriteVerbose("Protection policy created successfully"); var policyListResponse = AzureBackupClient.ProtectionPolicy.ListAsync(GetCustomRequestHeaders(), CmdletCancellationToken).Result; - WriteVerbose("Received policy response"); + WriteDebug("Received policy response"); IEnumerable policyObjects = null; policyObjects = policyListResponse.ProtectionPolicies.Where(x => x.Name.Equals(Name, System.StringComparison.InvariantCultureIgnoreCase)); - - WriteVerbose("Converting response"); + + WriteDebug("Converting response"); WriteAzureBackupProtectionPolicy(policyObjects); }); - } - - public void WriteAzureBackupProtectionPolicy(IEnumerable sourcePolicyList) - { - List targetList = new List(); - - foreach (var sourcePolicy in sourcePolicyList) - { - targetList.Add(new AzureBackupProtectionPolicy(ResourceGroupName, ResourceName, sourcePolicy)); - } - - this.WriteObject(targetList, true); - } - - private BackupSchedule GetBackupSchedule() - { - WriteVerbose("Entering GetBackupSchedule"); - - var backupSchedule = new BackupSchedule(); - - backupSchedule.BackupType = this.BackupType; - backupSchedule.RetentionPolicy = GetRetentionPolicy(); - //Enum.Parse(ScheduleRunType, this.ScheduleType), - backupSchedule.ScheduleRun = this.ScheduleType; - if (this.ScheduleType == "Weekly") - { - backupSchedule.ScheduleRunDays = GetScheduleRunDays(); - } - backupSchedule.ScheduleRunTimes = new List {this.ScheduleRunTimes}; - backupSchedule.ScheduleStartTime = this.ScheduleRunTimes; - - WriteVerbose("Exiting GetBackupSchedule"); - return backupSchedule; - } - - private RetentionPolicy GetRetentionPolicy() - { - WriteVerbose("Entering RetentionPolicy"); - var retentionPolicy = new RetentionPolicy - { - RetentionType = (RetentionDurationType)Enum.Parse(typeof(RetentionDurationType), this.RetentionType), - RetentionDuration = this.RetentionDuration - }; - - return retentionPolicy; - } - - private IList GetScheduleRunDays() - { - IList ListofWeekDays = new List(); - - foreach(var dayOfWeek in this.ScheduleRunDays) - { - WriteVerbose("dayOfWeek" + dayOfWeek.ToString()); - DayOfWeek item = (DayOfWeek)Enum.Parse(typeof(DayOfWeek), dayOfWeek, true); - WriteVerbose("Item" + item.ToString()); - if(!ListofWeekDays.Contains(item)) - { - ListofWeekDays.Add(item); - } - - else - { - throw new ArgumentException(string.Format("Repeated Days in ScheduleRunDays")); - } - } - - return ListofWeekDays; - } - + } } } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/RemoveAzureBackupProtectionPolicy.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/RemoveAzureBackupProtectionPolicy.cs index 0306521fbb84..74ed22c56106 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/RemoveAzureBackupProtectionPolicy.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/RemoveAzureBackupProtectionPolicy.cs @@ -25,9 +25,9 @@ namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets /// Remove a protection policy /// [Cmdlet(VerbsCommon.Remove, "AzureBackupProtectionPolicy")] - public class RemoveAzureBackupProtectionPolicy : AzureBackupVaultCmdletBase + public class RemoveAzureBackupProtectionPolicy : AzureBackupPolicyCmdletBase { - [Parameter(Position = 0, Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.PolicyName)] + [Parameter(Position = 3, Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.PolicyName)] [ValidateNotNullOrEmpty] public string Name { get; set; } @@ -37,11 +37,11 @@ public override void ExecuteCmdlet() ExecutionBlock(() => { - WriteVerbose("Making client call"); + WriteDebug("Making client call"); var policyListResponse = AzureBackupClient.ProtectionPolicy.ListAsync(GetCustomRequestHeaders(), CmdletCancellationToken).Result; - WriteVerbose("Received policy response"); + WriteDebug("Received policy response"); IEnumerable policyObjects = null; policyObjects = policyListResponse.ProtectionPolicies.Objects.Where(x => x.Name.Equals(Name, System.StringComparison.InvariantCultureIgnoreCase)); @@ -56,7 +56,7 @@ public override void ExecuteCmdlet() WriteVerbose("Policy Not Found"); } - WriteVerbose("Converting response"); + WriteDebug("Converting response"); WriteVerbose("Successfully deleted policy"); }); } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/SetAzureBackupProtectionPolicy.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/SetAzureBackupProtectionPolicy.cs index 731d820586ca..dcddd784dbc2 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/SetAzureBackupProtectionPolicy.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/SetAzureBackupProtectionPolicy.cs @@ -25,151 +25,88 @@ namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets /// Update existing protection policy /// [Cmdlet(VerbsCommon.Set, "AzureBackupProtectionPolicy"), OutputType(typeof(AzureBackupProtectionPolicy))] - public class SetAzureBackupProtectionPolicy : AzureBackupVaultCmdletBase + public class SetAzureBackupProtectionPolicy : AzureBackupPolicyCmdletBase { - [Parameter(Position = 0, Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.PolicyName, ValueFromPipelineByPropertyName = true)] + [Parameter(Position = 3, Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.PolicyName, ValueFromPipelineByPropertyName = true)] [ValidateNotNullOrEmpty] public string Name { get; set; } - [Parameter(Position = 1, Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.PolicyInstanceId, ValueFromPipelineByPropertyName = true)] + [Parameter(Position = 4, Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.PolicyInstanceId, ValueFromPipelineByPropertyName = true)] + [ValidateNotNullOrEmpty] public string InstanceId { get; set; } - [Parameter(Position = 2, Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.BackupType, ValueFromPipelineByPropertyName = true)] + [Parameter(Position = 5, Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.BackupType, ValueFromPipelineByPropertyName = true)] [ValidateSet("Full")] public string BackupType { get; set; } - [Parameter(Position = 3, Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.ScheduleType, ValueFromPipelineByPropertyName = true)] + [Parameter(Position = 6, Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.ScheduleType, ValueFromPipelineByPropertyName = true)] [ValidateSet("Daily", "Weekly")] - public string ScheduleType { get; set; } - - [Parameter(Position = 4, Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.ScheduleRunDays, ValueFromPipelineByPropertyName = true)] - [AllowEmptyCollection] - public IList ScheduleRunDays { get; set; } + public string ScheduleType { get; set; } - [Parameter(Position = 5, Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.ScheduleRunTimes, ValueFromPipelineByPropertyName = true)] - [ValidateNotNullOrEmpty] + [Parameter(Position = 7, Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.ScheduleRunTimes, ValueFromPipelineByPropertyName = true)] public DateTime ScheduleRunTimes { get; set; } - [Parameter(Position = 6, Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.RetentionType, ValueFromPipelineByPropertyName = true)] - [ValidateSet("Days")] + [Parameter(Position = 8, Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.RetentionType, ValueFromPipelineByPropertyName = true)] + [ValidateSet("Days", IgnoreCase = true)] public string RetentionType { get; set; } - [Parameter(Position = 7, Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.RententionDuration, ValueFromPipelineByPropertyName = true)] + [Parameter(Position = 9, Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.RententionDuration, ValueFromPipelineByPropertyName = true)] [ValidateRange(1, 30)] public int RetentionDuration { get; set; } + [Parameter(Position = 10, Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.ScheduleRunDays, ValueFromPipelineByPropertyName = true)] + [ValidateSet("Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday", IgnoreCase = true)] + public string[] ScheduleRunDays { get; set; } + + public override void ExecuteCmdlet() { base.ExecuteCmdlet(); ExecutionBlock(() => { - WriteVerbose("Making client call"); + WriteDebug("Making client call"); - var backupSchedule = GetBackupSchedule(); + var backupSchedule = GetBackupSchedule(BackupType, ScheduleType, ScheduleRunTimes, + RetentionType, RetentionDuration, ScheduleRunDays); var updateProtectionPolicyRequest = new UpdateProtectionPolicyRequest(); updateProtectionPolicyRequest.PolicyName = this.Name; updateProtectionPolicyRequest.Schedule = backupSchedule; var policyListResponse = AzureBackupClient.ProtectionPolicy.ListAsync(GetCustomRequestHeaders(), CmdletCancellationToken).Result; + + WriteDebug("Got the protectionPolicy List"); IEnumerable policyObjects = null; policyObjects = policyListResponse.ProtectionPolicies.Objects.Where(x => x.InstanceId.Equals(this.InstanceId, System.StringComparison.InvariantCultureIgnoreCase)); + WriteDebug("Got the protectionPolicy with InstanceId" + InstanceId); + if (policyObjects.Count() != 0) { - var OperationId = AzureBackupClient.ProtectionPolicy.UpdateAsync(this.InstanceId, updateProtectionPolicyRequest, GetCustomRequestHeaders(), CmdletCancellationToken).Result; + var operationId = AzureBackupClient.ProtectionPolicy.UpdateAsync(this.InstanceId, updateProtectionPolicyRequest, GetCustomRequestHeaders(), CmdletCancellationToken).Result; } else { - WriteVerbose("Policy Not Found"); + var exception = new Exception("Protection Policy Not Found with InstanceId" + this.InstanceId); + var errorRecord = new ErrorRecord(exception, string.Empty, ErrorCategory.InvalidData, null); + WriteError(errorRecord); } WriteVerbose("Protection Policy successfully updated"); var policyListResponse_afterUpdate = AzureBackupClient.ProtectionPolicy.ListAsync(GetCustomRequestHeaders(), CmdletCancellationToken).Result; - WriteVerbose("Received policy response"); + WriteDebug("Received policy response"); policyObjects = policyListResponse_afterUpdate.ProtectionPolicies.Where(x => x.Name.Equals(Name, System.StringComparison.InvariantCultureIgnoreCase)); - WriteVerbose("Converting response"); + WriteDebug("Converting response"); WriteAzureBackupProtectionPolicy(policyObjects); }); } - - public void WriteAzureBackupProtectionPolicy(IEnumerable sourcePolicyList) - { - List targetList = new List(); - - foreach (var sourcePolicy in sourcePolicyList) - { - targetList.Add(new AzureBackupProtectionPolicy(ResourceGroupName, ResourceName, sourcePolicy)); - } - - this.WriteObject(targetList, true); - } - - private BackupSchedule GetBackupSchedule() - { - WriteVerbose("Entering GetBackupSchedule"); - - var backupSchedule = new BackupSchedule(); - - backupSchedule.BackupType = this.BackupType; - backupSchedule.RetentionPolicy = GetRetentionPolicy(); - //Enum.Parse(ScheduleRunType, this.ScheduleType), - backupSchedule.ScheduleRun = this.ScheduleType; - if (this.ScheduleType == "Weekly") - { - backupSchedule.ScheduleRunDays = GetScheduleRunDays(); - } - backupSchedule.ScheduleRunTimes = new List { this.ScheduleRunTimes }; - backupSchedule.ScheduleStartTime = this.ScheduleRunTimes; - - WriteVerbose("Exiting GetBackupSchedule"); - return backupSchedule; - } - - private RetentionPolicy GetRetentionPolicy() - { - WriteVerbose("Entering RetentionPolicy"); - var retentionPolicy = new RetentionPolicy - { - RetentionType = (RetentionDurationType)Enum.Parse(typeof(RetentionDurationType), this.RetentionType), - RetentionDuration = this.RetentionDuration - }; - - WriteVerbose("Exiting RetentionPolicy"); - return retentionPolicy; - } - - private IList GetScheduleRunDays() - { - WriteVerbose("Entering GetScheduleRunDays"); - IList ListofWeekDays = new List(); - - foreach (var dayOfWeek in this.ScheduleRunDays) - { - DayOfWeek item = (DayOfWeek)Enum.Parse(typeof(DayOfWeek), dayOfWeek, true); - - if (!ListofWeekDays.Contains(item)) - { - ListofWeekDays.Add(item); - } - - else - { - throw new ArgumentException(string.Format("Repeated Days in ScheduleRunDays")); - } - } - - WriteVerbose("Exiting GetScheduleRunDays"); - return ListofWeekDays; - } - } } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj index a54be87c63e8..9948d9a86477 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj @@ -85,7 +85,8 @@ ..\..\..\packages\Microsoft.WindowsAzure.Management.4.1.1\lib\net40\Microsoft.WindowsAzure.Management.dll - + + False ..\..\..\..\..\..\Git\azure-sdk-for-net\src\ResourceManagement\AzureBackup\BackupServicesManagment\bin\Net45-Debug\Microsoft.WindowsAzure.Management.BackupServicesManagment.dll @@ -124,6 +125,7 @@ + diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/ProtectionPolicy.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/ProtectionPolicy.cs index c46a6c0f8b78..83a9caad93c1 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/ProtectionPolicy.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/ProtectionPolicy.cs @@ -15,6 +15,7 @@ using Microsoft.Azure.Management.BackupServices.Models; using System; using System.Collections.Generic; + namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets { /// @@ -40,7 +41,7 @@ public class AzureBackupProtectionPolicy : AzureBackupVaultContextObject public IList ScheduleRunDays { get; set; } - public IList ScheduleRunTimes { get; set; } + public DateTime ScheduleRunTimes { get; set; } public string RetentionType { get; set; } @@ -59,7 +60,7 @@ public AzureBackupProtectionPolicy(string resourceGroupName, string resourceName BackupType = sourcePolicy.Schedule.BackupType; ScheduleType = sourcePolicy.Schedule.ScheduleRun; - ScheduleRunTimes = sourcePolicy.Schedule.ScheduleRunTimes; + ScheduleRunTimes = ConvertScheduleRunTimes(sourcePolicy.Schedule.ScheduleRunTimes); ScheduleRunDays = ConvertScheduleRunDays(sourcePolicy.Schedule.ScheduleRunDays); RetentionType = sourcePolicy.Schedule.RetentionPolicy.RetentionType.ToString(); @@ -76,7 +77,13 @@ private IList ConvertScheduleRunDays(IList weekDaysList) } return scheduelRunDays; - } + + private DateTime ConvertScheduleRunTimes(IList scheduleRunTimeList) + { + IEnumerator scheduleEnumerator = scheduleRunTimeList.GetEnumerator(); + scheduleEnumerator.MoveNext(); + return scheduleEnumerator.Current; + } } } From 4cc0275d95f6931c96d69e2ed5ea139bcaf4b1f0 Mon Sep 17 00:00:00 2001 From: panbha Date: Sat, 13 Jun 2015 19:35:32 +0530 Subject: [PATCH 049/155] BackUp --- .../Cmdlets/BackUp/TriggerBackUp.cs | 26 +++---------------- .../Commands.AzureBackup.csproj | 5 ++-- 2 files changed, 6 insertions(+), 25 deletions(-) diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/BackUp/TriggerBackUp.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/BackUp/TriggerBackUp.cs index 25bf0c2ad64f..3ff31abea54b 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/BackUp/TriggerBackUp.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/BackUp/TriggerBackUp.cs @@ -31,7 +31,7 @@ namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets /// /// Get list of containers /// - [Cmdlet(VerbsData.Backup, "AzureBackupItem"), OutputType(typeof(MBS.OperationResponse))] + [Cmdlet(VerbsData.Backup, "AzureBackupItem"), OutputType(typeof(Guid))] public class TriggerAzureBackup : AzureBackupDSCmdletBase { public override void ExecuteCmdlet() @@ -41,7 +41,7 @@ public override void ExecuteCmdlet() ExecutionBlock(() => { WriteVerbose("Making client call"); - + Guid jobId = Guid.Empty; MBS.OperationResponse triggerBackUpInfo = AzureBackupClient.BackUp.TriggerBackUpAsync(GetCustomRequestHeaders(), item.ContainerUniqueName, @@ -52,27 +52,9 @@ public override void ExecuteCmdlet() WriteVerbose("Received backup response"); WriteVerbose("Converting response"); - WriteAzureBackupOperationId(triggerBackUpInfo); + jobId = triggerBackUpInfo.OperationId; + this.WriteObject(jobId); }); } - - public void WriteAzureBackupOperationId(MBS.OperationResponse sourceOperationResponse) - { - // this needs to be uncommented once we have proper constructor - // this.WriteObject(new AzureBackupRecoveryPoint(ResourceGroupName, ResourceName, sourceOperationResponse)); - } - - public void WriteAzureBackupOperationId(IEnumerable sourceOperationResponseList) - { - List targetList = new List(); - - foreach (var sourceOperationResponse in sourceOperationResponseList) - { - // this needs to be uncommented once we have proper constructor - //targetList.Add(new TriggerBackUpInfo(ResourceGroupName, ResourceName, sourceOperationResponse)); - } - - this.WriteObject(targetList, true); - } } } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj index 287396ff509e..70fb2f3e028c 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj @@ -85,9 +85,8 @@ ..\..\..\packages\Microsoft.WindowsAzure.Management.4.1.1\lib\net40\Microsoft.WindowsAzure.Management.dll - - False - ..\..\..\..\..\azure-sdk-for-net\src\ResourceManagement\AzureBackup\BackupServicesManagment\bin\Net45-Release\Microsoft.WindowsAzure.Management.BackupServicesManagment.dll + + ..\..\..\..\..\..\git5\azure-sdk-for-net\src\ResourceManagement\AzureBackup\BackupServicesManagment\bin\Net40-Debug\Microsoft.WindowsAzure.Management.BackupServicesManagment.dll False From 5dadbe2c1a7385627a0f6e1e6225ce15c08354c7 Mon Sep 17 00:00:00 2001 From: panbha Date: Sat, 13 Jun 2015 19:51:07 +0530 Subject: [PATCH 050/155] small correction --- .../ScenarioTests/AzureBackupTests.ps1 | 2 +- .../Commands.AzureBackup/Commands.AzureBackup.csproj | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupTests.ps1 b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupTests.ps1 index da3bbf0c8961..b4712cc846a4 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupTests.ps1 +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupTests.ps1 @@ -70,7 +70,7 @@ function BackUpAzureBackUpItemTest $azureBackUpItem.ContainerType = $ContainerType $azureBackUpItem.DataSourceId = $DataSourceId $azureBackUpItem.Type = $DataSourceType - $operationId = Backup-AzureBackupItem -item $azureBackUpItem + $jobId = Backup-AzureBackupItem -item $azureBackUpItem } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj index 70fb2f3e028c..52245d2a87f4 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj @@ -86,7 +86,7 @@ ..\..\..\packages\Microsoft.WindowsAzure.Management.4.1.1\lib\net40\Microsoft.WindowsAzure.Management.dll - ..\..\..\..\..\..\git5\azure-sdk-for-net\src\ResourceManagement\AzureBackup\BackupServicesManagment\bin\Net40-Debug\Microsoft.WindowsAzure.Management.BackupServicesManagment.dll + ..\..\..\..\..\..\azure-sdk-for-net\src\ResourceManagement\AzureBackup\BackupServicesManagment\bin\Net40-Debug\Microsoft.WindowsAzure.Management.BackupServicesManagment.dll False From 96c9724af27418638c1550186d7f85aef3259892 Mon Sep 17 00:00:00 2001 From: panbha Date: Sat, 13 Jun 2015 20:21:01 +0530 Subject: [PATCH 051/155] test --- .../ScenarioTests/AzureBackupTests.ps1 | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupTests.ps1 b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupTests.ps1 index b4712cc846a4..3ed1a499ab83 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupTests.ps1 +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupTests.ps1 @@ -12,7 +12,7 @@ # limitations under the License. # ---------------------------------------------------------------------------------- -$ResourceGroupName = "backuprg"; +$ResourceGroupName = "backuprg" $ResourceName = "backuprn" $ContainerName = "iaasvmcontainer;dev01testing;dev01testing" $ContainerType = "IaasVMContainer" @@ -57,6 +57,7 @@ function GetAzureRecoveryPointTest { Assert-NotNull $recoveryPoint.RecoveryPointTime 'RecoveryPointTime should not be null' Assert-NotNull $recoveryPoint.RecoveryPointType 'RecoveryPointType should not be null' + Assert-NotNull $recoveryPoint.RecoveryPointId 'RecoveryPointId should not be null' } } From 3482872ed69cf26c5f6768f9b18780eac72c9dfa Mon Sep 17 00:00:00 2001 From: pikumarmsft Date: Sun, 14 Jun 2015 15:29:05 +0530 Subject: [PATCH 052/155] Added Test cases and Removed Invalid filter options --- setup/azurecmdfiles.wxi | 540 +++++++++++++++--- .../Commands.AzureBackup.Test/App.config | 4 +- .../Commands.AzureBackup.Test.csproj | 6 +- .../ScenarioTests/AzureBackupTestBase.cs | 2 +- .../ScenarioTests/AzureBackupTests.cs | 18 + .../ScenarioTests/AzureBackupTests.ps1 | 43 +- .../Cmdlets/DataSource/GetAzureBackupItem.cs | 1 - 7 files changed, 514 insertions(+), 100 deletions(-) diff --git a/setup/azurecmdfiles.wxi b/setup/azurecmdfiles.wxi index eb6a828bafc2..787e4dea4c47 100644 --- a/setup/azurecmdfiles.wxi +++ b/setup/azurecmdfiles.wxi @@ -153,6 +153,18 @@ + + + + + + + + + + + + @@ -162,6 +174,9 @@ + + + @@ -171,6 +186,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -180,9 +237,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -198,9 +282,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -213,18 +330,246 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -3619,74 +3964,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -3815,30 +4092,135 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -4920,28 +5302,6 @@ - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/App.config b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/App.config index 3b4ad2203e51..749e8d87fdbd 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/App.config +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/App.config @@ -1,8 +1,8 @@  - - + + diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/Commands.AzureBackup.Test.csproj b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/Commands.AzureBackup.Test.csproj index 27d0e0d2f5f1..72c5174cc8ac 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/Commands.AzureBackup.Test.csproj +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/Commands.AzureBackup.Test.csproj @@ -24,7 +24,7 @@ DEBUG;TRACE prompt 4 - x64 + AnyCPU pdbonly @@ -81,7 +81,7 @@ ..\..\..\packages\Microsoft.WindowsAzure.Management.4.1.1\lib\net40\Microsoft.WindowsAzure.Management.dll - ..\..\..\..\..\azure-sdk-for-net\src\ResourceManagement\AzureBackup\BackupServicesManagment\bin\Net45-Debug\Microsoft.WindowsAzure.Management.BackupServicesManagment.dll + ..\..\..\..\..\azure-sdk-for-net\src\ResourceManagement\AzureBackup\BackupServicesManagment\bin\Net45-Release\Microsoft.WindowsAzure.Management.BackupServicesManagment.dll False @@ -153,7 +153,7 @@ PreserveNewest - + PreserveNewest diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupTestBase.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupTestBase.cs index d8cafcf029e9..9981afe20bde 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupTestBase.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupTestBase.cs @@ -24,7 +24,7 @@ using Microsoft.Azure.Test.HttpRecorder; using Microsoft.WindowsAzure.Commands.ScenarioTest; -namespace Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests +namespace Microsoft.Azure.Commands.AzureBackup .Test.ScenarioTests { public abstract class AzureBackupTestsBase { diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupTests.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupTests.cs index 97a25779fd49..bff21d1699cf 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupTests.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupTests.cs @@ -24,5 +24,23 @@ public void ListProtectionPolicyTests() { this.RunPowerShellTest("Test-GetAzureBackupProtectionPolicyTests"); } + + [Fact] + public void ListAzureBackupItemTests() + { + this.RunPowerShellTest("Test-GetAzureBackupItemTests"); + } + + [Fact] + public void DisableAzureBackupProtectionTest() + { + this.RunPowerShellTest("Test-DisableAzureBackupProtectionTest"); + } + + [Fact] + public void EnableAzureBackupProtectionTest() + { + this.RunPowerShellTest("Test-EnableAzureBackupProtectionTest"); + } } } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupTests.ps1 b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupTests.ps1 index 1b4589e511f7..8d40c738235e 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupTests.ps1 +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupTests.ps1 @@ -12,8 +12,13 @@ # limitations under the License. # ---------------------------------------------------------------------------------- -$ResourceGroupName = "swatirg1"; -$ResourceName = "swatirn1" +$ResourceGroupName = "backuprg"; +$ResourceName = "backuprn" +$ContainerName = "iaasvmcontainer;dev01testing;dev01testing" +$ContainerType = "IaasVMContainer" +$DataSourceType = "VM" +$DataSourceId = "17593283453810" +$Location = "SouthEast Asia" <# .SYNOPSIS @@ -21,7 +26,7 @@ Tests creating new resource group and a simple resource. #> function Test-GetAzureBackupProtectionPolicyTests { - $protectionPolicies = Get-AzureBackupProtectionPolicy -ResourceGroupName $ResourceGroupName -ResourceName $ResourceName + $protectionPolicies = Get-AzureBackupProtectionPolicy -ResourceGroupName $ResourceGroupName -ResourceName $ResourceName -Location "wus" Assert-NotNull $protectionPolicies 'Protection Policies should not be null' foreach($protectionPolicy in $protectionPolicies) { @@ -36,4 +41,36 @@ function Test-GetAzureBackupProtectionPolicyTests } } +function Test-GetAzureBackupItemTests +{ + $container = Get-AzureBackupContainer -ResourceGroupName $ResourceGroupName -ResourceName $ResourceGroupName -Location $Location + $item = Get-AzureBackupItem -container $container[0] + Assert-NotNull $item 'Backupt items should not be null' + foreach($backupitem in $item) + { + Assert-NotNull $backupitem.ProtectionStatus 'ProtectionStatus should not be null' + Assert-NotNull $backupitem.Name 'Name should not be null' + Assert-NotNull $backupitem.Type 'Type should not be null' + Assert-NotNull $backupitem.ContainerType 'ContainerType should not be null' + Assert-NotNull $backupitem.ContainerUniqueName 'ContainerUniqueName should not be null' + Assert-NotNull $backupitem.ResourceGroupName 'ResourceGroupName should not be null' + Assert-NotNull $backupitem.ResourceName 'ResourceName should not be null' + Assert-NotNull $backupitem.Location 'Location should not be null' + } +} +function Test-EnableAzureBackupProtectionTest +{ + $policy = Get-AzureBackupProtectionPolicy -ResourceGroupName $ResourceGroupName -ResourceName $ResourceName -Location $Location + $container = Get-AzureBackupContainer -ResourceGroupName $ResourceGroupName -ResourceName $ResourceGroupName -Location $Location + $item = Get-AzureBackupItem -container $container[0] + $operationId = Enable-AzureBackupProtection -item $item[0] -Policy $policy[0] +} + +function Test-DisableAzureBackupProtectionTest +{ + $container = Get-AzureBackupContainer -ResourceGroupName $ResourceGroupName -ResourceName $ResourceGroupName -Location $Location + $item = Get-AzureBackupItem -container $container[0] + $operationId = Disable-AzureBackupProtection -item $item[0] +} + \ No newline at end of file diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/DataSource/GetAzureBackupItem.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/DataSource/GetAzureBackupItem.cs index 9861eb893cff..106e4ca26f88 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/DataSource/GetAzureBackupItem.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/DataSource/GetAzureBackupItem.cs @@ -76,7 +76,6 @@ public override void ExecuteCmdlet() } WriteVerbose("Received response"); - WriteVerbose("Converting response"); WriteAzureBackupProtectionPolicy(azureBackupDatasourceObjects, azureBackupPOObjects, container); }); } From e745abad0112760247b1905fe8b1bd01f88d70f9 Mon Sep 17 00:00:00 2001 From: panbha Date: Sun, 14 Jun 2015 22:45:53 +0530 Subject: [PATCH 053/155] rp --- .../GetAzureBackupRecoveryPoint.cs | 20 ++++++++++++++----- .../Commands.AzureBackup.csproj | 2 +- ...t.Azure.Commands.AzureBackup.format.ps1xml | 4 ++-- .../AzureResourceManager.psd1 | 1 + 4 files changed, 19 insertions(+), 8 deletions(-) diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/RecoveryPoint/GetAzureBackupRecoveryPoint.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/RecoveryPoint/GetAzureBackupRecoveryPoint.cs index 69e4c64f9dca..2f86e98e3565 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/RecoveryPoint/GetAzureBackupRecoveryPoint.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/RecoveryPoint/GetAzureBackupRecoveryPoint.cs @@ -51,15 +51,25 @@ public override void ExecuteCmdlet() IEnumerable recoveryPointObjects = null; if (Id != null) { + RecoveryPointInfo recoveryPointObject = null; recoveryPointObjects = recoveryPointListResponse.RecoveryPoints.Objects.Where(x => x.InstanceId.Equals(Id, System.StringComparison.InvariantCultureIgnoreCase)); + if (recoveryPointObjects != null && recoveryPointObjects.Any()) + { + WriteVerbose("Converting response"); + recoveryPointObject = recoveryPointObjects.FirstOrDefault(); + WriteAzureBackupRecoveryPoint(recoveryPointObject, item); + } + else + { + WriteVerbose(string.Format("{0}{1}", "No recovery point exist with Id := ", Id)); + } } else { - recoveryPointObjects = recoveryPointListResponse.RecoveryPoints.Objects; - } - - WriteVerbose("Converting response"); - WriteAzureBackupRecoveryPoint(recoveryPointObjects, item); + WriteVerbose("Converting response"); + recoveryPointObjects = recoveryPointListResponse.RecoveryPoints.Objects.OrderByDescending(x => x.RecoveryPointTime); + WriteAzureBackupRecoveryPoint(recoveryPointObjects, item); + } }); } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj index 52245d2a87f4..70fb2f3e028c 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj @@ -86,7 +86,7 @@ ..\..\..\packages\Microsoft.WindowsAzure.Management.4.1.1\lib\net40\Microsoft.WindowsAzure.Management.dll - ..\..\..\..\..\..\azure-sdk-for-net\src\ResourceManagement\AzureBackup\BackupServicesManagment\bin\Net40-Debug\Microsoft.WindowsAzure.Management.BackupServicesManagment.dll + ..\..\..\..\..\..\git5\azure-sdk-for-net\src\ResourceManagement\AzureBackup\BackupServicesManagment\bin\Net40-Debug\Microsoft.WindowsAzure.Management.BackupServicesManagment.dll False diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Microsoft.Azure.Commands.AzureBackup.format.ps1xml b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Microsoft.Azure.Commands.AzureBackup.format.ps1xml index 3fa8e6771f06..866def5b8a9a 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Microsoft.Azure.Commands.AzureBackup.format.ps1xml +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Microsoft.Azure.Commands.AzureBackup.format.ps1xml @@ -674,7 +674,7 @@ - 36 + 18 @@ -682,7 +682,7 @@ - 18 + 36 diff --git a/src/ResourceManager/Resources/Commands.Resources/AzureResourceManager.psd1 b/src/ResourceManager/Resources/Commands.Resources/AzureResourceManager.psd1 index 2b1c551ff950..60f2c5acd6ba 100644 --- a/src/ResourceManager/Resources/Commands.Resources/AzureResourceManager.psd1 +++ b/src/ResourceManager/Resources/Commands.Resources/AzureResourceManager.psd1 @@ -71,6 +71,7 @@ FormatsToProcess = @( '.\Compute\Microsoft.Azure.Commands.Compute.format.ps1xml', '.\Network\Microsoft.Azure.Commands.Network.format.ps1xml', '.\Storage\Microsoft.WindowsAzure.Commands.Storage.format.ps1xml' + '.\AzureBackup\Microsoft.Azure.Commands.AzureBackup.format.ps1xml' ) # Modules to import as nested modules of the module specified in ModuleToProcess From c439f4388241e7ba5c98ec5954835e1e0d13c0f2 Mon Sep 17 00:00:00 2001 From: panbha Date: Sun, 14 Jun 2015 22:47:52 +0530 Subject: [PATCH 054/155] rp1 --- .../Commands.AzureBackup/Commands.AzureBackup.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj index 70fb2f3e028c..52245d2a87f4 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj @@ -86,7 +86,7 @@ ..\..\..\packages\Microsoft.WindowsAzure.Management.4.1.1\lib\net40\Microsoft.WindowsAzure.Management.dll - ..\..\..\..\..\..\git5\azure-sdk-for-net\src\ResourceManagement\AzureBackup\BackupServicesManagment\bin\Net40-Debug\Microsoft.WindowsAzure.Management.BackupServicesManagment.dll + ..\..\..\..\..\..\azure-sdk-for-net\src\ResourceManagement\AzureBackup\BackupServicesManagment\bin\Net40-Debug\Microsoft.WindowsAzure.Management.BackupServicesManagment.dll False From 3585f131fb446c7b9f1f814741a5bdc58fdd7876 Mon Sep 17 00:00:00 2001 From: panbha Date: Sun, 14 Jun 2015 22:53:25 +0530 Subject: [PATCH 055/155] rpt --- .../ScenarioTests/AzureBackupTests.ps1 | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupTests.ps1 b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupTests.ps1 index 3ed1a499ab83..e62b5b5c9813 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupTests.ps1 +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupTests.ps1 @@ -52,12 +52,14 @@ function GetAzureRecoveryPointTest $azureBackUpItem.DataSourceId = $DataSourceId $azureBackUpItem.Type = $DataSourceType $recoveryPoints = Get-AzureBackupRecoveryPoint -item $azureBackUpItem - Assert-NotNull $recoveryPoints 'Recovery Points should not be null' - foreach($recoveryPoint in $recoveryPoints) + if (!($recoveryPoints -eq $null)) { - Assert-NotNull $recoveryPoint.RecoveryPointTime 'RecoveryPointTime should not be null' - Assert-NotNull $recoveryPoint.RecoveryPointType 'RecoveryPointType should not be null' - Assert-NotNull $recoveryPoint.RecoveryPointId 'RecoveryPointId should not be null' + foreach($recoveryPoint in $recoveryPoints) + { + Assert-NotNull $recoveryPoint.RecoveryPointTime 'RecoveryPointTime should not be null' + Assert-NotNull $recoveryPoint.RecoveryPointType 'RecoveryPointType should not be null' + Assert-NotNull $recoveryPoint.RecoveryPointId 'RecoveryPointId should not be null' + } } } From 8e7a87c281cfe9369dde6eb6633da61ac9fa6281 Mon Sep 17 00:00:00 2001 From: pikumarmsft Date: Mon, 15 Jun 2015 11:36:43 +0530 Subject: [PATCH 056/155] chnage in csporj --- .../Commands.AzureBackup/Commands.AzureBackup.csproj | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj index e0ddbf0d3655..52245d2a87f4 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj @@ -85,9 +85,8 @@ ..\..\..\packages\Microsoft.WindowsAzure.Management.4.1.1\lib\net40\Microsoft.WindowsAzure.Management.dll - - False - ..\..\..\..\..\azure-sdk-for-net\src\ResourceManagement\AzureBackup\BackupServicesManagment\bin\Net45-Release\Microsoft.WindowsAzure.Management.BackupServicesManagment.dll + + ..\..\..\..\..\..\azure-sdk-for-net\src\ResourceManagement\AzureBackup\BackupServicesManagment\bin\Net40-Debug\Microsoft.WindowsAzure.Management.BackupServicesManagment.dll False @@ -129,6 +128,7 @@ + From b240c6c34d7d9f9c0583091e04bf06ab01fc0169 Mon Sep 17 00:00:00 2001 From: panbha Date: Mon, 15 Jun 2015 14:03:38 +0530 Subject: [PATCH 057/155] ps --- .../Microsoft.Azure.Commands.AzureBackup.format.ps1xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Microsoft.Azure.Commands.AzureBackup.format.ps1xml b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Microsoft.Azure.Commands.AzureBackup.format.ps1xml index 866def5b8a9a..dd54dee569d8 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Microsoft.Azure.Commands.AzureBackup.format.ps1xml +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Microsoft.Azure.Commands.AzureBackup.format.ps1xml @@ -682,7 +682,7 @@ - 36 + 22 @@ -690,7 +690,7 @@ - 18 + 24 From 81db5b21feb2e1f136a894ac88fba0dce9858eb4 Mon Sep 17 00:00:00 2001 From: AditTulasi Date: Mon, 15 Jun 2015 14:28:48 +0530 Subject: [PATCH 058/155] Temporary commit --- .../Commands.AzureBackup.Test.csproj | 6 +-- .../ScenarioTests/AzureBackupTests.cs | 12 +++++ .../ScenarioTests/AzureBackupTests.ps1 | 47 +++++++++++++++++-- .../Cmdlets/Jobs/GetAzureBackupJob.cs | 2 +- .../RegisterAzureBackupContainer.cs | 2 +- .../Commands.AzureBackup.csproj | 13 ++--- .../RegisterContainer/RegisterContainer.cs | 2 +- 7 files changed, 66 insertions(+), 18 deletions(-) diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/Commands.AzureBackup.Test.csproj b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/Commands.AzureBackup.Test.csproj index 27d0e0d2f5f1..72c5174cc8ac 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/Commands.AzureBackup.Test.csproj +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/Commands.AzureBackup.Test.csproj @@ -24,7 +24,7 @@ DEBUG;TRACE prompt 4 - x64 + AnyCPU pdbonly @@ -81,7 +81,7 @@ ..\..\..\packages\Microsoft.WindowsAzure.Management.4.1.1\lib\net40\Microsoft.WindowsAzure.Management.dll - ..\..\..\..\..\azure-sdk-for-net\src\ResourceManagement\AzureBackup\BackupServicesManagment\bin\Net45-Debug\Microsoft.WindowsAzure.Management.BackupServicesManagment.dll + ..\..\..\..\..\azure-sdk-for-net\src\ResourceManagement\AzureBackup\BackupServicesManagment\bin\Net45-Release\Microsoft.WindowsAzure.Management.BackupServicesManagment.dll False @@ -153,7 +153,7 @@ PreserveNewest - + PreserveNewest diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupTests.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupTests.cs index 97a25779fd49..9dc0cc1d6898 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupTests.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupTests.cs @@ -24,5 +24,17 @@ public void ListProtectionPolicyTests() { this.RunPowerShellTest("Test-GetAzureBackupProtectionPolicyTests"); } + + [Fact] + public void GetAzureBackupJobTests() + { + this.RunPowerShellTest("Test-GetAzureBackupJob"); + } + + [Fact] + public void StopAzureBackupJobTests() + { + this.RunPowerShellTest("Test-StopAzureBackupJob"); + } } } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupTests.ps1 b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupTests.ps1 index 1b4589e511f7..e6d6153c5e5f 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupTests.ps1 +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupTests.ps1 @@ -12,8 +12,9 @@ # limitations under the License. # ---------------------------------------------------------------------------------- -$ResourceGroupName = "swatirg1"; -$ResourceName = "swatirn1" +$ResourceGroupName = "swatirg"; +$ResourceName = "swatirn" +$Location = "WestUS" <# .SYNOPSIS @@ -21,7 +22,7 @@ Tests creating new resource group and a simple resource. #> function Test-GetAzureBackupProtectionPolicyTests { - $protectionPolicies = Get-AzureBackupProtectionPolicy -ResourceGroupName $ResourceGroupName -ResourceName $ResourceName + $protectionPolicies = Get-AzureBackupProtectionPolicy -ResourceGroupName $ResourceGroupName -ResourceName $ResourceName -Location $Location Assert-NotNull $protectionPolicies 'Protection Policies should not be null' foreach($protectionPolicy in $protectionPolicies) { @@ -37,3 +38,43 @@ function Test-GetAzureBackupProtectionPolicyTests } +function Test-GetAzureBackupJob +{ + $OneMonthBack = Get-Date; + $OneMonthBack = $OneMonthBack.AddDays(-30); + $jobs = Get-AzureBackupJob -ResourceGroupName $ResourceGroupName -ResourceName $ResourceName -Location $Location -From $OneMonthBack -Debug + Assert-NotNull $jobs 'Jobs list should not be null' + foreach($job in $jobs) + { + Assert-NotNull $jobs.InstanceId 'JobID should not be null'; + Assert-NotNull $jobs.StartTime 'StartTime should not be null'; + Assert-NotNull $jobs.WorkloadType 'WorkloadType should not be null'; + Assert-NotNull $jobs.WorkloadName 'WorkloadName should not be null'; + Assert-NotNull $jobs.Status 'Status should not be null'; + Assert-NotNull $jobs.Operation 'Operation should not be null'; + + $jobDetails = Get-AzureBackupJobDetails -ResourceGroupName $ResourceGroupName -ResourceName $ResourceName -Location $Location -Job $job + Assert-NotNull $jobDetails.InstanceId 'JobID should not be null'; + Assert-NotNull $jobDetails.StartTime 'StartTime should not be null'; + Assert-NotNull $jobDetails.WorkloadType 'WorkloadType should not be null'; + Assert-NotNull $jobDetails.WorkloadName 'WorkloadName should not be null'; + Assert-NotNull $jobDetails.Status 'Status should not be null'; + Assert-NotNull $jobDetails.Operation 'Operation should not be null'; + Assert-NotNull $jobDetails.Properties 'Properties in job details cannot be null'; + Assert-NotNull $jobDetails.SubTasks 'SubTasks in job details cannot be null'; + } +} + + +function Test-StopAzureBackupJob +{ + $OneMonthBack = Get-Date; + $OneMonthBack = $OneMonthBack.AddDays(-30); + #TODO + #Call trigger backup and get an inprogress job + $jobsList = Get-AzureBackupJob -ResourceGroupName $ResourceGroupName -ResourceName $ResourceName -Location $Location -From $OneMonthBack #-Operation 'Backup' -Status 'InProgress' + + Stop-AzureBackupJob -ResourceGroupName $ResourceGroupName -ResourceName $ResourceName -Location $Location -Job $jobsList[0]; + $jobDetails = Get-AzureBackupJobDetails -ResourceGroupName $ResourceGroupName -ResourceName $ResourceName -Location $Location -Job $jobsList[0]; + #Assert-AreEqual 'Cancelling' $jobDetails.Status +} \ No newline at end of file diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Jobs/GetAzureBackupJob.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Jobs/GetAzureBackupJob.cs index 8d2da8017d65..c28b6e8d537a 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Jobs/GetAzureBackupJob.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Jobs/GetAzureBackupJob.cs @@ -33,7 +33,7 @@ public class GetAzureBackupJob : AzureBackupVaultCmdletBase [ValidateNotNullOrEmpty] public string JobId { get; set; } - [Parameter(Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.JobFilterJobHelpMessage)] + [Parameter(Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.JobFilterJobHelpMessage)] [ValidateNotNull] public AzureBackupJob Job { get; set; } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/RegisterContainer/RegisterAzureBackupContainer.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/RegisterContainer/RegisterAzureBackupContainer.cs index 1f896324275f..86ce6b337f0a 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/RegisterContainer/RegisterAzureBackupContainer.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/RegisterContainer/RegisterAzureBackupContainer.cs @@ -7,7 +7,7 @@ namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets.RegisterContainer { - [Cmdlet(VerbsCommon.Get, ProfileNouns.VirtualMachine, DefaultParameterSetName = ListAllVirtualMachinesParamSet)] + //[Cmdlet(VerbsCommon.Get, ProfileNouns.VirtualMachine, DefaultParameterSetName = ListAllVirtualMachinesParamSet)] class RegisterAzureBackupContainer { } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj index 640749b7293a..723387d8c60c 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj @@ -28,6 +28,7 @@ true true MinimumRecommendedRules.ruleset + AnyCPU ..\..\..\Package\Release\ServiceManagement\Azure\StorSimple\ @@ -139,16 +140,11 @@ - - - - Code - @@ -178,10 +174,6 @@ {5ee72c53-1720-4309-b54b-5fb79703195f} Commands.Common - - {52643bd5-6378-49bd-9f6e-dac9dd8a867b} - Commands.Compute - @@ -208,6 +200,9 @@ + + + diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/RegisterContainer/RegisterContainer.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/RegisterContainer/RegisterContainer.cs index f35a9dc0b509..398e51f55688 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/RegisterContainer/RegisterContainer.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/RegisterContainer/RegisterContainer.cs @@ -49,7 +49,7 @@ public AzureBackupRegisterContainer() } public AzureBackupRegisterContainer(string resourceGroupName, string resourceName, ProtectionPolicyInfo sourcePolicy) - : base(resourceGroupName, resourceName) + : base(resourceGroupName, resourceName, "") { InstanceId = sourcePolicy.InstanceId; Name = sourcePolicy.Name; From ba4dc16a9af9b43746b63da9be53d85daf212c2c Mon Sep 17 00:00:00 2001 From: AditTulasi Date: Mon, 15 Jun 2015 14:34:28 +0530 Subject: [PATCH 059/155] Adding session records --- .../Commands.AzureBackup.Test.csproj | 2 + .../GetAzureBackupJobTests.json | 72 +++++++++++++++++++ .../StopAzureBackupJobTests.json | 72 +++++++++++++++++++ 3 files changed, 146 insertions(+) create mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupTests/GetAzureBackupJobTests.json create mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupTests/StopAzureBackupJobTests.json diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/Commands.AzureBackup.Test.csproj b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/Commands.AzureBackup.Test.csproj index 7f12fc52cf88..aa6cc4a582d1 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/Commands.AzureBackup.Test.csproj +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/Commands.AzureBackup.Test.csproj @@ -155,10 +155,12 @@ PreserveNewest + PreserveNewest + diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupTests/GetAzureBackupJobTests.json b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupTests/GetAzureBackupJobTests.json new file mode 100644 index 000000000000..370445d13582 --- /dev/null +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupTests/GetAzureBackupJobTests.json @@ -0,0 +1,72 @@ +{ + "Entries": [ + { + "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/swatirg1/providers/Microsoft.Backupseadev01/BackupVault/swatirn1/jobs?api-version=2014-09-01&StartTime=2015-05-16%2008:56:56%20AM&EndTime=2015-06-15%2008:56:56%20AM", + "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL3N3YXRpcmcxL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvc3dhdGlybjEvam9icz9hcGktdmVyc2lvbj0yMDE0LTA5LTAxJlN0YXJ0VGltZT0yMDE1LTA1LTE2JTIwMDglM0E1NiUzQTU2JTIwQU0mRW5kVGltZT0yMDE1LTA2LTE1JTIwMDglM0E1NiUzQTU2JTIwQU0=", + "RequestMethod": "GET", + "RequestBody": "", + "RequestHeaders": { + "Accept-Language": [ + "en-us" + ], + "x-ms-client-request-id": [ + "7d6be94c-d6a6-442d-8f7b-c5670524e7f4-2015-06-15 08:56:56Z-PS" + ], + "User-Agent": [ + "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" + ] + }, + "ResponseBody": "{\r\n \"Objects\": [],\r\n \"ResultCount\": 0,\r\n \"Skiptoken\": \"-1\"\r\n}", + "ResponseHeaders": { + "Content-Length": [ + "47" + ], + "Content-Type": [ + "application/json" + ], + "Expires": [ + "-1" + ], + "Pragma": [ + "no-cache" + ], + "x-ms-request-id": [ + "4b0b4398-2544-445f-b7a9-43e4cc035097" + ], + "x-ms-client-request-id": [ + "7d6be94c-d6a6-442d-8f7b-c5670524e7f4-2015-06-15 08:56:56Z-PS", + "7d6be94c-d6a6-442d-8f7b-c5670524e7f4-2015-06-15 08:56:56Z-PS" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "x-ms-ratelimit-remaining-subscription-reads": [ + "14999" + ], + "x-ms-correlation-request-id": [ + "4b0b4398-2544-445f-b7a9-43e4cc035097" + ], + "x-ms-routing-request-id": [ + "CENTRALUS:20150615T085659Z:4b0b4398-2544-445f-b7a9-43e4cc035097" + ], + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 15 Jun 2015 08:56:58 GMT" + ], + "Server": [ + "Microsoft-IIS/8.0" + ], + "X-Powered-By": [ + "ASP.NET" + ] + }, + "StatusCode": 200 + } + ], + "Names": {}, + "Variables": { + "SubscriptionId": "f5303a0b-fae4-4cdb-b44d-0e4c032dde26" + } +} \ No newline at end of file diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupTests/StopAzureBackupJobTests.json b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupTests/StopAzureBackupJobTests.json new file mode 100644 index 000000000000..7d3924832457 --- /dev/null +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupTests/StopAzureBackupJobTests.json @@ -0,0 +1,72 @@ +{ + "Entries": [ + { + "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/swatirg1/providers/Microsoft.Backupseadev01/BackupVault/swatirn1/jobs?api-version=2014-09-01&StartTime=2015-05-16%2007:32:11%20AM&EndTime=2015-06-15%2007:32:11%20AM", + "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL3N3YXRpcmcxL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvc3dhdGlybjEvam9icz9hcGktdmVyc2lvbj0yMDE0LTA5LTAxJlN0YXJ0VGltZT0yMDE1LTA1LTE2JTIwMDclM0EzMiUzQTExJTIwQU0mRW5kVGltZT0yMDE1LTA2LTE1JTIwMDclM0EzMiUzQTExJTIwQU0=", + "RequestMethod": "GET", + "RequestBody": "", + "RequestHeaders": { + "Accept-Language": [ + "en-us" + ], + "x-ms-client-request-id": [ + "c7f3adaa-253e-4a49-a60a-725648ca5ea0-2015-06-15 07:32:11Z-PS" + ], + "User-Agent": [ + "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" + ] + }, + "ResponseBody": "{\r\n \"Objects\": [],\r\n \"ResultCount\": 0,\r\n \"Skiptoken\": \"-1\"\r\n}", + "ResponseHeaders": { + "Content-Length": [ + "47" + ], + "Content-Type": [ + "application/json" + ], + "Expires": [ + "-1" + ], + "Pragma": [ + "no-cache" + ], + "x-ms-request-id": [ + "e6bf8224-c66c-4ff3-a777-8c41c378e687" + ], + "x-ms-client-request-id": [ + "c7f3adaa-253e-4a49-a60a-725648ca5ea0-2015-06-15 07:32:11Z-PS", + "c7f3adaa-253e-4a49-a60a-725648ca5ea0-2015-06-15 07:32:11Z-PS" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "x-ms-ratelimit-remaining-subscription-reads": [ + "14999" + ], + "x-ms-correlation-request-id": [ + "e6bf8224-c66c-4ff3-a777-8c41c378e687" + ], + "x-ms-routing-request-id": [ + "CENTRALUS:20150615T073214Z:e6bf8224-c66c-4ff3-a777-8c41c378e687" + ], + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 15 Jun 2015 07:32:14 GMT" + ], + "Server": [ + "Microsoft-IIS/8.0" + ], + "X-Powered-By": [ + "ASP.NET" + ] + }, + "StatusCode": 200 + } + ], + "Names": {}, + "Variables": { + "SubscriptionId": "f5303a0b-fae4-4cdb-b44d-0e4c032dde26" + } +} \ No newline at end of file From d2239ceb994b5a1aee965193d996f549354b8501 Mon Sep 17 00:00:00 2001 From: dragonfly91 Date: Mon, 15 Jun 2015 18:36:59 +0530 Subject: [PATCH 060/155] Fixing bugs in set storage type API --- .../Cmdlets/Vault/SetAzureBackupVaultStorageType.cs | 6 +++++- .../Commands.AzureBackup/Commands.AzureBackup.csproj | 5 +++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/SetAzureBackupVaultStorageType.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/SetAzureBackupVaultStorageType.cs index 25d3eb0ecb15..cfb9d90fadf4 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/SetAzureBackupVaultStorageType.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/SetAzureBackupVaultStorageType.cs @@ -40,6 +40,8 @@ public override void ExecuteCmdlet() throw new ArgumentException("Please provide a vaild storage type."); } + WriteVerbose("Updating the storage type."); + UpdateVaultStorageTypeRequest updateVaultStorageTypeRequest = new UpdateVaultStorageTypeRequest() { StorageTypeProperties = new StorageTypeProperties() @@ -48,7 +50,9 @@ public override void ExecuteCmdlet() }, }; - AzureBackupClient.Vault.UpdateStorageTypeAsync(updateVaultStorageTypeRequest, GetCustomRequestHeaders(), CmdletCancellationToken); + AzureBackupClient.Vault.UpdateStorageTypeAsync(updateVaultStorageTypeRequest, GetCustomRequestHeaders(), CmdletCancellationToken).Wait(); + + WriteVerbose("Update successful."); }); } } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj index 361f87efb646..343d4eba36a4 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj @@ -85,8 +85,9 @@ ..\..\..\packages\Microsoft.WindowsAzure.Management.4.1.1\lib\net40\Microsoft.WindowsAzure.Management.dll - - ..\..\..\..\..\azure-sdk-for-net\binaries\net40\Microsoft.WindowsAzure.Management.BackupServicesManagment.dll + + False + ..\..\..\..\..\azure-sdk-for-net\src\ResourceManagement\AzureBackup\BackupServicesManagment\bin\Net45-Debug\Microsoft.WindowsAzure.Management.BackupServicesManagment.dll False From 1be4953e9c37e0b088e19405733f10d175cb52c3 Mon Sep 17 00:00:00 2001 From: dragonfly91 Date: Mon, 15 Jun 2015 19:45:46 +0530 Subject: [PATCH 061/155] Commit post merge --- .../Commands.AzureBackup/Commands.AzureBackup.csproj | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj index c0e81890bc66..5a1b6875e9b3 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj @@ -137,6 +137,9 @@ + + + @@ -145,6 +148,7 @@ + @@ -200,9 +204,7 @@ - - - + From 1dc7a71c54674c52863de4e00f48e5033b925aba Mon Sep 17 00:00:00 2001 From: pikumarmsft Date: Mon, 15 Jun 2015 20:18:51 +0530 Subject: [PATCH 062/155] merged enable and disable protection test cases --- .../ScenarioTests/AzureBackupTests.cs | 10 +--- .../ScenarioTests/AzureBackupTests.ps1 | 49 ++++++++++++++----- .../Commands.AzureBackup.csproj | 6 --- 3 files changed, 38 insertions(+), 27 deletions(-) diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupTests.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupTests.cs index 5d728afb50eb..848c4b6241f4 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupTests.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupTests.cs @@ -32,15 +32,9 @@ public void ListAzureBackupItemTests() } [Fact] - public void DisableAzureBackupProtectionTest() + public void EnableDisableAzureBackupProtectionTest() { - this.RunPowerShellTest("Test-DisableAzureBackupProtectionTest"); - } - - [Fact] - public void EnableAzureBackupProtectionTest() - { - this.RunPowerShellTest("Test-EnableAzureBackupProtectionTest"); + this.RunPowerShellTest("Test-EnableDisableAzureBackupProtectionTest"); } [Fact] diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupTests.ps1 b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupTests.ps1 index 12ef79b6bf28..afb6326eb206 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupTests.ps1 +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupTests.ps1 @@ -19,6 +19,9 @@ $ContainerType = "IaasVMContainer" $DataSourceType = "VM" $DataSourceId = "17593283453810" $Location = "SouthEast Asia" +$PolicyName = "Policy9"; +$PolicyId = "c87bbada-6e1b-4db2-b76c-9062d28959a4"; +$POName = "iaasvmcontainer;dev01testing;dev01testing" <# .SYNOPSIS @@ -63,8 +66,13 @@ function GetAzureRecoveryPointTest function Test-GetAzureBackupItemTests { - $container = Get-AzureBackupContainer -ResourceGroupName $ResourceGroupName -ResourceName $ResourceGroupName -Location $Location - $item = Get-AzureBackupItem -container $container[0] + $azureBackUpContainer = New-Object Microsoft.Azure.Commands.AzureBackup.Cmdlets.AzureBackupContainer + $azureBackUpContainer.ResourceGroupName = $ResourceGroupName + $azureBackUpContainer.ResourceName = $ResourceName + $azureBackUpContainer.Location = $Location + $azureBackUpContainer.ContainerUniqueName = $ContainerName + $azureBackUpContainer.ContainerType = $ContainerType + $item = Get-AzureBackupItem -container $azureBackUpContainer Assert-NotNull $item 'Backupt items should not be null' foreach($backupitem in $item) { @@ -79,20 +87,35 @@ function Test-GetAzureBackupItemTests } } -function Test-EnableAzureBackupProtectionTest +function Test-EnableDisableAzureBackupProtectionTest { - $policy = Get-AzureBackupProtectionPolicy -ResourceGroupName $ResourceGroupName -ResourceName $ResourceName -Location $Location - $container = Get-AzureBackupContainer -ResourceGroupName $ResourceGroupName -ResourceName $ResourceGroupName -Location $Location - $item = Get-AzureBackupItem -container $container[0] - $operationId = Enable-AzureBackupProtection -item $item[0] -Policy $policy[0] -} + $policy = New-Object Microsoft.Azure.Commands.AzureBackup.Cmdlets.AzureBackupProtectionPolicy + $policy.InstanceId = $PolicyId + $policy.Name = $PolicyName + $policy.ResourceGroupName = $ResourceGroupName + $policy.ResourceName = $ResourceName + $policy.Location = $Location + $policy.WorkloadType = "VM" + $policy.RetentionType = "1" + $policy.ScheduleRunTimes = "2015-06-13T20:30:00" -function Test-DisableAzureBackupProtectionTest -{ - $container = Get-AzureBackupContainer -ResourceGroupName $ResourceGroupName -ResourceName $ResourceGroupName -Location $Location - $item = Get-AzureBackupItem -container $container[0] - $operationId = Disable-AzureBackupProtection -item $item[0] + $azureBackUpItem = New-Object Microsoft.Azure.Commands.AzureBackup.Cmdlets.AzureBackupItem + $azureBackUpItem.ResourceGroupName = $ResourceGroupName + $azureBackUpItem.ResourceName = $ResourceName + $azureBackUpItem.Location = $Location + $azureBackUpItem.ContainerUniqueName = $ContainerName + $azureBackUpItem.ContainerType = $ContainerType + $azureBackUpItem.DataSourceId = $DataSourceId + $azureBackUpItem.Type = $DataSourceType + $azureBackUpItem.Name = $POName + + $jobId = Enable-AzureBackupProtection -item $azureBackUpItem -Policy $policy + sleep(20) + $jobId1 = Disable-AzureBackupProtection -item $azureBackUpItem + sleep(20) + $jobId2 = Enable-AzureBackupProtection -item $azureBackUpItem -Policy $policy } + function BackUpAzureBackUpItemTest { $azureBackUpItem = New-Object Microsoft.Azure.Commands.AzureBackup.Cmdlets.AzureBackupItem diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj index 52245d2a87f4..5808cbe435f5 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj @@ -142,9 +142,6 @@ - - Code - @@ -158,9 +155,6 @@ - - Code - True True From 966197fa4988a80a64a84bac5c629eed2e6e1032 Mon Sep 17 00:00:00 2001 From: pikumarmsft Date: Mon, 15 Jun 2015 22:13:48 +0530 Subject: [PATCH 063/155] added json files --- .../Commands.AzureBackup.Test.csproj | 2 + ...nableDisableAzureBackupProtectionTest.json | 209 ++++++++++++++++++ .../ListAzureBackupItemTests.json | 130 +++++++++++ 3 files changed, 341 insertions(+) create mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupTests/EnableDisableAzureBackupProtectionTest.json create mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupTests/ListAzureBackupItemTests.json diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/Commands.AzureBackup.Test.csproj b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/Commands.AzureBackup.Test.csproj index aa6cc4a582d1..d71137cf7849 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/Commands.AzureBackup.Test.csproj +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/Commands.AzureBackup.Test.csproj @@ -155,8 +155,10 @@ PreserveNewest + + PreserveNewest diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupTests/EnableDisableAzureBackupProtectionTest.json b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupTests/EnableDisableAzureBackupProtectionTest.json new file mode 100644 index 000000000000..579f1f6b9075 --- /dev/null +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupTests/EnableDisableAzureBackupProtectionTest.json @@ -0,0 +1,209 @@ +{ + "Entries": [ + { + "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/protectableobjects/protect?api-version=2014-09-01", + "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vcHJvdGVjdGFibGVvYmplY3RzL3Byb3RlY3Q/YXBpLXZlcnNpb249MjAxNC0wOS0wMQ==", + "RequestMethod": "POST", + "RequestBody": "{\r\n \"ProtectableObjects\": [\r\n \"iaasvmcontainer;dev01testing;dev01testing\"\r\n ],\r\n \"ProtectableObjectType\": \"VM\",\r\n \"PolicyId\": \"c87bbada-6e1b-4db2-b76c-9062d28959a4\"\r\n}", + "RequestHeaders": { + "Content-Type": [ + "application/json" + ], + "Content-Length": [ + "174" + ], + "Accept-Language": [ + "en-us" + ], + "User-Agent": [ + "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" + ] + }, + "ResponseBody": "\"f0cba117-8ffe-4f9e-8ca5-84104e73d8d8\"", + "ResponseHeaders": { + "Content-Length": [ + "38" + ], + "Content-Type": [ + "application/json" + ], + "Expires": [ + "-1" + ], + "Pragma": [ + "no-cache" + ], + "x-ms-request-id": [ + "2fc9c464-5788-4a97-974c-27e3e3ffbe4d" + ], + "x-ms-client-request-id": [ + "4cd7d528-2138-46fe-a247-b3e8115ff54a", + "4cd7d528-2138-46fe-a247-b3e8115ff54a" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "x-ms-ratelimit-remaining-subscription-writes": [ + "1198" + ], + "x-ms-correlation-request-id": [ + "2fc9c464-5788-4a97-974c-27e3e3ffbe4d" + ], + "x-ms-routing-request-id": [ + "CENTRALUS:20150615T144514Z:2fc9c464-5788-4a97-974c-27e3e3ffbe4d" + ], + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 15 Jun 2015 14:45:14 GMT" + ], + "Server": [ + "Microsoft-IIS/8.0" + ], + "X-Powered-By": [ + "ASP.NET" + ] + }, + "StatusCode": 202 + }, + { + "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/protectableobjects/protect?api-version=2014-09-01", + "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vcHJvdGVjdGFibGVvYmplY3RzL3Byb3RlY3Q/YXBpLXZlcnNpb249MjAxNC0wOS0wMQ==", + "RequestMethod": "POST", + "RequestBody": "{\r\n \"ProtectableObjects\": [\r\n \"iaasvmcontainer;dev01testing;dev01testing\"\r\n ],\r\n \"ProtectableObjectType\": \"VM\",\r\n \"PolicyId\": \"c87bbada-6e1b-4db2-b76c-9062d28959a4\"\r\n}", + "RequestHeaders": { + "Content-Type": [ + "application/json" + ], + "Content-Length": [ + "174" + ], + "Accept-Language": [ + "en-us" + ], + "User-Agent": [ + "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" + ] + }, + "ResponseBody": "\"8a5a5957-9fdf-43da-9259-63e8abe3fc57\"", + "ResponseHeaders": { + "Content-Length": [ + "38" + ], + "Content-Type": [ + "application/json" + ], + "Expires": [ + "-1" + ], + "Pragma": [ + "no-cache" + ], + "x-ms-request-id": [ + "772c23c3-c24a-48f0-a6db-b57afa35ebaf" + ], + "x-ms-client-request-id": [ + "4e04d16f-deb2-4ab6-89ef-5c971506864b", + "4e04d16f-deb2-4ab6-89ef-5c971506864b" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "x-ms-ratelimit-remaining-subscription-writes": [ + "1196" + ], + "x-ms-correlation-request-id": [ + "772c23c3-c24a-48f0-a6db-b57afa35ebaf" + ], + "x-ms-routing-request-id": [ + "CENTRALUS:20150615T144558Z:772c23c3-c24a-48f0-a6db-b57afa35ebaf" + ], + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 15 Jun 2015 14:45:58 GMT" + ], + "Server": [ + "Microsoft-IIS/8.0" + ], + "X-Powered-By": [ + "ASP.NET" + ] + }, + "StatusCode": 202 + }, + { + "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/containers/iaasvmcontainer%3Bdev01testing%3Bdev01testing/datasources/VM/17593283453810/unprotect?api-version=2014-09-01", + "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vY29udGFpbmVycy9pYWFzdm1jb250YWluZXIlM0JkZXYwMXRlc3RpbmclM0JkZXYwMXRlc3RpbmcvZGF0YXNvdXJjZXMvVk0vMTc1OTMyODM0NTM4MTAvdW5wcm90ZWN0P2FwaS12ZXJzaW9uPTIwMTQtMDktMDE=", + "RequestMethod": "POST", + "RequestBody": "{\r\n \"RemoveProtectionOption\": \"RetainBackupData\"\r\n}", + "RequestHeaders": { + "Content-Type": [ + "application/json" + ], + "Content-Length": [ + "52" + ], + "Accept-Language": [ + "en-us" + ], + "User-Agent": [ + "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" + ] + }, + "ResponseBody": "\"a6c19cb6-6f29-40d7-a216-e4590ad7550d\"", + "ResponseHeaders": { + "Content-Length": [ + "38" + ], + "Content-Type": [ + "application/json" + ], + "Expires": [ + "-1" + ], + "Pragma": [ + "no-cache" + ], + "x-ms-request-id": [ + "a51fe2a5-f3d6-4d3e-af88-0e421ffe207c" + ], + "x-ms-client-request-id": [ + "e0dc8344-0909-4188-aa69-49f7f5914b16", + "e0dc8344-0909-4188-aa69-49f7f5914b16" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "x-ms-ratelimit-remaining-subscription-writes": [ + "1197" + ], + "x-ms-correlation-request-id": [ + "a51fe2a5-f3d6-4d3e-af88-0e421ffe207c" + ], + "x-ms-routing-request-id": [ + "CENTRALUS:20150615T144536Z:a51fe2a5-f3d6-4d3e-af88-0e421ffe207c" + ], + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 15 Jun 2015 14:45:36 GMT" + ], + "Server": [ + "Microsoft-IIS/8.0" + ], + "X-Powered-By": [ + "ASP.NET" + ] + }, + "StatusCode": 202 + } + ], + "Names": {}, + "Variables": { + "SubscriptionId": "f5303a0b-fae4-4cdb-b44d-0e4c032dde26" + } +} \ No newline at end of file diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupTests/ListAzureBackupItemTests.json b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupTests/ListAzureBackupItemTests.json new file mode 100644 index 000000000000..762f2230259e --- /dev/null +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupTests/ListAzureBackupItemTests.json @@ -0,0 +1,130 @@ +{ + "Entries": [ + { + "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/datasources?api-version=2014-09-01", + "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vZGF0YXNvdXJjZXM/YXBpLXZlcnNpb249MjAxNC0wOS0wMQ==", + "RequestMethod": "GET", + "RequestBody": "", + "RequestHeaders": { + "Accept-Language": [ + "en-us" + ], + "User-Agent": [ + "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" + ] + }, + "ResponseBody": "{\r\n \"Objects\": [\r\n {\r\n \"FriendlyName\": \"dev01Testing\",\r\n \"ContainerName\": \"iaasvmcontainer;dev01testing;dev01testing\",\r\n \"ContainerType\": \"IaasVMContainer\",\r\n \"Type\": \"VM\",\r\n \"Status\": \"Protected\",\r\n \"ProtectionStatus\": \"Protected\",\r\n \"ProtectableObjectName\": \"iaasvmcontainer;dev01testing;dev01testing\",\r\n \"ProtectionPolicyName\": \"DefaultPolicy\",\r\n \"ProtectionPolicyId\": \"40716838-2fa2-453b-8901-3f16ecb5359b\",\r\n \"PolicyInconsistent\": true,\r\n \"RecoveryPointsCount\": 12,\r\n \"LastRecoveryPoint\": \"2015-06-15T11:12:50.8577407Z\",\r\n \"LastBackupTime\": \"2015-06-15T11:11:03.142968Z\",\r\n \"LastBackupStatus\": \"Completed\",\r\n \"LastBackupJobId\": \"3198b8b5-6a1b-492e-b550-a3ebd57b6fad\",\r\n \"InstanceId\": \"17593283453810\",\r\n \"Name\": \"iaasvmcontainer;dev01testing;dev01testing\",\r\n \"OperationInProgress\": false\r\n }\r\n ],\r\n \"ResultCount\": 1,\r\n \"Skiptoken\": null\r\n}", + "ResponseHeaders": { + "Content-Length": [ + "749" + ], + "Content-Type": [ + "application/json" + ], + "Expires": [ + "-1" + ], + "Pragma": [ + "no-cache" + ], + "x-ms-request-id": [ + "95e237af-d67d-43ca-b867-760ce8d27333" + ], + "x-ms-client-request-id": [ + "38273d83-d1af-4877-b40b-fe95153fe2fc", + "38273d83-d1af-4877-b40b-fe95153fe2fc" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "x-ms-ratelimit-remaining-subscription-reads": [ + "14999" + ], + "x-ms-correlation-request-id": [ + "95e237af-d67d-43ca-b867-760ce8d27333" + ], + "x-ms-routing-request-id": [ + "CENTRALUS:20150615T122620Z:95e237af-d67d-43ca-b867-760ce8d27333" + ], + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 15 Jun 2015 12:26:20 GMT" + ], + "Server": [ + "Microsoft-IIS/8.0" + ], + "X-Powered-By": [ + "ASP.NET" + ] + }, + "StatusCode": 200 + }, + { + "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/protectableobjects?api-version=2014-09-01", + "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vcHJvdGVjdGFibGVvYmplY3RzP2FwaS12ZXJzaW9uPTIwMTQtMDktMDE=", + "RequestMethod": "GET", + "RequestBody": "", + "RequestHeaders": { + "Accept-Language": [ + "en-us" + ], + "User-Agent": [ + "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" + ] + }, + "ResponseBody": "{\r\n \"Objects\": [\r\n {\r\n \"FriendlyName\": \"dev01Testing\",\r\n \"Type\": \"VM\",\r\n \"ProtectionStatus\": \"Protected\",\r\n \"ContainerName\": \"iaasvmcontainer;dev01testing;dev01testing\",\r\n \"ContainerFriendlyName\": \"dev01Testing\",\r\n \"ContainerType\": \"IaasVMContainer\",\r\n \"ParentContainerName\": \"dev01Testing\",\r\n \"ParentContainerFriendlyName\": \"dev01Testing\",\r\n \"ParentContainerType\": \"IaasVMServiceContainer\",\r\n \"InstanceId\": \"iaasvmcontainer;dev01testing;dev01testing\",\r\n \"Name\": \"iaasvmcontainer;dev01testing;dev01testing\",\r\n \"OperationInProgress\": false\r\n }\r\n ],\r\n \"ResultCount\": 1,\r\n \"Skiptoken\": null\r\n}", + "ResponseHeaders": { + "Content-Length": [ + "519" + ], + "Content-Type": [ + "application/json" + ], + "Expires": [ + "-1" + ], + "Pragma": [ + "no-cache" + ], + "x-ms-request-id": [ + "44cd4165-ecea-40bf-bd81-f87a49e62caa" + ], + "x-ms-client-request-id": [ + "a757ddda-d546-4807-a503-040f46c01609", + "a757ddda-d546-4807-a503-040f46c01609" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "x-ms-ratelimit-remaining-subscription-reads": [ + "14998" + ], + "x-ms-correlation-request-id": [ + "44cd4165-ecea-40bf-bd81-f87a49e62caa" + ], + "x-ms-routing-request-id": [ + "CENTRALUS:20150615T122621Z:44cd4165-ecea-40bf-bd81-f87a49e62caa" + ], + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 15 Jun 2015 12:26:20 GMT" + ], + "Server": [ + "Microsoft-IIS/8.0" + ], + "X-Powered-By": [ + "ASP.NET" + ] + }, + "StatusCode": 200 + } + ], + "Names": {}, + "Variables": { + "SubscriptionId": "f5303a0b-fae4-4cdb-b44d-0e4c032dde26" + } +} \ No newline at end of file From 228b8eda1aede30356c28e168b3136784e54117a Mon Sep 17 00:00:00 2001 From: pikumarmsft Date: Mon, 15 Jun 2015 22:24:52 +0530 Subject: [PATCH 064/155] small change --- .../ScenarioTests/AzureBackupTests.ps1 | 24 ++++++++++--------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupTests.ps1 b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupTests.ps1 index be2900f12172..37fc2dc259f5 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupTests.ps1 +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupTests.ps1 @@ -74,17 +74,19 @@ function Test-GetAzureBackupItemTests $azureBackUpContainer.ContainerUniqueName = $ContainerName $azureBackUpContainer.ContainerType = $ContainerType $item = Get-AzureBackupItem -container $azureBackUpContainer - Assert-NotNull $item 'Backupt items should not be null' - foreach($backupitem in $item) - { - Assert-NotNull $backupitem.ProtectionStatus 'ProtectionStatus should not be null' - Assert-NotNull $backupitem.Name 'Name should not be null' - Assert-NotNull $backupitem.Type 'Type should not be null' - Assert-NotNull $backupitem.ContainerType 'ContainerType should not be null' - Assert-NotNull $backupitem.ContainerUniqueName 'ContainerUniqueName should not be null' - Assert-NotNull $backupitem.ResourceGroupName 'ResourceGroupName should not be null' - Assert-NotNull $backupitem.ResourceName 'ResourceName should not be null' - Assert-NotNull $backupitem.Location 'Location should not be null' + if (!($item -eq $null)) + { + foreach($backupitem in $item) + { + Assert-NotNull $backupitem.ProtectionStatus 'ProtectionStatus should not be null' + Assert-NotNull $backupitem.Name 'Name should not be null' + Assert-NotNull $backupitem.Type 'Type should not be null' + Assert-NotNull $backupitem.ContainerType 'ContainerType should not be null' + Assert-NotNull $backupitem.ContainerUniqueName 'ContainerUniqueName should not be null' + Assert-NotNull $backupitem.ResourceGroupName 'ResourceGroupName should not be null' + Assert-NotNull $backupitem.ResourceName 'ResourceName should not be null' + Assert-NotNull $backupitem.Location 'Location should not be null' + } } } From 7acada0bfecc5aea2d299ba47afa49b40f504d4f Mon Sep 17 00:00:00 2001 From: pikumarmsft Date: Mon, 15 Jun 2015 22:39:00 +0530 Subject: [PATCH 065/155] added copyright message --- .../AzureBackupDSCmdletBase.cs | 2 - .../AzureBackupItemCmdletBase.cs | 2 - .../Disable-AzureBackupProtection .cs | 37 ++++++++----------- .../Enable-AzureBackupProtection .cs | 15 +------- .../Cmdlets/DataSource/GetAzureBackupItem.cs | 2 +- .../Models/AzureBackupItem.cs | 2 +- .../Commands.StorSimple.csproj | 5 ++- 7 files changed, 23 insertions(+), 42 deletions(-) diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupDSCmdletBase.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupDSCmdletBase.cs index 02840cbdddfc..f0f4005d4061 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupDSCmdletBase.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupDSCmdletBase.cs @@ -28,8 +28,6 @@ namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets { public abstract class AzureBackupDSCmdletBase : AzureBackupCmdletBase { - // ToDO: - // Correct Help message and other attributes related to paameters [Parameter(Position = 0, Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.AzureBackUpItem, ValueFromPipeline = true)] [ValidateNotNullOrEmpty] public AzureBackupItem item { get; set; } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupItemCmdletBase.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupItemCmdletBase.cs index ab544518328d..b1fbf8455f41 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupItemCmdletBase.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupItemCmdletBase.cs @@ -28,8 +28,6 @@ namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets { public abstract class AzureBackupItemCmdletBase : AzureBackupCmdletBase { - // ToDO: - // Correct Help message and other attributes related to paameters [Parameter(Position = 0, Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.AzureBackupItem, ValueFromPipeline = true)] [ValidateNotNullOrEmpty] public AzureBackupContainerContextObject item { get; set; } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/DataSource/Disable-AzureBackupProtection .cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/DataSource/Disable-AzureBackupProtection .cs index 7e319cb0b413..1bd715f481b8 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/DataSource/Disable-AzureBackupProtection .cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/DataSource/Disable-AzureBackupProtection .cs @@ -1,4 +1,18 @@ -using Microsoft.Azure.Management.BackupServices; +// ---------------------------------------------------------------------------------- +// +// Copyright Microsoft Corporation +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// ---------------------------------------------------------------------------------- + +using Microsoft.Azure.Management.BackupServices; using Microsoft.Azure.Management.BackupServices.Models; using System; using System.Collections.Generic; @@ -11,13 +25,9 @@ namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets.DataSource { // ToDo: - // Correct the Commandlet - // Correct the OperationResponse // Get Tracking API from Piyush and Get JobResponse - // Get JobResponse Object from Aditya - /// - /// Enable Azure Backup protection + /// Disable Azure Backup protection /// [Cmdlet(VerbsLifecycle.Disable, "AzureBackupProtection"), OutputType(typeof(OperationResponse))] public class DisableAzureBackupProtection : AzureBackupDSCmdletBase @@ -46,7 +56,6 @@ public override void ExecuteCmdlet() Comments = this.Comments, }; - WriteVerbose("RemoveProtectionOption = " + input.RemoveProtectionOption); var disbaleAzureBackupProtection = AzureBackupClient.DataSource.DisableProtectionAsync(GetCustomRequestHeaders(), item.ContainerUniqueName, item.Type, item.DataSourceId, input, CmdletCancellationToken).Result; WriteVerbose("Received policy response"); @@ -57,8 +66,6 @@ public override void ExecuteCmdlet() public void WriteAzureBackupProtectionPolicy(OperationResponse sourceOperationResponse) { - // this needs to be uncommented once we have proper constructor - //this.WriteObject(new AzureBackupRecoveryPoint(ResourceGroupName, ResourceName, sourceOperationResponse)); } public void WriteAzureBackupProtectionPolicy(IEnumerable sourceOperationResponseList) @@ -67,22 +74,10 @@ public void WriteAzureBackupProtectionPolicy(IEnumerable sour foreach (var sourceOperationResponse in sourceOperationResponseList) { - // this needs to be uncommented once we have proper constructor targetList.Add(sourceOperationResponse); } this.WriteObject(targetList, true); } - public enum removeProtectionOption - { - [EnumMember] - Invalid = 0, - - [EnumMember] - RetainBackupData, - - [EnumMember] - DeleteBackupData, - } } } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/DataSource/Enable-AzureBackupProtection .cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/DataSource/Enable-AzureBackupProtection .cs index f4c204d21aa8..502d9b832d13 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/DataSource/Enable-AzureBackupProtection .cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/DataSource/Enable-AzureBackupProtection .cs @@ -25,10 +25,7 @@ namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets { // ToDo: - // Correct the Commandlet - // Correct the OperationResponse // Get Tracking API from Piyush and Get JobResponse - // Get JobResponse Object from Aditya /// /// Enable Azure Backup protection @@ -74,7 +71,7 @@ public override void ExecuteCmdlet() var enableAzureBackupProtection = AzureBackupClient.DataSource.EnableProtectionAsync(GetCustomRequestHeaders(), input, CmdletCancellationToken).Result; - WriteVerbose("Received policy response"); + WriteVerbose("Received response"); WriteVerbose("Converting response"); WriteAzureBackupProtectionPolicy(enableAzureBackupProtection); }); @@ -82,8 +79,6 @@ public override void ExecuteCmdlet() public void WriteAzureBackupProtectionPolicy(OperationResponse sourceOperationResponse) { - // this needs to be uncommented once we have proper constructor - //this.WriteObject(new AzureBackupRecoveryPoint(ResourceGroupName, ResourceName, sourceOperationResponse)); } public void WriteAzureBackupProtectionPolicy(IEnumerable sourceOperationResponseList) @@ -92,7 +87,6 @@ public void WriteAzureBackupProtectionPolicy(IEnumerable sour foreach (var sourceOperationResponse in sourceOperationResponseList) { - // this needs to be uncommented once we have proper constructor targetList.Add(sourceOperationResponse); } @@ -117,15 +111,8 @@ public enum ContainerType } public enum DataSourceType { - [EnumMember] - Invalid = 0, - [EnumMember] VM - - // TODO: fix GetJobTypes() in PortalMetadataInternalEP.cs - // [EnumMember] - // AzureStorageAccount } } } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/DataSource/GetAzureBackupItem.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/DataSource/GetAzureBackupItem.cs index 106e4ca26f88..c94b957208a7 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/DataSource/GetAzureBackupItem.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/DataSource/GetAzureBackupItem.cs @@ -25,7 +25,7 @@ namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets { /// - /// Get list of containers + /// Get list of azure backup items /// [Cmdlet(VerbsCommon.Get, "AzureBackupItem"), OutputType(typeof(AzureBackupItem), typeof(List))] public class GetAzureBackupItem : AzureBackupContainerCmdletBase diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupItem.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupItem.cs index fda0be4c2bca..1bbe597749a7 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupItem.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupItem.cs @@ -22,7 +22,7 @@ namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets { /// - /// Represents Azure Backup Container + /// Represents Azure Backup Item /// public class AzureBackupItem : AzureBackupItemContextObject { diff --git a/src/ServiceManagement/StorSimple/Commands.StorSimple/Commands.StorSimple.csproj b/src/ServiceManagement/StorSimple/Commands.StorSimple/Commands.StorSimple.csproj index 34782b3d03bb..dbd5a4711e39 100644 --- a/src/ServiceManagement/StorSimple/Commands.StorSimple/Commands.StorSimple.csproj +++ b/src/ServiceManagement/StorSimple/Commands.StorSimple/Commands.StorSimple.csproj @@ -88,7 +88,10 @@ - + + False + C:\Users\idcdlslb\Desktop\System.Management.Automation.dll + From 7486fad6091ee5b252b55a368b7e8327361bf697 Mon Sep 17 00:00:00 2001 From: pikumarmsft Date: Mon, 15 Jun 2015 22:41:27 +0530 Subject: [PATCH 066/155] minor fix --- .../ScenarioTests/AzureBackupTestBase.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupTestBase.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupTestBase.cs index 9981afe20bde..d8cafcf029e9 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupTestBase.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupTestBase.cs @@ -24,7 +24,7 @@ using Microsoft.Azure.Test.HttpRecorder; using Microsoft.WindowsAzure.Commands.ScenarioTest; -namespace Microsoft.Azure.Commands.AzureBackup .Test.ScenarioTests +namespace Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests { public abstract class AzureBackupTestsBase { From 2fd9b001d0f4b548e7d5dd02ce951bdb0ce052ce Mon Sep 17 00:00:00 2001 From: pikumarmsft Date: Mon, 15 Jun 2015 22:48:38 +0530 Subject: [PATCH 067/155] undoing change in store simple --- .../Commands.StorSimple/Commands.StorSimple.csproj | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/ServiceManagement/StorSimple/Commands.StorSimple/Commands.StorSimple.csproj b/src/ServiceManagement/StorSimple/Commands.StorSimple/Commands.StorSimple.csproj index dbd5a4711e39..34782b3d03bb 100644 --- a/src/ServiceManagement/StorSimple/Commands.StorSimple/Commands.StorSimple.csproj +++ b/src/ServiceManagement/StorSimple/Commands.StorSimple/Commands.StorSimple.csproj @@ -88,10 +88,7 @@ - - False - C:\Users\idcdlslb\Desktop\System.Management.Automation.dll - + From d581a0e24a540120556b8357a2d407671ea680cd Mon Sep 17 00:00:00 2001 From: AditTulasi Date: Tue, 16 Jun 2015 09:35:07 +0530 Subject: [PATCH 068/155] Updating recorded session for jobs test cases --- .../GetAzureBackupJobTests.json | 1878 ++++++++++++++++- 1 file changed, 1867 insertions(+), 11 deletions(-) diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupTests/GetAzureBackupJobTests.json b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupTests/GetAzureBackupJobTests.json index 370445d13582..9f5224d69ce1 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupTests/GetAzureBackupJobTests.json +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupTests/GetAzureBackupJobTests.json @@ -1,8 +1,8 @@ { "Entries": [ { - "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/swatirg1/providers/Microsoft.Backupseadev01/BackupVault/swatirn1/jobs?api-version=2014-09-01&StartTime=2015-05-16%2008:56:56%20AM&EndTime=2015-06-15%2008:56:56%20AM", - "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL3N3YXRpcmcxL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvc3dhdGlybjEvam9icz9hcGktdmVyc2lvbj0yMDE0LTA5LTAxJlN0YXJ0VGltZT0yMDE1LTA1LTE2JTIwMDglM0E1NiUzQTU2JTIwQU0mRW5kVGltZT0yMDE1LTA2LTE1JTIwMDglM0E1NiUzQTU2JTIwQU0=", + "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/jobs?api-version=2014-09-01&StartTime=2015-05-16%2002:19:23%20PM&EndTime=2015-06-15%2002:19:24%20PM", + "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vam9icz9hcGktdmVyc2lvbj0yMDE0LTA5LTAxJlN0YXJ0VGltZT0yMDE1LTA1LTE2JTIwMDIlM0ExOSUzQTIzJTIwUE0mRW5kVGltZT0yMDE1LTA2LTE1JTIwMDIlM0ExOSUzQTI0JTIwUE0=", "RequestMethod": "GET", "RequestBody": "", "RequestHeaders": { @@ -10,16 +10,16 @@ "en-us" ], "x-ms-client-request-id": [ - "7d6be94c-d6a6-442d-8f7b-c5670524e7f4-2015-06-15 08:56:56Z-PS" + "416bbcdd-76f1-4f46-99d4-c8ef021210e4-2015-06-15 14:19:24Z-PS" ], "User-Agent": [ "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" ] }, - "ResponseBody": "{\r\n \"Objects\": [],\r\n \"ResultCount\": 0,\r\n \"Skiptoken\": \"-1\"\r\n}", + "ResponseBody": "{\r\n \"Objects\": [\r\n {\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Unprotect\",\r\n \"Status\": \"Failed\",\r\n \"StartTimestamp\": \"2015-06-15T13:55:41.1268867Z\",\r\n \"EndTimestamp\": \"2015-06-15T13:55:43.4663585Z\",\r\n \"Duration\": \"00:00:02.3394718\",\r\n \"EntityFriendlyName\": \"dev01Testing\",\r\n \"ActionsInfo\": null,\r\n \"ErrorDetails\": [\r\n {\r\n \"ErrorCode\": 1073871825,\r\n \"ErrorTitle\": \"\",\r\n \"ErrorString\": \"Microsoft Azure Backup encountered an internal error.\",\r\n \"Recommendations\": [\r\n \"Wait for a few minutes and then try the operation again. If the issue persists, contact Microsoft Support.\"\r\n ]\r\n }\r\n ],\r\n \"InstanceId\": \"dece8182-8d97-434e-80d5-96e7755bae81\",\r\n \"Name\": \"dece8182-8d97-434e-80d5-96e7755bae81\",\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"Type\": \"VM\",\r\n \"Operation\": \"UnRegister\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-15T12:59:31.0707896Z\",\r\n \"EndTimestamp\": \"2015-06-15T13:01:58.1942989Z\",\r\n \"Duration\": \"00:02:27.1235093\",\r\n \"EntityFriendlyName\": \"mkheranivmps02\",\r\n \"ActionsInfo\": null,\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"cb7c1675-2661-493c-b842-3360313333cb\",\r\n \"Name\": \"iaasvmcontainer;mkheranivmps02;mkheranivmps02\",\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Register\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-15T12:51:32.6298143Z\",\r\n \"EndTimestamp\": \"2015-06-15T12:56:27.0482935Z\",\r\n \"Duration\": \"00:04:54.4184792\",\r\n \"EntityFriendlyName\": \"mkheranivmps02\",\r\n \"ActionsInfo\": null,\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"ba1b3a65-8004-4e31-9e2a-f77f4e16543e\",\r\n \"Name\": \"iaasvmcontainer;mkheranivmps02;mkheranivmps02\",\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Backup\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-15T11:11:03.142968Z\",\r\n \"EndTimestamp\": \"2015-06-15T11:27:18.028978Z\",\r\n \"Duration\": \"00:16:14.8860100\",\r\n \"EntityFriendlyName\": \"dev01testing\",\r\n \"ActionsInfo\": [\r\n 1\r\n ],\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"3198b8b5-6a1b-492e-b550-a3ebd57b6fad\",\r\n \"Name\": \"job_dev01testing_3198b8b5-6a1b-492e-b550-a3ebd57b6fad\",\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Backup\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-14T20:30:06.6397949Z\",\r\n \"EndTimestamp\": \"2015-06-14T20:43:58.7446302Z\",\r\n \"Duration\": \"00:13:52.1048353\",\r\n \"EntityFriendlyName\": \"dev01testing\",\r\n \"ActionsInfo\": [\r\n 1\r\n ],\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"888a659f-04b1-4625-903f-776084d4ab0b\",\r\n \"Name\": \"job_dev01testing_888a659f-04b1-4625-903f-776084d4ab0b\",\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Backup\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-13T20:31:00.1780039Z\",\r\n \"EndTimestamp\": \"2015-06-13T20:45:23.4848097Z\",\r\n \"Duration\": \"00:14:23.3068058\",\r\n \"EntityFriendlyName\": \"dev01testing\",\r\n \"ActionsInfo\": [\r\n 1\r\n ],\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"3fae8ec8-b35b-4c75-976f-bdfcc66875c6\",\r\n \"Name\": \"job_dev01testing_3fae8ec8-b35b-4c75-976f-bdfcc66875c6\",\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Backup\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-13T14:42:37.7185258Z\",\r\n \"EndTimestamp\": \"2015-06-13T14:57:39.8014518Z\",\r\n \"Duration\": \"00:15:02.0829260\",\r\n \"EntityFriendlyName\": \"dev01testing\",\r\n \"ActionsInfo\": [\r\n 1\r\n ],\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"53b29c0a-88c8-446e-9e58-01dcdf2f315a\",\r\n \"Name\": \"job_dev01testing_53b29c0a-88c8-446e-9e58-01dcdf2f315a\",\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"Type\": \"VM\",\r\n \"Operation\": \"ConfigureBackup\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-13T11:01:10.0627574Z\",\r\n \"EndTimestamp\": \"2015-06-13T11:01:14.2893205Z\",\r\n \"Duration\": \"00:00:04.2265631\",\r\n \"EntityFriendlyName\": \"dev01Testing\",\r\n \"ActionsInfo\": null,\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"d504ecd6-aecc-4c62-85b5-8585e8d7d373\",\r\n \"Name\": \"d504ecd6-aecc-4c62-85b5-8585e8d7d373\",\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Unprotect\",\r\n \"Status\": \"Failed\",\r\n \"StartTimestamp\": \"2015-06-13T10:58:48.9035774Z\",\r\n \"EndTimestamp\": \"2015-06-13T10:58:51.5388817Z\",\r\n \"Duration\": \"00:00:02.6353043\",\r\n \"EntityFriendlyName\": \"dev01Testing\",\r\n \"ActionsInfo\": null,\r\n \"ErrorDetails\": [\r\n {\r\n \"ErrorCode\": 1073871825,\r\n \"ErrorTitle\": \"\",\r\n \"ErrorString\": \"Microsoft Azure Backup encountered an internal error.\",\r\n \"Recommendations\": [\r\n \"Wait for a few minutes and then try the operation again. If the issue persists, contact Microsoft Support.\"\r\n ]\r\n }\r\n ],\r\n \"InstanceId\": \"03a7662a-45be-493e-8fea-7ec5bad31f68\",\r\n \"Name\": \"03a7662a-45be-493e-8fea-7ec5bad31f68\",\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Backup\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-12T15:30:13.51768Z\",\r\n \"EndTimestamp\": \"2015-06-12T15:44:32.329239Z\",\r\n \"Duration\": \"00:14:18.8115590\",\r\n \"EntityFriendlyName\": \"dev01testing\",\r\n \"ActionsInfo\": [\r\n 1\r\n ],\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"4c932581-f408-4b41-80c1-c29fc15a8d71\",\r\n \"Name\": \"job_dev01testing_4c932581-f408-4b41-80c1-c29fc15a8d71\",\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Backup\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-12T14:57:10.3094061Z\",\r\n \"EndTimestamp\": \"2015-06-12T15:11:24.5753982Z\",\r\n \"Duration\": \"00:14:14.2659921\",\r\n \"EntityFriendlyName\": \"dev01testing\",\r\n \"ActionsInfo\": [\r\n 1\r\n ],\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"b453f9f7-deea-456e-956a-a0ecbfb2465a\",\r\n \"Name\": \"job_dev01testing_b453f9f7-deea-456e-956a-a0ecbfb2465a\",\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Backup\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-12T14:35:25.0178152Z\",\r\n \"EndTimestamp\": \"2015-06-12T14:51:06.0851166Z\",\r\n \"Duration\": \"00:15:41.0673014\",\r\n \"EntityFriendlyName\": \"dev01testing\",\r\n \"ActionsInfo\": [\r\n 1\r\n ],\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"6123eb41-22cc-4f14-b3b7-ae1caf4281ce\",\r\n \"Name\": \"job_dev01testing_6123eb41-22cc-4f14-b3b7-ae1caf4281ce\",\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Backup\",\r\n \"Status\": \"Failed\",\r\n \"StartTimestamp\": \"2015-06-12T06:25:30.8517368Z\",\r\n \"EndTimestamp\": \"2015-06-12T06:25:32.1713123Z\",\r\n \"Duration\": \"00:00:01.3195755\",\r\n \"EntityFriendlyName\": \"dev01testing\",\r\n \"ActionsInfo\": [\r\n 1\r\n ],\r\n \"ErrorDetails\": [\r\n {\r\n \"ErrorCode\": 400001,\r\n \"ErrorTitle\": \"\",\r\n \"ErrorString\": \"Command execution failed.\",\r\n \"Recommendations\": [\r\n \"Another operation is currently in progress on this item. Please wait until the previous operation is completed, and then retry.\"\r\n ]\r\n }\r\n ],\r\n \"InstanceId\": \"11152897-e262-4eef-9c34-ba621caece73\",\r\n \"Name\": \"job_dev01testing_11152897-e262-4eef-9c34-ba621caece73\",\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Backup\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-12T06:23:00.6818602Z\",\r\n \"EndTimestamp\": \"2015-06-12T06:35:58.1602094Z\",\r\n \"Duration\": \"00:12:57.4783492\",\r\n \"EntityFriendlyName\": \"dev01testing\",\r\n \"ActionsInfo\": [\r\n 1\r\n ],\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"4bf3889d-d689-45ab-aea6-61693bbe4c71\",\r\n \"Name\": \"job_dev01testing_4bf3889d-d689-45ab-aea6-61693bbe4c71\",\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Backup\",\r\n \"Status\": \"Failed\",\r\n \"StartTimestamp\": \"2015-06-12T06:18:48.8101046Z\",\r\n \"EndTimestamp\": \"2015-06-12T06:18:49.974187Z\",\r\n \"Duration\": \"00:00:01.1640824\",\r\n \"EntityFriendlyName\": \"dev01testing\",\r\n \"ActionsInfo\": [\r\n 1\r\n ],\r\n \"ErrorDetails\": [\r\n {\r\n \"ErrorCode\": 400001,\r\n \"ErrorTitle\": \"\",\r\n \"ErrorString\": \"Command execution failed.\",\r\n \"Recommendations\": [\r\n \"Another operation is currently in progress on this item. Please wait until the previous operation is completed, and then retry.\"\r\n ]\r\n }\r\n ],\r\n \"InstanceId\": \"8ec18e26-1b63-4a20-a8c8-c23eb0d54e18\",\r\n \"Name\": \"job_dev01testing_8ec18e26-1b63-4a20-a8c8-c23eb0d54e18\",\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"Type\": \"VM\",\r\n \"Operation\": \"ConfigureBackup\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-12T06:17:57.3610501Z\",\r\n \"EndTimestamp\": \"2015-06-12T06:18:00.4221104Z\",\r\n \"Duration\": \"00:00:03.0610603\",\r\n \"EntityFriendlyName\": \"dev01Testing\",\r\n \"ActionsInfo\": null,\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"5cbd05f3-2461-44eb-a09d-69276e96406a\",\r\n \"Name\": \"5cbd05f3-2461-44eb-a09d-69276e96406a\",\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Backup\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-12T06:04:16.0408261Z\",\r\n \"EndTimestamp\": \"2015-06-12T06:20:47.6056381Z\",\r\n \"Duration\": \"00:16:31.5648120\",\r\n \"EntityFriendlyName\": \"dev01testing\",\r\n \"ActionsInfo\": [\r\n 1\r\n ],\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"6d7f50ad-47de-4ac6-986c-7a1d3dddb04e\",\r\n \"Name\": \"job_dev01testing_6d7f50ad-47de-4ac6-986c-7a1d3dddb04e\",\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Unprotect\",\r\n \"Status\": \"Failed\",\r\n \"StartTimestamp\": \"2015-06-12T06:00:56.3011566Z\",\r\n \"EndTimestamp\": \"2015-06-12T06:00:59.2507661Z\",\r\n \"Duration\": \"00:00:02.9496095\",\r\n \"EntityFriendlyName\": \"dev01Testing\",\r\n \"ActionsInfo\": null,\r\n \"ErrorDetails\": [\r\n {\r\n \"ErrorCode\": 1073871825,\r\n \"ErrorTitle\": \"\",\r\n \"ErrorString\": \"Microsoft Azure Backup encountered an internal error.\",\r\n \"Recommendations\": [\r\n \"Wait for a few minutes and then try the operation again. If the issue persists, contact Microsoft Support.\"\r\n ]\r\n }\r\n ],\r\n \"InstanceId\": \"8895837a-24f9-4f8e-bdfd-b4fe9cb34b18\",\r\n \"Name\": \"8895837a-24f9-4f8e-bdfd-b4fe9cb34b18\",\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Backup\",\r\n \"Status\": \"Failed\",\r\n \"StartTimestamp\": \"2015-06-12T05:55:13.8165598Z\",\r\n \"EndTimestamp\": \"2015-06-12T05:55:14.4292176Z\",\r\n \"Duration\": \"00:00:00.6126578\",\r\n \"EntityFriendlyName\": \"dev01testing\",\r\n \"ActionsInfo\": [\r\n 1\r\n ],\r\n \"ErrorDetails\": [\r\n {\r\n \"ErrorCode\": 400001,\r\n \"ErrorTitle\": \"\",\r\n \"ErrorString\": \"Command execution failed.\",\r\n \"Recommendations\": [\r\n \"Another operation is currently in progress on this item. Please wait until the previous operation is completed, and then retry.\"\r\n ]\r\n }\r\n ],\r\n \"InstanceId\": \"ff7a8b35-2e59-4ae1-b651-1964ac2b8b2e\",\r\n \"Name\": \"job_dev01testing_ff7a8b35-2e59-4ae1-b651-1964ac2b8b2e\",\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Backup\",\r\n \"Status\": \"Failed\",\r\n \"StartTimestamp\": \"2015-06-12T05:52:27.5199152Z\",\r\n \"EndTimestamp\": \"2015-06-12T05:52:27.8532247Z\",\r\n \"Duration\": \"00:00:00.3333095\",\r\n \"EntityFriendlyName\": \"dev01testing\",\r\n \"ActionsInfo\": [\r\n 1\r\n ],\r\n \"ErrorDetails\": [\r\n {\r\n \"ErrorCode\": 400001,\r\n \"ErrorTitle\": \"\",\r\n \"ErrorString\": \"Command execution failed.\",\r\n \"Recommendations\": [\r\n \"Another operation is currently in progress on this item. Please wait until the previous operation is completed, and then retry.\"\r\n ]\r\n }\r\n ],\r\n \"InstanceId\": \"c018eb3b-0ac8-4ce7-818f-317f9497c39d\",\r\n \"Name\": \"job_dev01testing_c018eb3b-0ac8-4ce7-818f-317f9497c39d\",\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Backup\",\r\n \"Status\": \"Failed\",\r\n \"StartTimestamp\": \"2015-06-12T05:49:41.2528257Z\",\r\n \"EndTimestamp\": \"2015-06-12T05:49:42.0260934Z\",\r\n \"Duration\": \"00:00:00.7732677\",\r\n \"EntityFriendlyName\": \"dev01testing\",\r\n \"ActionsInfo\": [\r\n 1\r\n ],\r\n \"ErrorDetails\": [\r\n {\r\n \"ErrorCode\": 400001,\r\n \"ErrorTitle\": \"\",\r\n \"ErrorString\": \"Command execution failed.\",\r\n \"Recommendations\": [\r\n \"Another operation is currently in progress on this item. Please wait until the previous operation is completed, and then retry.\"\r\n ]\r\n }\r\n ],\r\n \"InstanceId\": \"9dcf0b48-c568-466f-8349-972489591bd0\",\r\n \"Name\": \"job_dev01testing_9dcf0b48-c568-466f-8349-972489591bd0\",\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Backup\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-12T05:48:05.5977628Z\",\r\n \"EndTimestamp\": \"2015-06-12T06:03:53.0005467Z\",\r\n \"Duration\": \"00:15:47.4027839\",\r\n \"EntityFriendlyName\": \"dev01testing\",\r\n \"ActionsInfo\": [\r\n 1\r\n ],\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"f971ef4c-15b0-40e2-baf2-8fafa209ff4f\",\r\n \"Name\": \"job_dev01testing_f971ef4c-15b0-40e2-baf2-8fafa209ff4f\",\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Backup\",\r\n \"Status\": \"Failed\",\r\n \"StartTimestamp\": \"2015-06-12T05:33:10.1328152Z\",\r\n \"EndTimestamp\": \"2015-06-12T05:33:10.3967166Z\",\r\n \"Duration\": \"00:00:00.2639014\",\r\n \"EntityFriendlyName\": \"dev01testing\",\r\n \"ActionsInfo\": [\r\n 1\r\n ],\r\n \"ErrorDetails\": [\r\n {\r\n \"ErrorCode\": 400001,\r\n \"ErrorTitle\": \"\",\r\n \"ErrorString\": \"Command execution failed.\",\r\n \"Recommendations\": [\r\n \"Another operation is currently in progress on this item. Please wait until the previous operation is completed, and then retry.\"\r\n ]\r\n }\r\n ],\r\n \"InstanceId\": \"d3138b4d-abc3-4ff1-924d-55f6d2b8f56b\",\r\n \"Name\": \"job_dev01testing_d3138b4d-abc3-4ff1-924d-55f6d2b8f56b\",\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Backup\",\r\n \"Status\": \"Cancelled\",\r\n \"StartTimestamp\": \"2015-06-12T05:31:10.6490225Z\",\r\n \"EndTimestamp\": \"2015-06-12T05:45:19.308969Z\",\r\n \"Duration\": \"00:14:08.6599465\",\r\n \"EntityFriendlyName\": \"dev01testing\",\r\n \"ActionsInfo\": [\r\n 1\r\n ],\r\n \"ErrorDetails\": [\r\n {\r\n \"ErrorCode\": 400057,\r\n \"ErrorTitle\": \"\",\r\n \"ErrorString\": \"Job is successfully cancelled.\",\r\n \"Recommendations\": []\r\n }\r\n ],\r\n \"InstanceId\": \"f0171b4a-9c09-4771-bf94-3590a65c27ce\",\r\n \"Name\": \"job_dev01testing_f0171b4a-9c09-4771-bf94-3590a65c27ce\",\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Backup\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-11T14:39:31.0489015Z\",\r\n \"EndTimestamp\": \"2015-06-11T14:56:15.3054685Z\",\r\n \"Duration\": \"00:16:44.2565670\",\r\n \"EntityFriendlyName\": \"dev01testing\",\r\n \"ActionsInfo\": [\r\n 1\r\n ],\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"a30d2af5-22a6-480e-83bc-fc5c1698c021\",\r\n \"Name\": \"job_dev01testing_a30d2af5-22a6-480e-83bc-fc5c1698c021\",\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Backup\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-11T10:50:40.341267Z\",\r\n \"EndTimestamp\": \"2015-06-11T11:19:16.627226Z\",\r\n \"Duration\": \"00:28:36.2859590\",\r\n \"EntityFriendlyName\": \"dev01testing\",\r\n \"ActionsInfo\": [\r\n 1\r\n ],\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"f53d089a-0dc7-44a4-8062-61c3c126c3c4\",\r\n \"Name\": \"job_dev01testing_f53d089a-0dc7-44a4-8062-61c3c126c3c4\",\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"Type\": \"VM\",\r\n \"Operation\": \"ConfigureBackup\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-11T10:39:07.2611805Z\",\r\n \"EndTimestamp\": \"2015-06-11T10:39:12.0730178Z\",\r\n \"Duration\": \"00:00:04.8118373\",\r\n \"EntityFriendlyName\": \"dev01Testing\",\r\n \"ActionsInfo\": null,\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"e06bdcf6-fe89-4957-9663-b16b74114c56\",\r\n \"Name\": \"e06bdcf6-fe89-4957-9663-b16b74114c56\",\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Register\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-11T10:14:34.0042559Z\",\r\n \"EndTimestamp\": \"2015-06-11T10:15:49.014085Z\",\r\n \"Duration\": \"00:01:15.0098291\",\r\n \"EntityFriendlyName\": \"dev01Testing\",\r\n \"ActionsInfo\": null,\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"d72c6b83-0247-4d19-96f6-cf499f5146e2\",\r\n \"Name\": \"iaasvmcontainer;dev01testing;dev01testing\",\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Register\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-11T09:57:23.6745962Z\",\r\n \"EndTimestamp\": \"2015-06-11T10:02:09.5201069Z\",\r\n \"Duration\": \"00:04:45.8455107\",\r\n \"EntityFriendlyName\": \"dev01Testing\",\r\n \"ActionsInfo\": null,\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"546ed062-5cd5-49c6-b453-b4446b878e19\",\r\n \"Name\": \"iaasvmcontainer;dev01testing;dev01testing\",\r\n \"OperationInProgress\": false\r\n }\r\n ],\r\n \"ResultCount\": 29,\r\n \"Skiptoken\": \"-1\"\r\n}", "ResponseHeaders": { "Content-Length": [ - "47" + "13610" ], "Content-Type": [ "application/json" @@ -31,11 +31,11 @@ "no-cache" ], "x-ms-request-id": [ - "4b0b4398-2544-445f-b7a9-43e4cc035097" + "00214ef1-367c-4597-931f-a346ae74a072" ], "x-ms-client-request-id": [ - "7d6be94c-d6a6-442d-8f7b-c5670524e7f4-2015-06-15 08:56:56Z-PS", - "7d6be94c-d6a6-442d-8f7b-c5670524e7f4-2015-06-15 08:56:56Z-PS" + "416bbcdd-76f1-4f46-99d4-c8ef021210e4-2015-06-15 14:19:24Z-PS", + "416bbcdd-76f1-4f46-99d4-c8ef021210e4-2015-06-15 14:19:24Z-PS" ], "Strict-Transport-Security": [ "max-age=31536000; includeSubDomains" @@ -44,16 +44,1872 @@ "14999" ], "x-ms-correlation-request-id": [ - "4b0b4398-2544-445f-b7a9-43e4cc035097" + "00214ef1-367c-4597-931f-a346ae74a072" ], "x-ms-routing-request-id": [ - "CENTRALUS:20150615T085659Z:4b0b4398-2544-445f-b7a9-43e4cc035097" + "CENTRALUS:20150615T141927Z:00214ef1-367c-4597-931f-a346ae74a072" ], "Cache-Control": [ "no-cache" ], "Date": [ - "Mon, 15 Jun 2015 08:56:58 GMT" + "Mon, 15 Jun 2015 14:19:26 GMT" + ], + "Server": [ + "Microsoft-IIS/8.0" + ], + "X-Powered-By": [ + "ASP.NET" + ] + }, + "StatusCode": 200 + }, + { + "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/jobs/dece8182-8d97-434e-80d5-96e7755bae81/jobdetails?api-version=2014-09-01", + "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vam9icy9kZWNlODE4Mi04ZDk3LTQzNGUtODBkNS05NmU3NzU1YmFlODEvam9iZGV0YWlscz9hcGktdmVyc2lvbj0yMDE0LTA5LTAx", + "RequestMethod": "GET", + "RequestBody": "", + "RequestHeaders": { + "Accept-Language": [ + "en-us" + ], + "x-ms-client-request-id": [ + "3d2dc212-3328-4d4f-85fd-a8c47297753e-2015-06-15 14:19:27Z-PS" + ], + "User-Agent": [ + "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" + ] + }, + "ResponseBody": "{\r\n \"TasksList\": [],\r\n \"PropertyBag\": {\r\n \"VM Name\": \"dev01Testing\",\r\n \"Delete Backup Data\": \"False\"\r\n },\r\n \"ProgressPercentage\": null,\r\n \"DynamicErrorMessage\": null,\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Unprotect\",\r\n \"Status\": \"Failed\",\r\n \"StartTimestamp\": \"2015-06-15T13:55:41.1268867Z\",\r\n \"EndTimestamp\": \"2015-06-15T13:55:43.4663585Z\",\r\n \"Duration\": \"00:00:02.3394718\",\r\n \"EntityFriendlyName\": \"dev01Testing\",\r\n \"ActionsInfo\": null,\r\n \"ErrorDetails\": [\r\n {\r\n \"ErrorCode\": 1073871825,\r\n \"ErrorTitle\": \"\",\r\n \"ErrorString\": \"Microsoft Azure Backup encountered an internal error.\",\r\n \"Recommendations\": [\r\n \"Wait for a few minutes and then try the operation again. If the issue persists, contact Microsoft Support.\"\r\n ]\r\n }\r\n ],\r\n \"InstanceId\": \"dece8182-8d97-434e-80d5-96e7755bae81\",\r\n \"Name\": \"dece8182-8d97-434e-80d5-96e7755bae81\",\r\n \"OperationInProgress\": false\r\n}", + "ResponseHeaders": { + "Content-Length": [ + "755" + ], + "Content-Type": [ + "application/json" + ], + "Expires": [ + "-1" + ], + "Pragma": [ + "no-cache" + ], + "x-ms-request-id": [ + "8c35b1b2-4562-4d70-8274-686590347a87" + ], + "x-ms-client-request-id": [ + "3d2dc212-3328-4d4f-85fd-a8c47297753e-2015-06-15 14:19:27Z-PS", + "3d2dc212-3328-4d4f-85fd-a8c47297753e-2015-06-15 14:19:27Z-PS" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "x-ms-ratelimit-remaining-subscription-reads": [ + "14998" + ], + "x-ms-correlation-request-id": [ + "8c35b1b2-4562-4d70-8274-686590347a87" + ], + "x-ms-routing-request-id": [ + "CENTRALUS:20150615T141928Z:8c35b1b2-4562-4d70-8274-686590347a87" + ], + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 15 Jun 2015 14:19:27 GMT" + ], + "Server": [ + "Microsoft-IIS/8.0" + ], + "X-Powered-By": [ + "ASP.NET" + ] + }, + "StatusCode": 200 + }, + { + "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/jobs/cb7c1675-2661-493c-b842-3360313333cb/jobdetails?api-version=2014-09-01", + "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vam9icy9jYjdjMTY3NS0yNjYxLTQ5M2MtYjg0Mi0zMzYwMzEzMzMzY2Ivam9iZGV0YWlscz9hcGktdmVyc2lvbj0yMDE0LTA5LTAx", + "RequestMethod": "GET", + "RequestBody": "", + "RequestHeaders": { + "Accept-Language": [ + "en-us" + ], + "x-ms-client-request-id": [ + "563998a4-66de-4e09-aeaa-d56904a7a784-2015-06-15 14:19:28Z-PS" + ], + "User-Agent": [ + "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" + ] + }, + "ResponseBody": "{\r\n \"TasksList\": [],\r\n \"PropertyBag\": {\r\n \"VM Name\": \"mkheranivmps02\",\r\n \"Cloud Service\": \"mkheranivmps02\"\r\n },\r\n \"ProgressPercentage\": null,\r\n \"DynamicErrorMessage\": null,\r\n \"Type\": \"VM\",\r\n \"Operation\": \"UnRegister\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-15T12:59:31.0707896Z\",\r\n \"EndTimestamp\": \"2015-06-15T13:01:58.1942989Z\",\r\n \"Duration\": \"00:02:27.1235093\",\r\n \"EntityFriendlyName\": \"mkheranivmps02\",\r\n \"ActionsInfo\": null,\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"cb7c1675-2661-493c-b842-3360313333cb\",\r\n \"Name\": \"iaasvmcontainer;mkheranivmps02;mkheranivmps02\",\r\n \"OperationInProgress\": false\r\n}", + "ResponseHeaders": { + "Content-Length": [ + "539" + ], + "Content-Type": [ + "application/json" + ], + "Expires": [ + "-1" + ], + "Pragma": [ + "no-cache" + ], + "x-ms-request-id": [ + "d3462870-b35e-4320-9360-fb2b56073e6e" + ], + "x-ms-client-request-id": [ + "563998a4-66de-4e09-aeaa-d56904a7a784-2015-06-15 14:19:28Z-PS", + "563998a4-66de-4e09-aeaa-d56904a7a784-2015-06-15 14:19:28Z-PS" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "x-ms-ratelimit-remaining-subscription-reads": [ + "14997" + ], + "x-ms-correlation-request-id": [ + "d3462870-b35e-4320-9360-fb2b56073e6e" + ], + "x-ms-routing-request-id": [ + "CENTRALUS:20150615T141929Z:d3462870-b35e-4320-9360-fb2b56073e6e" + ], + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 15 Jun 2015 14:19:29 GMT" + ], + "Server": [ + "Microsoft-IIS/8.0" + ], + "X-Powered-By": [ + "ASP.NET" + ] + }, + "StatusCode": 200 + }, + { + "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/jobs/ba1b3a65-8004-4e31-9e2a-f77f4e16543e/jobdetails?api-version=2014-09-01", + "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vam9icy9iYTFiM2E2NS04MDA0LTRlMzEtOWUyYS1mNzdmNGUxNjU0M2Uvam9iZGV0YWlscz9hcGktdmVyc2lvbj0yMDE0LTA5LTAx", + "RequestMethod": "GET", + "RequestBody": "", + "RequestHeaders": { + "Accept-Language": [ + "en-us" + ], + "x-ms-client-request-id": [ + "7f847635-9c6f-4547-9139-c8b2d0637251-2015-06-15 14:19:29Z-PS" + ], + "User-Agent": [ + "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" + ] + }, + "ResponseBody": "{\r\n \"TasksList\": [],\r\n \"PropertyBag\": {\r\n \"VM Name\": \"mkheranivmps02\",\r\n \"Cloud Service\": \"mkheranivmps02\"\r\n },\r\n \"ProgressPercentage\": null,\r\n \"DynamicErrorMessage\": null,\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Register\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-15T12:51:32.6298143Z\",\r\n \"EndTimestamp\": \"2015-06-15T12:56:27.0482935Z\",\r\n \"Duration\": \"00:04:54.4184792\",\r\n \"EntityFriendlyName\": \"mkheranivmps02\",\r\n \"ActionsInfo\": null,\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"ba1b3a65-8004-4e31-9e2a-f77f4e16543e\",\r\n \"Name\": \"iaasvmcontainer;mkheranivmps02;mkheranivmps02\",\r\n \"OperationInProgress\": false\r\n}", + "ResponseHeaders": { + "Content-Length": [ + "537" + ], + "Content-Type": [ + "application/json" + ], + "Expires": [ + "-1" + ], + "Pragma": [ + "no-cache" + ], + "x-ms-request-id": [ + "6677c326-89a9-46e8-b6ab-1fca59188011" + ], + "x-ms-client-request-id": [ + "7f847635-9c6f-4547-9139-c8b2d0637251-2015-06-15 14:19:29Z-PS", + "7f847635-9c6f-4547-9139-c8b2d0637251-2015-06-15 14:19:29Z-PS" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "x-ms-ratelimit-remaining-subscription-reads": [ + "14996" + ], + "x-ms-correlation-request-id": [ + "6677c326-89a9-46e8-b6ab-1fca59188011" + ], + "x-ms-routing-request-id": [ + "CENTRALUS:20150615T141930Z:6677c326-89a9-46e8-b6ab-1fca59188011" + ], + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 15 Jun 2015 14:19:29 GMT" + ], + "Server": [ + "Microsoft-IIS/8.0" + ], + "X-Powered-By": [ + "ASP.NET" + ] + }, + "StatusCode": 200 + }, + { + "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/jobs/3198b8b5-6a1b-492e-b550-a3ebd57b6fad/jobdetails?api-version=2014-09-01", + "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vam9icy8zMTk4YjhiNS02YTFiLTQ5MmUtYjU1MC1hM2ViZDU3YjZmYWQvam9iZGV0YWlscz9hcGktdmVyc2lvbj0yMDE0LTA5LTAx", + "RequestMethod": "GET", + "RequestBody": "", + "RequestHeaders": { + "Accept-Language": [ + "en-us" + ], + "x-ms-client-request-id": [ + "da75bc5a-9593-41ca-947d-e9f010ee250f-2015-06-15 14:19:30Z-PS" + ], + "User-Agent": [ + "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" + ] + }, + "ResponseBody": "{\r\n \"TasksList\": [\r\n {\r\n \"TaskId\": \"Take Snapshot\",\r\n \"StartTime\": null,\r\n \"EndTime\": null,\r\n \"Duration\": \"00:00:00\",\r\n \"Status\": \"Completed\",\r\n \"ProgressPercentage\": null,\r\n \"InstanceId\": null,\r\n \"Name\": null,\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"TaskId\": \"Transfer data to Backup vault\",\r\n \"StartTime\": null,\r\n \"EndTime\": null,\r\n \"Duration\": \"00:00:00\",\r\n \"Status\": \"Completed\",\r\n \"ProgressPercentage\": null,\r\n \"InstanceId\": null,\r\n \"Name\": null,\r\n \"OperationInProgress\": false\r\n }\r\n ],\r\n \"PropertyBag\": {\r\n \"VM Name\": \"dev01testing\",\r\n \"Backup Size\": \"436 MB\"\r\n },\r\n \"ProgressPercentage\": null,\r\n \"DynamicErrorMessage\": \"The following set of VSS writers failed during snapshot - \",\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Backup\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-15T11:11:03.142968Z\",\r\n \"EndTimestamp\": \"2015-06-15T11:27:18.028978Z\",\r\n \"Duration\": \"00:16:14.8860100\",\r\n \"EntityFriendlyName\": \"dev01testing\",\r\n \"ActionsInfo\": [\r\n 1\r\n ],\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"3198b8b5-6a1b-492e-b550-a3ebd57b6fad\",\r\n \"Name\": \"job_dev01testing_3198b8b5-6a1b-492e-b550-a3ebd57b6fad\",\r\n \"OperationInProgress\": false\r\n}", + "ResponseHeaders": { + "Content-Length": [ + "969" + ], + "Content-Type": [ + "application/json" + ], + "Expires": [ + "-1" + ], + "Pragma": [ + "no-cache" + ], + "x-ms-request-id": [ + "333a152a-1f22-4123-b46d-53f774ee95b9" + ], + "x-ms-client-request-id": [ + "da75bc5a-9593-41ca-947d-e9f010ee250f-2015-06-15 14:19:30Z-PS", + "da75bc5a-9593-41ca-947d-e9f010ee250f-2015-06-15 14:19:30Z-PS" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "x-ms-ratelimit-remaining-subscription-reads": [ + "14995" + ], + "x-ms-correlation-request-id": [ + "333a152a-1f22-4123-b46d-53f774ee95b9" + ], + "x-ms-routing-request-id": [ + "CENTRALUS:20150615T141930Z:333a152a-1f22-4123-b46d-53f774ee95b9" + ], + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 15 Jun 2015 14:19:30 GMT" + ], + "Server": [ + "Microsoft-IIS/8.0" + ], + "X-Powered-By": [ + "ASP.NET" + ] + }, + "StatusCode": 200 + }, + { + "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/jobs/888a659f-04b1-4625-903f-776084d4ab0b/jobdetails?api-version=2014-09-01", + "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vam9icy84ODhhNjU5Zi0wNGIxLTQ2MjUtOTAzZi03NzYwODRkNGFiMGIvam9iZGV0YWlscz9hcGktdmVyc2lvbj0yMDE0LTA5LTAx", + "RequestMethod": "GET", + "RequestBody": "", + "RequestHeaders": { + "Accept-Language": [ + "en-us" + ], + "x-ms-client-request-id": [ + "36570f6b-ddd9-4b1c-afc6-cf7c9aa2522b-2015-06-15 14:19:31Z-PS" + ], + "User-Agent": [ + "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" + ] + }, + "ResponseBody": "{\r\n \"TasksList\": [\r\n {\r\n \"TaskId\": \"Take Snapshot\",\r\n \"StartTime\": null,\r\n \"EndTime\": null,\r\n \"Duration\": \"00:00:00\",\r\n \"Status\": \"Completed\",\r\n \"ProgressPercentage\": null,\r\n \"InstanceId\": null,\r\n \"Name\": null,\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"TaskId\": \"Transfer data to Backup vault\",\r\n \"StartTime\": null,\r\n \"EndTime\": null,\r\n \"Duration\": \"00:00:00\",\r\n \"Status\": \"Completed\",\r\n \"ProgressPercentage\": null,\r\n \"InstanceId\": null,\r\n \"Name\": null,\r\n \"OperationInProgress\": false\r\n }\r\n ],\r\n \"PropertyBag\": {\r\n \"VM Name\": \"dev01testing\",\r\n \"Backup Size\": \"190 MB\"\r\n },\r\n \"ProgressPercentage\": null,\r\n \"DynamicErrorMessage\": \"The following set of VSS writers failed during snapshot - \",\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Backup\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-14T20:30:06.6397949Z\",\r\n \"EndTimestamp\": \"2015-06-14T20:43:58.7446302Z\",\r\n \"Duration\": \"00:13:52.1048353\",\r\n \"EntityFriendlyName\": \"dev01testing\",\r\n \"ActionsInfo\": [\r\n 1\r\n ],\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"888a659f-04b1-4625-903f-776084d4ab0b\",\r\n \"Name\": \"job_dev01testing_888a659f-04b1-4625-903f-776084d4ab0b\",\r\n \"OperationInProgress\": false\r\n}", + "ResponseHeaders": { + "Content-Length": [ + "971" + ], + "Content-Type": [ + "application/json" + ], + "Expires": [ + "-1" + ], + "Pragma": [ + "no-cache" + ], + "x-ms-request-id": [ + "ae482536-cd7d-48c1-8004-0170566f6e93" + ], + "x-ms-client-request-id": [ + "36570f6b-ddd9-4b1c-afc6-cf7c9aa2522b-2015-06-15 14:19:31Z-PS", + "36570f6b-ddd9-4b1c-afc6-cf7c9aa2522b-2015-06-15 14:19:31Z-PS" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "x-ms-ratelimit-remaining-subscription-reads": [ + "14994" + ], + "x-ms-correlation-request-id": [ + "ae482536-cd7d-48c1-8004-0170566f6e93" + ], + "x-ms-routing-request-id": [ + "CENTRALUS:20150615T141931Z:ae482536-cd7d-48c1-8004-0170566f6e93" + ], + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 15 Jun 2015 14:19:31 GMT" + ], + "Server": [ + "Microsoft-IIS/8.0" + ], + "X-Powered-By": [ + "ASP.NET" + ] + }, + "StatusCode": 200 + }, + { + "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/jobs/3fae8ec8-b35b-4c75-976f-bdfcc66875c6/jobdetails?api-version=2014-09-01", + "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vam9icy8zZmFlOGVjOC1iMzViLTRjNzUtOTc2Zi1iZGZjYzY2ODc1YzYvam9iZGV0YWlscz9hcGktdmVyc2lvbj0yMDE0LTA5LTAx", + "RequestMethod": "GET", + "RequestBody": "", + "RequestHeaders": { + "Accept-Language": [ + "en-us" + ], + "x-ms-client-request-id": [ + "32942996-f18c-420d-af9d-fc706ed2aea4-2015-06-15 14:19:31Z-PS" + ], + "User-Agent": [ + "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" + ] + }, + "ResponseBody": "{\r\n \"TasksList\": [\r\n {\r\n \"TaskId\": \"Take Snapshot\",\r\n \"StartTime\": null,\r\n \"EndTime\": null,\r\n \"Duration\": \"00:00:00\",\r\n \"Status\": \"Completed\",\r\n \"ProgressPercentage\": null,\r\n \"InstanceId\": null,\r\n \"Name\": null,\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"TaskId\": \"Transfer data to Backup vault\",\r\n \"StartTime\": null,\r\n \"EndTime\": null,\r\n \"Duration\": \"00:00:00\",\r\n \"Status\": \"Completed\",\r\n \"ProgressPercentage\": null,\r\n \"InstanceId\": null,\r\n \"Name\": null,\r\n \"OperationInProgress\": false\r\n }\r\n ],\r\n \"PropertyBag\": {\r\n \"VM Name\": \"dev01testing\",\r\n \"Backup Size\": \"29 MB\"\r\n },\r\n \"ProgressPercentage\": null,\r\n \"DynamicErrorMessage\": \"The following set of VSS writers failed during snapshot - \",\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Backup\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-13T20:31:00.1780039Z\",\r\n \"EndTimestamp\": \"2015-06-13T20:45:23.4848097Z\",\r\n \"Duration\": \"00:14:23.3068058\",\r\n \"EntityFriendlyName\": \"dev01testing\",\r\n \"ActionsInfo\": [\r\n 1\r\n ],\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"3fae8ec8-b35b-4c75-976f-bdfcc66875c6\",\r\n \"Name\": \"job_dev01testing_3fae8ec8-b35b-4c75-976f-bdfcc66875c6\",\r\n \"OperationInProgress\": false\r\n}", + "ResponseHeaders": { + "Content-Length": [ + "970" + ], + "Content-Type": [ + "application/json" + ], + "Expires": [ + "-1" + ], + "Pragma": [ + "no-cache" + ], + "x-ms-request-id": [ + "1f969549-7311-4e8e-afc0-0c52907fdb13" + ], + "x-ms-client-request-id": [ + "32942996-f18c-420d-af9d-fc706ed2aea4-2015-06-15 14:19:31Z-PS", + "32942996-f18c-420d-af9d-fc706ed2aea4-2015-06-15 14:19:31Z-PS" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "x-ms-ratelimit-remaining-subscription-reads": [ + "14993" + ], + "x-ms-correlation-request-id": [ + "1f969549-7311-4e8e-afc0-0c52907fdb13" + ], + "x-ms-routing-request-id": [ + "CENTRALUS:20150615T141932Z:1f969549-7311-4e8e-afc0-0c52907fdb13" + ], + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 15 Jun 2015 14:19:31 GMT" + ], + "Server": [ + "Microsoft-IIS/8.0" + ], + "X-Powered-By": [ + "ASP.NET" + ] + }, + "StatusCode": 200 + }, + { + "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/jobs/53b29c0a-88c8-446e-9e58-01dcdf2f315a/jobdetails?api-version=2014-09-01", + "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vam9icy81M2IyOWMwYS04OGM4LTQ0NmUtOWU1OC0wMWRjZGYyZjMxNWEvam9iZGV0YWlscz9hcGktdmVyc2lvbj0yMDE0LTA5LTAx", + "RequestMethod": "GET", + "RequestBody": "", + "RequestHeaders": { + "Accept-Language": [ + "en-us" + ], + "x-ms-client-request-id": [ + "bf048db9-5d50-4187-b93b-285feec8c3c2-2015-06-15 14:19:32Z-PS" + ], + "User-Agent": [ + "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" + ] + }, + "ResponseBody": "{\r\n \"TasksList\": [\r\n {\r\n \"TaskId\": \"Take Snapshot\",\r\n \"StartTime\": null,\r\n \"EndTime\": null,\r\n \"Duration\": \"00:00:00\",\r\n \"Status\": \"Completed\",\r\n \"ProgressPercentage\": null,\r\n \"InstanceId\": null,\r\n \"Name\": null,\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"TaskId\": \"Transfer data to Backup vault\",\r\n \"StartTime\": null,\r\n \"EndTime\": null,\r\n \"Duration\": \"00:00:00\",\r\n \"Status\": \"Completed\",\r\n \"ProgressPercentage\": null,\r\n \"InstanceId\": null,\r\n \"Name\": null,\r\n \"OperationInProgress\": false\r\n }\r\n ],\r\n \"PropertyBag\": {\r\n \"VM Name\": \"dev01testing\",\r\n \"Backup Size\": \"561 MB\"\r\n },\r\n \"ProgressPercentage\": null,\r\n \"DynamicErrorMessage\": \"The following set of VSS writers failed during snapshot - \",\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Backup\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-13T14:42:37.7185258Z\",\r\n \"EndTimestamp\": \"2015-06-13T14:57:39.8014518Z\",\r\n \"Duration\": \"00:15:02.0829260\",\r\n \"EntityFriendlyName\": \"dev01testing\",\r\n \"ActionsInfo\": [\r\n 1\r\n ],\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"53b29c0a-88c8-446e-9e58-01dcdf2f315a\",\r\n \"Name\": \"job_dev01testing_53b29c0a-88c8-446e-9e58-01dcdf2f315a\",\r\n \"OperationInProgress\": false\r\n}", + "ResponseHeaders": { + "Content-Length": [ + "971" + ], + "Content-Type": [ + "application/json" + ], + "Expires": [ + "-1" + ], + "Pragma": [ + "no-cache" + ], + "x-ms-request-id": [ + "548b7c3a-f2c0-4426-8c2d-0586e9248b75" + ], + "x-ms-client-request-id": [ + "bf048db9-5d50-4187-b93b-285feec8c3c2-2015-06-15 14:19:32Z-PS", + "bf048db9-5d50-4187-b93b-285feec8c3c2-2015-06-15 14:19:32Z-PS" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "x-ms-ratelimit-remaining-subscription-reads": [ + "14992" + ], + "x-ms-correlation-request-id": [ + "548b7c3a-f2c0-4426-8c2d-0586e9248b75" + ], + "x-ms-routing-request-id": [ + "CENTRALUS:20150615T141933Z:548b7c3a-f2c0-4426-8c2d-0586e9248b75" + ], + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 15 Jun 2015 14:19:33 GMT" + ], + "Server": [ + "Microsoft-IIS/8.0" + ], + "X-Powered-By": [ + "ASP.NET" + ] + }, + "StatusCode": 200 + }, + { + "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/jobs/d504ecd6-aecc-4c62-85b5-8585e8d7d373/jobdetails?api-version=2014-09-01", + "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vam9icy9kNTA0ZWNkNi1hZWNjLTRjNjItODViNS04NTg1ZThkN2QzNzMvam9iZGV0YWlscz9hcGktdmVyc2lvbj0yMDE0LTA5LTAx", + "RequestMethod": "GET", + "RequestBody": "", + "RequestHeaders": { + "Accept-Language": [ + "en-us" + ], + "x-ms-client-request-id": [ + "2abb6ada-1a48-45b9-960e-22fc7b1d82b5-2015-06-15 14:19:33Z-PS" + ], + "User-Agent": [ + "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" + ] + }, + "ResponseBody": "{\r\n \"TasksList\": [],\r\n \"PropertyBag\": {\r\n \"VM Name\": \"dev01Testing\",\r\n \"Policy Name\": \"DefaultPolicy\"\r\n },\r\n \"ProgressPercentage\": null,\r\n \"DynamicErrorMessage\": null,\r\n \"Type\": \"VM\",\r\n \"Operation\": \"ConfigureBackup\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-13T11:01:10.0627574Z\",\r\n \"EndTimestamp\": \"2015-06-13T11:01:14.2893205Z\",\r\n \"Duration\": \"00:00:04.2265631\",\r\n \"EntityFriendlyName\": \"dev01Testing\",\r\n \"ActionsInfo\": null,\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"d504ecd6-aecc-4c62-85b5-8585e8d7d373\",\r\n \"Name\": \"d504ecd6-aecc-4c62-85b5-8585e8d7d373\",\r\n \"OperationInProgress\": false\r\n}", + "ResponseHeaders": { + "Content-Length": [ + "528" + ], + "Content-Type": [ + "application/json" + ], + "Expires": [ + "-1" + ], + "Pragma": [ + "no-cache" + ], + "x-ms-request-id": [ + "b402e504-c9d3-4059-839d-f51c4091fb4e" + ], + "x-ms-client-request-id": [ + "2abb6ada-1a48-45b9-960e-22fc7b1d82b5-2015-06-15 14:19:33Z-PS", + "2abb6ada-1a48-45b9-960e-22fc7b1d82b5-2015-06-15 14:19:33Z-PS" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "x-ms-ratelimit-remaining-subscription-reads": [ + "14991" + ], + "x-ms-correlation-request-id": [ + "b402e504-c9d3-4059-839d-f51c4091fb4e" + ], + "x-ms-routing-request-id": [ + "CENTRALUS:20150615T141934Z:b402e504-c9d3-4059-839d-f51c4091fb4e" + ], + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 15 Jun 2015 14:19:33 GMT" + ], + "Server": [ + "Microsoft-IIS/8.0" + ], + "X-Powered-By": [ + "ASP.NET" + ] + }, + "StatusCode": 200 + }, + { + "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/jobs/03a7662a-45be-493e-8fea-7ec5bad31f68/jobdetails?api-version=2014-09-01", + "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vam9icy8wM2E3NjYyYS00NWJlLTQ5M2UtOGZlYS03ZWM1YmFkMzFmNjgvam9iZGV0YWlscz9hcGktdmVyc2lvbj0yMDE0LTA5LTAx", + "RequestMethod": "GET", + "RequestBody": "", + "RequestHeaders": { + "Accept-Language": [ + "en-us" + ], + "x-ms-client-request-id": [ + "d71704ad-4f9c-4fdd-be15-9af7ac1d9cca-2015-06-15 14:19:34Z-PS" + ], + "User-Agent": [ + "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" + ] + }, + "ResponseBody": "{\r\n \"TasksList\": [],\r\n \"PropertyBag\": {\r\n \"VM Name\": \"dev01Testing\",\r\n \"Delete Backup Data\": \"False\"\r\n },\r\n \"ProgressPercentage\": null,\r\n \"DynamicErrorMessage\": null,\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Unprotect\",\r\n \"Status\": \"Failed\",\r\n \"StartTimestamp\": \"2015-06-13T10:58:48.9035774Z\",\r\n \"EndTimestamp\": \"2015-06-13T10:58:51.5388817Z\",\r\n \"Duration\": \"00:00:02.6353043\",\r\n \"EntityFriendlyName\": \"dev01Testing\",\r\n \"ActionsInfo\": null,\r\n \"ErrorDetails\": [\r\n {\r\n \"ErrorCode\": 1073871825,\r\n \"ErrorTitle\": \"\",\r\n \"ErrorString\": \"Microsoft Azure Backup encountered an internal error.\",\r\n \"Recommendations\": [\r\n \"Wait for a few minutes and then try the operation again. If the issue persists, contact Microsoft Support.\"\r\n ]\r\n }\r\n ],\r\n \"InstanceId\": \"03a7662a-45be-493e-8fea-7ec5bad31f68\",\r\n \"Name\": \"03a7662a-45be-493e-8fea-7ec5bad31f68\",\r\n \"OperationInProgress\": false\r\n}", + "ResponseHeaders": { + "Content-Length": [ + "755" + ], + "Content-Type": [ + "application/json" + ], + "Expires": [ + "-1" + ], + "Pragma": [ + "no-cache" + ], + "x-ms-request-id": [ + "6beb09a1-b950-4c32-820b-8db7d480da73" + ], + "x-ms-client-request-id": [ + "d71704ad-4f9c-4fdd-be15-9af7ac1d9cca-2015-06-15 14:19:34Z-PS", + "d71704ad-4f9c-4fdd-be15-9af7ac1d9cca-2015-06-15 14:19:34Z-PS" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "x-ms-ratelimit-remaining-subscription-reads": [ + "14990" + ], + "x-ms-correlation-request-id": [ + "6beb09a1-b950-4c32-820b-8db7d480da73" + ], + "x-ms-routing-request-id": [ + "CENTRALUS:20150615T141934Z:6beb09a1-b950-4c32-820b-8db7d480da73" + ], + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 15 Jun 2015 14:19:34 GMT" + ], + "Server": [ + "Microsoft-IIS/8.0" + ], + "X-Powered-By": [ + "ASP.NET" + ] + }, + "StatusCode": 200 + }, + { + "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/jobs/4c932581-f408-4b41-80c1-c29fc15a8d71/jobdetails?api-version=2014-09-01", + "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vam9icy80YzkzMjU4MS1mNDA4LTRiNDEtODBjMS1jMjlmYzE1YThkNzEvam9iZGV0YWlscz9hcGktdmVyc2lvbj0yMDE0LTA5LTAx", + "RequestMethod": "GET", + "RequestBody": "", + "RequestHeaders": { + "Accept-Language": [ + "en-us" + ], + "x-ms-client-request-id": [ + "2b37693d-3338-4837-ba3e-5e7bf3a548d5-2015-06-15 14:19:35Z-PS" + ], + "User-Agent": [ + "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" + ] + }, + "ResponseBody": "{\r\n \"TasksList\": [\r\n {\r\n \"TaskId\": \"Take Snapshot\",\r\n \"StartTime\": null,\r\n \"EndTime\": null,\r\n \"Duration\": \"00:00:00\",\r\n \"Status\": \"Completed\",\r\n \"ProgressPercentage\": null,\r\n \"InstanceId\": null,\r\n \"Name\": null,\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"TaskId\": \"Transfer data to Backup vault\",\r\n \"StartTime\": null,\r\n \"EndTime\": null,\r\n \"Duration\": \"00:00:00\",\r\n \"Status\": \"Completed\",\r\n \"ProgressPercentage\": null,\r\n \"InstanceId\": null,\r\n \"Name\": null,\r\n \"OperationInProgress\": false\r\n }\r\n ],\r\n \"PropertyBag\": {\r\n \"VM Name\": \"dev01testing\",\r\n \"Backup Size\": \"7 MB\"\r\n },\r\n \"ProgressPercentage\": null,\r\n \"DynamicErrorMessage\": \"The following set of VSS writers failed during snapshot - \",\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Backup\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-12T15:30:13.51768Z\",\r\n \"EndTimestamp\": \"2015-06-12T15:44:32.329239Z\",\r\n \"Duration\": \"00:14:18.8115590\",\r\n \"EntityFriendlyName\": \"dev01testing\",\r\n \"ActionsInfo\": [\r\n 1\r\n ],\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"4c932581-f408-4b41-80c1-c29fc15a8d71\",\r\n \"Name\": \"job_dev01testing_4c932581-f408-4b41-80c1-c29fc15a8d71\",\r\n \"OperationInProgress\": false\r\n}", + "ResponseHeaders": { + "Content-Length": [ + "966" + ], + "Content-Type": [ + "application/json" + ], + "Expires": [ + "-1" + ], + "Pragma": [ + "no-cache" + ], + "x-ms-request-id": [ + "60d09e01-ebea-4d07-8cfe-a4a70fc6bf59" + ], + "x-ms-client-request-id": [ + "2b37693d-3338-4837-ba3e-5e7bf3a548d5-2015-06-15 14:19:35Z-PS", + "2b37693d-3338-4837-ba3e-5e7bf3a548d5-2015-06-15 14:19:35Z-PS" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "x-ms-ratelimit-remaining-subscription-reads": [ + "14989" + ], + "x-ms-correlation-request-id": [ + "60d09e01-ebea-4d07-8cfe-a4a70fc6bf59" + ], + "x-ms-routing-request-id": [ + "CENTRALUS:20150615T141935Z:60d09e01-ebea-4d07-8cfe-a4a70fc6bf59" + ], + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 15 Jun 2015 14:19:35 GMT" + ], + "Server": [ + "Microsoft-IIS/8.0" + ], + "X-Powered-By": [ + "ASP.NET" + ] + }, + "StatusCode": 200 + }, + { + "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/jobs/b453f9f7-deea-456e-956a-a0ecbfb2465a/jobdetails?api-version=2014-09-01", + "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vam9icy9iNDUzZjlmNy1kZWVhLTQ1NmUtOTU2YS1hMGVjYmZiMjQ2NWEvam9iZGV0YWlscz9hcGktdmVyc2lvbj0yMDE0LTA5LTAx", + "RequestMethod": "GET", + "RequestBody": "", + "RequestHeaders": { + "Accept-Language": [ + "en-us" + ], + "x-ms-client-request-id": [ + "2f69a2bb-855c-4f09-8a25-9c4eb2858c5a-2015-06-15 14:19:35Z-PS" + ], + "User-Agent": [ + "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" + ] + }, + "ResponseBody": "{\r\n \"TasksList\": [\r\n {\r\n \"TaskId\": \"Take Snapshot\",\r\n \"StartTime\": null,\r\n \"EndTime\": null,\r\n \"Duration\": \"00:00:00\",\r\n \"Status\": \"Completed\",\r\n \"ProgressPercentage\": null,\r\n \"InstanceId\": null,\r\n \"Name\": null,\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"TaskId\": \"Transfer data to Backup vault\",\r\n \"StartTime\": null,\r\n \"EndTime\": null,\r\n \"Duration\": \"00:00:00\",\r\n \"Status\": \"Completed\",\r\n \"ProgressPercentage\": null,\r\n \"InstanceId\": null,\r\n \"Name\": null,\r\n \"OperationInProgress\": false\r\n }\r\n ],\r\n \"PropertyBag\": {\r\n \"VM Name\": \"dev01testing\",\r\n \"Backup Size\": \"6 MB\"\r\n },\r\n \"ProgressPercentage\": null,\r\n \"DynamicErrorMessage\": \"The following set of VSS writers failed during snapshot - \",\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Backup\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-12T14:57:10.3094061Z\",\r\n \"EndTimestamp\": \"2015-06-12T15:11:24.5753982Z\",\r\n \"Duration\": \"00:14:14.2659921\",\r\n \"EntityFriendlyName\": \"dev01testing\",\r\n \"ActionsInfo\": [\r\n 1\r\n ],\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"b453f9f7-deea-456e-956a-a0ecbfb2465a\",\r\n \"Name\": \"job_dev01testing_b453f9f7-deea-456e-956a-a0ecbfb2465a\",\r\n \"OperationInProgress\": false\r\n}", + "ResponseHeaders": { + "Content-Length": [ + "969" + ], + "Content-Type": [ + "application/json" + ], + "Expires": [ + "-1" + ], + "Pragma": [ + "no-cache" + ], + "x-ms-request-id": [ + "c4fc8ecf-63a0-4da7-a7ab-a6dd31a4f90a" + ], + "x-ms-client-request-id": [ + "2f69a2bb-855c-4f09-8a25-9c4eb2858c5a-2015-06-15 14:19:35Z-PS", + "2f69a2bb-855c-4f09-8a25-9c4eb2858c5a-2015-06-15 14:19:35Z-PS" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "x-ms-ratelimit-remaining-subscription-reads": [ + "14988" + ], + "x-ms-correlation-request-id": [ + "c4fc8ecf-63a0-4da7-a7ab-a6dd31a4f90a" + ], + "x-ms-routing-request-id": [ + "CENTRALUS:20150615T141936Z:c4fc8ecf-63a0-4da7-a7ab-a6dd31a4f90a" + ], + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 15 Jun 2015 14:19:35 GMT" + ], + "Server": [ + "Microsoft-IIS/8.0" + ], + "X-Powered-By": [ + "ASP.NET" + ] + }, + "StatusCode": 200 + }, + { + "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/jobs/6123eb41-22cc-4f14-b3b7-ae1caf4281ce/jobdetails?api-version=2014-09-01", + "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vam9icy82MTIzZWI0MS0yMmNjLTRmMTQtYjNiNy1hZTFjYWY0MjgxY2Uvam9iZGV0YWlscz9hcGktdmVyc2lvbj0yMDE0LTA5LTAx", + "RequestMethod": "GET", + "RequestBody": "", + "RequestHeaders": { + "Accept-Language": [ + "en-us" + ], + "x-ms-client-request-id": [ + "d9f9fe4b-d7f6-4dbe-834a-fd9d0ebbebcc-2015-06-15 14:19:36Z-PS" + ], + "User-Agent": [ + "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" + ] + }, + "ResponseBody": "{\r\n \"TasksList\": [\r\n {\r\n \"TaskId\": \"Take Snapshot\",\r\n \"StartTime\": null,\r\n \"EndTime\": null,\r\n \"Duration\": \"00:00:00\",\r\n \"Status\": \"Completed\",\r\n \"ProgressPercentage\": null,\r\n \"InstanceId\": null,\r\n \"Name\": null,\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"TaskId\": \"Transfer data to Backup vault\",\r\n \"StartTime\": null,\r\n \"EndTime\": null,\r\n \"Duration\": \"00:00:00\",\r\n \"Status\": \"Completed\",\r\n \"ProgressPercentage\": null,\r\n \"InstanceId\": null,\r\n \"Name\": null,\r\n \"OperationInProgress\": false\r\n }\r\n ],\r\n \"PropertyBag\": {\r\n \"VM Name\": \"dev01testing\",\r\n \"Backup Size\": \"40 MB\"\r\n },\r\n \"ProgressPercentage\": null,\r\n \"DynamicErrorMessage\": \"The following set of VSS writers failed during snapshot - \",\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Backup\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-12T14:35:25.0178152Z\",\r\n \"EndTimestamp\": \"2015-06-12T14:51:06.0851166Z\",\r\n \"Duration\": \"00:15:41.0673014\",\r\n \"EntityFriendlyName\": \"dev01testing\",\r\n \"ActionsInfo\": [\r\n 1\r\n ],\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"6123eb41-22cc-4f14-b3b7-ae1caf4281ce\",\r\n \"Name\": \"job_dev01testing_6123eb41-22cc-4f14-b3b7-ae1caf4281ce\",\r\n \"OperationInProgress\": false\r\n}", + "ResponseHeaders": { + "Content-Length": [ + "970" + ], + "Content-Type": [ + "application/json" + ], + "Expires": [ + "-1" + ], + "Pragma": [ + "no-cache" + ], + "x-ms-request-id": [ + "b9b14e72-f55f-4bc9-bb95-e0a4cf6fdc00" + ], + "x-ms-client-request-id": [ + "d9f9fe4b-d7f6-4dbe-834a-fd9d0ebbebcc-2015-06-15 14:19:36Z-PS", + "d9f9fe4b-d7f6-4dbe-834a-fd9d0ebbebcc-2015-06-15 14:19:36Z-PS" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "x-ms-ratelimit-remaining-subscription-reads": [ + "14987" + ], + "x-ms-correlation-request-id": [ + "b9b14e72-f55f-4bc9-bb95-e0a4cf6fdc00" + ], + "x-ms-routing-request-id": [ + "CENTRALUS:20150615T141937Z:b9b14e72-f55f-4bc9-bb95-e0a4cf6fdc00" + ], + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 15 Jun 2015 14:19:37 GMT" + ], + "Server": [ + "Microsoft-IIS/8.0" + ], + "X-Powered-By": [ + "ASP.NET" + ] + }, + "StatusCode": 200 + }, + { + "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/jobs/11152897-e262-4eef-9c34-ba621caece73/jobdetails?api-version=2014-09-01", + "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vam9icy8xMTE1Mjg5Ny1lMjYyLTRlZWYtOWMzNC1iYTYyMWNhZWNlNzMvam9iZGV0YWlscz9hcGktdmVyc2lvbj0yMDE0LTA5LTAx", + "RequestMethod": "GET", + "RequestBody": "", + "RequestHeaders": { + "Accept-Language": [ + "en-us" + ], + "x-ms-client-request-id": [ + "e6f95ba1-d13b-4ed6-97eb-b6172f527df2-2015-06-15 14:19:37Z-PS" + ], + "User-Agent": [ + "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" + ] + }, + "ResponseBody": "{\r\n \"TasksList\": [\r\n {\r\n \"TaskId\": \"Take Snapshot\",\r\n \"StartTime\": null,\r\n \"EndTime\": null,\r\n \"Duration\": \"00:00:00\",\r\n \"Status\": \"Failed\",\r\n \"ProgressPercentage\": null,\r\n \"InstanceId\": null,\r\n \"Name\": null,\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"TaskId\": \"Transfer data to Backup vault\",\r\n \"StartTime\": null,\r\n \"EndTime\": null,\r\n \"Duration\": \"00:00:00\",\r\n \"Status\": \"NotStarted\",\r\n \"ProgressPercentage\": null,\r\n \"InstanceId\": null,\r\n \"Name\": null,\r\n \"OperationInProgress\": false\r\n }\r\n ],\r\n \"PropertyBag\": {\r\n \"VM Name\": \"dev01testing\",\r\n \"Backup Size\": \"0 MB\"\r\n },\r\n \"ProgressPercentage\": null,\r\n \"DynamicErrorMessage\": null,\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Backup\",\r\n \"Status\": \"Failed\",\r\n \"StartTimestamp\": \"2015-06-12T06:25:30.8517368Z\",\r\n \"EndTimestamp\": \"2015-06-12T06:25:32.1713123Z\",\r\n \"Duration\": \"00:00:01.3195755\",\r\n \"EntityFriendlyName\": \"dev01testing\",\r\n \"ActionsInfo\": [\r\n 1\r\n ],\r\n \"ErrorDetails\": [\r\n {\r\n \"ErrorCode\": 400001,\r\n \"ErrorTitle\": \"\",\r\n \"ErrorString\": \"Command execution failed.\",\r\n \"Recommendations\": [\r\n \"Another operation is currently in progress on this item. Please wait until the previous operation is completed, and then retry.\"\r\n ]\r\n }\r\n ],\r\n \"InstanceId\": \"11152897-e262-4eef-9c34-ba621caece73\",\r\n \"Name\": \"job_dev01testing_11152897-e262-4eef-9c34-ba621caece73\",\r\n \"OperationInProgress\": false\r\n}", + "ResponseHeaders": { + "Content-Length": [ + "1134" + ], + "Content-Type": [ + "application/json" + ], + "Expires": [ + "-1" + ], + "Pragma": [ + "no-cache" + ], + "x-ms-request-id": [ + "6c3250a3-dd1f-4f15-b157-ab7de3992369" + ], + "x-ms-client-request-id": [ + "e6f95ba1-d13b-4ed6-97eb-b6172f527df2-2015-06-15 14:19:37Z-PS", + "e6f95ba1-d13b-4ed6-97eb-b6172f527df2-2015-06-15 14:19:37Z-PS" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "x-ms-ratelimit-remaining-subscription-reads": [ + "14986" + ], + "x-ms-correlation-request-id": [ + "6c3250a3-dd1f-4f15-b157-ab7de3992369" + ], + "x-ms-routing-request-id": [ + "CENTRALUS:20150615T141938Z:6c3250a3-dd1f-4f15-b157-ab7de3992369" + ], + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 15 Jun 2015 14:19:37 GMT" + ], + "Server": [ + "Microsoft-IIS/8.0" + ], + "X-Powered-By": [ + "ASP.NET" + ] + }, + "StatusCode": 200 + }, + { + "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/jobs/4bf3889d-d689-45ab-aea6-61693bbe4c71/jobdetails?api-version=2014-09-01", + "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vam9icy80YmYzODg5ZC1kNjg5LTQ1YWItYWVhNi02MTY5M2JiZTRjNzEvam9iZGV0YWlscz9hcGktdmVyc2lvbj0yMDE0LTA5LTAx", + "RequestMethod": "GET", + "RequestBody": "", + "RequestHeaders": { + "Accept-Language": [ + "en-us" + ], + "x-ms-client-request-id": [ + "35313f6f-9842-42ed-9332-32712e5b7e4b-2015-06-15 14:19:38Z-PS" + ], + "User-Agent": [ + "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" + ] + }, + "ResponseBody": "{\r\n \"TasksList\": [\r\n {\r\n \"TaskId\": \"Take Snapshot\",\r\n \"StartTime\": null,\r\n \"EndTime\": null,\r\n \"Duration\": \"00:00:00\",\r\n \"Status\": \"Completed\",\r\n \"ProgressPercentage\": null,\r\n \"InstanceId\": null,\r\n \"Name\": null,\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"TaskId\": \"Transfer data to Backup vault\",\r\n \"StartTime\": null,\r\n \"EndTime\": null,\r\n \"Duration\": \"00:00:00\",\r\n \"Status\": \"Completed\",\r\n \"ProgressPercentage\": null,\r\n \"InstanceId\": null,\r\n \"Name\": null,\r\n \"OperationInProgress\": false\r\n }\r\n ],\r\n \"PropertyBag\": {\r\n \"VM Name\": \"dev01testing\",\r\n \"Backup Size\": \"7 MB\"\r\n },\r\n \"ProgressPercentage\": null,\r\n \"DynamicErrorMessage\": \"The following set of VSS writers failed during snapshot - \",\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Backup\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-12T06:23:00.6818602Z\",\r\n \"EndTimestamp\": \"2015-06-12T06:35:58.1602094Z\",\r\n \"Duration\": \"00:12:57.4783492\",\r\n \"EntityFriendlyName\": \"dev01testing\",\r\n \"ActionsInfo\": [\r\n 1\r\n ],\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"4bf3889d-d689-45ab-aea6-61693bbe4c71\",\r\n \"Name\": \"job_dev01testing_4bf3889d-d689-45ab-aea6-61693bbe4c71\",\r\n \"OperationInProgress\": false\r\n}", + "ResponseHeaders": { + "Content-Length": [ + "969" + ], + "Content-Type": [ + "application/json" + ], + "Expires": [ + "-1" + ], + "Pragma": [ + "no-cache" + ], + "x-ms-request-id": [ + "53dea9f5-de9d-41f1-a64a-533572b1d48b" + ], + "x-ms-client-request-id": [ + "35313f6f-9842-42ed-9332-32712e5b7e4b-2015-06-15 14:19:38Z-PS", + "35313f6f-9842-42ed-9332-32712e5b7e4b-2015-06-15 14:19:38Z-PS" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "x-ms-ratelimit-remaining-subscription-reads": [ + "14985" + ], + "x-ms-correlation-request-id": [ + "53dea9f5-de9d-41f1-a64a-533572b1d48b" + ], + "x-ms-routing-request-id": [ + "CENTRALUS:20150615T141938Z:53dea9f5-de9d-41f1-a64a-533572b1d48b" + ], + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 15 Jun 2015 14:19:38 GMT" + ], + "Server": [ + "Microsoft-IIS/8.0" + ], + "X-Powered-By": [ + "ASP.NET" + ] + }, + "StatusCode": 200 + }, + { + "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/jobs/8ec18e26-1b63-4a20-a8c8-c23eb0d54e18/jobdetails?api-version=2014-09-01", + "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vam9icy84ZWMxOGUyNi0xYjYzLTRhMjAtYThjOC1jMjNlYjBkNTRlMTgvam9iZGV0YWlscz9hcGktdmVyc2lvbj0yMDE0LTA5LTAx", + "RequestMethod": "GET", + "RequestBody": "", + "RequestHeaders": { + "Accept-Language": [ + "en-us" + ], + "x-ms-client-request-id": [ + "f772dd69-afe9-4891-ae11-347b2738e6ae-2015-06-15 14:19:39Z-PS" + ], + "User-Agent": [ + "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" + ] + }, + "ResponseBody": "{\r\n \"TasksList\": [\r\n {\r\n \"TaskId\": \"Take Snapshot\",\r\n \"StartTime\": null,\r\n \"EndTime\": null,\r\n \"Duration\": \"00:00:00\",\r\n \"Status\": \"Failed\",\r\n \"ProgressPercentage\": null,\r\n \"InstanceId\": null,\r\n \"Name\": null,\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"TaskId\": \"Transfer data to Backup vault\",\r\n \"StartTime\": null,\r\n \"EndTime\": null,\r\n \"Duration\": \"00:00:00\",\r\n \"Status\": \"NotStarted\",\r\n \"ProgressPercentage\": null,\r\n \"InstanceId\": null,\r\n \"Name\": null,\r\n \"OperationInProgress\": false\r\n }\r\n ],\r\n \"PropertyBag\": {\r\n \"VM Name\": \"dev01testing\",\r\n \"Backup Size\": \"0 MB\"\r\n },\r\n \"ProgressPercentage\": null,\r\n \"DynamicErrorMessage\": null,\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Backup\",\r\n \"Status\": \"Failed\",\r\n \"StartTimestamp\": \"2015-06-12T06:18:48.8101046Z\",\r\n \"EndTimestamp\": \"2015-06-12T06:18:49.974187Z\",\r\n \"Duration\": \"00:00:01.1640824\",\r\n \"EntityFriendlyName\": \"dev01testing\",\r\n \"ActionsInfo\": [\r\n 1\r\n ],\r\n \"ErrorDetails\": [\r\n {\r\n \"ErrorCode\": 400001,\r\n \"ErrorTitle\": \"\",\r\n \"ErrorString\": \"Command execution failed.\",\r\n \"Recommendations\": [\r\n \"Another operation is currently in progress on this item. Please wait until the previous operation is completed, and then retry.\"\r\n ]\r\n }\r\n ],\r\n \"InstanceId\": \"8ec18e26-1b63-4a20-a8c8-c23eb0d54e18\",\r\n \"Name\": \"job_dev01testing_8ec18e26-1b63-4a20-a8c8-c23eb0d54e18\",\r\n \"OperationInProgress\": false\r\n}", + "ResponseHeaders": { + "Content-Length": [ + "1133" + ], + "Content-Type": [ + "application/json" + ], + "Expires": [ + "-1" + ], + "Pragma": [ + "no-cache" + ], + "x-ms-request-id": [ + "ef32d096-338f-4733-94c6-109a5d9b7c26" + ], + "x-ms-client-request-id": [ + "f772dd69-afe9-4891-ae11-347b2738e6ae-2015-06-15 14:19:39Z-PS", + "f772dd69-afe9-4891-ae11-347b2738e6ae-2015-06-15 14:19:39Z-PS" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "x-ms-ratelimit-remaining-subscription-reads": [ + "14984" + ], + "x-ms-correlation-request-id": [ + "ef32d096-338f-4733-94c6-109a5d9b7c26" + ], + "x-ms-routing-request-id": [ + "CENTRALUS:20150615T141939Z:ef32d096-338f-4733-94c6-109a5d9b7c26" + ], + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 15 Jun 2015 14:19:38 GMT" + ], + "Server": [ + "Microsoft-IIS/8.0" + ], + "X-Powered-By": [ + "ASP.NET" + ] + }, + "StatusCode": 200 + }, + { + "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/jobs/5cbd05f3-2461-44eb-a09d-69276e96406a/jobdetails?api-version=2014-09-01", + "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vam9icy81Y2JkMDVmMy0yNDYxLTQ0ZWItYTA5ZC02OTI3NmU5NjQwNmEvam9iZGV0YWlscz9hcGktdmVyc2lvbj0yMDE0LTA5LTAx", + "RequestMethod": "GET", + "RequestBody": "", + "RequestHeaders": { + "Accept-Language": [ + "en-us" + ], + "x-ms-client-request-id": [ + "48a1f7ae-39ac-48bd-aa8f-041104df43c5-2015-06-15 14:19:39Z-PS" + ], + "User-Agent": [ + "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" + ] + }, + "ResponseBody": "{\r\n \"TasksList\": [],\r\n \"PropertyBag\": {\r\n \"VM Name\": \"dev01Testing\",\r\n \"Policy Name\": \"DefaultPolicy\"\r\n },\r\n \"ProgressPercentage\": null,\r\n \"DynamicErrorMessage\": null,\r\n \"Type\": \"VM\",\r\n \"Operation\": \"ConfigureBackup\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-12T06:17:57.3610501Z\",\r\n \"EndTimestamp\": \"2015-06-12T06:18:00.4221104Z\",\r\n \"Duration\": \"00:00:03.0610603\",\r\n \"EntityFriendlyName\": \"dev01Testing\",\r\n \"ActionsInfo\": null,\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"5cbd05f3-2461-44eb-a09d-69276e96406a\",\r\n \"Name\": \"5cbd05f3-2461-44eb-a09d-69276e96406a\",\r\n \"OperationInProgress\": false\r\n}", + "ResponseHeaders": { + "Content-Length": [ + "528" + ], + "Content-Type": [ + "application/json" + ], + "Expires": [ + "-1" + ], + "Pragma": [ + "no-cache" + ], + "x-ms-request-id": [ + "6d3e7768-4ee6-4950-b7a2-dd4b5bed475d" + ], + "x-ms-client-request-id": [ + "48a1f7ae-39ac-48bd-aa8f-041104df43c5-2015-06-15 14:19:39Z-PS", + "48a1f7ae-39ac-48bd-aa8f-041104df43c5-2015-06-15 14:19:39Z-PS" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "x-ms-ratelimit-remaining-subscription-reads": [ + "14983" + ], + "x-ms-correlation-request-id": [ + "6d3e7768-4ee6-4950-b7a2-dd4b5bed475d" + ], + "x-ms-routing-request-id": [ + "CENTRALUS:20150615T141940Z:6d3e7768-4ee6-4950-b7a2-dd4b5bed475d" + ], + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 15 Jun 2015 14:19:40 GMT" + ], + "Server": [ + "Microsoft-IIS/8.0" + ], + "X-Powered-By": [ + "ASP.NET" + ] + }, + "StatusCode": 200 + }, + { + "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/jobs/6d7f50ad-47de-4ac6-986c-7a1d3dddb04e/jobdetails?api-version=2014-09-01", + "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vam9icy82ZDdmNTBhZC00N2RlLTRhYzYtOTg2Yy03YTFkM2RkZGIwNGUvam9iZGV0YWlscz9hcGktdmVyc2lvbj0yMDE0LTA5LTAx", + "RequestMethod": "GET", + "RequestBody": "", + "RequestHeaders": { + "Accept-Language": [ + "en-us" + ], + "x-ms-client-request-id": [ + "574a048c-6bb5-4da0-ac85-e3c973d2c580-2015-06-15 14:19:40Z-PS" + ], + "User-Agent": [ + "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" + ] + }, + "ResponseBody": "{\r\n \"TasksList\": [\r\n {\r\n \"TaskId\": \"Take Snapshot\",\r\n \"StartTime\": null,\r\n \"EndTime\": null,\r\n \"Duration\": \"00:00:00\",\r\n \"Status\": \"Completed\",\r\n \"ProgressPercentage\": null,\r\n \"InstanceId\": null,\r\n \"Name\": null,\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"TaskId\": \"Transfer data to Backup vault\",\r\n \"StartTime\": null,\r\n \"EndTime\": null,\r\n \"Duration\": \"00:00:00\",\r\n \"Status\": \"Completed\",\r\n \"ProgressPercentage\": null,\r\n \"InstanceId\": null,\r\n \"Name\": null,\r\n \"OperationInProgress\": false\r\n }\r\n ],\r\n \"PropertyBag\": {\r\n \"VM Name\": \"dev01testing\",\r\n \"Backup Size\": \"9 MB\"\r\n },\r\n \"ProgressPercentage\": null,\r\n \"DynamicErrorMessage\": \"The following set of VSS writers failed during snapshot - \",\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Backup\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-12T06:04:16.0408261Z\",\r\n \"EndTimestamp\": \"2015-06-12T06:20:47.6056381Z\",\r\n \"Duration\": \"00:16:31.5648120\",\r\n \"EntityFriendlyName\": \"dev01testing\",\r\n \"ActionsInfo\": [\r\n 1\r\n ],\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"6d7f50ad-47de-4ac6-986c-7a1d3dddb04e\",\r\n \"Name\": \"job_dev01testing_6d7f50ad-47de-4ac6-986c-7a1d3dddb04e\",\r\n \"OperationInProgress\": false\r\n}", + "ResponseHeaders": { + "Content-Length": [ + "969" + ], + "Content-Type": [ + "application/json" + ], + "Expires": [ + "-1" + ], + "Pragma": [ + "no-cache" + ], + "x-ms-request-id": [ + "256ab39c-e426-4ffa-b342-8b955b0b5e73" + ], + "x-ms-client-request-id": [ + "574a048c-6bb5-4da0-ac85-e3c973d2c580-2015-06-15 14:19:40Z-PS", + "574a048c-6bb5-4da0-ac85-e3c973d2c580-2015-06-15 14:19:40Z-PS" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "x-ms-ratelimit-remaining-subscription-reads": [ + "14982" + ], + "x-ms-correlation-request-id": [ + "256ab39c-e426-4ffa-b342-8b955b0b5e73" + ], + "x-ms-routing-request-id": [ + "CENTRALUS:20150615T141941Z:256ab39c-e426-4ffa-b342-8b955b0b5e73" + ], + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 15 Jun 2015 14:19:40 GMT" + ], + "Server": [ + "Microsoft-IIS/8.0" + ], + "X-Powered-By": [ + "ASP.NET" + ] + }, + "StatusCode": 200 + }, + { + "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/jobs/8895837a-24f9-4f8e-bdfd-b4fe9cb34b18/jobdetails?api-version=2014-09-01", + "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vam9icy84ODk1ODM3YS0yNGY5LTRmOGUtYmRmZC1iNGZlOWNiMzRiMTgvam9iZGV0YWlscz9hcGktdmVyc2lvbj0yMDE0LTA5LTAx", + "RequestMethod": "GET", + "RequestBody": "", + "RequestHeaders": { + "Accept-Language": [ + "en-us" + ], + "x-ms-client-request-id": [ + "ccf02017-1eeb-4a8a-80f8-363fd990960f-2015-06-15 14:19:41Z-PS" + ], + "User-Agent": [ + "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" + ] + }, + "ResponseBody": "{\r\n \"TasksList\": [],\r\n \"PropertyBag\": {\r\n \"VM Name\": \"dev01Testing\",\r\n \"Delete Backup Data\": \"False\"\r\n },\r\n \"ProgressPercentage\": null,\r\n \"DynamicErrorMessage\": null,\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Unprotect\",\r\n \"Status\": \"Failed\",\r\n \"StartTimestamp\": \"2015-06-12T06:00:56.3011566Z\",\r\n \"EndTimestamp\": \"2015-06-12T06:00:59.2507661Z\",\r\n \"Duration\": \"00:00:02.9496095\",\r\n \"EntityFriendlyName\": \"dev01Testing\",\r\n \"ActionsInfo\": null,\r\n \"ErrorDetails\": [\r\n {\r\n \"ErrorCode\": 1073871825,\r\n \"ErrorTitle\": \"\",\r\n \"ErrorString\": \"Microsoft Azure Backup encountered an internal error.\",\r\n \"Recommendations\": [\r\n \"Wait for a few minutes and then try the operation again. If the issue persists, contact Microsoft Support.\"\r\n ]\r\n }\r\n ],\r\n \"InstanceId\": \"8895837a-24f9-4f8e-bdfd-b4fe9cb34b18\",\r\n \"Name\": \"8895837a-24f9-4f8e-bdfd-b4fe9cb34b18\",\r\n \"OperationInProgress\": false\r\n}", + "ResponseHeaders": { + "Content-Length": [ + "755" + ], + "Content-Type": [ + "application/json" + ], + "Expires": [ + "-1" + ], + "Pragma": [ + "no-cache" + ], + "x-ms-request-id": [ + "289c1138-5534-43f3-a50b-d1a1cb923d58" + ], + "x-ms-client-request-id": [ + "ccf02017-1eeb-4a8a-80f8-363fd990960f-2015-06-15 14:19:41Z-PS", + "ccf02017-1eeb-4a8a-80f8-363fd990960f-2015-06-15 14:19:41Z-PS" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "x-ms-ratelimit-remaining-subscription-reads": [ + "14981" + ], + "x-ms-correlation-request-id": [ + "289c1138-5534-43f3-a50b-d1a1cb923d58" + ], + "x-ms-routing-request-id": [ + "CENTRALUS:20150615T141942Z:289c1138-5534-43f3-a50b-d1a1cb923d58" + ], + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 15 Jun 2015 14:19:41 GMT" + ], + "Server": [ + "Microsoft-IIS/8.0" + ], + "X-Powered-By": [ + "ASP.NET" + ] + }, + "StatusCode": 200 + }, + { + "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/jobs/ff7a8b35-2e59-4ae1-b651-1964ac2b8b2e/jobdetails?api-version=2014-09-01", + "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vam9icy9mZjdhOGIzNS0yZTU5LTRhZTEtYjY1MS0xOTY0YWMyYjhiMmUvam9iZGV0YWlscz9hcGktdmVyc2lvbj0yMDE0LTA5LTAx", + "RequestMethod": "GET", + "RequestBody": "", + "RequestHeaders": { + "Accept-Language": [ + "en-us" + ], + "x-ms-client-request-id": [ + "7135c3d5-f610-4354-8999-d3f91f26217d-2015-06-15 14:19:42Z-PS" + ], + "User-Agent": [ + "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" + ] + }, + "ResponseBody": "{\r\n \"TasksList\": [\r\n {\r\n \"TaskId\": \"Take Snapshot\",\r\n \"StartTime\": null,\r\n \"EndTime\": null,\r\n \"Duration\": \"00:00:00\",\r\n \"Status\": \"Failed\",\r\n \"ProgressPercentage\": null,\r\n \"InstanceId\": null,\r\n \"Name\": null,\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"TaskId\": \"Transfer data to Backup vault\",\r\n \"StartTime\": null,\r\n \"EndTime\": null,\r\n \"Duration\": \"00:00:00\",\r\n \"Status\": \"NotStarted\",\r\n \"ProgressPercentage\": null,\r\n \"InstanceId\": null,\r\n \"Name\": null,\r\n \"OperationInProgress\": false\r\n }\r\n ],\r\n \"PropertyBag\": {\r\n \"VM Name\": \"dev01testing\",\r\n \"Backup Size\": \"0 MB\"\r\n },\r\n \"ProgressPercentage\": null,\r\n \"DynamicErrorMessage\": null,\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Backup\",\r\n \"Status\": \"Failed\",\r\n \"StartTimestamp\": \"2015-06-12T05:55:13.8165598Z\",\r\n \"EndTimestamp\": \"2015-06-12T05:55:14.4292176Z\",\r\n \"Duration\": \"00:00:00.6126578\",\r\n \"EntityFriendlyName\": \"dev01testing\",\r\n \"ActionsInfo\": [\r\n 1\r\n ],\r\n \"ErrorDetails\": [\r\n {\r\n \"ErrorCode\": 400001,\r\n \"ErrorTitle\": \"\",\r\n \"ErrorString\": \"Command execution failed.\",\r\n \"Recommendations\": [\r\n \"Another operation is currently in progress on this item. Please wait until the previous operation is completed, and then retry.\"\r\n ]\r\n }\r\n ],\r\n \"InstanceId\": \"ff7a8b35-2e59-4ae1-b651-1964ac2b8b2e\",\r\n \"Name\": \"job_dev01testing_ff7a8b35-2e59-4ae1-b651-1964ac2b8b2e\",\r\n \"OperationInProgress\": false\r\n}", + "ResponseHeaders": { + "Content-Length": [ + "1134" + ], + "Content-Type": [ + "application/json" + ], + "Expires": [ + "-1" + ], + "Pragma": [ + "no-cache" + ], + "x-ms-request-id": [ + "5facc606-050e-432d-a7d0-465afc765a95" + ], + "x-ms-client-request-id": [ + "7135c3d5-f610-4354-8999-d3f91f26217d-2015-06-15 14:19:42Z-PS", + "7135c3d5-f610-4354-8999-d3f91f26217d-2015-06-15 14:19:42Z-PS" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "x-ms-ratelimit-remaining-subscription-reads": [ + "14980" + ], + "x-ms-correlation-request-id": [ + "5facc606-050e-432d-a7d0-465afc765a95" + ], + "x-ms-routing-request-id": [ + "CENTRALUS:20150615T141942Z:5facc606-050e-432d-a7d0-465afc765a95" + ], + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 15 Jun 2015 14:19:42 GMT" + ], + "Server": [ + "Microsoft-IIS/8.0" + ], + "X-Powered-By": [ + "ASP.NET" + ] + }, + "StatusCode": 200 + }, + { + "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/jobs/c018eb3b-0ac8-4ce7-818f-317f9497c39d/jobdetails?api-version=2014-09-01", + "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vam9icy9jMDE4ZWIzYi0wYWM4LTRjZTctODE4Zi0zMTdmOTQ5N2MzOWQvam9iZGV0YWlscz9hcGktdmVyc2lvbj0yMDE0LTA5LTAx", + "RequestMethod": "GET", + "RequestBody": "", + "RequestHeaders": { + "Accept-Language": [ + "en-us" + ], + "x-ms-client-request-id": [ + "e816cdf9-8bec-4319-9eab-1f04d2f704f3-2015-06-15 14:19:43Z-PS" + ], + "User-Agent": [ + "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" + ] + }, + "ResponseBody": "{\r\n \"TasksList\": [\r\n {\r\n \"TaskId\": \"Take Snapshot\",\r\n \"StartTime\": null,\r\n \"EndTime\": null,\r\n \"Duration\": \"00:00:00\",\r\n \"Status\": \"Failed\",\r\n \"ProgressPercentage\": null,\r\n \"InstanceId\": null,\r\n \"Name\": null,\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"TaskId\": \"Transfer data to Backup vault\",\r\n \"StartTime\": null,\r\n \"EndTime\": null,\r\n \"Duration\": \"00:00:00\",\r\n \"Status\": \"NotStarted\",\r\n \"ProgressPercentage\": null,\r\n \"InstanceId\": null,\r\n \"Name\": null,\r\n \"OperationInProgress\": false\r\n }\r\n ],\r\n \"PropertyBag\": {\r\n \"VM Name\": \"dev01testing\",\r\n \"Backup Size\": \"0 MB\"\r\n },\r\n \"ProgressPercentage\": null,\r\n \"DynamicErrorMessage\": null,\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Backup\",\r\n \"Status\": \"Failed\",\r\n \"StartTimestamp\": \"2015-06-12T05:52:27.5199152Z\",\r\n \"EndTimestamp\": \"2015-06-12T05:52:27.8532247Z\",\r\n \"Duration\": \"00:00:00.3333095\",\r\n \"EntityFriendlyName\": \"dev01testing\",\r\n \"ActionsInfo\": [\r\n 1\r\n ],\r\n \"ErrorDetails\": [\r\n {\r\n \"ErrorCode\": 400001,\r\n \"ErrorTitle\": \"\",\r\n \"ErrorString\": \"Command execution failed.\",\r\n \"Recommendations\": [\r\n \"Another operation is currently in progress on this item. Please wait until the previous operation is completed, and then retry.\"\r\n ]\r\n }\r\n ],\r\n \"InstanceId\": \"c018eb3b-0ac8-4ce7-818f-317f9497c39d\",\r\n \"Name\": \"job_dev01testing_c018eb3b-0ac8-4ce7-818f-317f9497c39d\",\r\n \"OperationInProgress\": false\r\n}", + "ResponseHeaders": { + "Content-Length": [ + "1134" + ], + "Content-Type": [ + "application/json" + ], + "Expires": [ + "-1" + ], + "Pragma": [ + "no-cache" + ], + "x-ms-request-id": [ + "cd3cb2dd-1786-4c95-955f-f9a59f0526c5" + ], + "x-ms-client-request-id": [ + "e816cdf9-8bec-4319-9eab-1f04d2f704f3-2015-06-15 14:19:43Z-PS", + "e816cdf9-8bec-4319-9eab-1f04d2f704f3-2015-06-15 14:19:43Z-PS" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "x-ms-ratelimit-remaining-subscription-reads": [ + "14979" + ], + "x-ms-correlation-request-id": [ + "cd3cb2dd-1786-4c95-955f-f9a59f0526c5" + ], + "x-ms-routing-request-id": [ + "CENTRALUS:20150615T141943Z:cd3cb2dd-1786-4c95-955f-f9a59f0526c5" + ], + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 15 Jun 2015 14:19:42 GMT" + ], + "Server": [ + "Microsoft-IIS/8.0" + ], + "X-Powered-By": [ + "ASP.NET" + ] + }, + "StatusCode": 200 + }, + { + "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/jobs/9dcf0b48-c568-466f-8349-972489591bd0/jobdetails?api-version=2014-09-01", + "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vam9icy85ZGNmMGI0OC1jNTY4LTQ2NmYtODM0OS05NzI0ODk1OTFiZDAvam9iZGV0YWlscz9hcGktdmVyc2lvbj0yMDE0LTA5LTAx", + "RequestMethod": "GET", + "RequestBody": "", + "RequestHeaders": { + "Accept-Language": [ + "en-us" + ], + "x-ms-client-request-id": [ + "c95d562d-1753-46e5-83de-814d2db4c989-2015-06-15 14:19:43Z-PS" + ], + "User-Agent": [ + "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" + ] + }, + "ResponseBody": "{\r\n \"TasksList\": [\r\n {\r\n \"TaskId\": \"Take Snapshot\",\r\n \"StartTime\": null,\r\n \"EndTime\": null,\r\n \"Duration\": \"00:00:00\",\r\n \"Status\": \"Failed\",\r\n \"ProgressPercentage\": null,\r\n \"InstanceId\": null,\r\n \"Name\": null,\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"TaskId\": \"Transfer data to Backup vault\",\r\n \"StartTime\": null,\r\n \"EndTime\": null,\r\n \"Duration\": \"00:00:00\",\r\n \"Status\": \"NotStarted\",\r\n \"ProgressPercentage\": null,\r\n \"InstanceId\": null,\r\n \"Name\": null,\r\n \"OperationInProgress\": false\r\n }\r\n ],\r\n \"PropertyBag\": {\r\n \"VM Name\": \"dev01testing\",\r\n \"Backup Size\": \"0 MB\"\r\n },\r\n \"ProgressPercentage\": null,\r\n \"DynamicErrorMessage\": null,\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Backup\",\r\n \"Status\": \"Failed\",\r\n \"StartTimestamp\": \"2015-06-12T05:49:41.2528257Z\",\r\n \"EndTimestamp\": \"2015-06-12T05:49:42.0260934Z\",\r\n \"Duration\": \"00:00:00.7732677\",\r\n \"EntityFriendlyName\": \"dev01testing\",\r\n \"ActionsInfo\": [\r\n 1\r\n ],\r\n \"ErrorDetails\": [\r\n {\r\n \"ErrorCode\": 400001,\r\n \"ErrorTitle\": \"\",\r\n \"ErrorString\": \"Command execution failed.\",\r\n \"Recommendations\": [\r\n \"Another operation is currently in progress on this item. Please wait until the previous operation is completed, and then retry.\"\r\n ]\r\n }\r\n ],\r\n \"InstanceId\": \"9dcf0b48-c568-466f-8349-972489591bd0\",\r\n \"Name\": \"job_dev01testing_9dcf0b48-c568-466f-8349-972489591bd0\",\r\n \"OperationInProgress\": false\r\n}", + "ResponseHeaders": { + "Content-Length": [ + "1134" + ], + "Content-Type": [ + "application/json" + ], + "Expires": [ + "-1" + ], + "Pragma": [ + "no-cache" + ], + "x-ms-request-id": [ + "e75999e7-bab2-40fc-b435-a9e5f2f41d7a" + ], + "x-ms-client-request-id": [ + "c95d562d-1753-46e5-83de-814d2db4c989-2015-06-15 14:19:43Z-PS", + "c95d562d-1753-46e5-83de-814d2db4c989-2015-06-15 14:19:43Z-PS" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "x-ms-ratelimit-remaining-subscription-reads": [ + "14978" + ], + "x-ms-correlation-request-id": [ + "e75999e7-bab2-40fc-b435-a9e5f2f41d7a" + ], + "x-ms-routing-request-id": [ + "CENTRALUS:20150615T141944Z:e75999e7-bab2-40fc-b435-a9e5f2f41d7a" + ], + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 15 Jun 2015 14:19:44 GMT" + ], + "Server": [ + "Microsoft-IIS/8.0" + ], + "X-Powered-By": [ + "ASP.NET" + ] + }, + "StatusCode": 200 + }, + { + "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/jobs/f971ef4c-15b0-40e2-baf2-8fafa209ff4f/jobdetails?api-version=2014-09-01", + "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vam9icy9mOTcxZWY0Yy0xNWIwLTQwZTItYmFmMi04ZmFmYTIwOWZmNGYvam9iZGV0YWlscz9hcGktdmVyc2lvbj0yMDE0LTA5LTAx", + "RequestMethod": "GET", + "RequestBody": "", + "RequestHeaders": { + "Accept-Language": [ + "en-us" + ], + "x-ms-client-request-id": [ + "05a3288a-aeda-4305-a958-6f979eb49ac8-2015-06-15 14:19:44Z-PS" + ], + "User-Agent": [ + "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" + ] + }, + "ResponseBody": "{\r\n \"TasksList\": [\r\n {\r\n \"TaskId\": \"Take Snapshot\",\r\n \"StartTime\": null,\r\n \"EndTime\": null,\r\n \"Duration\": \"00:00:00\",\r\n \"Status\": \"Completed\",\r\n \"ProgressPercentage\": null,\r\n \"InstanceId\": null,\r\n \"Name\": null,\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"TaskId\": \"Transfer data to Backup vault\",\r\n \"StartTime\": null,\r\n \"EndTime\": null,\r\n \"Duration\": \"00:00:00\",\r\n \"Status\": \"Completed\",\r\n \"ProgressPercentage\": null,\r\n \"InstanceId\": null,\r\n \"Name\": null,\r\n \"OperationInProgress\": false\r\n }\r\n ],\r\n \"PropertyBag\": {\r\n \"VM Name\": \"dev01testing\",\r\n \"Backup Size\": \"7 MB\"\r\n },\r\n \"ProgressPercentage\": null,\r\n \"DynamicErrorMessage\": \"The following set of VSS writers failed during snapshot - \",\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Backup\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-12T05:48:05.5977628Z\",\r\n \"EndTimestamp\": \"2015-06-12T06:03:53.0005467Z\",\r\n \"Duration\": \"00:15:47.4027839\",\r\n \"EntityFriendlyName\": \"dev01testing\",\r\n \"ActionsInfo\": [\r\n 1\r\n ],\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"f971ef4c-15b0-40e2-baf2-8fafa209ff4f\",\r\n \"Name\": \"job_dev01testing_f971ef4c-15b0-40e2-baf2-8fafa209ff4f\",\r\n \"OperationInProgress\": false\r\n}", + "ResponseHeaders": { + "Content-Length": [ + "969" + ], + "Content-Type": [ + "application/json" + ], + "Expires": [ + "-1" + ], + "Pragma": [ + "no-cache" + ], + "x-ms-request-id": [ + "9dabcf8d-76b5-49bb-965e-842827e6656a" + ], + "x-ms-client-request-id": [ + "05a3288a-aeda-4305-a958-6f979eb49ac8-2015-06-15 14:19:44Z-PS", + "05a3288a-aeda-4305-a958-6f979eb49ac8-2015-06-15 14:19:44Z-PS" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "x-ms-ratelimit-remaining-subscription-reads": [ + "14977" + ], + "x-ms-correlation-request-id": [ + "9dabcf8d-76b5-49bb-965e-842827e6656a" + ], + "x-ms-routing-request-id": [ + "CENTRALUS:20150615T141945Z:9dabcf8d-76b5-49bb-965e-842827e6656a" + ], + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 15 Jun 2015 14:19:44 GMT" + ], + "Server": [ + "Microsoft-IIS/8.0" + ], + "X-Powered-By": [ + "ASP.NET" + ] + }, + "StatusCode": 200 + }, + { + "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/jobs/d3138b4d-abc3-4ff1-924d-55f6d2b8f56b/jobdetails?api-version=2014-09-01", + "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vam9icy9kMzEzOGI0ZC1hYmMzLTRmZjEtOTI0ZC01NWY2ZDJiOGY1NmIvam9iZGV0YWlscz9hcGktdmVyc2lvbj0yMDE0LTA5LTAx", + "RequestMethod": "GET", + "RequestBody": "", + "RequestHeaders": { + "Accept-Language": [ + "en-us" + ], + "x-ms-client-request-id": [ + "73fcf73b-f997-44b2-af47-d848b05b3a6f-2015-06-15 14:19:45Z-PS" + ], + "User-Agent": [ + "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" + ] + }, + "ResponseBody": "{\r\n \"TasksList\": [\r\n {\r\n \"TaskId\": \"Take Snapshot\",\r\n \"StartTime\": null,\r\n \"EndTime\": null,\r\n \"Duration\": \"00:00:00\",\r\n \"Status\": \"Failed\",\r\n \"ProgressPercentage\": null,\r\n \"InstanceId\": null,\r\n \"Name\": null,\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"TaskId\": \"Transfer data to Backup vault\",\r\n \"StartTime\": null,\r\n \"EndTime\": null,\r\n \"Duration\": \"00:00:00\",\r\n \"Status\": \"NotStarted\",\r\n \"ProgressPercentage\": null,\r\n \"InstanceId\": null,\r\n \"Name\": null,\r\n \"OperationInProgress\": false\r\n }\r\n ],\r\n \"PropertyBag\": {\r\n \"VM Name\": \"dev01testing\",\r\n \"Backup Size\": \"0 MB\"\r\n },\r\n \"ProgressPercentage\": null,\r\n \"DynamicErrorMessage\": null,\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Backup\",\r\n \"Status\": \"Failed\",\r\n \"StartTimestamp\": \"2015-06-12T05:33:10.1328152Z\",\r\n \"EndTimestamp\": \"2015-06-12T05:33:10.3967166Z\",\r\n \"Duration\": \"00:00:00.2639014\",\r\n \"EntityFriendlyName\": \"dev01testing\",\r\n \"ActionsInfo\": [\r\n 1\r\n ],\r\n \"ErrorDetails\": [\r\n {\r\n \"ErrorCode\": 400001,\r\n \"ErrorTitle\": \"\",\r\n \"ErrorString\": \"Command execution failed.\",\r\n \"Recommendations\": [\r\n \"Another operation is currently in progress on this item. Please wait until the previous operation is completed, and then retry.\"\r\n ]\r\n }\r\n ],\r\n \"InstanceId\": \"d3138b4d-abc3-4ff1-924d-55f6d2b8f56b\",\r\n \"Name\": \"job_dev01testing_d3138b4d-abc3-4ff1-924d-55f6d2b8f56b\",\r\n \"OperationInProgress\": false\r\n}", + "ResponseHeaders": { + "Content-Length": [ + "1134" + ], + "Content-Type": [ + "application/json" + ], + "Expires": [ + "-1" + ], + "Pragma": [ + "no-cache" + ], + "x-ms-request-id": [ + "60db897b-e1a1-4f86-b877-561b9b396629" + ], + "x-ms-client-request-id": [ + "73fcf73b-f997-44b2-af47-d848b05b3a6f-2015-06-15 14:19:45Z-PS", + "73fcf73b-f997-44b2-af47-d848b05b3a6f-2015-06-15 14:19:45Z-PS" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "x-ms-ratelimit-remaining-subscription-reads": [ + "14976" + ], + "x-ms-correlation-request-id": [ + "60db897b-e1a1-4f86-b877-561b9b396629" + ], + "x-ms-routing-request-id": [ + "CENTRALUS:20150615T141946Z:60db897b-e1a1-4f86-b877-561b9b396629" + ], + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 15 Jun 2015 14:19:45 GMT" + ], + "Server": [ + "Microsoft-IIS/8.0" + ], + "X-Powered-By": [ + "ASP.NET" + ] + }, + "StatusCode": 200 + }, + { + "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/jobs/f0171b4a-9c09-4771-bf94-3590a65c27ce/jobdetails?api-version=2014-09-01", + "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vam9icy9mMDE3MWI0YS05YzA5LTQ3NzEtYmY5NC0zNTkwYTY1YzI3Y2Uvam9iZGV0YWlscz9hcGktdmVyc2lvbj0yMDE0LTA5LTAx", + "RequestMethod": "GET", + "RequestBody": "", + "RequestHeaders": { + "Accept-Language": [ + "en-us" + ], + "x-ms-client-request-id": [ + "841e0c1b-5f9c-4b52-8e91-0a2d830fa2fa-2015-06-15 14:19:46Z-PS" + ], + "User-Agent": [ + "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" + ] + }, + "ResponseBody": "{\r\n \"TasksList\": [\r\n {\r\n \"TaskId\": \"Take Snapshot\",\r\n \"StartTime\": null,\r\n \"EndTime\": null,\r\n \"Duration\": \"00:00:00\",\r\n \"Status\": \"Completed\",\r\n \"ProgressPercentage\": null,\r\n \"InstanceId\": null,\r\n \"Name\": null,\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"TaskId\": \"Transfer data to Backup vault\",\r\n \"StartTime\": null,\r\n \"EndTime\": null,\r\n \"Duration\": \"00:00:00\",\r\n \"Status\": \"Cancelled\",\r\n \"ProgressPercentage\": null,\r\n \"InstanceId\": null,\r\n \"Name\": null,\r\n \"OperationInProgress\": false\r\n }\r\n ],\r\n \"PropertyBag\": {\r\n \"VM Name\": \"dev01testing\",\r\n \"Backup Size\": \"0 MB\"\r\n },\r\n \"ProgressPercentage\": null,\r\n \"DynamicErrorMessage\": \"The following set of VSS writers failed during snapshot - \",\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Backup\",\r\n \"Status\": \"Cancelled\",\r\n \"StartTimestamp\": \"2015-06-12T05:31:10.6490225Z\",\r\n \"EndTimestamp\": \"2015-06-12T05:45:19.308969Z\",\r\n \"Duration\": \"00:14:08.6599465\",\r\n \"EntityFriendlyName\": \"dev01testing\",\r\n \"ActionsInfo\": [\r\n 1\r\n ],\r\n \"ErrorDetails\": [\r\n {\r\n \"ErrorCode\": 400057,\r\n \"ErrorTitle\": \"\",\r\n \"ErrorString\": \"Job is successfully cancelled.\",\r\n \"Recommendations\": []\r\n }\r\n ],\r\n \"InstanceId\": \"f0171b4a-9c09-4771-bf94-3590a65c27ce\",\r\n \"Name\": \"job_dev01testing_f0171b4a-9c09-4771-bf94-3590a65c27ce\",\r\n \"OperationInProgress\": false\r\n}", + "ResponseHeaders": { + "Content-Length": [ + "1070" + ], + "Content-Type": [ + "application/json" + ], + "Expires": [ + "-1" + ], + "Pragma": [ + "no-cache" + ], + "x-ms-request-id": [ + "96305e1e-8bdd-4c7a-b340-09842cea4515" + ], + "x-ms-client-request-id": [ + "841e0c1b-5f9c-4b52-8e91-0a2d830fa2fa-2015-06-15 14:19:46Z-PS", + "841e0c1b-5f9c-4b52-8e91-0a2d830fa2fa-2015-06-15 14:19:46Z-PS" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "x-ms-ratelimit-remaining-subscription-reads": [ + "14975" + ], + "x-ms-correlation-request-id": [ + "96305e1e-8bdd-4c7a-b340-09842cea4515" + ], + "x-ms-routing-request-id": [ + "CENTRALUS:20150615T141947Z:96305e1e-8bdd-4c7a-b340-09842cea4515" + ], + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 15 Jun 2015 14:19:47 GMT" + ], + "Server": [ + "Microsoft-IIS/8.0" + ], + "X-Powered-By": [ + "ASP.NET" + ] + }, + "StatusCode": 200 + }, + { + "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/jobs/a30d2af5-22a6-480e-83bc-fc5c1698c021/jobdetails?api-version=2014-09-01", + "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vam9icy9hMzBkMmFmNS0yMmE2LTQ4MGUtODNiYy1mYzVjMTY5OGMwMjEvam9iZGV0YWlscz9hcGktdmVyc2lvbj0yMDE0LTA5LTAx", + "RequestMethod": "GET", + "RequestBody": "", + "RequestHeaders": { + "Accept-Language": [ + "en-us" + ], + "x-ms-client-request-id": [ + "b2037d0c-400b-4db1-8a30-cda59dac47ad-2015-06-15 14:19:47Z-PS" + ], + "User-Agent": [ + "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" + ] + }, + "ResponseBody": "{\r\n \"TasksList\": [\r\n {\r\n \"TaskId\": \"Take Snapshot\",\r\n \"StartTime\": null,\r\n \"EndTime\": null,\r\n \"Duration\": \"00:00:00\",\r\n \"Status\": \"Completed\",\r\n \"ProgressPercentage\": null,\r\n \"InstanceId\": null,\r\n \"Name\": null,\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"TaskId\": \"Transfer data to Backup vault\",\r\n \"StartTime\": null,\r\n \"EndTime\": null,\r\n \"Duration\": \"00:00:00\",\r\n \"Status\": \"Completed\",\r\n \"ProgressPercentage\": null,\r\n \"InstanceId\": null,\r\n \"Name\": null,\r\n \"OperationInProgress\": false\r\n }\r\n ],\r\n \"PropertyBag\": {\r\n \"VM Name\": \"dev01testing\",\r\n \"Backup Size\": \"22 MB\"\r\n },\r\n \"ProgressPercentage\": null,\r\n \"DynamicErrorMessage\": \"The following set of VSS writers failed during snapshot - \",\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Backup\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-11T14:39:31.0489015Z\",\r\n \"EndTimestamp\": \"2015-06-11T14:56:15.3054685Z\",\r\n \"Duration\": \"00:16:44.2565670\",\r\n \"EntityFriendlyName\": \"dev01testing\",\r\n \"ActionsInfo\": [\r\n 1\r\n ],\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"a30d2af5-22a6-480e-83bc-fc5c1698c021\",\r\n \"Name\": \"job_dev01testing_a30d2af5-22a6-480e-83bc-fc5c1698c021\",\r\n \"OperationInProgress\": false\r\n}", + "ResponseHeaders": { + "Content-Length": [ + "970" + ], + "Content-Type": [ + "application/json" + ], + "Expires": [ + "-1" + ], + "Pragma": [ + "no-cache" + ], + "x-ms-request-id": [ + "c1388576-3dd5-49e5-b40f-84567cb8b6c4" + ], + "x-ms-client-request-id": [ + "b2037d0c-400b-4db1-8a30-cda59dac47ad-2015-06-15 14:19:47Z-PS", + "b2037d0c-400b-4db1-8a30-cda59dac47ad-2015-06-15 14:19:47Z-PS" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "x-ms-ratelimit-remaining-subscription-reads": [ + "14974" + ], + "x-ms-correlation-request-id": [ + "c1388576-3dd5-49e5-b40f-84567cb8b6c4" + ], + "x-ms-routing-request-id": [ + "CENTRALUS:20150615T141947Z:c1388576-3dd5-49e5-b40f-84567cb8b6c4" + ], + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 15 Jun 2015 14:19:47 GMT" + ], + "Server": [ + "Microsoft-IIS/8.0" + ], + "X-Powered-By": [ + "ASP.NET" + ] + }, + "StatusCode": 200 + }, + { + "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/jobs/f53d089a-0dc7-44a4-8062-61c3c126c3c4/jobdetails?api-version=2014-09-01", + "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vam9icy9mNTNkMDg5YS0wZGM3LTQ0YTQtODA2Mi02MWMzYzEyNmMzYzQvam9iZGV0YWlscz9hcGktdmVyc2lvbj0yMDE0LTA5LTAx", + "RequestMethod": "GET", + "RequestBody": "", + "RequestHeaders": { + "Accept-Language": [ + "en-us" + ], + "x-ms-client-request-id": [ + "d813e41a-0021-487b-822a-0b5ff5c45115-2015-06-15 14:19:48Z-PS" + ], + "User-Agent": [ + "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" + ] + }, + "ResponseBody": "{\r\n \"TasksList\": [\r\n {\r\n \"TaskId\": \"Take Snapshot\",\r\n \"StartTime\": null,\r\n \"EndTime\": null,\r\n \"Duration\": \"00:00:00\",\r\n \"Status\": \"Completed\",\r\n \"ProgressPercentage\": null,\r\n \"InstanceId\": null,\r\n \"Name\": null,\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"TaskId\": \"Transfer data to Backup vault\",\r\n \"StartTime\": null,\r\n \"EndTime\": null,\r\n \"Duration\": \"00:00:00\",\r\n \"Status\": \"Completed\",\r\n \"ProgressPercentage\": null,\r\n \"InstanceId\": null,\r\n \"Name\": null,\r\n \"OperationInProgress\": false\r\n }\r\n ],\r\n \"PropertyBag\": {\r\n \"VM Name\": \"dev01testing\",\r\n \"Backup Size\": \"9874 MB\"\r\n },\r\n \"ProgressPercentage\": null,\r\n \"DynamicErrorMessage\": \"The following set of VSS writers failed during snapshot - \",\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Backup\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-11T10:50:40.341267Z\",\r\n \"EndTimestamp\": \"2015-06-11T11:19:16.627226Z\",\r\n \"Duration\": \"00:28:36.2859590\",\r\n \"EntityFriendlyName\": \"dev01testing\",\r\n \"ActionsInfo\": [\r\n 1\r\n ],\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"f53d089a-0dc7-44a4-8062-61c3c126c3c4\",\r\n \"Name\": \"job_dev01testing_f53d089a-0dc7-44a4-8062-61c3c126c3c4\",\r\n \"OperationInProgress\": false\r\n}", + "ResponseHeaders": { + "Content-Length": [ + "970" + ], + "Content-Type": [ + "application/json" + ], + "Expires": [ + "-1" + ], + "Pragma": [ + "no-cache" + ], + "x-ms-request-id": [ + "a66e1b9a-ef6a-45fb-8fcd-068cf59c8754" + ], + "x-ms-client-request-id": [ + "d813e41a-0021-487b-822a-0b5ff5c45115-2015-06-15 14:19:48Z-PS", + "d813e41a-0021-487b-822a-0b5ff5c45115-2015-06-15 14:19:48Z-PS" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "x-ms-ratelimit-remaining-subscription-reads": [ + "14973" + ], + "x-ms-correlation-request-id": [ + "a66e1b9a-ef6a-45fb-8fcd-068cf59c8754" + ], + "x-ms-routing-request-id": [ + "CENTRALUS:20150615T141948Z:a66e1b9a-ef6a-45fb-8fcd-068cf59c8754" + ], + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 15 Jun 2015 14:19:48 GMT" + ], + "Server": [ + "Microsoft-IIS/8.0" + ], + "X-Powered-By": [ + "ASP.NET" + ] + }, + "StatusCode": 200 + }, + { + "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/jobs/e06bdcf6-fe89-4957-9663-b16b74114c56/jobdetails?api-version=2014-09-01", + "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vam9icy9lMDZiZGNmNi1mZTg5LTQ5NTctOTY2My1iMTZiNzQxMTRjNTYvam9iZGV0YWlscz9hcGktdmVyc2lvbj0yMDE0LTA5LTAx", + "RequestMethod": "GET", + "RequestBody": "", + "RequestHeaders": { + "Accept-Language": [ + "en-us" + ], + "x-ms-client-request-id": [ + "f2f701b4-f61e-433f-b26c-2370f6903402-2015-06-15 14:19:48Z-PS" + ], + "User-Agent": [ + "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" + ] + }, + "ResponseBody": "{\r\n \"TasksList\": [],\r\n \"PropertyBag\": {\r\n \"VM Name\": \"dev01Testing\",\r\n \"Policy Name\": \"Policy9\"\r\n },\r\n \"ProgressPercentage\": null,\r\n \"DynamicErrorMessage\": null,\r\n \"Type\": \"VM\",\r\n \"Operation\": \"ConfigureBackup\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-11T10:39:07.2611805Z\",\r\n \"EndTimestamp\": \"2015-06-11T10:39:12.0730178Z\",\r\n \"Duration\": \"00:00:04.8118373\",\r\n \"EntityFriendlyName\": \"dev01Testing\",\r\n \"ActionsInfo\": null,\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"e06bdcf6-fe89-4957-9663-b16b74114c56\",\r\n \"Name\": \"e06bdcf6-fe89-4957-9663-b16b74114c56\",\r\n \"OperationInProgress\": false\r\n}", + "ResponseHeaders": { + "Content-Length": [ + "522" + ], + "Content-Type": [ + "application/json" + ], + "Expires": [ + "-1" + ], + "Pragma": [ + "no-cache" + ], + "x-ms-request-id": [ + "880be34a-6e22-4869-b5d3-dfdbfa2b6387" + ], + "x-ms-client-request-id": [ + "f2f701b4-f61e-433f-b26c-2370f6903402-2015-06-15 14:19:48Z-PS", + "f2f701b4-f61e-433f-b26c-2370f6903402-2015-06-15 14:19:48Z-PS" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "x-ms-ratelimit-remaining-subscription-reads": [ + "14972" + ], + "x-ms-correlation-request-id": [ + "880be34a-6e22-4869-b5d3-dfdbfa2b6387" + ], + "x-ms-routing-request-id": [ + "CENTRALUS:20150615T141949Z:880be34a-6e22-4869-b5d3-dfdbfa2b6387" + ], + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 15 Jun 2015 14:19:48 GMT" + ], + "Server": [ + "Microsoft-IIS/8.0" + ], + "X-Powered-By": [ + "ASP.NET" + ] + }, + "StatusCode": 200 + }, + { + "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/jobs/d72c6b83-0247-4d19-96f6-cf499f5146e2/jobdetails?api-version=2014-09-01", + "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vam9icy9kNzJjNmI4My0wMjQ3LTRkMTktOTZmNi1jZjQ5OWY1MTQ2ZTIvam9iZGV0YWlscz9hcGktdmVyc2lvbj0yMDE0LTA5LTAx", + "RequestMethod": "GET", + "RequestBody": "", + "RequestHeaders": { + "Accept-Language": [ + "en-us" + ], + "x-ms-client-request-id": [ + "8a5f87ed-5513-4878-a30f-a362f843c53a-2015-06-15 14:19:49Z-PS" + ], + "User-Agent": [ + "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" + ] + }, + "ResponseBody": "{\r\n \"TasksList\": [],\r\n \"PropertyBag\": {\r\n \"VM Name\": \"dev01Testing\",\r\n \"Cloud Service\": \"dev01Testing\"\r\n },\r\n \"ProgressPercentage\": null,\r\n \"DynamicErrorMessage\": null,\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Register\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-11T10:14:34.0042559Z\",\r\n \"EndTimestamp\": \"2015-06-11T10:15:49.014085Z\",\r\n \"Duration\": \"00:01:15.0098291\",\r\n \"EntityFriendlyName\": \"dev01Testing\",\r\n \"ActionsInfo\": null,\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"d72c6b83-0247-4d19-96f6-cf499f5146e2\",\r\n \"Name\": \"iaasvmcontainer;dev01testing;dev01testing\",\r\n \"OperationInProgress\": false\r\n}", + "ResponseHeaders": { + "Content-Length": [ + "526" + ], + "Content-Type": [ + "application/json" + ], + "Expires": [ + "-1" + ], + "Pragma": [ + "no-cache" + ], + "x-ms-request-id": [ + "ee31e998-8fb8-49da-8bfe-2e0418201165" + ], + "x-ms-client-request-id": [ + "8a5f87ed-5513-4878-a30f-a362f843c53a-2015-06-15 14:19:49Z-PS", + "8a5f87ed-5513-4878-a30f-a362f843c53a-2015-06-15 14:19:49Z-PS" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "x-ms-ratelimit-remaining-subscription-reads": [ + "14971" + ], + "x-ms-correlation-request-id": [ + "ee31e998-8fb8-49da-8bfe-2e0418201165" + ], + "x-ms-routing-request-id": [ + "CENTRALUS:20150615T141950Z:ee31e998-8fb8-49da-8bfe-2e0418201165" + ], + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 15 Jun 2015 14:19:50 GMT" + ], + "Server": [ + "Microsoft-IIS/8.0" + ], + "X-Powered-By": [ + "ASP.NET" + ] + }, + "StatusCode": 200 + }, + { + "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/jobs/546ed062-5cd5-49c6-b453-b4446b878e19/jobdetails?api-version=2014-09-01", + "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vam9icy81NDZlZDA2Mi01Y2Q1LTQ5YzYtYjQ1My1iNDQ0NmI4NzhlMTkvam9iZGV0YWlscz9hcGktdmVyc2lvbj0yMDE0LTA5LTAx", + "RequestMethod": "GET", + "RequestBody": "", + "RequestHeaders": { + "Accept-Language": [ + "en-us" + ], + "x-ms-client-request-id": [ + "33c84bc0-f7a5-4661-b01a-59edbe5c9bda-2015-06-15 14:19:50Z-PS" + ], + "User-Agent": [ + "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" + ] + }, + "ResponseBody": "{\r\n \"TasksList\": [],\r\n \"PropertyBag\": {\r\n \"VM Name\": \"dev01Testing\",\r\n \"Cloud Service\": \"dev01Testing\"\r\n },\r\n \"ProgressPercentage\": null,\r\n \"DynamicErrorMessage\": null,\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Register\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-11T09:57:23.6745962Z\",\r\n \"EndTimestamp\": \"2015-06-11T10:02:09.5201069Z\",\r\n \"Duration\": \"00:04:45.8455107\",\r\n \"EntityFriendlyName\": \"dev01Testing\",\r\n \"ActionsInfo\": null,\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"546ed062-5cd5-49c6-b453-b4446b878e19\",\r\n \"Name\": \"iaasvmcontainer;dev01testing;dev01testing\",\r\n \"OperationInProgress\": false\r\n}", + "ResponseHeaders": { + "Content-Length": [ + "527" + ], + "Content-Type": [ + "application/json" + ], + "Expires": [ + "-1" + ], + "Pragma": [ + "no-cache" + ], + "x-ms-request-id": [ + "06b9fb15-276e-430c-b66e-8c5a19b2d7d2" + ], + "x-ms-client-request-id": [ + "33c84bc0-f7a5-4661-b01a-59edbe5c9bda-2015-06-15 14:19:50Z-PS", + "33c84bc0-f7a5-4661-b01a-59edbe5c9bda-2015-06-15 14:19:50Z-PS" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "x-ms-ratelimit-remaining-subscription-reads": [ + "14970" + ], + "x-ms-correlation-request-id": [ + "06b9fb15-276e-430c-b66e-8c5a19b2d7d2" + ], + "x-ms-routing-request-id": [ + "CENTRALUS:20150615T141951Z:06b9fb15-276e-430c-b66e-8c5a19b2d7d2" + ], + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 15 Jun 2015 14:19:50 GMT" ], "Server": [ "Microsoft-IIS/8.0" From 47600f578fa410ba3ae655ce57a608454568e2df Mon Sep 17 00:00:00 2001 From: pikumarmsft Date: Tue, 16 Jun 2015 16:30:13 +0530 Subject: [PATCH 069/155] removed extra comments --- .../Cmdlets/DataSource/Disable-AzureBackupProtection .cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/DataSource/Disable-AzureBackupProtection .cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/DataSource/Disable-AzureBackupProtection .cs index 1bd715f481b8..72486bbb0c6c 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/DataSource/Disable-AzureBackupProtection .cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/DataSource/Disable-AzureBackupProtection .cs @@ -58,7 +58,7 @@ public override void ExecuteCmdlet() var disbaleAzureBackupProtection = AzureBackupClient.DataSource.DisableProtectionAsync(GetCustomRequestHeaders(), item.ContainerUniqueName, item.Type, item.DataSourceId, input, CmdletCancellationToken).Result; - WriteVerbose("Received policy response"); + WriteVerbose("Received response"); WriteVerbose("Converting response"); WriteAzureBackupProtectionPolicy(disbaleAzureBackupProtection); }); From fee6183e51757168b3b15b3eb4bdccc51a04890e Mon Sep 17 00:00:00 2001 From: pikumarmsft Date: Tue, 16 Jun 2015 17:55:55 +0530 Subject: [PATCH 070/155] Used switch parameter for boolean input --- .../AzureBackupContainerCmdletBase.cs | 6 ++--- .../AzureBackupDSCmdletBase.cs | 6 ++--- .../AzureBackupItemCmdletBase.cs | 6 ++--- .../Cmdlets/BackUp/TriggerBackUp.cs | 6 ++--- .../Disable-AzureBackupProtection .cs | 23 +++++++++++++++---- .../Enable-AzureBackupProtection .cs | 16 ++++++------- .../Cmdlets/DataSource/GetAzureBackupItem.cs | 6 ++--- .../GetAzureBackupRecoveryPoint.cs | 10 ++++---- 8 files changed, 46 insertions(+), 33 deletions(-) diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupContainerCmdletBase.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupContainerCmdletBase.cs index 2f1f78d82a56..37a6dfe395f9 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupContainerCmdletBase.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupContainerCmdletBase.cs @@ -30,15 +30,15 @@ public abstract class AzureBackupContainerCmdletBase : AzureBackupCmdletBase { [Parameter(Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.AzureBackupContainer, ValueFromPipeline = true)] [ValidateNotNullOrEmpty] - public AzureBackupContainer container { get; set; } + public AzureBackupContainer Container { get; set; } public override void ExecuteCmdlet() { base.ExecuteCmdlet(); - WriteDebug(String.Format("Cmdlet called for ResourceGroupName: {0}, ResourceName: {1}, Location: {2}", container.ResourceGroupName, container.ResourceName, container.Location)); + WriteDebug(String.Format("Cmdlet called for ResourceGroupName: {0}, ResourceName: {1}, Location: {2}", Container.ResourceGroupName, Container.ResourceName, Container.Location)); - InitializeAzureBackupCmdlet(container.ResourceGroupName, container.ResourceName, container.Location); + InitializeAzureBackupCmdlet(Container.ResourceGroupName, Container.ResourceName, Container.Location); } } } \ No newline at end of file diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupDSCmdletBase.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupDSCmdletBase.cs index f0f4005d4061..255108bf5392 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupDSCmdletBase.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupDSCmdletBase.cs @@ -30,15 +30,15 @@ public abstract class AzureBackupDSCmdletBase : AzureBackupCmdletBase { [Parameter(Position = 0, Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.AzureBackUpItem, ValueFromPipeline = true)] [ValidateNotNullOrEmpty] - public AzureBackupItem item { get; set; } + public AzureBackupItem Item { get; set; } public override void ExecuteCmdlet() { base.ExecuteCmdlet(); - WriteDebug(String.Format("Cmdlet called for ResourceGroupName: {0}, ResourceName: {1}", item.ResourceGroupName, item.ResourceName)); + WriteDebug(String.Format("Cmdlet called for ResourceGroupName: {0}, ResourceName: {1}", Item.ResourceGroupName, Item.ResourceName)); - InitializeAzureBackupCmdlet(item.ResourceGroupName, item.ResourceName, item.Location); + InitializeAzureBackupCmdlet(Item.ResourceGroupName, Item.ResourceName, Item.Location); } } } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupItemCmdletBase.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupItemCmdletBase.cs index b1fbf8455f41..7434c5cfa8b1 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupItemCmdletBase.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupItemCmdletBase.cs @@ -30,13 +30,13 @@ public abstract class AzureBackupItemCmdletBase : AzureBackupCmdletBase { [Parameter(Position = 0, Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.AzureBackupItem, ValueFromPipeline = true)] [ValidateNotNullOrEmpty] - public AzureBackupContainerContextObject item { get; set; } + public AzureBackupContainerContextObject Item { get; set; } public override void ExecuteCmdlet() { base.ExecuteCmdlet(); - WriteDebug(String.Format("Cmdlet called for ResourceGroupName: {0}, ResourceName: {1}, Location: {2}", item.ResourceGroupName, item.ResourceName, item.Location)); - InitializeAzureBackupCmdlet(item.ResourceGroupName, item.ResourceName, item.Location); + WriteDebug(String.Format("Cmdlet called for ResourceGroupName: {0}, ResourceName: {1}, Location: {2}", Item.ResourceGroupName, Item.ResourceName, Item.Location)); + InitializeAzureBackupCmdlet(Item.ResourceGroupName, Item.ResourceName, Item.Location); } } } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/BackUp/TriggerBackUp.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/BackUp/TriggerBackUp.cs index 3ff31abea54b..4021d521e5ae 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/BackUp/TriggerBackUp.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/BackUp/TriggerBackUp.cs @@ -44,9 +44,9 @@ public override void ExecuteCmdlet() Guid jobId = Guid.Empty; MBS.OperationResponse triggerBackUpInfo = AzureBackupClient.BackUp.TriggerBackUpAsync(GetCustomRequestHeaders(), - item.ContainerUniqueName, - item.Type, - item.DataSourceId, + Item.ContainerUniqueName, + Item.Type, + Item.DataSourceId, CmdletCancellationToken).Result; WriteVerbose("Received backup response"); diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/DataSource/Disable-AzureBackupProtection .cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/DataSource/Disable-AzureBackupProtection .cs index 72486bbb0c6c..901073e9c917 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/DataSource/Disable-AzureBackupProtection .cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/DataSource/Disable-AzureBackupProtection .cs @@ -33,8 +33,12 @@ namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets.DataSource public class DisableAzureBackupProtection : AzureBackupDSCmdletBase { [Parameter(Position = 1, Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.RemoveProtectionOption)] - [ValidateSet("RetainBackupData", "DeleteBackupData")] - public string RemoveProtectionOption { get; set; } + public SwitchParameter RemoveRecoveryPoints + { + get { return DeleteBackupData; } + set { DeleteBackupData = value; } + } + private bool DeleteBackupData; [Parameter(Position = 2, Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.Reason)] public string Reason { get; set; } @@ -51,12 +55,12 @@ public override void ExecuteCmdlet() WriteVerbose("Making client call"); RemoveProtectionRequestInput input = new RemoveProtectionRequestInput() { - RemoveProtectionOption = this.RemoveProtectionOption == null ? "RetainBackupData" : this.RemoveProtectionOption, + RemoveProtectionOption = this.DeleteBackupData ? RemoveProtectionOptions.DeleteBackupData.ToString() : RemoveProtectionOptions.RetainBackupData.ToString(), Reason = this.Reason, Comments = this.Comments, }; - - var disbaleAzureBackupProtection = AzureBackupClient.DataSource.DisableProtectionAsync(GetCustomRequestHeaders(), item.ContainerUniqueName, item.Type, item.DataSourceId, input, CmdletCancellationToken).Result; + WriteVerbose("RemoveProtectionOption is = " + input.RemoveProtectionOption); + var disbaleAzureBackupProtection = AzureBackupClient.DataSource.DisableProtectionAsync(GetCustomRequestHeaders(), Item.ContainerUniqueName, Item.Type, Item.DataSourceId, input, CmdletCancellationToken).Result; WriteVerbose("Received response"); WriteVerbose("Converting response"); @@ -79,5 +83,14 @@ public void WriteAzureBackupProtectionPolicy(IEnumerable sour this.WriteObject(targetList, true); } + + public enum RemoveProtectionOptions + { + [EnumMember] + DeleteBackupData, + + [EnumMember] + RetainBackupData + }; } } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/DataSource/Enable-AzureBackupProtection .cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/DataSource/Enable-AzureBackupProtection .cs index 502d9b832d13..8caf9dd47612 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/DataSource/Enable-AzureBackupProtection .cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/DataSource/Enable-AzureBackupProtection .cs @@ -45,19 +45,19 @@ public override void ExecuteCmdlet() WriteVerbose("Making client call"); SetProtectionRequestInput input = new SetProtectionRequestInput(); input.PolicyId = Policy.InstanceId; - if (item.GetType() == typeof(AzureBackupItem)) + if (Item.GetType() == typeof(AzureBackupItem)) { - input.ProtectableObjectType = (item as AzureBackupItem).Type; - input.ProtectableObjects.Add((item as AzureBackupItem).Name); + input.ProtectableObjectType = (Item as AzureBackupItem).Type; + input.ProtectableObjects.Add((Item as AzureBackupItem).Name); } - else if (item.GetType() == typeof(AzureBackupContainer)) + else if (Item.GetType() == typeof(AzureBackupContainer)) { - WriteVerbose("Input is container Type = "+item.GetType()); - if((item as AzureBackupContainer).ContainerType == ContainerType.IaasVMContainer.ToString()) + WriteVerbose("Input is container Type = "+Item.GetType()); + if((Item as AzureBackupContainer).ContainerType == ContainerType.IaasVMContainer.ToString()) { - WriteVerbose("container Type = " + (item as AzureBackupContainer).ContainerType); + WriteVerbose("container Type = " + (Item as AzureBackupContainer).ContainerType); input.ProtectableObjectType = DataSourceType.VM.ToString(); - input.ProtectableObjects.Add((item as AzureBackupContainer).ContainerUniqueName); + input.ProtectableObjects.Add((Item as AzureBackupContainer).ContainerUniqueName); } else { diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/DataSource/GetAzureBackupItem.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/DataSource/GetAzureBackupItem.cs index c94b957208a7..3dfb83912256 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/DataSource/GetAzureBackupItem.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/DataSource/GetAzureBackupItem.cs @@ -67,16 +67,16 @@ public override void ExecuteCmdlet() }; azureBackupDatasourceListResponse = AzureBackupClient.DataSource.ListAsync(DSQueryParam, GetCustomRequestHeaders(), CmdletCancellationToken).Result; - azureBackupDatasourceObjects = azureBackupDatasourceListResponse.DataSources.Objects.Where(x => x.ContainerName.Equals(container.ContainerUniqueName, System.StringComparison.InvariantCultureIgnoreCase)).ToList(); + azureBackupDatasourceObjects = azureBackupDatasourceListResponse.DataSources.Objects.Where(x => x.ContainerName.Equals(Container.ContainerUniqueName, System.StringComparison.InvariantCultureIgnoreCase)).ToList(); if (this.Status == null) { azureBackupPOListResponse = AzureBackupClient.ProtectableObject.ListAsync(POQueryParam, GetCustomRequestHeaders(), CmdletCancellationToken).Result; - azureBackupPOObjects = azureBackupPOListResponse.ProtectableObject.Objects.Where(x => x.ContainerName.Equals(container.ContainerUniqueName, System.StringComparison.InvariantCultureIgnoreCase)).ToList(); + azureBackupPOObjects = azureBackupPOListResponse.ProtectableObject.Objects.Where(x => x.ContainerName.Equals(Container.ContainerUniqueName, System.StringComparison.InvariantCultureIgnoreCase)).ToList(); } WriteVerbose("Received response"); - WriteAzureBackupProtectionPolicy(azureBackupDatasourceObjects, azureBackupPOObjects, container); + WriteAzureBackupProtectionPolicy(azureBackupDatasourceObjects, azureBackupPOObjects, Container); }); } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/RecoveryPoint/GetAzureBackupRecoveryPoint.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/RecoveryPoint/GetAzureBackupRecoveryPoint.cs index 2f86e98e3565..e75483cf1e60 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/RecoveryPoint/GetAzureBackupRecoveryPoint.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/RecoveryPoint/GetAzureBackupRecoveryPoint.cs @@ -41,9 +41,9 @@ public override void ExecuteCmdlet() RecoveryPointListResponse recoveryPointListResponse = AzureBackupClient.RecoveryPoint.ListAsync(GetCustomRequestHeaders(), - item.ContainerUniqueName, - item.Type, - item.DataSourceId, + Item.ContainerUniqueName, + Item.Type, + Item.DataSourceId, CmdletCancellationToken).Result; WriteVerbose("Received recovery point response"); @@ -57,7 +57,7 @@ public override void ExecuteCmdlet() { WriteVerbose("Converting response"); recoveryPointObject = recoveryPointObjects.FirstOrDefault(); - WriteAzureBackupRecoveryPoint(recoveryPointObject, item); + WriteAzureBackupRecoveryPoint(recoveryPointObject, Item); } else { @@ -68,7 +68,7 @@ public override void ExecuteCmdlet() { WriteVerbose("Converting response"); recoveryPointObjects = recoveryPointListResponse.RecoveryPoints.Objects.OrderByDescending(x => x.RecoveryPointTime); - WriteAzureBackupRecoveryPoint(recoveryPointObjects, item); + WriteAzureBackupRecoveryPoint(recoveryPointObjects, Item); } }); } From 59175fd6e61daae6fbaa063e3b53878fc1eeaf82 Mon Sep 17 00:00:00 2001 From: mkherani Date: Tue, 16 Jun 2015 19:07:12 +0530 Subject: [PATCH 071/155] Register and Unregister cmdlet --- .../Container/RegisterAzureBackupContainer.cs | 72 +++++++++++++------ .../UnregisterAzureBackupContainer.cs | 7 +- .../RegisterAzureBackupContainer.cs | 14 ---- 3 files changed, 55 insertions(+), 38 deletions(-) delete mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/RegisterContainer/RegisterAzureBackupContainer.cs 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 1f896324275f..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 - { - } -} From 450e1e40b55df2c4f48c578964551930adb6c7e9 Mon Sep 17 00:00:00 2001 From: mkherani Date: Tue, 16 Jun 2015 20:26:38 +0530 Subject: [PATCH 072/155] Adding csproj file --- .../Commands.AzureBackup.csproj | 38 +++++++++++++------ 1 file changed, 26 insertions(+), 12 deletions(-) diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj index 27938f9f65a5..5a1b6875e9b3 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj @@ -28,6 +28,7 @@ true true MinimumRecommendedRules.ruleset + AnyCPU ..\..\..\Package\Release\ServiceManagement\Azure\StorSimple\ @@ -86,7 +87,7 @@ ..\..\..\packages\Microsoft.WindowsAzure.Management.4.1.1\lib\net40\Microsoft.WindowsAzure.Management.dll - ..\..\..\..\..\azure-sdk-for-net\binaries\net40\Microsoft.WindowsAzure.Management.BackupServicesManagment.dll + ..\..\..\..\..\..\azure-sdk-for-net\src\ResourceManagement\AzureBackup\BackupServicesManagment\bin\Net40-Debug\Microsoft.WindowsAzure.Management.BackupServicesManagment.dll False @@ -127,28 +128,44 @@ + + + + + + + + - - + + + + - - - - - + + + + + + + + + + Code + True True @@ -161,10 +178,6 @@ {5ee72c53-1720-4309-b54b-5fb79703195f} Commands.Common - - {52643bd5-6378-49bd-9f6e-dac9dd8a867b} - Commands.Compute - @@ -191,6 +204,7 @@ + From 1849f8f0d5c2dbcad3c0742d9b3af04d619f1b81 Mon Sep 17 00:00:00 2001 From: dragonfly91 Date: Tue, 16 Jun 2015 22:23:48 +0530 Subject: [PATCH 073/155] PS tests and fixes for Vault and Get Container cmdlets --- .../Commands.AzureBackup.Test.csproj | 7 +-- .../ScenarioTests/AzureBackupTests.cs | 22 +++++++++ .../ScenarioTests/AzureBackupTests.ps1 | 47 +++++++++++++++++++ .../AzureBackupCmdletHelpMessage.cs | 2 +- .../Container/GetAzureBackupContainer.cs | 4 +- .../Commands.AzureBackup.csproj | 5 +- 6 files changed, 79 insertions(+), 8 deletions(-) diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/Commands.AzureBackup.Test.csproj b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/Commands.AzureBackup.Test.csproj index d71137cf7849..ba13feb1aeea 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/Commands.AzureBackup.Test.csproj +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/Commands.AzureBackup.Test.csproj @@ -80,9 +80,6 @@ ..\..\..\packages\Microsoft.WindowsAzure.Management.4.1.1\lib\net40\Microsoft.WindowsAzure.Management.dll - - ..\..\..\..\..\azure-sdk-for-net\src\ResourceManagement\AzureBackup\BackupServicesManagment\bin\Net45-Release\Microsoft.WindowsAzure.Management.BackupServicesManagment.dll - False ..\..\..\packages\Hydra.SpecTestSupport.1.0.5417.13285-prerelease\lib\net45\Microsoft.WindowsAzure.Testing.dll @@ -128,6 +125,10 @@ + + {38a6741c-77a3-42a8-a846-83373be57c7f} + BackupServicesManagment + {5ee72c53-1720-4309-b54b-5fb79703195f} Commands.Common diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupTests.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupTests.cs index 5a175ae073e8..4e76a5362d35 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupTests.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupTests.cs @@ -59,5 +59,27 @@ public void BackUpAzureBackUpItem() { this.RunPowerShellTest("BackUpAzureBackUpItemTest"); } + + [Fact] + public void GetAzureBackupContainerTests() + { + this.RunPowerShellTest("Test-GetAzureBackupContainerWithoutFilterReturnsNonZeroContainers"); + + this.RunPowerShellTest("Test-GetAzureBackupContainerWithUniqueFilterReturnsOneContainer"); + } + + [Fact] + public void GetAzureBackupVaultCredentialsTests() + { + this.RunPowerShellTest("Test-GetAzureBackupVaultCredentialsReturnsFileNameAndDownloadsCert"); + } + + [Fact] + public void SetAzureBackupVaultStorageTypeTests() + { + this.RunPowerShellTest("Test-SetAzureBackupVaultStorageTypeWithFreshResourceDoesNotThrowException"); + + this.RunPowerShellTest("Test-SetAzureBackupVaultStorageTypeWithLockedResourceThrowsException"); + } } } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupTests.ps1 b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupTests.ps1 index 37fc2dc259f5..76ba6f476f4e 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupTests.ps1 +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupTests.ps1 @@ -15,6 +15,8 @@ $ResourceGroupName = "backuprg" $ResourceName = "backuprn" $ContainerName = "iaasvmcontainer;dev01testing;dev01testing" +$ContainerResourceGroupName = "dev01Testing" +$ContainerResourceName = "dev01Testing" $ContainerType = "IaasVMContainer" $DataSourceType = "VM" $DataSourceId = "17593283453810" @@ -22,6 +24,7 @@ $Location = "SouthEast Asia" $PolicyName = "Policy9"; $PolicyId = "c87bbada-6e1b-4db2-b76c-9062d28959a4"; $POName = "iaasvmcontainer;dev01testing;dev01testing" +$CertTargetLocation = (Get-Item -Path ".\" -Verbose).FullName; <# .SYNOPSIS @@ -174,3 +177,47 @@ function Test-StopAzureBackupJob $jobDetails = Get-AzureBackupJobDetails -ResourceGroupName $ResourceGroupName -ResourceName $ResourceName -Location $Location -Job $jobsList[0]; #Assert-AreEqual 'Cancelling' $jobDetails.Status } + +function Test-GetAzureBackupContainerWithoutFilterReturnsNonZeroContainers +{ + $containers = Get-AzureBackupContainer -ResourceGroupName $ResourceGroupName -ResourceName $ResourceName -Location $Location + Assert-NotNull $containers 'Container list should not be null'; +} + +function Test-GetAzureBackupContainerWithUniqueFilterReturnsOneContainer +{ + $container = Get-AzureBackupContainer -ResourceGroupName $ResourceGroupName -ResourceName $ResourceName -Location $Location -ContainerResourceGroupName $ContainerResourceGroupName -ContainerResourceName $ContainerResourceName + Assert-NotNull $container 'Container should not be null'; + Assert-AreEqual $container.ResourceName $ContainerResourceName -CaseSensitive 'Returned container resource name (a.k.a friendly name) does not match the test VM resource name'; + Assert-AreEqual $container.ResourceGroupName $ContainerResourceGroupName -CaseSensitive 'Returned container resource group name (a.k.a parent friendly name) does not match the test VM resource group name'; +} + +function Test-GetAzureBackupVaultCredentialsReturnsFileNameAndDownloadsCert +{ + $fileName = Get-AzureBackupVaultCredentials -ResourceGroupName $ResourceGroupName -ResourceName $ResourceName -Location $Location -TargetLocation $CertTargetLocation + Assert-NotNull $fileName 'File name should not be null'; + $certFileFullPath = [io.path]::combine($CertTargetLocation, $fileName); + Assert-True {{ Test-Path $certFileFullPath }} +} + +function Test-SetAzureBackupVaultStorageTypeWithFreshResourceDoesNotThrowException +{ + # TODO: Create a new resource and use it for these calls. At the end, delete it. + + Set-AzureBackupVaultStorageType -ResourceGroupName $ResourceGroupName -ResourceName $ResourceName -Location $Location -Type GeoRedundant + + Set-AzureBackupVaultStorageType -ResourceGroupName $ResourceGroupName -ResourceName $ResourceName -Location $Location -Type LocallyRedundant + + Set-AzureBackupVaultStorageType -ResourceGroupName $ResourceGroupName -ResourceName $ResourceName -Location $Location -Type GeoRedundant + + Set-AzureBackupVaultStorageType -ResourceGroupName $ResourceGroupName -ResourceName $ResourceName -Location $Location -Type LocallyRedundant +} + +function Test-SetAzureBackupVaultStorageTypeWithLockedResourceThrowsException +{ + # One of them is bound to fail + + Assert-Throws { Set-AzureBackupVaultStorageType -ResourceGroupName $ResourceGroupName -ResourceName $ResourceName -Location $Location -Type GeoRedundant } + + Assert-Throws { Set-AzureBackupVaultStorageType -ResourceGroupName $ResourceGroupName -ResourceName $ResourceName -Location $Location -Type LocallyRedundant } +} \ No newline at end of file diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupCmdletHelpMessage.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupCmdletHelpMessage.cs index 70c112b4309e..dc9f0e9d2e74 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupCmdletHelpMessage.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupCmdletHelpMessage.cs @@ -21,7 +21,7 @@ internal static class AzureBackupCmdletHelpMessage public const string ResourceGroupName = "The ResourceGroup name."; public const string ResourceName = "The Resource name."; public const string Location = "Location."; - public const string TargetLocation = "The directory where the credentials file will be saved."; + public const string TargetLocation = "The directory where the credentials file will be saved. This must be an absolute path."; public const string ContainerResourceName = "The container resource name aka friendly name."; public const string ContainerId = "The container ID."; public const string ContainerRegistrationStatus = "The container registration status."; diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/GetAzureBackupContainer.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/GetAzureBackupContainer.cs index ebeb8f0748eb..fbe7b1ad1604 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/GetAzureBackupContainer.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/GetAzureBackupContainer.cs @@ -75,10 +75,10 @@ public override void ExecuteCmdlet() List containers = containerInfos.ConvertAll(containerInfo => { - return new AzureBackupContainer(containerInfo, ResourceGroupName, ResourceName, Location); + return new AzureBackupContainer(containerInfo, containerInfo.ParentContainerName, containerInfo.FriendlyName, Location); }); - if (!string.IsNullOrEmpty(ResourceName) & !string.IsNullOrEmpty(ResourceGroupName)) + if (!string.IsNullOrEmpty(ContainerResourceName) & !string.IsNullOrEmpty(ContainerResourceGroupName)) { if (containers.Any()) { diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj index 5a1b6875e9b3..2cbab07d76ed 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj @@ -86,8 +86,9 @@ ..\..\..\packages\Microsoft.WindowsAzure.Management.4.1.1\lib\net40\Microsoft.WindowsAzure.Management.dll - - ..\..\..\..\..\..\azure-sdk-for-net\src\ResourceManagement\AzureBackup\BackupServicesManagment\bin\Net40-Debug\Microsoft.WindowsAzure.Management.BackupServicesManagment.dll + + False + ..\..\..\..\..\azure-sdk-for-net\src\ResourceManagement\AzureBackup\BackupServicesManagment\bin\Net45-Debug\Microsoft.WindowsAzure.Management.BackupServicesManagment.dll False From 50b665edf57ef2b1cc8759df4ec66b98983116a3 Mon Sep 17 00:00:00 2001 From: pikumarmsft Date: Wed, 17 Jun 2015 10:49:19 +0530 Subject: [PATCH 074/155] printing OperationID --- .../Disable-AzureBackupProtection .cs | 26 +++++-------------- .../Enable-AzureBackupProtection .cs | 23 ++++------------ .../Cmdlets/DataSource/GetAzureBackupItem.cs | 6 ++--- 3 files changed, 14 insertions(+), 41 deletions(-) diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/DataSource/Disable-AzureBackupProtection .cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/DataSource/Disable-AzureBackupProtection .cs index 901073e9c917..3b8302a0b558 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/DataSource/Disable-AzureBackupProtection .cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/DataSource/Disable-AzureBackupProtection .cs @@ -29,7 +29,7 @@ namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets.DataSource /// /// Disable Azure Backup protection /// - [Cmdlet(VerbsLifecycle.Disable, "AzureBackupProtection"), OutputType(typeof(OperationResponse))] + [Cmdlet(VerbsLifecycle.Disable, "AzureBackupProtection"), OutputType(typeof(Guid))] public class DisableAzureBackupProtection : AzureBackupDSCmdletBase { [Parameter(Position = 1, Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.RemoveProtectionOption)] @@ -59,31 +59,17 @@ public override void ExecuteCmdlet() Reason = this.Reason, Comments = this.Comments, }; + WriteVerbose("RemoveProtectionOption is = " + input.RemoveProtectionOption); + Guid jobId = Guid.Empty; var disbaleAzureBackupProtection = AzureBackupClient.DataSource.DisableProtectionAsync(GetCustomRequestHeaders(), Item.ContainerUniqueName, Item.Type, Item.DataSourceId, input, CmdletCancellationToken).Result; - WriteVerbose("Received response"); + WriteVerbose("Received disable azure backup protection response"); WriteVerbose("Converting response"); - WriteAzureBackupProtectionPolicy(disbaleAzureBackupProtection); + jobId = disbaleAzureBackupProtection.OperationId; + this.WriteObject(jobId); }); } - - public void WriteAzureBackupProtectionPolicy(OperationResponse sourceOperationResponse) - { - } - - public void WriteAzureBackupProtectionPolicy(IEnumerable sourceOperationResponseList) - { - List targetList = new List(); - - foreach (var sourceOperationResponse in sourceOperationResponseList) - { - targetList.Add(sourceOperationResponse); - } - - this.WriteObject(targetList, true); - } - public enum RemoveProtectionOptions { [EnumMember] diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/DataSource/Enable-AzureBackupProtection .cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/DataSource/Enable-AzureBackupProtection .cs index 8caf9dd47612..0cb5421f96fc 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/DataSource/Enable-AzureBackupProtection .cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/DataSource/Enable-AzureBackupProtection .cs @@ -30,7 +30,7 @@ namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets /// /// Enable Azure Backup protection /// - [Cmdlet(VerbsLifecycle.Enable, "AzureBackupProtection"), OutputType(typeof(OperationResponse))] + [Cmdlet(VerbsLifecycle.Enable, "AzureBackupProtection"), OutputType(typeof(Guid))] public class EnableAzureBackupProtection : AzureBackupItemCmdletBase { [Parameter(Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.PolicyName)] @@ -69,29 +69,16 @@ public override void ExecuteCmdlet() throw new Exception("Uknown item type"); } + Guid jobId = Guid.Empty; var enableAzureBackupProtection = AzureBackupClient.DataSource.EnableProtectionAsync(GetCustomRequestHeaders(), input, CmdletCancellationToken).Result; + WriteVerbose("Received enable azure backup protection response"); WriteVerbose("Received response"); - WriteVerbose("Converting response"); - WriteAzureBackupProtectionPolicy(enableAzureBackupProtection); + jobId = enableAzureBackupProtection.OperationId; + this.WriteObject(jobId); }); } - public void WriteAzureBackupProtectionPolicy(OperationResponse sourceOperationResponse) - { - } - - public void WriteAzureBackupProtectionPolicy(IEnumerable sourceOperationResponseList) - { - List targetList = new List(); - - foreach (var sourceOperationResponse in sourceOperationResponseList) - { - targetList.Add(sourceOperationResponse); - } - - this.WriteObject(targetList, true); - } public enum ContainerType { [EnumMember] diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/DataSource/GetAzureBackupItem.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/DataSource/GetAzureBackupItem.cs index 3dfb83912256..4d6fe0b9a333 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/DataSource/GetAzureBackupItem.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/DataSource/GetAzureBackupItem.cs @@ -76,16 +76,16 @@ public override void ExecuteCmdlet() } WriteVerbose("Received response"); - WriteAzureBackupProtectionPolicy(azureBackupDatasourceObjects, azureBackupPOObjects, Container); + WriteAzureBackupItem(azureBackupDatasourceObjects, azureBackupPOObjects, Container); }); } - public void WriteAzureBackupProtectionPolicy(DataSourceInfo sourceItem, AzureBackupContainer azureBackupItem) + public void WriteAzureBackupItem(DataSourceInfo sourceItem, AzureBackupContainer azureBackupItem) { this.WriteObject(new AzureBackupItem(sourceItem, azureBackupItem)); } - public void WriteAzureBackupProtectionPolicy(List sourceDataSourceList, List sourcePOList, AzureBackupContainer azureBackupContainer) + public void WriteAzureBackupItem(List sourceDataSourceList, List sourcePOList, AzureBackupContainer azureBackupContainer) { List targetList = new List(); From 3c753475828d203da1823fa7885c002c5ffe454f Mon Sep 17 00:00:00 2001 From: pikumarmsft Date: Wed, 17 Jun 2015 10:51:54 +0530 Subject: [PATCH 075/155] fixed traces --- .../Cmdlets/DataSource/Disable-AzureBackupProtection .cs | 1 - .../Cmdlets/DataSource/Enable-AzureBackupProtection .cs | 1 - .../Cmdlets/DataSource/GetAzureBackupItem.cs | 2 +- 3 files changed, 1 insertion(+), 3 deletions(-) diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/DataSource/Disable-AzureBackupProtection .cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/DataSource/Disable-AzureBackupProtection .cs index 3b8302a0b558..8cc27e56121a 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/DataSource/Disable-AzureBackupProtection .cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/DataSource/Disable-AzureBackupProtection .cs @@ -65,7 +65,6 @@ public override void ExecuteCmdlet() var disbaleAzureBackupProtection = AzureBackupClient.DataSource.DisableProtectionAsync(GetCustomRequestHeaders(), Item.ContainerUniqueName, Item.Type, Item.DataSourceId, input, CmdletCancellationToken).Result; WriteVerbose("Received disable azure backup protection response"); - WriteVerbose("Converting response"); jobId = disbaleAzureBackupProtection.OperationId; this.WriteObject(jobId); }); diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/DataSource/Enable-AzureBackupProtection .cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/DataSource/Enable-AzureBackupProtection .cs index 0cb5421f96fc..5f5c88f26377 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/DataSource/Enable-AzureBackupProtection .cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/DataSource/Enable-AzureBackupProtection .cs @@ -73,7 +73,6 @@ public override void ExecuteCmdlet() var enableAzureBackupProtection = AzureBackupClient.DataSource.EnableProtectionAsync(GetCustomRequestHeaders(), input, CmdletCancellationToken).Result; WriteVerbose("Received enable azure backup protection response"); - WriteVerbose("Received response"); jobId = enableAzureBackupProtection.OperationId; this.WriteObject(jobId); }); diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/DataSource/GetAzureBackupItem.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/DataSource/GetAzureBackupItem.cs index 4d6fe0b9a333..97ec79cbefe9 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/DataSource/GetAzureBackupItem.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/DataSource/GetAzureBackupItem.cs @@ -75,7 +75,7 @@ public override void ExecuteCmdlet() azureBackupPOObjects = azureBackupPOListResponse.ProtectableObject.Objects.Where(x => x.ContainerName.Equals(Container.ContainerUniqueName, System.StringComparison.InvariantCultureIgnoreCase)).ToList(); } - WriteVerbose("Received response"); + WriteVerbose("Received azure backup item response"); WriteAzureBackupItem(azureBackupDatasourceObjects, azureBackupPOObjects, Container); }); } From 9799ca5cf3b871ed72a945064544f5cb07902b85 Mon Sep 17 00:00:00 2001 From: pikumarmsft Date: Wed, 17 Jun 2015 12:55:34 +0530 Subject: [PATCH 076/155] Changed parameter name for some cmdlt. --- .../ScenarioTests/AzureBackupTests.ps1 | 21 +++++++++---------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupTests.ps1 b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupTests.ps1 index 37fc2dc259f5..252a0c1124f6 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupTests.ps1 +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupTests.ps1 @@ -54,7 +54,7 @@ function GetAzureRecoveryPointTest $azureBackUpItem.ContainerType = $ContainerType $azureBackUpItem.DataSourceId = $DataSourceId $azureBackUpItem.Type = $DataSourceType - $recoveryPoints = Get-AzureBackupRecoveryPoint -item $azureBackUpItem + $recoveryPoints = Get-AzureBackupRecoveryPoint -Item $azureBackUpItem if (!($recoveryPoints -eq $null)) { foreach($recoveryPoint in $recoveryPoints) @@ -73,7 +73,7 @@ function Test-GetAzureBackupItemTests $azureBackUpContainer.Location = $Location $azureBackUpContainer.ContainerUniqueName = $ContainerName $azureBackUpContainer.ContainerType = $ContainerType - $item = Get-AzureBackupItem -container $azureBackUpContainer + $item = Get-AzureBackupItem -Container $azureBackUpContainer if (!($item -eq $null)) { foreach($backupitem in $item) @@ -82,10 +82,10 @@ function Test-GetAzureBackupItemTests Assert-NotNull $backupitem.Name 'Name should not be null' Assert-NotNull $backupitem.Type 'Type should not be null' Assert-NotNull $backupitem.ContainerType 'ContainerType should not be null' - Assert-NotNull $backupitem.ContainerUniqueName 'ContainerUniqueName should not be null' - Assert-NotNull $backupitem.ResourceGroupName 'ResourceGroupName should not be null' - Assert-NotNull $backupitem.ResourceName 'ResourceName should not be null' - Assert-NotNull $backupitem.Location 'Location should not be null' + Assert-NotNull $backupitem.ContainerUniqueName 'ContainerUniqueName should not be null' + Assert-NotNull $backupitem.ResourceGroupName 'ResourceGroupName should not be null' + Assert-NotNull $backupitem.ResourceName 'ResourceName should not be null' + Assert-NotNull $backupitem.Location 'Location should not be null' } } } @@ -112,12 +112,11 @@ function Test-EnableDisableAzureBackupProtectionTest $azureBackUpItem.Type = $DataSourceType $azureBackUpItem.Name = $POName - $jobId = Enable-AzureBackupProtection -item $azureBackUpItem -Policy $policy + $jobId = Enable-AzureBackupProtection -Item $azureBackUpItem -Policy $policy sleep(20) - $jobId1 = Disable-AzureBackupProtection -item $azureBackUpItem + $jobId1 = Disable-AzureBackupProtection -Item $azureBackUpItem sleep(20) - $jobId2 = Enable-AzureBackupProtection -item $azureBackUpItem -Policy $policy -} + $jobId2 = Enable-AzureBackupProtection -Item $azureBackUpItem -Policy $policy } function BackUpAzureBackUpItemTest @@ -130,7 +129,7 @@ function BackUpAzureBackUpItemTest $azureBackUpItem.ContainerType = $ContainerType $azureBackUpItem.DataSourceId = $DataSourceId $azureBackUpItem.Type = $DataSourceType - $jobId = Backup-AzureBackupItem -item $azureBackUpItem + $jobId = Backup-AzureBackupItem -Item $azureBackUpItem } From 018cbb782e34f9c2393dadc5f1f3fe5a7b5baa63 Mon Sep 17 00:00:00 2001 From: AditTulasi Date: Wed, 17 Jun 2015 13:49:40 +0530 Subject: [PATCH 077/155] Fixing small issue in ps1 file --- .../ScenarioTests/AzureBackupTests.cs | 2 +- .../ScenarioTests/AzureBackupTests.ps1 | 14 +++++----- .../Cmdlets/Jobs/GetAzureBackupJob.cs | 3 +-- .../Cmdlets/Jobs/GetAzureBackupJobDetails.cs | 8 +----- .../Cmdlets/Jobs/StopAzureBackukpJob.cs | 27 +++++++++---------- .../Cmdlets/Jobs/WaitAzureBackupJob.cs | 4 +-- .../Properties/Resources.Designer.cs | 2 +- 7 files changed, 25 insertions(+), 35 deletions(-) diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupTests.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupTests.cs index 5a175ae073e8..a4b4b67e579a 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupTests.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupTests.cs @@ -51,7 +51,7 @@ public void StopAzureBackupJobTests() } public void GetRecoveryPointTests() { - this.RunPowerShellTest("GetAzureRecoveryPointTest"); + this.RunPowerShellTest("Test-GetAzureRecoveryPoint"); } [Fact] diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupTests.ps1 b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupTests.ps1 index 37fc2dc259f5..9bdec848e571 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupTests.ps1 +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupTests.ps1 @@ -44,7 +44,7 @@ function Test-GetAzureBackupProtectionPolicyTests } } -function GetAzureRecoveryPointTest +function Test-GetAzureRecoveryPoint { $azureBackUpItem = New-Object Microsoft.Azure.Commands.AzureBackup.Cmdlets.AzureBackupItem $azureBackUpItem.ResourceGroupName = $ResourceGroupName @@ -57,11 +57,12 @@ function GetAzureRecoveryPointTest $recoveryPoints = Get-AzureBackupRecoveryPoint -item $azureBackUpItem if (!($recoveryPoints -eq $null)) { - foreach($recoveryPoint in $recoveryPoints) - { - Assert-NotNull $recoveryPoint.RecoveryPointTime 'RecoveryPointTime should not be null' - Assert-NotNull $recoveryPoint.RecoveryPointType 'RecoveryPointType should not be null' - Assert-NotNull $recoveryPoint.RecoveryPointId 'RecoveryPointId should not be null' + foreach($recoveryPoint in $recoveryPoints) + { + Assert-NotNull $recoveryPoint.RecoveryPointTime 'RecoveryPointTime should not be null' + Assert-NotNull $recoveryPoint.RecoveryPointType 'RecoveryPointType should not be null' + Assert-NotNull $recoveryPoint.RecoveryPointId 'RecoveryPointId should not be null' + } } } @@ -118,7 +119,6 @@ function Test-EnableDisableAzureBackupProtectionTest sleep(20) $jobId2 = Enable-AzureBackupProtection -item $azureBackUpItem -Policy $policy } -} function BackUpAzureBackUpItemTest { diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Jobs/GetAzureBackupJob.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Jobs/GetAzureBackupJob.cs index c28b6e8d537a..ea347aa6e9d2 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Jobs/GetAzureBackupJob.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Jobs/GetAzureBackupJob.cs @@ -61,8 +61,7 @@ public override void ExecuteCmdlet() { if (Job != null) { - this.ResourceGroupName = Job.ResourceGroupName; - this.ResourceName = Job.ResourceName; + InitializeAzureBackupCmdlet(Job.ResourceGroupName, Job.ResourceName, Job.Location); } base.ExecuteCmdlet(); diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Jobs/GetAzureBackupJobDetails.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Jobs/GetAzureBackupJobDetails.cs index a5763c4cee97..6cebd4fd82fa 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Jobs/GetAzureBackupJobDetails.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Jobs/GetAzureBackupJobDetails.cs @@ -39,19 +39,13 @@ public override void ExecuteCmdlet() { if (Job != null) { - this.ResourceGroupName = Job.ResourceGroupName; - this.ResourceName = Job.ResourceName; + InitializeAzureBackupCmdlet(Job.ResourceGroupName, Job.ResourceName, Job.Location); } base.ExecuteCmdlet(); ExecutionBlock(() => { - //if (Job != null && JobID != null) - //{ - // throw new Exception("Please use either JobID filter or Job filter but not both."); - //} - if (Job != null) { JobID = Job.InstanceId; diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Jobs/StopAzureBackukpJob.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Jobs/StopAzureBackukpJob.cs index 58f07767cc25..1288424f6bdb 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Jobs/StopAzureBackukpJob.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Jobs/StopAzureBackukpJob.cs @@ -45,37 +45,36 @@ public override void ExecuteCmdlet() { if (Job != null) { - this.ResourceGroupName = Job.ResourceGroupName; - this.ResourceName = Job.ResourceName; + InitializeAzureBackupCmdlet(Job.ResourceGroupName, Job.ResourceName, Job.Location); } base.ExecuteCmdlet(); ExecutionBlock(() => { - //if (JobID != null && Job != null) - //{ - // throw new Exception("Please use either JobID filter or Job filter but not both."); - //} - if (Job != null) { JobID = Job.InstanceId; } WriteDebug("JobID is: " + JobID); - Task cancelTask = AzureBackupClient.Job.StopAsync(JobID, GetCustomRequestHeaders(), CmdletCancellationToken); + OperationResponse cancelTask = AzureBackupClient.Job.StopAsync(JobID, GetCustomRequestHeaders(), CmdletCancellationToken).Result; - if (cancelTask.IsFaulted) + var opStatus = AzureBackupClient.OperationStatus.GetAsync(cancelTask.OperationId.ToString(), GetCustomRequestHeaders()).Result; + while (opStatus.OperationStatus != "Completed") + { + WriteDebug("Waiting for the task to complete"); + opStatus = AzureBackupClient.OperationStatus.GetAsync(cancelTask.OperationId.ToString(), GetCustomRequestHeaders()).Result; + } + // TODO: + if (opStatus.OperationResult == "Failed") { - WriteObject(cancelTask.Exception); + var errorRecord = new ErrorRecord(new Exception("Cannot cancel job."), opStatus.Message, ErrorCategory.InvalidOperation, null); + WriteError(errorRecord); } else { - OperationResponse opResponse = cancelTask.Result; - // TODO - // Call and wait until this completes. - WriteDebug("OpID is : " + opResponse.OperationId); + WriteDebug("Triggered cancellation of job with JobID: " + JobID); } }); } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Jobs/WaitAzureBackupJob.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Jobs/WaitAzureBackupJob.cs index d08aa191d70b..c04fd991c291 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Jobs/WaitAzureBackupJob.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Jobs/WaitAzureBackupJob.cs @@ -50,9 +50,7 @@ public override void ExecuteCmdlet() WriteDebug("Type of input paramter is List"); foreach (AzureBackupJob jobToWait in ((Job as PSObject).ImmediateBaseObject as List)) { - this.ResourceGroupName = jobToWait.ResourceGroupName; - this.ResourceName = jobToWait.ResourceName; - this.Location = jobToWait.Location; + InitializeAzureBackupCmdlet(jobToWait.ResourceGroupName, jobToWait.ResourceName, jobToWait.Location); specifiedJobs.Add(jobToWait.InstanceId); } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Properties/Resources.Designer.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Properties/Resources.Designer.cs index 86135b355019..e6615b26f189 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Properties/Resources.Designer.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Properties/Resources.Designer.cs @@ -1,7 +1,7 @@ //------------------------------------------------------------------------------ // // This code was generated by a tool. -// Runtime Version:4.0.30319.34014 +// Runtime Version:4.0.30319.34209 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. From 334102564218a09ba982824e1ef0d4aaf068a240 Mon Sep 17 00:00:00 2001 From: AditTulasi Date: Wed, 17 Jun 2015 13:57:13 +0530 Subject: [PATCH 078/155] Fixing test case name --- .../Commands.AzureBackup.Test/ScenarioTests/AzureBackupTests.cs | 2 +- .../ScenarioTests/AzureBackupTests.ps1 | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupTests.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupTests.cs index a4b4b67e579a..0c9aed185b45 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupTests.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupTests.cs @@ -57,7 +57,7 @@ public void GetRecoveryPointTests() [Fact] public void BackUpAzureBackUpItem() { - this.RunPowerShellTest("BackUpAzureBackUpItemTest"); + this.RunPowerShellTest("Test-BackUpAzureBackUpItem"); } } } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupTests.ps1 b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupTests.ps1 index 9bdec848e571..b2267d04211a 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupTests.ps1 +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupTests.ps1 @@ -120,7 +120,7 @@ function Test-EnableDisableAzureBackupProtectionTest $jobId2 = Enable-AzureBackupProtection -item $azureBackUpItem -Policy $policy } -function BackUpAzureBackUpItemTest +function Test-BackUpAzureBackUpItem { $azureBackUpItem = New-Object Microsoft.Azure.Commands.AzureBackup.Cmdlets.AzureBackupItem $azureBackUpItem.ResourceGroupName = $ResourceGroupName From ee37157db9965984c79721d636b678680a7fe194 Mon Sep 17 00:00:00 2001 From: dragonfly91 Date: Wed, 17 Jun 2015 14:04:44 +0530 Subject: [PATCH 079/155] Including the session records for PS tests --- .../Commands.AzureBackup.Test.csproj | 2 + .../GetAzureBackupContainerTests.json | 72 ++++++++++++++++++ .../GetAzureBackupVaultCredentialsTests.json | 75 +++++++++++++++++++ 3 files changed, 149 insertions(+) create mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupTests/GetAzureBackupContainerTests.json create mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupTests/GetAzureBackupVaultCredentialsTests.json diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/Commands.AzureBackup.Test.csproj b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/Commands.AzureBackup.Test.csproj index ba13feb1aeea..dcb6556569c2 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/Commands.AzureBackup.Test.csproj +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/Commands.AzureBackup.Test.csproj @@ -157,7 +157,9 @@ + + diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupTests/GetAzureBackupContainerTests.json b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupTests/GetAzureBackupContainerTests.json new file mode 100644 index 000000000000..0cf761b79a2e --- /dev/null +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupTests/GetAzureBackupContainerTests.json @@ -0,0 +1,72 @@ +{ + "Entries": [ + { + "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/containers?api-version=2014-09-01&dummy=%26FriendlyName%3Ddev01Testing", + "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vY29udGFpbmVycz9hcGktdmVyc2lvbj0yMDE0LTA5LTAxJmR1bW15PSUyNkZyaWVuZGx5TmFtZSUzRGRldjAxVGVzdGluZw==", + "RequestMethod": "GET", + "RequestBody": "", + "RequestHeaders": { + "Accept-Language": [ + "en-us" + ], + "x-ms-version": [ + "2013-03-01" + ], + "User-Agent": [ + "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" + ] + }, + "ResponseBody": "{\r\n \"Objects\": [\r\n {\r\n \"FriendlyName\": \"dev01Testing\",\r\n \"SubscriptionId\": \"f5303a0b-fae4-4cdb-b44d-0e4c032dde26\",\r\n \"ContainerType\": \"IaasVMContainer\",\r\n \"ParentContainerName\": \"dev01Testing\",\r\n \"ParentContainerFriendlyName\": \"dev01Testing\",\r\n \"RegistrationStatus\": \"Registered\",\r\n \"HealthStatus\": \"Healthy\",\r\n \"PropertyBag\": null,\r\n \"InstanceId\": null,\r\n \"Name\": \"iaasvmcontainer;dev01testing;dev01testing\",\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"FriendlyName\": \"dev01Testing\",\r\n \"SubscriptionId\": \"f5303a0b-fae4-4cdb-b44d-0e4c032dde26\",\r\n \"ContainerType\": \"IaasVMServiceContainer\",\r\n \"ParentContainerName\": null,\r\n \"ParentContainerFriendlyName\": null,\r\n \"RegistrationStatus\": \"NotRegistered\",\r\n \"HealthStatus\": \"Healthy\",\r\n \"PropertyBag\": \"\",\r\n \"InstanceId\": null,\r\n \"Name\": \"dev01testing\",\r\n \"OperationInProgress\": false\r\n }\r\n ],\r\n \"ResultCount\": 2,\r\n \"Skiptoken\": null\r\n}", + "ResponseHeaders": { + "Content-Length": [ + "763" + ], + "Content-Type": [ + "application/json" + ], + "Expires": [ + "-1" + ], + "Pragma": [ + "no-cache" + ], + "x-ms-request-id": [ + "cb36f6ae-187d-4a30-b367-d714c0733647" + ], + "x-ms-client-request-id": [ + "4b55cb3b-c4db-4dda-8db9-891256be4264", + "4b55cb3b-c4db-4dda-8db9-891256be4264" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "x-ms-ratelimit-remaining-subscription-reads": [ + "14999" + ], + "x-ms-correlation-request-id": [ + "cb36f6ae-187d-4a30-b367-d714c0733647" + ], + "x-ms-routing-request-id": [ + "CENTRALUS:20150616T144830Z:cb36f6ae-187d-4a30-b367-d714c0733647" + ], + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Tue, 16 Jun 2015 14:48:30 GMT" + ], + "Server": [ + "Microsoft-IIS/8.0" + ], + "X-Powered-By": [ + "ASP.NET" + ] + }, + "StatusCode": 200 + } + ], + "Names": {}, + "Variables": { + "SubscriptionId": "f5303a0b-fae4-4cdb-b44d-0e4c032dde26" + } +} \ No newline at end of file diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupTests/GetAzureBackupVaultCredentialsTests.json b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupTests/GetAzureBackupVaultCredentialsTests.json new file mode 100644 index 000000000000..16a38c9e8da8 --- /dev/null +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupTests/GetAzureBackupVaultCredentialsTests.json @@ -0,0 +1,75 @@ +{ + "Entries": [ + { + "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/certificates/IdMgmtInternalCert?api-version=2015-03-15", + "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vY2VydGlmaWNhdGVzL0lkTWdtdEludGVybmFsQ2VydD9hcGktdmVyc2lvbj0yMDE1LTAzLTE1", + "RequestMethod": "PUT", + "RequestBody": "{\r\n \"properties\": {\r\n \"certificate\": \"MIIC3TCCAcWgAwIBAgIQfAPxy3CY6JlCIBZLq9ZwVjANBgkqhkiG9w0BAQUFADAeMRwwGgYDVQQDExNXaW5kb3dzIEF6dXJlIFRvb2xzMB4XDTE1MDYxNjE1NDQ1MVoXDTE1MDYxODE1NTQ1MVowHjEcMBoGA1UEAxMTV2luZG93cyBBenVyZSBUb29sczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJcmOVXMwQS3uiV3xRbeRbbQxjbS/eT/n3m7b9nd2NoPsMhGT+uvypAL3iG2wxd7HzqjZswIVMhsLqYMzQIv6kcAlbyosuiaT56ga/xLBZJGJg7DHA4ndQf4UnigmqLCZeE5dyvJ/U070iHEBS1M9pa6TPmYgIEVKFZ1p3qDnmHsz6DPb39vdzxpKAsseGD2ocdLmb0Eq1s7ZnS9djzLkiY7x2P715Iivz1PZx/JcjTAwCorfWU9elI+sdSY62DZKhZbrXnK+qFEYnRO1cPWXe9AvJynQvS+FRkD8HCLHweWXEvCs/BX8CGJbKi9XYnuDlhuxm4dLBCs92tXrhu2hUsCAwEAAaMXMBUwEwYDVR0lBAwwCgYIKwYBBQUHAwIwDQYJKoZIhvcNAQEFBQADggEBAGj+8Vo4WUUui7GepTrsRAKAx2ZpdfCTTBhsdQIxbtaz312xX93i6X0CCmJLRjeXNNoVv5b0zDFnIdoTqn3eraDNonkMUqNGGleC4gMnOLzbKURMWeJ2cfGIVGtHkSv8ZFgU+ttZtCPX6SpzAWcplCeEX8DNs87e9ew4jZg4gPYu9zEO+Z4iYQlGd55Pd8JiiCsVcs9KhtrbBHC9J4/tTAZsONPLqo3PFdXMqmuN5Yct+J5T93kW3FWb/X5oiNZXtn9O4j7T7rYSHje9IZnSoiNW0Nc9/JgQ5VPbUMpc6U6tE53yIQ1aWpLj49L+gxSoZ7KWefN/NDMGSXTzTuXJ9R0=\"\r\n }\r\n}", + "RequestHeaders": { + "Content-Type": [ + "application/json" + ], + "Content-Length": [ + "1035" + ], + "Accept-Language": [ + "en-us" + ], + "x-ms-version": [ + "2013-03-01" + ], + "User-Agent": [ + "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" + ] + }, + "ResponseBody": "{\r\n \"properties\": {\r\n \"certificate\": \"MIIC3TCCAcWgAwIBAgIQfAPxy3CY6JlCIBZLq9ZwVjANBgkqhkiG9w0BAQUFADAeMRwwGgYDVQQDExNXaW5kb3dzIEF6dXJlIFRvb2xzMB4XDTE1MDYxNjE1NDQ1MVoXDTE1MDYxODE1NTQ1MVowHjEcMBoGA1UEAxMTV2luZG93cyBBenVyZSBUb29sczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJcmOVXMwQS3uiV3xRbeRbbQxjbS/eT/n3m7b9nd2NoPsMhGT+uvypAL3iG2wxd7HzqjZswIVMhsLqYMzQIv6kcAlbyosuiaT56ga/xLBZJGJg7DHA4ndQf4UnigmqLCZeE5dyvJ/U070iHEBS1M9pa6TPmYgIEVKFZ1p3qDnmHsz6DPb39vdzxpKAsseGD2ocdLmb0Eq1s7ZnS9djzLkiY7x2P715Iivz1PZx/JcjTAwCorfWU9elI+sdSY62DZKhZbrXnK+qFEYnRO1cPWXe9AvJynQvS+FRkD8HCLHweWXEvCs/BX8CGJbKi9XYnuDlhuxm4dLBCs92tXrhu2hUsCAwEAAaMXMBUwEwYDVR0lBAwwCgYIKwYBBQUHAwIwDQYJKoZIhvcNAQEFBQADggEBAGj+8Vo4WUUui7GepTrsRAKAx2ZpdfCTTBhsdQIxbtaz312xX93i6X0CCmJLRjeXNNoVv5b0zDFnIdoTqn3eraDNonkMUqNGGleC4gMnOLzbKURMWeJ2cfGIVGtHkSv8ZFgU+ttZtCPX6SpzAWcplCeEX8DNs87e9ew4jZg4gPYu9zEO+Z4iYQlGd55Pd8JiiCsVcs9KhtrbBHC9J4/tTAZsONPLqo3PFdXMqmuN5Yct+J5T93kW3FWb/X5oiNZXtn9O4j7T7rYSHje9IZnSoiNW0Nc9/JgQ5VPbUMpc6U6tE53yIQ1aWpLj49L+gxSoZ7KWefN/NDMGSXTzTuXJ9R0=\",\r\n \"resourceId\": 3420983535961922368,\r\n \"globalAcsNamespace\": \"seadev01rp1users\",\r\n \"globalAcsHostName\": \"accesscontrol.windows.net\",\r\n \"globalAcsRPRealm\": \"http://windowscloudbackup/m3\",\r\n \"subject\": \"CN=Windows Azure Tools\",\r\n \"validFrom\": \"2015-06-16T21:14:51+05:30\",\r\n \"validTo\": \"2015-06-18T21:24:51+05:30\",\r\n \"thumbprint\": \"3C6F6F4C967A814B373E16F4E21903279E068704\",\r\n \"friendlyName\": \"\",\r\n \"issuer\": \"CN=Windows Azure Tools\"\r\n }\r\n}", + "ResponseHeaders": { + "Content-Length": [ + "1409" + ], + "Content-Type": [ + "application/json" + ], + "Expires": [ + "-1" + ], + "Pragma": [ + "no-cache" + ], + "x-ms-request-id": [ + "8511ee99-3e25-405e-aa6f-0cb873bdab7c" + ], + "x-ms-client-request-id": [ + "0c51abcf-3be9-4c40-ba65-de8e5ed0d233", + "0c51abcf-3be9-4c40-ba65-de8e5ed0d233" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "x-ms-ratelimit-remaining-subscription-writes": [ + "1197" + ], + "x-ms-correlation-request-id": [ + "8511ee99-3e25-405e-aa6f-0cb873bdab7c" + ], + "x-ms-routing-request-id": [ + "CENTRALUS:20150616T155458Z:8511ee99-3e25-405e-aa6f-0cb873bdab7c" + ], + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Tue, 16 Jun 2015 15:54:58 GMT" + ], + "Server": [ + "Microsoft-IIS/8.0" + ] + }, + "StatusCode": 200 + } + ], + "Names": {}, + "Variables": { + "SubscriptionId": "f5303a0b-fae4-4cdb-b44d-0e4c032dde26" + } +} \ No newline at end of file From 95030f3907d83f03799cec167be39e8b3f04cd34 Mon Sep 17 00:00:00 2001 From: pikumarmsft Date: Wed, 17 Jun 2015 14:13:51 +0530 Subject: [PATCH 080/155] Seperated enable and disable function . --- .../ScenarioTests/AzureBackupTests.cs | 12 +++++-- .../ScenarioTests/AzureBackupTests.ps1 | 33 ++++++++++++------- 2 files changed, 31 insertions(+), 14 deletions(-) diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupTests.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupTests.cs index 5a175ae073e8..c330f4eb2b73 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupTests.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupTests.cs @@ -28,13 +28,19 @@ public void ListProtectionPolicyTests() [Fact] public void ListAzureBackupItemTests() { - this.RunPowerShellTest("Test-GetAzureBackupItemTests"); + this.RunPowerShellTest("Test-GetAzureBackupItem"); } [Fact] - public void EnableDisableAzureBackupProtectionTest() + public void EnableAzureBackupProtectionTest() { - this.RunPowerShellTest("Test-EnableDisableAzureBackupProtectionTest"); + this.RunPowerShellTest("Test-EnableAzureBackupProtection"); + } + + [Fact] + public void DisableAzureBackupProtectionTest() + { + this.RunPowerShellTest("Test-DisableAzureBackupProtection"); } [Fact] diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupTests.ps1 b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupTests.ps1 index 252a0c1124f6..e9ea9df16311 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupTests.ps1 +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupTests.ps1 @@ -57,15 +57,16 @@ function GetAzureRecoveryPointTest $recoveryPoints = Get-AzureBackupRecoveryPoint -Item $azureBackUpItem if (!($recoveryPoints -eq $null)) { - foreach($recoveryPoint in $recoveryPoints) - { - Assert-NotNull $recoveryPoint.RecoveryPointTime 'RecoveryPointTime should not be null' - Assert-NotNull $recoveryPoint.RecoveryPointType 'RecoveryPointType should not be null' - Assert-NotNull $recoveryPoint.RecoveryPointId 'RecoveryPointId should not be null' + foreach($recoveryPoint in $recoveryPoints) + { + Assert-NotNull $recoveryPoint.RecoveryPointTime 'RecoveryPointTime should not be null' + Assert-NotNull $recoveryPoint.RecoveryPointType 'RecoveryPointType should not be null' + Assert-NotNull $recoveryPoint.RecoveryPointId 'RecoveryPointId should not be null' + } } } -function Test-GetAzureBackupItemTests +function Test-GetAzureBackupItem { $azureBackUpContainer = New-Object Microsoft.Azure.Commands.AzureBackup.Cmdlets.AzureBackupContainer $azureBackUpContainer.ResourceGroupName = $ResourceGroupName @@ -90,7 +91,7 @@ function Test-GetAzureBackupItemTests } } -function Test-EnableDisableAzureBackupProtectionTest +function Test-EnableAzureBackupProtection { $policy = New-Object Microsoft.Azure.Commands.AzureBackup.Cmdlets.AzureBackupProtectionPolicy $policy.InstanceId = $PolicyId @@ -111,12 +112,22 @@ function Test-EnableDisableAzureBackupProtectionTest $azureBackUpItem.DataSourceId = $DataSourceId $azureBackUpItem.Type = $DataSourceType $azureBackUpItem.Name = $POName - $jobId = Enable-AzureBackupProtection -Item $azureBackUpItem -Policy $policy - sleep(20) + +} + +function Test-DisableAzureBackupProtection +{ + $azureBackUpItem = New-Object Microsoft.Azure.Commands.AzureBackup.Cmdlets.AzureBackupItem + $azureBackUpItem.ResourceGroupName = $ResourceGroupName + $azureBackUpItem.ResourceName = $ResourceName + $azureBackUpItem.Location = $Location + $azureBackUpItem.ContainerUniqueName = $ContainerName + $azureBackUpItem.ContainerType = $ContainerType + $azureBackUpItem.DataSourceId = $DataSourceId + $azureBackUpItem.Type = $DataSourceType + $azureBackUpItem.Name = $POName $jobId1 = Disable-AzureBackupProtection -Item $azureBackUpItem - sleep(20) - $jobId2 = Enable-AzureBackupProtection -Item $azureBackUpItem -Policy $policy } function BackUpAzureBackUpItemTest From fc2e4d770f6a6e5bc3d242d6a1770b28f890eec2 Mon Sep 17 00:00:00 2001 From: pikumarmsft Date: Wed, 17 Jun 2015 14:29:39 +0530 Subject: [PATCH 081/155] checking in json files --- .../Commands.AzureBackup.Test.csproj | 5 +- .../DisableAzureBackupProtectionTest.json | 75 +++++++ .../EnableAzureBackupProtectionTest.json | 75 +++++++ ...nableDisableAzureBackupProtectionTest.json | 209 ------------------ .../ListAzureBackupItemTests.json | 36 +-- 5 files changed, 171 insertions(+), 229 deletions(-) create mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupTests/DisableAzureBackupProtectionTest.json create mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupTests/EnableAzureBackupProtectionTest.json delete mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupTests/EnableDisableAzureBackupProtectionTest.json diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/Commands.AzureBackup.Test.csproj b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/Commands.AzureBackup.Test.csproj index d71137cf7849..e13844c82449 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/Commands.AzureBackup.Test.csproj +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/Commands.AzureBackup.Test.csproj @@ -152,10 +152,11 @@ Designer - PreserveNewest + Always - + + diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupTests/DisableAzureBackupProtectionTest.json b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupTests/DisableAzureBackupProtectionTest.json new file mode 100644 index 000000000000..f8e2d72d6458 --- /dev/null +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupTests/DisableAzureBackupProtectionTest.json @@ -0,0 +1,75 @@ +{ + "Entries": [ + { + "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/containers/iaasvmcontainer%3Bdev01testing%3Bdev01testing/datasources/VM/17593283453810/unprotect?api-version=2014-09-01", + "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vY29udGFpbmVycy9pYWFzdm1jb250YWluZXIlM0JkZXYwMXRlc3RpbmclM0JkZXYwMXRlc3RpbmcvZGF0YXNvdXJjZXMvVk0vMTc1OTMyODM0NTM4MTAvdW5wcm90ZWN0P2FwaS12ZXJzaW9uPTIwMTQtMDktMDE=", + "RequestMethod": "POST", + "RequestBody": "{\r\n \"RemoveProtectionOption\": \"RetainBackupData\"\r\n}", + "RequestHeaders": { + "Content-Type": [ + "application/json" + ], + "Content-Length": [ + "52" + ], + "Accept-Language": [ + "en-us" + ], + "User-Agent": [ + "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" + ] + }, + "ResponseBody": "\"2fa60bcf-b87e-4fbf-b1dd-0003ece38f40\"", + "ResponseHeaders": { + "Content-Length": [ + "38" + ], + "Content-Type": [ + "application/json" + ], + "Expires": [ + "-1" + ], + "Pragma": [ + "no-cache" + ], + "x-ms-request-id": [ + "18e31f54-88cd-43e8-969f-0b1cd783cf1f" + ], + "x-ms-client-request-id": [ + "5ec97812-7689-447c-8218-ffd9841835d9", + "5ec97812-7689-447c-8218-ffd9841835d9" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "x-ms-ratelimit-remaining-subscription-writes": [ + "1193" + ], + "x-ms-correlation-request-id": [ + "18e31f54-88cd-43e8-969f-0b1cd783cf1f" + ], + "x-ms-routing-request-id": [ + "CENTRALUS:20150617T085657Z:18e31f54-88cd-43e8-969f-0b1cd783cf1f" + ], + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Wed, 17 Jun 2015 08:56:56 GMT" + ], + "Server": [ + "Microsoft-IIS/8.0" + ], + "X-Powered-By": [ + "ASP.NET" + ] + }, + "StatusCode": 202 + } + ], + "Names": {}, + "Variables": { + "SubscriptionId": "f5303a0b-fae4-4cdb-b44d-0e4c032dde26" + } +} \ No newline at end of file diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupTests/EnableAzureBackupProtectionTest.json b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupTests/EnableAzureBackupProtectionTest.json new file mode 100644 index 000000000000..7a9320a43cdd --- /dev/null +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupTests/EnableAzureBackupProtectionTest.json @@ -0,0 +1,75 @@ +{ + "Entries": [ + { + "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/protectableobjects/protect?api-version=2014-09-01", + "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vcHJvdGVjdGFibGVvYmplY3RzL3Byb3RlY3Q/YXBpLXZlcnNpb249MjAxNC0wOS0wMQ==", + "RequestMethod": "POST", + "RequestBody": "{\r\n \"ProtectableObjects\": [\r\n \"iaasvmcontainer;dev01testing;dev01testing\"\r\n ],\r\n \"ProtectableObjectType\": \"VM\",\r\n \"PolicyId\": \"c87bbada-6e1b-4db2-b76c-9062d28959a4\"\r\n}", + "RequestHeaders": { + "Content-Type": [ + "application/json" + ], + "Content-Length": [ + "174" + ], + "Accept-Language": [ + "en-us" + ], + "User-Agent": [ + "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" + ] + }, + "ResponseBody": "\"a9bab2af-4d9b-40a9-ad02-c5d20973aa52\"", + "ResponseHeaders": { + "Content-Length": [ + "38" + ], + "Content-Type": [ + "application/json" + ], + "Expires": [ + "-1" + ], + "Pragma": [ + "no-cache" + ], + "x-ms-request-id": [ + "31de0e3d-4909-482b-80e1-b3957f16569e" + ], + "x-ms-client-request-id": [ + "2b2f4905-23d0-44a9-876b-3d6e8e7ca9c2", + "2b2f4905-23d0-44a9-876b-3d6e8e7ca9c2" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "x-ms-ratelimit-remaining-subscription-writes": [ + "1192" + ], + "x-ms-correlation-request-id": [ + "31de0e3d-4909-482b-80e1-b3957f16569e" + ], + "x-ms-routing-request-id": [ + "CENTRALUS:20150617T085435Z:31de0e3d-4909-482b-80e1-b3957f16569e" + ], + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Wed, 17 Jun 2015 08:54:35 GMT" + ], + "Server": [ + "Microsoft-IIS/8.0" + ], + "X-Powered-By": [ + "ASP.NET" + ] + }, + "StatusCode": 202 + } + ], + "Names": {}, + "Variables": { + "SubscriptionId": "f5303a0b-fae4-4cdb-b44d-0e4c032dde26" + } +} \ No newline at end of file diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupTests/EnableDisableAzureBackupProtectionTest.json b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupTests/EnableDisableAzureBackupProtectionTest.json deleted file mode 100644 index 579f1f6b9075..000000000000 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupTests/EnableDisableAzureBackupProtectionTest.json +++ /dev/null @@ -1,209 +0,0 @@ -{ - "Entries": [ - { - "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/protectableobjects/protect?api-version=2014-09-01", - "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vcHJvdGVjdGFibGVvYmplY3RzL3Byb3RlY3Q/YXBpLXZlcnNpb249MjAxNC0wOS0wMQ==", - "RequestMethod": "POST", - "RequestBody": "{\r\n \"ProtectableObjects\": [\r\n \"iaasvmcontainer;dev01testing;dev01testing\"\r\n ],\r\n \"ProtectableObjectType\": \"VM\",\r\n \"PolicyId\": \"c87bbada-6e1b-4db2-b76c-9062d28959a4\"\r\n}", - "RequestHeaders": { - "Content-Type": [ - "application/json" - ], - "Content-Length": [ - "174" - ], - "Accept-Language": [ - "en-us" - ], - "User-Agent": [ - "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" - ] - }, - "ResponseBody": "\"f0cba117-8ffe-4f9e-8ca5-84104e73d8d8\"", - "ResponseHeaders": { - "Content-Length": [ - "38" - ], - "Content-Type": [ - "application/json" - ], - "Expires": [ - "-1" - ], - "Pragma": [ - "no-cache" - ], - "x-ms-request-id": [ - "2fc9c464-5788-4a97-974c-27e3e3ffbe4d" - ], - "x-ms-client-request-id": [ - "4cd7d528-2138-46fe-a247-b3e8115ff54a", - "4cd7d528-2138-46fe-a247-b3e8115ff54a" - ], - "Strict-Transport-Security": [ - "max-age=31536000; includeSubDomains" - ], - "x-ms-ratelimit-remaining-subscription-writes": [ - "1198" - ], - "x-ms-correlation-request-id": [ - "2fc9c464-5788-4a97-974c-27e3e3ffbe4d" - ], - "x-ms-routing-request-id": [ - "CENTRALUS:20150615T144514Z:2fc9c464-5788-4a97-974c-27e3e3ffbe4d" - ], - "Cache-Control": [ - "no-cache" - ], - "Date": [ - "Mon, 15 Jun 2015 14:45:14 GMT" - ], - "Server": [ - "Microsoft-IIS/8.0" - ], - "X-Powered-By": [ - "ASP.NET" - ] - }, - "StatusCode": 202 - }, - { - "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/protectableobjects/protect?api-version=2014-09-01", - "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vcHJvdGVjdGFibGVvYmplY3RzL3Byb3RlY3Q/YXBpLXZlcnNpb249MjAxNC0wOS0wMQ==", - "RequestMethod": "POST", - "RequestBody": "{\r\n \"ProtectableObjects\": [\r\n \"iaasvmcontainer;dev01testing;dev01testing\"\r\n ],\r\n \"ProtectableObjectType\": \"VM\",\r\n \"PolicyId\": \"c87bbada-6e1b-4db2-b76c-9062d28959a4\"\r\n}", - "RequestHeaders": { - "Content-Type": [ - "application/json" - ], - "Content-Length": [ - "174" - ], - "Accept-Language": [ - "en-us" - ], - "User-Agent": [ - "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" - ] - }, - "ResponseBody": "\"8a5a5957-9fdf-43da-9259-63e8abe3fc57\"", - "ResponseHeaders": { - "Content-Length": [ - "38" - ], - "Content-Type": [ - "application/json" - ], - "Expires": [ - "-1" - ], - "Pragma": [ - "no-cache" - ], - "x-ms-request-id": [ - "772c23c3-c24a-48f0-a6db-b57afa35ebaf" - ], - "x-ms-client-request-id": [ - "4e04d16f-deb2-4ab6-89ef-5c971506864b", - "4e04d16f-deb2-4ab6-89ef-5c971506864b" - ], - "Strict-Transport-Security": [ - "max-age=31536000; includeSubDomains" - ], - "x-ms-ratelimit-remaining-subscription-writes": [ - "1196" - ], - "x-ms-correlation-request-id": [ - "772c23c3-c24a-48f0-a6db-b57afa35ebaf" - ], - "x-ms-routing-request-id": [ - "CENTRALUS:20150615T144558Z:772c23c3-c24a-48f0-a6db-b57afa35ebaf" - ], - "Cache-Control": [ - "no-cache" - ], - "Date": [ - "Mon, 15 Jun 2015 14:45:58 GMT" - ], - "Server": [ - "Microsoft-IIS/8.0" - ], - "X-Powered-By": [ - "ASP.NET" - ] - }, - "StatusCode": 202 - }, - { - "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/containers/iaasvmcontainer%3Bdev01testing%3Bdev01testing/datasources/VM/17593283453810/unprotect?api-version=2014-09-01", - "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vY29udGFpbmVycy9pYWFzdm1jb250YWluZXIlM0JkZXYwMXRlc3RpbmclM0JkZXYwMXRlc3RpbmcvZGF0YXNvdXJjZXMvVk0vMTc1OTMyODM0NTM4MTAvdW5wcm90ZWN0P2FwaS12ZXJzaW9uPTIwMTQtMDktMDE=", - "RequestMethod": "POST", - "RequestBody": "{\r\n \"RemoveProtectionOption\": \"RetainBackupData\"\r\n}", - "RequestHeaders": { - "Content-Type": [ - "application/json" - ], - "Content-Length": [ - "52" - ], - "Accept-Language": [ - "en-us" - ], - "User-Agent": [ - "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" - ] - }, - "ResponseBody": "\"a6c19cb6-6f29-40d7-a216-e4590ad7550d\"", - "ResponseHeaders": { - "Content-Length": [ - "38" - ], - "Content-Type": [ - "application/json" - ], - "Expires": [ - "-1" - ], - "Pragma": [ - "no-cache" - ], - "x-ms-request-id": [ - "a51fe2a5-f3d6-4d3e-af88-0e421ffe207c" - ], - "x-ms-client-request-id": [ - "e0dc8344-0909-4188-aa69-49f7f5914b16", - "e0dc8344-0909-4188-aa69-49f7f5914b16" - ], - "Strict-Transport-Security": [ - "max-age=31536000; includeSubDomains" - ], - "x-ms-ratelimit-remaining-subscription-writes": [ - "1197" - ], - "x-ms-correlation-request-id": [ - "a51fe2a5-f3d6-4d3e-af88-0e421ffe207c" - ], - "x-ms-routing-request-id": [ - "CENTRALUS:20150615T144536Z:a51fe2a5-f3d6-4d3e-af88-0e421ffe207c" - ], - "Cache-Control": [ - "no-cache" - ], - "Date": [ - "Mon, 15 Jun 2015 14:45:36 GMT" - ], - "Server": [ - "Microsoft-IIS/8.0" - ], - "X-Powered-By": [ - "ASP.NET" - ] - }, - "StatusCode": 202 - } - ], - "Names": {}, - "Variables": { - "SubscriptionId": "f5303a0b-fae4-4cdb-b44d-0e4c032dde26" - } -} \ No newline at end of file diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupTests/ListAzureBackupItemTests.json b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupTests/ListAzureBackupItemTests.json index 762f2230259e..1f2c38c86b44 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupTests/ListAzureBackupItemTests.json +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupTests/ListAzureBackupItemTests.json @@ -13,10 +13,10 @@ "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" ] }, - "ResponseBody": "{\r\n \"Objects\": [\r\n {\r\n \"FriendlyName\": \"dev01Testing\",\r\n \"ContainerName\": \"iaasvmcontainer;dev01testing;dev01testing\",\r\n \"ContainerType\": \"IaasVMContainer\",\r\n \"Type\": \"VM\",\r\n \"Status\": \"Protected\",\r\n \"ProtectionStatus\": \"Protected\",\r\n \"ProtectableObjectName\": \"iaasvmcontainer;dev01testing;dev01testing\",\r\n \"ProtectionPolicyName\": \"DefaultPolicy\",\r\n \"ProtectionPolicyId\": \"40716838-2fa2-453b-8901-3f16ecb5359b\",\r\n \"PolicyInconsistent\": true,\r\n \"RecoveryPointsCount\": 12,\r\n \"LastRecoveryPoint\": \"2015-06-15T11:12:50.8577407Z\",\r\n \"LastBackupTime\": \"2015-06-15T11:11:03.142968Z\",\r\n \"LastBackupStatus\": \"Completed\",\r\n \"LastBackupJobId\": \"3198b8b5-6a1b-492e-b550-a3ebd57b6fad\",\r\n \"InstanceId\": \"17593283453810\",\r\n \"Name\": \"iaasvmcontainer;dev01testing;dev01testing\",\r\n \"OperationInProgress\": false\r\n }\r\n ],\r\n \"ResultCount\": 1,\r\n \"Skiptoken\": null\r\n}", + "ResponseBody": "{\r\n \"Objects\": [\r\n {\r\n \"FriendlyName\": \"dev01Testing\",\r\n \"ContainerName\": \"iaasvmcontainer;dev01testing;dev01testing\",\r\n \"ContainerType\": \"IaasVMContainer\",\r\n \"Type\": \"VM\",\r\n \"Status\": \"Protected\",\r\n \"ProtectionStatus\": \"Protected\",\r\n \"ProtectableObjectName\": \"iaasvmcontainer;dev01testing;dev01testing\",\r\n \"ProtectionPolicyName\": \"Policy9\",\r\n \"ProtectionPolicyId\": \"c87bbada-6e1b-4db2-b76c-9062d28959a4\",\r\n \"PolicyInconsistent\": false,\r\n \"RecoveryPointsCount\": 16,\r\n \"LastRecoveryPoint\": \"2015-06-17T08:38:51.5793413Z\",\r\n \"LastBackupTime\": \"2015-06-17T08:37:13.9649748Z\",\r\n \"LastBackupStatus\": \"Completed\",\r\n \"LastBackupJobId\": \"b4c03815-5512-4c7e-8187-fcacbb443b2a\",\r\n \"InstanceId\": \"17593283453810\",\r\n \"Name\": \"iaasvmcontainer;dev01testing;dev01testing\",\r\n \"OperationInProgress\": false\r\n }\r\n ],\r\n \"ResultCount\": 1,\r\n \"Skiptoken\": null\r\n}", "ResponseHeaders": { "Content-Length": [ - "749" + "745" ], "Content-Type": [ "application/json" @@ -28,29 +28,29 @@ "no-cache" ], "x-ms-request-id": [ - "95e237af-d67d-43ca-b867-760ce8d27333" + "7b71d7e8-7fdb-4f12-96b9-c7072c75de2d" ], "x-ms-client-request-id": [ - "38273d83-d1af-4877-b40b-fe95153fe2fc", - "38273d83-d1af-4877-b40b-fe95153fe2fc" + "97e0cd0f-65c2-4fb6-b640-4dc2f71a9958", + "97e0cd0f-65c2-4fb6-b640-4dc2f71a9958" ], "Strict-Transport-Security": [ "max-age=31536000; includeSubDomains" ], "x-ms-ratelimit-remaining-subscription-reads": [ - "14999" + "14916" ], "x-ms-correlation-request-id": [ - "95e237af-d67d-43ca-b867-760ce8d27333" + "7b71d7e8-7fdb-4f12-96b9-c7072c75de2d" ], "x-ms-routing-request-id": [ - "CENTRALUS:20150615T122620Z:95e237af-d67d-43ca-b867-760ce8d27333" + "CENTRALUS:20150617T085639Z:7b71d7e8-7fdb-4f12-96b9-c7072c75de2d" ], "Cache-Control": [ "no-cache" ], "Date": [ - "Mon, 15 Jun 2015 12:26:20 GMT" + "Wed, 17 Jun 2015 08:56:39 GMT" ], "Server": [ "Microsoft-IIS/8.0" @@ -74,10 +74,10 @@ "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" ] }, - "ResponseBody": "{\r\n \"Objects\": [\r\n {\r\n \"FriendlyName\": \"dev01Testing\",\r\n \"Type\": \"VM\",\r\n \"ProtectionStatus\": \"Protected\",\r\n \"ContainerName\": \"iaasvmcontainer;dev01testing;dev01testing\",\r\n \"ContainerFriendlyName\": \"dev01Testing\",\r\n \"ContainerType\": \"IaasVMContainer\",\r\n \"ParentContainerName\": \"dev01Testing\",\r\n \"ParentContainerFriendlyName\": \"dev01Testing\",\r\n \"ParentContainerType\": \"IaasVMServiceContainer\",\r\n \"InstanceId\": \"iaasvmcontainer;dev01testing;dev01testing\",\r\n \"Name\": \"iaasvmcontainer;dev01testing;dev01testing\",\r\n \"OperationInProgress\": false\r\n }\r\n ],\r\n \"ResultCount\": 1,\r\n \"Skiptoken\": null\r\n}", + "ResponseBody": "{\r\n \"Objects\": [\r\n {\r\n \"FriendlyName\": \"dev01Testing\",\r\n \"Type\": \"VM\",\r\n \"ProtectionStatus\": \"Protected\",\r\n \"ContainerName\": \"iaasvmcontainer;dev01testing;dev01testing\",\r\n \"ContainerFriendlyName\": \"dev01Testing\",\r\n \"ContainerType\": \"IaasVMContainer\",\r\n \"ParentContainerName\": \"dev01Testing\",\r\n \"ParentContainerFriendlyName\": \"dev01Testing\",\r\n \"ParentContainerType\": \"IaasVMServiceContainer\",\r\n \"InstanceId\": \"iaasvmcontainer;dev01testing;dev01testing\",\r\n \"Name\": \"iaasvmcontainer;dev01testing;dev01testing\",\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"FriendlyName\": \"mkheranivmps05\",\r\n \"Type\": \"VM\",\r\n \"ProtectionStatus\": \"NotProtected\",\r\n \"ContainerName\": \"iaasvmcontainer;mkheranivmps02;mkheranivmps05\",\r\n \"ContainerFriendlyName\": \"mkheranivmps05\",\r\n \"ContainerType\": \"IaasVMContainer\",\r\n \"ParentContainerName\": \"mkheranivmps02\",\r\n \"ParentContainerFriendlyName\": \"mkheranivmps02\",\r\n \"ParentContainerType\": \"IaasVMServiceContainer\",\r\n \"InstanceId\": \"iaasvmcontainer;mkheranivmps02;mkheranivmps05\",\r\n \"Name\": \"iaasvmcontainer;mkheranivmps02;mkheranivmps05\",\r\n \"OperationInProgress\": false\r\n }\r\n ],\r\n \"ResultCount\": 2,\r\n \"Skiptoken\": null\r\n}", "ResponseHeaders": { "Content-Length": [ - "519" + "1015" ], "Content-Type": [ "application/json" @@ -89,29 +89,29 @@ "no-cache" ], "x-ms-request-id": [ - "44cd4165-ecea-40bf-bd81-f87a49e62caa" + "2414f3f1-96a5-4733-b8a5-5652395598f3" ], "x-ms-client-request-id": [ - "a757ddda-d546-4807-a503-040f46c01609", - "a757ddda-d546-4807-a503-040f46c01609" + "62cb01de-d4c7-4ec9-9c50-d15cf2ad7185", + "62cb01de-d4c7-4ec9-9c50-d15cf2ad7185" ], "Strict-Transport-Security": [ "max-age=31536000; includeSubDomains" ], "x-ms-ratelimit-remaining-subscription-reads": [ - "14998" + "14915" ], "x-ms-correlation-request-id": [ - "44cd4165-ecea-40bf-bd81-f87a49e62caa" + "2414f3f1-96a5-4733-b8a5-5652395598f3" ], "x-ms-routing-request-id": [ - "CENTRALUS:20150615T122621Z:44cd4165-ecea-40bf-bd81-f87a49e62caa" + "CENTRALUS:20150617T085639Z:2414f3f1-96a5-4733-b8a5-5652395598f3" ], "Cache-Control": [ "no-cache" ], "Date": [ - "Mon, 15 Jun 2015 12:26:20 GMT" + "Wed, 17 Jun 2015 08:56:39 GMT" ], "Server": [ "Microsoft-IIS/8.0" From 862bd35e28955a3903859a19ffbf3eb166b9de41 Mon Sep 17 00:00:00 2001 From: pragrawa Date: Wed, 17 Jun 2015 14:54:15 +0530 Subject: [PATCH 082/155] ProtectionPolicy changes --- .../AzureBackupCmdletHelpMessage.cs | 3 +- .../GetAzureBackupProtectionPolicy.cs | 5 +- .../NewAzureBackupProtectionPolicy.cs | 49 +++- .../RemoveAzureBackupProtectionPolicy.cs | 6 +- .../SetAzureBackupProtectionPolicy.cs | 66 ++--- .../Commands.AzureBackup.csproj | 9 +- .../Library/ProtectionPolicyHelper.cs | 234 ++++++++++++++++++ .../Models/AzureBackupEnums.cs | 26 ++ .../Models/ProtectionPolicy.cs | 6 +- 9 files changed, 332 insertions(+), 72 deletions(-) create mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup/Library/ProtectionPolicyHelper.cs diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupCmdletHelpMessage.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupCmdletHelpMessage.cs index 9bac64b6af95..38cf1cb69e10 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupCmdletHelpMessage.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupCmdletHelpMessage.cs @@ -46,6 +46,7 @@ internal static class AzureBackupCmdletHelpMessage public const string ScheduleRunTimes = "Times of day for running backup."; public const string RetentionType = "Unit of retention for the recovery point."; public const string RententionDuration = "Duration of retention for the recovery point in units specified by RetentionType."; - public const string PolicyInstanceId = "ProtectionPolicy InstanceId"; + public const string PolicyNewName = "Policy new name"; + public const string AzureBackupPolicy = "Azure Backup protection policy"; } } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/GetAzureBackupProtectionPolicy.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/GetAzureBackupProtectionPolicy.cs index 6da99d9b3a33..d51235f89b7e 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/GetAzureBackupProtectionPolicy.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/GetAzureBackupProtectionPolicy.cs @@ -25,7 +25,7 @@ namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets /// Get list of protection policies /// [Cmdlet(VerbsCommon.Get, "AzureBackupProtectionPolicy"), OutputType(typeof(AzureBackupProtectionPolicy), typeof(List))] - public class GetAzureBackupProtectionPolicy : AzureBackupPolicyCmdletBase + public class GetAzureBackupProtectionPolicy : AzureBackupVaultCmdletBase { [Parameter(Position = 3, Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.PolicyName)] [ValidateNotNullOrEmpty] @@ -53,7 +53,8 @@ public override void ExecuteCmdlet() } WriteDebug("Converting response"); - WriteAzureBackupProtectionPolicy(policyObjects); + ProtectionPolicyHelper.WriteAzureBackupProtectionPolicy(this, ResourceGroupName, ResourceName, Location, policyObjects); + }); } } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/NewAzureBackupProtectionPolicy.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/NewAzureBackupProtectionPolicy.cs index 6a5be3176f75..94f35a8c0a0e 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/NewAzureBackupProtectionPolicy.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/NewAzureBackupProtectionPolicy.cs @@ -24,9 +24,12 @@ namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets /// /// Create new protection policy /// - [Cmdlet(VerbsCommon.Add, "AzureBackupProtectionPolicy"), OutputType(typeof(AzureBackupProtectionPolicy))] - public class NewAzureBackupProtectionPolicy : AzureBackupPolicyCmdletBase - { + [Cmdlet(VerbsCommon.New, "AzureBackupProtectionPolicy", DefaultParameterSetName = DailyScheduleParamSet), OutputType(typeof(AzureBackupProtectionPolicy))] + public class NewAzureBackupProtectionPolicy : AzureBackupVaultCmdletBase + { + protected const string WeeklyScheduleParamSet = "WeeklyScheduleParamSet"; + protected const string DailyScheduleParamSet = "DailyScheduleParamSet"; + [Parameter(Position = 3, Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.PolicyName)] [ValidateNotNullOrEmpty] public string Name { get; set; } @@ -39,9 +42,11 @@ public class NewAzureBackupProtectionPolicy : AzureBackupPolicyCmdletBase [ValidateSet("Full")] public string BackupType { get; set; } - [Parameter(Position = 6, Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.ScheduleType, ValueFromPipelineByPropertyName = true)] - [ValidateSet("Daily", "Weekly")] - public string ScheduleType { get; set; } + [Parameter(ParameterSetName = DailyScheduleParamSet, Position = 7, Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.ScheduleType)] + public SwitchParameter Daily { get; set; } + + [Parameter(ParameterSetName = WeeklyScheduleParamSet, Position = 6, Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.ScheduleType)] + public SwitchParameter Weekly { get; set; } [Parameter(Position = 7, Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.ScheduleRunTimes, ValueFromPipelineByPropertyName = true)] public DateTime ScheduleRunTimes { get; set; } @@ -51,10 +56,9 @@ public class NewAzureBackupProtectionPolicy : AzureBackupPolicyCmdletBase public string RetentionType { get; set; } [Parameter(Position = 9, Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.RententionDuration, ValueFromPipelineByPropertyName = true)] - [ValidateRange(1,30)] public int RetentionDuration { get; set; } - [Parameter(Position = 10, Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.ScheduleRunDays, ValueFromPipelineByPropertyName = true)] + [Parameter(ParameterSetName = WeeklyScheduleParamSet, Position = 10, Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.ScheduleRunDays, ValueFromPipelineByPropertyName = true)] [ValidateSet("Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday", IgnoreCase = true)] public string[] ScheduleRunDays { get; set; } @@ -66,8 +70,14 @@ public override void ExecuteCmdlet() { WriteDebug("Making client call"); - var backupSchedule = GetBackupSchedule(BackupType, ScheduleType, ScheduleRunTimes, - RetentionType, RetentionDuration, ScheduleRunDays); + var ScheduleType = GetScheduelType(ScheduleRunDays); + + var backupSchedule = ProtectionPolicyHelper.GetBackupSchedule(this,BackupType, ScheduleType, ScheduleRunTimes, + RetentionType, RetentionDuration, ScheduleRunDays); + + + //var backupSchedule = GetBackupSchedule(BackupType, ScheduleType, ScheduleRunTimes, + // RetentionType, RetentionDuration, ScheduleRunDays); var addProtectionPolicyRequest = new AddProtectionPolicyRequest(); addProtectionPolicyRequest.PolicyName = this.Name; @@ -76,7 +86,7 @@ public override void ExecuteCmdlet() var operationId = AzureBackupClient.ProtectionPolicy.AddAsync(addProtectionPolicyRequest, GetCustomRequestHeaders(), CmdletCancellationToken).Result; - WriteVerbose("Protection policy created successfully"); + WriteDebug("Protection policy created successfully"); var policyListResponse = AzureBackupClient.ProtectionPolicy.ListAsync(GetCustomRequestHeaders(), CmdletCancellationToken).Result; @@ -86,9 +96,22 @@ public override void ExecuteCmdlet() policyObjects = policyListResponse.ProtectionPolicies.Where(x => x.Name.Equals(Name, System.StringComparison.InvariantCultureIgnoreCase)); WriteDebug("Converting response"); - WriteAzureBackupProtectionPolicy(policyObjects); + ProtectionPolicyHelper.WriteAzureBackupProtectionPolicy(this, ResourceGroupName, ResourceName, Location, policyObjects); }); - } + } + + private string GetScheduelType(string[] ScheduleRunDays) + { + WriteDebug("ParameterSetName = " + this.ParameterSetName.ToString()); + if (this.ParameterSetName == WeeklyScheduleParamSet || (ScheduleRunDays != null && ScheduleRunDays.Length > 0)) + { + return ScheduleType.Weekly.ToString(); + } + else + { + return ScheduleType.Daily.ToString(); + } + } } } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/RemoveAzureBackupProtectionPolicy.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/RemoveAzureBackupProtectionPolicy.cs index 74ed22c56106..07c425d3000c 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/RemoveAzureBackupProtectionPolicy.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/RemoveAzureBackupProtectionPolicy.cs @@ -27,10 +27,6 @@ namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets [Cmdlet(VerbsCommon.Remove, "AzureBackupProtectionPolicy")] public class RemoveAzureBackupProtectionPolicy : AzureBackupPolicyCmdletBase { - [Parameter(Position = 3, Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.PolicyName)] - [ValidateNotNullOrEmpty] - public string Name { get; set; } - public override void ExecuteCmdlet() { base.ExecuteCmdlet(); @@ -44,7 +40,7 @@ public override void ExecuteCmdlet() WriteDebug("Received policy response"); IEnumerable policyObjects = null; - policyObjects = policyListResponse.ProtectionPolicies.Objects.Where(x => x.Name.Equals(Name, System.StringComparison.InvariantCultureIgnoreCase)); + policyObjects = policyListResponse.ProtectionPolicies.Objects.Where(x => x.Name.Equals(ProtectionPolicy.Name, System.StringComparison.InvariantCultureIgnoreCase)); if (policyObjects.Count() != 0) { diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/SetAzureBackupProtectionPolicy.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/SetAzureBackupProtectionPolicy.cs index dcddd784dbc2..acc4ee8dfd14 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/SetAzureBackupProtectionPolicy.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/SetAzureBackupProtectionPolicy.cs @@ -27,37 +27,10 @@ namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets [Cmdlet(VerbsCommon.Set, "AzureBackupProtectionPolicy"), OutputType(typeof(AzureBackupProtectionPolicy))] public class SetAzureBackupProtectionPolicy : AzureBackupPolicyCmdletBase { - [Parameter(Position = 3, Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.PolicyName, ValueFromPipelineByPropertyName = true)] + + [Parameter(Position = 3, Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.PolicyNewName, ValueFromPipelineByPropertyName = true)] [ValidateNotNullOrEmpty] - public string Name { get; set; } - - [Parameter(Position = 4, Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.PolicyInstanceId, ValueFromPipelineByPropertyName = true)] - [ValidateNotNullOrEmpty] - public string InstanceId { get; set; } - - [Parameter(Position = 5, Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.BackupType, ValueFromPipelineByPropertyName = true)] - [ValidateSet("Full")] - public string BackupType { get; set; } - - [Parameter(Position = 6, Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.ScheduleType, ValueFromPipelineByPropertyName = true)] - [ValidateSet("Daily", "Weekly")] - public string ScheduleType { get; set; } - - [Parameter(Position = 7, Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.ScheduleRunTimes, ValueFromPipelineByPropertyName = true)] - public DateTime ScheduleRunTimes { get; set; } - - [Parameter(Position = 8, Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.RetentionType, ValueFromPipelineByPropertyName = true)] - [ValidateSet("Days", IgnoreCase = true)] - public string RetentionType { get; set; } - - [Parameter(Position = 9, Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.RententionDuration, ValueFromPipelineByPropertyName = true)] - [ValidateRange(1, 30)] - public int RetentionDuration { get; set; } - - [Parameter(Position = 10, Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.ScheduleRunDays, ValueFromPipelineByPropertyName = true)] - [ValidateSet("Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday", IgnoreCase = true)] - public string[] ScheduleRunDays { get; set; } - + public string NewName { get; set; } public override void ExecuteCmdlet() { @@ -66,45 +39,50 @@ public override void ExecuteCmdlet() ExecutionBlock(() => { WriteDebug("Making client call"); + AzureBackupProtectionPolicy policy = ProtectionPolicy; + ProtectionPolicyHelper.ValidateAzureBackupPolicyRequest(this, policy); - var backupSchedule = GetBackupSchedule(BackupType, ScheduleType, ScheduleRunTimes, - RetentionType, RetentionDuration, ScheduleRunDays); - - var updateProtectionPolicyRequest = new UpdateProtectionPolicyRequest(); - updateProtectionPolicyRequest.PolicyName = this.Name; - updateProtectionPolicyRequest.Schedule = backupSchedule; + var backupSchedule = ProtectionPolicyHelper.GetBackupSchedule(this, policy.BackupType, policy.ScheduleType, policy.ScheduleRunTimes, + policy.RetentionType, policy.RetentionDuration, policy.ScheduleRunDays.ToArray()); + var policyListResponse = AzureBackupClient.ProtectionPolicy.ListAsync(GetCustomRequestHeaders(), CmdletCancellationToken).Result; - + + NewName = (string.IsNullOrEmpty(NewName) ? policy.Name: NewName); + var updateProtectionPolicyRequest = new UpdateProtectionPolicyRequest(); + updateProtectionPolicyRequest.PolicyName = this.NewName; + updateProtectionPolicyRequest.Schedule = backupSchedule; + WriteDebug("Got the protectionPolicy List"); IEnumerable policyObjects = null; - policyObjects = policyListResponse.ProtectionPolicies.Objects.Where(x => x.InstanceId.Equals(this.InstanceId, System.StringComparison.InvariantCultureIgnoreCase)); + policyObjects = policyListResponse.ProtectionPolicies.Objects.Where(x => x.Name.Equals(policy.Name, System.StringComparison.InvariantCultureIgnoreCase)); - WriteDebug("Got the protectionPolicy with InstanceId" + InstanceId); + WriteDebug("Got the protectionPolicy with Name" + this.ProtectionPolicy.Name); if (policyObjects.Count() != 0) { - var operationId = AzureBackupClient.ProtectionPolicy.UpdateAsync(this.InstanceId, updateProtectionPolicyRequest, GetCustomRequestHeaders(), CmdletCancellationToken).Result; + var operationId = AzureBackupClient.ProtectionPolicy.UpdateAsync(ProtectionPolicy.InstanceId, updateProtectionPolicyRequest, GetCustomRequestHeaders(), CmdletCancellationToken).Result; } else { - var exception = new Exception("Protection Policy Not Found with InstanceId" + this.InstanceId); + var exception = new Exception("Protection Policy Not Found with Name" + ProtectionPolicy.Name); var errorRecord = new ErrorRecord(exception, string.Empty, ErrorCategory.InvalidData, null); WriteError(errorRecord); } - WriteVerbose("Protection Policy successfully updated"); + WriteDebug("Protection Policy successfully updated"); var policyListResponse_afterUpdate = AzureBackupClient.ProtectionPolicy.ListAsync(GetCustomRequestHeaders(), CmdletCancellationToken).Result; WriteDebug("Received policy response"); - policyObjects = policyListResponse_afterUpdate.ProtectionPolicies.Where(x => x.Name.Equals(Name, System.StringComparison.InvariantCultureIgnoreCase)); + policyObjects = policyListResponse_afterUpdate.ProtectionPolicies.Where(x => x.Name.Equals(NewName, System.StringComparison.InvariantCultureIgnoreCase)); WriteDebug("Converting response"); - WriteAzureBackupProtectionPolicy(policyObjects); + ProtectionPolicyHelper.WriteAzureBackupProtectionPolicy(this, policy.ResourceGroupName, policy.ResourceName, policy.Location, policyObjects); + }); } } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj index 52245d2a87f4..500bb4055ca3 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj @@ -86,7 +86,7 @@ ..\..\..\packages\Microsoft.WindowsAzure.Management.4.1.1\lib\net40\Microsoft.WindowsAzure.Management.dll - ..\..\..\..\..\..\azure-sdk-for-net\src\ResourceManagement\AzureBackup\BackupServicesManagment\bin\Net40-Debug\Microsoft.WindowsAzure.Management.BackupServicesManagment.dll + ..\..\..\..\..\..\Git4\dummy\azure-sdk-for-net\src\ResourceManagement\AzureBackup\BackupServicesManagment\bin\Net45-Debug\Microsoft.WindowsAzure.Management.BackupServicesManagment.dll False @@ -136,21 +136,22 @@ + + + - - Code - + diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Library/ProtectionPolicyHelper.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Library/ProtectionPolicyHelper.cs new file mode 100644 index 000000000000..4a722d56942b --- /dev/null +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Library/ProtectionPolicyHelper.cs @@ -0,0 +1,234 @@ +// ---------------------------------------------------------------------------------- +// +// Copyright Microsoft Corporation +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// ---------------------------------------------------------------------------------- + +using System; +using System.Management.Automation; +using System.Collections.Generic; +using System.Xml; +using Microsoft.WindowsAzure.Commands.Utilities.Common; +using Microsoft.Azure.Common.Authentication; +using Microsoft.Azure.Common.Authentication.Models; +using System.Threading; +using Hyak.Common; +using Microsoft.Azure.Commands.AzureBackup.Properties; +using System.Net; +using Microsoft.Azure.Management.BackupServices.Models; +using Microsoft.Azure.Commands.AzureBackup.Cmdlets; + +namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets +{ + public class ProtectionPolicyHelper + { + public const int MinRetentionInDays = 7; + public const int MaxRetentionInDays = 30; + public const int MinRetentionInWeeks = 1; + public const int MaxRetentionInWeeks = 4; + + public static void WriteAzureBackupProtectionPolicy(AzureBackupCmdletBase azureBackupCmd, string ResourceGroupName, + string ResourceName, string Location, ProtectionPolicyInfo sourcePolicy) + { + azureBackupCmd.WriteObject(new AzureBackupProtectionPolicy(ResourceGroupName, ResourceName, Location, sourcePolicy)); + } + + public static void WriteAzureBackupProtectionPolicy(AzureBackupCmdletBase azureBackupCmd, string ResourceGroupName, + string ResourceName, string Location, IEnumerable sourcePolicyList) + { + List targetList = new List(); + + foreach (var sourcePolicy in sourcePolicyList) + { + targetList.Add(new AzureBackupProtectionPolicy(ResourceGroupName, + ResourceName, Location, sourcePolicy)); + } + + azureBackupCmd.WriteObject(targetList, true); + } + + public static BackupSchedule GetBackupSchedule(AzureBackupCmdletBase azureBackupCmd, string backupType, string scheduleType, DateTime scheduleStartTime, + string retentionType, int retentionDuration, string[] scheduleRunDays) + { + var backupSchedule = new BackupSchedule(); + + backupSchedule.BackupType = backupType; + backupSchedule.RetentionPolicy = GetRetentionPolicy(azureBackupCmd, retentionType, retentionDuration); + + scheduleType = GetScheduleType(scheduleType, scheduleRunDays); + backupSchedule.ScheduleRun = scheduleType; + + if (string.Compare(scheduleType, ScheduleType.Weekly.ToString(), true) == 0) + { + backupSchedule.ScheduleRunDays = GetScheduleRunDays(azureBackupCmd, scheduleRunDays); + } + + DateTime scheduleRunTime = GetScheduleRunTime(scheduleStartTime); + + backupSchedule.ScheduleRunTimes = new List { scheduleRunTime }; + + azureBackupCmd.WriteDebug("Exiting GetBackupSchedule"); + return backupSchedule; + } + + public static void ValidateAzureBackupPolicyRequest(AzureBackupCmdletBase azureBackupCmd, AzureBackupProtectionPolicy policy) + { + + //ValidateWorkloadType(azureBackupCmd, policy.WorkloadType); + ValidateBackupType(azureBackupCmd, policy.BackupType); + ValidateScheduleType(azureBackupCmd, policy.ScheduleType); + ValidateScheduleRunDays(azureBackupCmd, policy.ScheduleRunDays); + ValidateRetentionType(azureBackupCmd, policy.RetentionType); + } + + private static void ValidateWorkloadType(AzureBackupCmdletBase azureBackupCmd, string workloadType) + { + WorkloadType item = (WorkloadType)Enum.Parse(typeof(WorkloadType), workloadType, true); + + if (item != WorkloadType.VM) + { + var exception = new Exception("Invalid value for param WorkloadType, Valid values are VM."); + var errorRecord = new ErrorRecord(exception, string.Empty, ErrorCategory.InvalidData, null); + azureBackupCmd.WriteError(errorRecord); + } + } + + private static void ValidateBackupType(AzureBackupCmdletBase azureBackupCmd, string backupType) + { + BackupType item = (BackupType)Enum.Parse(typeof(BackupType), backupType, true); + + if (item != BackupType.Full) + { + var exception = new Exception("Invalid value for param BackupType, Valid values are Full."); + var errorRecord = new ErrorRecord(exception, string.Empty, ErrorCategory.InvalidData, null); + azureBackupCmd.WriteError(errorRecord); + } + } + + private static void ValidateScheduleType(AzureBackupCmdletBase azureBackupCmd, string scheduleType) + { + ScheduleType item = (ScheduleType)Enum.Parse(typeof(ScheduleType), scheduleType, true); + + if (!(item == ScheduleType.Daily || item == ScheduleType.Weekly)) + { + var exception = new Exception("Invalid value for param ScheduleType, Valid values are Daily, Weekly."); + var errorRecord = new ErrorRecord(exception, string.Empty, ErrorCategory.InvalidData, null); + azureBackupCmd.WriteError(errorRecord); + } + } + + private static void ValidateRetentionType(AzureBackupCmdletBase azureBackupCmd, string retentionType) + { + RetentionType item = (RetentionType)Enum.Parse(typeof(RetentionType), retentionType, true); + + if (!(item == RetentionType.Days || item == RetentionType.Weeks)) + { + var exception = new Exception("Invalid value for param RetentionType, Valid values are Days, Weeks."); + var errorRecord = new ErrorRecord(exception, string.Empty, ErrorCategory.InvalidData, null); + azureBackupCmd.WriteError(errorRecord); + } + } + + private static void ValidateScheduleRunDays(AzureBackupCmdletBase azureBackupCmd, List scheduleRunDays) + { + foreach (string scheduleRunDay in scheduleRunDays) + { + DayOfWeek item = (DayOfWeek)Enum.Parse(typeof(DayOfWeek), scheduleRunDay, true); + + if (!(item == DayOfWeek.Sunday || item == DayOfWeek.Monday || item == DayOfWeek.Tuesday || + item == DayOfWeek.Wednesday || item == DayOfWeek.Thursday || item == DayOfWeek.Friday || item == DayOfWeek.Saturday)) + { + var exception = new Exception("Invalid value for param ScheduleRunDays, " + + "Valid values are Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday"); + var errorRecord = new ErrorRecord(exception, string.Empty, ErrorCategory.InvalidData, null); + azureBackupCmd.WriteError(errorRecord); + } + } + } + private static RetentionPolicy GetRetentionPolicy(AzureBackupCmdletBase azureBackupCmd, string retentionType, int retentionDuration) + { + ValidateRetentionRange(azureBackupCmd, retentionType, retentionDuration); + var retentionPolicy = new RetentionPolicy + { + RetentionType = (RetentionDurationType)Enum.Parse(typeof(RetentionDurationType), retentionType, true), + RetentionDuration = retentionDuration + }; + + return retentionPolicy; + } + + private static void ValidateRetentionRange(AzureBackupCmdletBase azureBackupCmd, string retentionType, int retentionDuration) + { + if(retentionType == RetentionDurationType.Days.ToString() && (retentionDuration < MinRetentionInDays + || retentionDuration > MaxRetentionInDays)) + { + var exception = new Exception("For Retention in days , valid values of retention duration are 7 to 30."); + var errorRecord = new ErrorRecord(exception, string.Empty, ErrorCategory.InvalidData, null); + azureBackupCmd.WriteError(errorRecord); + } + + if (retentionType == RetentionDurationType.Weeks.ToString() && (retentionDuration < MinRetentionInWeeks + || retentionDuration > MaxRetentionInWeeks)) + { + var exception = new Exception("For Retention in weeks , valid values of retention duration are 1 to 4."); + var errorRecord = new ErrorRecord(exception, string.Empty, ErrorCategory.InvalidData, null); + azureBackupCmd.WriteError(errorRecord); + } + + } + + private static string GetScheduleType(string scheduleType, string[] scheduleRunDays) + { + if (scheduleType == ScheduleType.Daily.ToString() && scheduleRunDays != null && scheduleRunDays.Length > 0) + { + return ScheduleType.Weekly.ToString(); + } + + else + { + return Enum.Parse(typeof(ScheduleType), scheduleType, true).ToString(); + } + } + + private static IList GetScheduleRunDays(AzureBackupCmdletBase azureBackupCmd, string[] scheduleRunDays) + { + if (scheduleRunDays == null || scheduleRunDays.Length <= 0) + { + var exception = new Exception("For weekly scheduletype , ScheduleRunDays should not be empty."); + var errorRecord = new ErrorRecord(exception, string.Empty, ErrorCategory.InvalidData, null); + azureBackupCmd.WriteError(errorRecord); + } + + IList ListofWeekDays = new List(); + + foreach (var dayOfWeek in scheduleRunDays) + { + azureBackupCmd.WriteDebug("dayOfWeek" + dayOfWeek.ToString()); + DayOfWeek item = (DayOfWeek)Enum.Parse(typeof(DayOfWeek), dayOfWeek, true); + azureBackupCmd.WriteDebug("Item" + item.ToString()); + if (!ListofWeekDays.Contains(item)) + { + ListofWeekDays.Add(item); + } + } + + return ListofWeekDays; + } + + private static DateTime GetScheduleRunTime(DateTime scheduleStartTime) + { + scheduleStartTime = scheduleStartTime.ToUniversalTime(); + DateTime scheduleRunTime = new DateTime(scheduleStartTime.Year, scheduleStartTime.Month, + scheduleStartTime.Day, scheduleStartTime.Hour, scheduleStartTime.Minute - (scheduleStartTime.Minute % 30), 0); + return scheduleRunTime; + } + } +} diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupEnums.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupEnums.cs index 54eeb2133599..64a161eadb67 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupEnums.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupEnums.cs @@ -92,4 +92,30 @@ public enum AzureBackupVaultStorageType GeoRedundant = 1, LocallyRedundant, } + + public enum ScheduleType + { + Invalid = 0, + Daily = 1, + Weekly = 2 + } + + public enum RetentionType + { + Invalid = 0, + Days = 1, + Weeks = 2 + } + + public enum WorkloadType + { + Invalid = 0, + VM = 1 + } + + public enum BackupType + { + Invalid = 0, + Full = 1 + } } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/ProtectionPolicy.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/ProtectionPolicy.cs index 83a9caad93c1..cb0afa42fe91 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/ProtectionPolicy.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/ProtectionPolicy.cs @@ -39,7 +39,7 @@ public class AzureBackupProtectionPolicy : AzureBackupVaultContextObject public string ScheduleType { get; set; } - public IList ScheduleRunDays { get; set; } + public List ScheduleRunDays { get; set; } public DateTime ScheduleRunTimes { get; set; } @@ -67,9 +67,9 @@ public AzureBackupProtectionPolicy(string resourceGroupName, string resourceName RetentionDuration = sourcePolicy.Schedule.RetentionPolicy.RetentionDuration; } - private IList ConvertScheduleRunDays(IList weekDaysList) + private List ConvertScheduleRunDays(IList weekDaysList) { - IList scheduelRunDays = new List(); + List scheduelRunDays = new List(); foreach(object item in weekDaysList) { From d50b219ea260f0f4e03969d4e259d6cb83dcdbeb Mon Sep 17 00:00:00 2001 From: dragonfly91 Date: Wed, 17 Jun 2015 16:35:01 +0530 Subject: [PATCH 083/155] Splitting get container and vault tests into separate files --- .../Commands.AzureBackup.Test.csproj | 6 +++ .../ScenarioTests/AzureBackupTests.cs | 22 --------- .../ScenarioTests/AzureBackupTests.ps1 | 45 ------------------- .../GetAzureBackupContainerTests.cs | 34 ++++++++++++++ .../GetAzureBackupContainerTests.ps1 | 33 ++++++++++++++ .../GetAzureBackupVaultCredentialsTests.cs | 32 +++++++++++++ .../GetAzureBackupVaultCredentialsTests.ps1 | 26 +++++++++++ .../SetAzureBackupVaultStorageTypeTests.cs | 34 ++++++++++++++ .../SetAzureBackupVaultStorageTypeTests.ps1 | 39 ++++++++++++++++ 9 files changed, 204 insertions(+), 67 deletions(-) create mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/GetAzureBackupContainerTests.cs create mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/GetAzureBackupContainerTests.ps1 create mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/GetAzureBackupVaultCredentialsTests.cs create mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/GetAzureBackupVaultCredentialsTests.ps1 create mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/SetAzureBackupVaultStorageTypeTests.cs create mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/SetAzureBackupVaultStorageTypeTests.ps1 diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/Commands.AzureBackup.Test.csproj b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/Commands.AzureBackup.Test.csproj index e13844c82449..817df7562a81 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/Commands.AzureBackup.Test.csproj +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/Commands.AzureBackup.Test.csproj @@ -126,6 +126,9 @@ + + + @@ -154,6 +157,9 @@ Always + + + diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupTests.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupTests.cs index b3840eb12170..c330f4eb2b73 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupTests.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupTests.cs @@ -65,27 +65,5 @@ public void BackUpAzureBackUpItem() { this.RunPowerShellTest("BackUpAzureBackUpItemTest"); } - - [Fact] - public void GetAzureBackupContainerTests() - { - this.RunPowerShellTest("Test-GetAzureBackupContainerWithoutFilterReturnsNonZeroContainers"); - - this.RunPowerShellTest("Test-GetAzureBackupContainerWithUniqueFilterReturnsOneContainer"); - } - - [Fact] - public void GetAzureBackupVaultCredentialsTests() - { - this.RunPowerShellTest("Test-GetAzureBackupVaultCredentialsReturnsFileNameAndDownloadsCert"); - } - - [Fact] - public void SetAzureBackupVaultStorageTypeTests() - { - this.RunPowerShellTest("Test-SetAzureBackupVaultStorageTypeWithFreshResourceDoesNotThrowException"); - - this.RunPowerShellTest("Test-SetAzureBackupVaultStorageTypeWithLockedResourceThrowsException"); - } } } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupTests.ps1 b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupTests.ps1 index f8254816120b..f2ba9330aacf 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupTests.ps1 +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupTests.ps1 @@ -24,7 +24,6 @@ $Location = "SouthEast Asia" $PolicyName = "Policy9"; $PolicyId = "c87bbada-6e1b-4db2-b76c-9062d28959a4"; $POName = "iaasvmcontainer;dev01testing;dev01testing" -$CertTargetLocation = (Get-Item -Path ".\" -Verbose).FullName; <# .SYNOPSIS @@ -187,47 +186,3 @@ function Test-StopAzureBackupJob $jobDetails = Get-AzureBackupJobDetails -ResourceGroupName $ResourceGroupName -ResourceName $ResourceName -Location $Location -Job $jobsList[0]; #Assert-AreEqual 'Cancelling' $jobDetails.Status } - -function Test-GetAzureBackupContainerWithoutFilterReturnsNonZeroContainers -{ - $containers = Get-AzureBackupContainer -ResourceGroupName $ResourceGroupName -ResourceName $ResourceName -Location $Location - Assert-NotNull $containers 'Container list should not be null'; -} - -function Test-GetAzureBackupContainerWithUniqueFilterReturnsOneContainer -{ - $container = Get-AzureBackupContainer -ResourceGroupName $ResourceGroupName -ResourceName $ResourceName -Location $Location -ContainerResourceGroupName $ContainerResourceGroupName -ContainerResourceName $ContainerResourceName - Assert-NotNull $container 'Container should not be null'; - Assert-AreEqual $container.ResourceName $ContainerResourceName -CaseSensitive 'Returned container resource name (a.k.a friendly name) does not match the test VM resource name'; - Assert-AreEqual $container.ResourceGroupName $ContainerResourceGroupName -CaseSensitive 'Returned container resource group name (a.k.a parent friendly name) does not match the test VM resource group name'; -} - -function Test-GetAzureBackupVaultCredentialsReturnsFileNameAndDownloadsCert -{ - $fileName = Get-AzureBackupVaultCredentials -ResourceGroupName $ResourceGroupName -ResourceName $ResourceName -Location $Location -TargetLocation $CertTargetLocation - Assert-NotNull $fileName 'File name should not be null'; - $certFileFullPath = [io.path]::combine($CertTargetLocation, $fileName); - Assert-True {{ Test-Path $certFileFullPath }} -} - -function Test-SetAzureBackupVaultStorageTypeWithFreshResourceDoesNotThrowException -{ - # TODO: Create a new resource and use it for these calls. At the end, delete it. - - Set-AzureBackupVaultStorageType -ResourceGroupName $ResourceGroupName -ResourceName $ResourceName -Location $Location -Type GeoRedundant - - Set-AzureBackupVaultStorageType -ResourceGroupName $ResourceGroupName -ResourceName $ResourceName -Location $Location -Type LocallyRedundant - - Set-AzureBackupVaultStorageType -ResourceGroupName $ResourceGroupName -ResourceName $ResourceName -Location $Location -Type GeoRedundant - - Set-AzureBackupVaultStorageType -ResourceGroupName $ResourceGroupName -ResourceName $ResourceName -Location $Location -Type LocallyRedundant -} - -function Test-SetAzureBackupVaultStorageTypeWithLockedResourceThrowsException -{ - # One of them is bound to fail - - Assert-Throws { Set-AzureBackupVaultStorageType -ResourceGroupName $ResourceGroupName -ResourceName $ResourceName -Location $Location -Type GeoRedundant } - - Assert-Throws { Set-AzureBackupVaultStorageType -ResourceGroupName $ResourceGroupName -ResourceName $ResourceName -Location $Location -Type LocallyRedundant } -} diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/GetAzureBackupContainerTests.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/GetAzureBackupContainerTests.cs new file mode 100644 index 000000000000..c3ecc2a07ee7 --- /dev/null +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/GetAzureBackupContainerTests.cs @@ -0,0 +1,34 @@ +// ---------------------------------------------------------------------------------- +// +// Copyright Microsoft Corporation +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// ---------------------------------------------------------------------------------- + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Xunit; + +namespace Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests +{ + public class GetAzureBackupContainerTests : AzureBackupTestsBase + { + [Fact] + public void GetAzureBackupContainerTests() + { + this.RunPowerShellTest("Test-GetAzureBackupContainerWithoutFilterReturnsNonZeroContainers"); + + this.RunPowerShellTest("Test-GetAzureBackupContainerWithUniqueFilterReturnsOneContainer"); + } + } +} diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/GetAzureBackupContainerTests.ps1 b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/GetAzureBackupContainerTests.ps1 new file mode 100644 index 000000000000..0e9b5b0805db --- /dev/null +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/GetAzureBackupContainerTests.ps1 @@ -0,0 +1,33 @@ +# ---------------------------------------------------------------------------------- +# +# Copyright Microsoft Corporation +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# http://www.apache.org/licenses/LICENSE-2.0 +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ---------------------------------------------------------------------------------- + +$ResourceGroupName = "backuprg" +$ResourceName = "backuprn" +$Location = "SouthEast Asia" +$ContainerResourceGroupName = "dev01Testing" +$ContainerResourceName = "dev01Testing" + +function Test-GetAzureBackupContainerWithoutFilterReturnsNonZeroContainers +{ + $containers = Get-AzureBackupContainer -ResourceGroupName $ResourceGroupName -ResourceName $ResourceName -Location $Location + Assert-NotNull $containers 'Container list should not be null'; +} + +function Test-GetAzureBackupContainerWithUniqueFilterReturnsOneContainer +{ + $container = Get-AzureBackupContainer -ResourceGroupName $ResourceGroupName -ResourceName $ResourceName -Location $Location -ContainerResourceGroupName $ContainerResourceGroupName -ContainerResourceName $ContainerResourceName + Assert-NotNull $container 'Container should not be null'; + Assert-AreEqual $container.ResourceName $ContainerResourceName -CaseSensitive 'Returned container resource name (a.k.a friendly name) does not match the test VM resource name'; + Assert-AreEqual $container.ResourceGroupName $ContainerResourceGroupName -CaseSensitive 'Returned container resource group name (a.k.a parent friendly name) does not match the test VM resource group name'; +} diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/GetAzureBackupVaultCredentialsTests.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/GetAzureBackupVaultCredentialsTests.cs new file mode 100644 index 000000000000..a75ea3333e4c --- /dev/null +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/GetAzureBackupVaultCredentialsTests.cs @@ -0,0 +1,32 @@ +// ---------------------------------------------------------------------------------- +// +// Copyright Microsoft Corporation +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// ---------------------------------------------------------------------------------- + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Xunit; + +namespace Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests +{ + public class GetAzureBackupVaultCredentialsTests : AzureBackupTestsBase + { + [Fact] + public void GetAzureBackupVaultCredentialsTests() + { + this.RunPowerShellTest("Test-GetAzureBackupVaultCredentialsReturnsFileNameAndDownloadsCert"); + } + } +} diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/GetAzureBackupVaultCredentialsTests.ps1 b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/GetAzureBackupVaultCredentialsTests.ps1 new file mode 100644 index 000000000000..78db70edc6fc --- /dev/null +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/GetAzureBackupVaultCredentialsTests.ps1 @@ -0,0 +1,26 @@ +# ---------------------------------------------------------------------------------- +# +# Copyright Microsoft Corporation +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# http://www.apache.org/licenses/LICENSE-2.0 +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ---------------------------------------------------------------------------------- + +$ResourceGroupName = "backuprg" +$ResourceName = "backuprn" +$Location = "SouthEast Asia" +$CertTargetLocation = (Get-Item -Path ".\" -Verbose).FullName; + +function Test-GetAzureBackupVaultCredentialsReturnsFileNameAndDownloadsCert +{ + $fileName = Get-AzureBackupVaultCredentials -ResourceGroupName $ResourceGroupName -ResourceName $ResourceName -Location $Location -TargetLocation $CertTargetLocation + Assert-NotNull $fileName 'File name should not be null'; + $certFileFullPath = [io.path]::combine($CertTargetLocation, $fileName); + Assert-True {{ Test-Path $certFileFullPath }} +} diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/SetAzureBackupVaultStorageTypeTests.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/SetAzureBackupVaultStorageTypeTests.cs new file mode 100644 index 000000000000..2b0c824eb2e1 --- /dev/null +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/SetAzureBackupVaultStorageTypeTests.cs @@ -0,0 +1,34 @@ +// ---------------------------------------------------------------------------------- +// +// Copyright Microsoft Corporation +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// ---------------------------------------------------------------------------------- + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Xunit; + +namespace Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests +{ + public class SetAzureBackupVaultStorageTypeTests : AzureBackupTestsBase + { + [Fact] + public void SetAzureBackupVaultStorageTypeTests() + { + this.RunPowerShellTest("Test-SetAzureBackupVaultStorageTypeWithFreshResourceDoesNotThrowException"); + + this.RunPowerShellTest("Test-SetAzureBackupVaultStorageTypeWithLockedResourceThrowsException"); + } + } +} diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/SetAzureBackupVaultStorageTypeTests.ps1 b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/SetAzureBackupVaultStorageTypeTests.ps1 new file mode 100644 index 000000000000..b2b80b7f6e57 --- /dev/null +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/SetAzureBackupVaultStorageTypeTests.ps1 @@ -0,0 +1,39 @@ +# ---------------------------------------------------------------------------------- +# +# Copyright Microsoft Corporation +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# http://www.apache.org/licenses/LICENSE-2.0 +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ---------------------------------------------------------------------------------- + +$ResourceGroupName = "backuprg" +$ResourceName = "backuprn" +$Location = "SouthEast Asia" + +function Test-SetAzureBackupVaultStorageTypeWithFreshResourceDoesNotThrowException +{ + # TODO: Create a new resource and use it for these calls. At the end, delete it. + + Set-AzureBackupVaultStorageType -ResourceGroupName $ResourceGroupName -ResourceName $ResourceName -Location $Location -Type GeoRedundant + + Set-AzureBackupVaultStorageType -ResourceGroupName $ResourceGroupName -ResourceName $ResourceName -Location $Location -Type LocallyRedundant + + Set-AzureBackupVaultStorageType -ResourceGroupName $ResourceGroupName -ResourceName $ResourceName -Location $Location -Type GeoRedundant + + Set-AzureBackupVaultStorageType -ResourceGroupName $ResourceGroupName -ResourceName $ResourceName -Location $Location -Type LocallyRedundant +} + +function Test-SetAzureBackupVaultStorageTypeWithLockedResourceThrowsException +{ + # One of them is bound to fail + + Assert-Throws { Set-AzureBackupVaultStorageType -ResourceGroupName $ResourceGroupName -ResourceName $ResourceName -Location $Location -Type GeoRedundant } + + Assert-Throws { Set-AzureBackupVaultStorageType -ResourceGroupName $ResourceGroupName -ResourceName $ResourceName -Location $Location -Type LocallyRedundant } +} From 535f6d1a8461f0d72e37352931cdb816cb36ea76 Mon Sep 17 00:00:00 2001 From: mkherani Date: Wed, 17 Jun 2015 18:18:54 +0530 Subject: [PATCH 084/155] Added powershell test cases for registration --- src/AzurePowershell.sln | 9 ++++- .../Commands.AzureBackup.Test.csproj | 8 ++-- .../ContainerTest/AzureBackupContainerTest.cs | 34 ++++++++++++++++ .../AzureBackupContainerTest.ps1 | 39 +++++++++++++++++++ .../Container/RegisterAzureBackupContainer.cs | 2 - .../UnregisterAzureBackupContainer.cs | 2 - .../Commands.AzureBackup.csproj | 8 ++-- 7 files changed, 91 insertions(+), 11 deletions(-) create mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/ContainerTest/AzureBackupContainerTest.cs create mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/ContainerTest/AzureBackupContainerTest.ps1 diff --git a/src/AzurePowershell.sln b/src/AzurePowershell.sln index 598c91723ee5..08402fcbf94b 100644 --- a/src/AzurePowershell.sln +++ b/src/AzurePowershell.sln @@ -1,5 +1,5 @@ Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Express 2013 for Web +# Visual Studio 2013 VisualStudioVersion = 12.0.31101.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{8531411A-0137-4E27-9C5E-49E07C245048}" @@ -212,6 +212,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Commands.ApiManagement.Test EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Commands.AzureBackup", "ResourceManager\AzureBackup\Commands.AzureBackup\Commands.AzureBackup.csproj", "{6C8D2337-C9D1-4F52-94B3-AB63A19F3453}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Commands.AzureBackup.Test", "ResourceManager\AzureBackup\Commands.AzureBackup.Test\Commands.AzureBackup.Test.csproj", "{678AE95D-2364-47D7-888C-3FFA6D412CC8}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -518,6 +520,10 @@ Global {6C8D2337-C9D1-4F52-94B3-AB63A19F3453}.Debug|Any CPU.Build.0 = Debug|Any CPU {6C8D2337-C9D1-4F52-94B3-AB63A19F3453}.Release|Any CPU.ActiveCfg = Release|Any CPU {6C8D2337-C9D1-4F52-94B3-AB63A19F3453}.Release|Any CPU.Build.0 = Release|Any CPU + {678AE95D-2364-47D7-888C-3FFA6D412CC8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {678AE95D-2364-47D7-888C-3FFA6D412CC8}.Debug|Any CPU.Build.0 = Debug|Any CPU + {678AE95D-2364-47D7-888C-3FFA6D412CC8}.Release|Any CPU.ActiveCfg = Release|Any CPU + {678AE95D-2364-47D7-888C-3FFA6D412CC8}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -559,5 +565,6 @@ Global {5764A3A4-586C-4536-8481-13007CAC111B} = {95C16AED-FD57-42A0-86C3-2CF4300A4817} {59D1B5DC-9175-43EC-90C6-CBA601B3565F} = {95C16AED-FD57-42A0-86C3-2CF4300A4817} {BEC9ECE9-A3D6-4B24-A682-1FA890647D9D} = {95C16AED-FD57-42A0-86C3-2CF4300A4817} + {678AE95D-2364-47D7-888C-3FFA6D412CC8} = {95C16AED-FD57-42A0-86C3-2CF4300A4817} EndGlobalSection EndGlobal diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/Commands.AzureBackup.Test.csproj b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/Commands.AzureBackup.Test.csproj index 2ada66c08d88..a2052acae503 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/Commands.AzureBackup.Test.csproj +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/Commands.AzureBackup.Test.csproj @@ -39,6 +39,9 @@ False ..\..\..\packages\Microsoft.Azure.Common.Authentication.1.0.25-preview\lib\net45\Microsoft.Azure.Common.Authentication.dll + + ..\..\..\..\..\azure-sdk-for-net\src\ResourceManagement\AzureBackup\BackupServicesManagment\bin\Net45-Debug\Microsoft.Azure.Management.BackupServicesManagment.dll + False ..\..\..\packages\Microsoft.Azure.Management.Resources.2.18.0-preview\lib\net40\Microsoft.Azure.ResourceManager.dll @@ -80,9 +83,6 @@ ..\..\..\packages\Microsoft.WindowsAzure.Management.4.1.1\lib\net40\Microsoft.WindowsAzure.Management.dll - - ..\..\..\..\..\azure-sdk-for-net\src\ResourceManagement\AzureBackup\BackupServicesManagment\bin\Net45-Release\Microsoft.WindowsAzure.Management.BackupServicesManagment.dll - False ..\..\..\packages\Hydra.SpecTestSupport.1.0.5417.13285-prerelease\lib\net45\Microsoft.WindowsAzure.Testing.dll @@ -129,6 +129,7 @@ + @@ -167,6 +168,7 @@ Always + Always diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/ContainerTest/AzureBackupContainerTest.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/ContainerTest/AzureBackupContainerTest.cs new file mode 100644 index 000000000000..98f8572f2e74 --- /dev/null +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/ContainerTest/AzureBackupContainerTest.cs @@ -0,0 +1,34 @@ +// ---------------------------------------------------------------------------------- +// +// Copyright Microsoft Corporation +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// ---------------------------------------------------------------------------------- + +using Microsoft.WindowsAzure.Commands.ScenarioTest; +using Xunit; + +namespace Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests +{ + public class AzureBackupContainerTest : AzureBackupTestsBase + { + [Fact] + public void RegisterAzureBackupContainerTest() + { + this.RunPowerShellTest("Test-RegisterAzureBackupContainer"); + } + + [Fact] + public void UnregisterAzureBackupContainerTest() + { + this.RunPowerShellTest("Test-UnregisterAzureBackupContainer"); + } + } +} diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/ContainerTest/AzureBackupContainerTest.ps1 b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/ContainerTest/AzureBackupContainerTest.ps1 new file mode 100644 index 000000000000..bb2c01db7921 --- /dev/null +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/ContainerTest/AzureBackupContainerTest.ps1 @@ -0,0 +1,39 @@ +# ---------------------------------------------------------------------------------- +# +# Copyright Microsoft Corporation +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# http://www.apache.org/licenses/LICENSE-2.0 +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ---------------------------------------------------------------------------------- + +$ResourceGroupName = "backuprg" +$ResourceName = "backuprn" +$Name = "dev01testing" +$VMServiceName = "dev01testing" +$ContainerType = "IaasVMContainer" +$Location = "westus" + +<# +.SYNOPSIS +Tests to register the container +#> +function Test-RegisterAzureBackupContainer +{ + $jobId = Register-AzureBackupContainer -ResourceGroupName $ResourceGroupName -ResourceName $ResourceName -location $Location -Name $VMName -ServiceName $VMServiceName + + Assert-NotNull $jobId 'JobID should not be null'; +} + +function Test-UnregisterAzureBackupContainer +{ + $container = Get-AzureBackupContainer -ResourceGroupName $ResourceGroupName -ResourceName $ResourceName -location $Location -ContainerResourceName $VMName -ContainerResourceGroupName $VMServiceName + $jobId = Unregister-AzureBackupContainer -ResourceGroupName $ResourceGroupName -ResourceName $ResourceName -location $Location -AzureBackupContainer $container + + Assert-NotNull $jobId 'JobID should not be null'; +} \ No newline at end of file diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/RegisterAzureBackupContainer.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/RegisterAzureBackupContainer.cs index e6352835df05..8e05f25313a9 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/RegisterAzureBackupContainer.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/RegisterAzureBackupContainer.cs @@ -20,10 +20,8 @@ using System.Management.Automation; using System.Text; using System.Threading.Tasks; -using Microsoft.Azure.Commands.Compute; 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 diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/UnregisterAzureBackupContainer.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/UnregisterAzureBackupContainer.cs index 65004e79333a..33fd22499d9c 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/UnregisterAzureBackupContainer.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/UnregisterAzureBackupContainer.cs @@ -20,10 +20,8 @@ using System.Management.Automation; using System.Text; using System.Threading.Tasks; -using Microsoft.Azure.Commands.Compute; using Microsoft.Azure.Management.BackupServices.Models; using MBS = Microsoft.Azure.Management.BackupServices; -using Microsoft.Azure.Commands.Compute.Models; namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets { diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj index 011a856d1091..6b71dcb49e9f 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj @@ -65,6 +65,9 @@ ..\..\..\packages\Microsoft.Azure.Common.2.1.0\lib\net45\Microsoft.Azure.Common.NetFramework.dll + + ..\..\..\..\..\azure-sdk-for-net\src\ResourceManagement\AzureBackup\BackupServicesManagment\bin\Net45-Debug\Microsoft.Azure.Management.BackupServicesManagment.dll + ..\..\..\packages\Microsoft.Azure.Management.Resources.2.18.0-preview\lib\net40\Microsoft.Azure.ResourceManager.dll @@ -86,9 +89,6 @@ ..\..\..\packages\Microsoft.WindowsAzure.Management.4.1.1\lib\net40\Microsoft.WindowsAzure.Management.dll - - ..\..\..\..\..\..\azure-sdk-for-net\src\ResourceManagement\AzureBackup\BackupServicesManagment\bin\Net40-Debug\Microsoft.WindowsAzure.Management.BackupServicesManagment.dll - False Cmdlets\VaultCredentials\Microsoft.WindowsAzure.Management.Common.dll @@ -134,6 +134,8 @@ + + From 1b71ddb24dc9b4b3333aea125e411b6769c58017 Mon Sep 17 00:00:00 2001 From: pragrawa Date: Wed, 17 Jun 2015 18:30:28 +0530 Subject: [PATCH 085/155] ProtectionPolicyChanges2 --- .../AzureBackupCmdletBase.cs | 1 + .../AzureBackupPolicyCmdletBase.cs | 94 ++----------------- .../GetAzureBackupProtectionPolicy.cs | 2 +- .../NewAzureBackupProtectionPolicy.cs | 15 +-- .../SetAzureBackupProtectionPolicy.cs | 85 +++++++++++++++-- ...cyHelper.cs => AzureBackupCmdletHelper.cs} | 80 ++++++++-------- 6 files changed, 143 insertions(+), 134 deletions(-) rename src/ResourceManager/AzureBackup/Commands.AzureBackup/Library/{ProtectionPolicyHelper.cs => AzureBackupCmdletHelper.cs} (72%) diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupCmdletBase.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupCmdletBase.cs index b73ff2db7947..eef1713302e3 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupCmdletBase.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupCmdletBase.cs @@ -97,6 +97,7 @@ public void InitializeAzureBackupCmdlet(string rgName, string rName, string loca WriteDebug(string.Format("Initialized AzureBackup Cmdlet, ClientRequestId: {0}, ResourceGroupName: {1}, ResourceName : {2}", this.clientRequestId, resourceGroupName, resourceName)); CmdletCancellationToken = cancellationTokenSource.Token; + AzureBackupCmdletHelper cmdHelper = new AzureBackupCmdletHelper(this); } protected void ExecutionBlock(Action execAction) diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupPolicyCmdletBase.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupPolicyCmdletBase.cs index e41024298aa2..c2e4c6a3486d 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupPolicyCmdletBase.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupPolicyCmdletBase.cs @@ -27,96 +27,22 @@ namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets { - public abstract class AzureBackupPolicyCmdletBase : AzureBackupVaultCmdletBase + public abstract class AzureBackupPolicyCmdletBase : AzureBackupCmdletBase { + // ToDO: + // Correct Help message and other attributes related to paameters + [Parameter(Position = 0, Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.AzureBackupPolicy, ValueFromPipeline = true)] + [ValidateNotNullOrEmpty] + public AzureBackupProtectionPolicy ProtectionPolicy { get; set; } + public override void ExecuteCmdlet() { base.ExecuteCmdlet(); - WriteDebug(String.Format("Cmdlet called for ResourceGroupName: {0}, ResourceName: {1}, Location: {2}", ResourceGroupName, ResourceName, Location)); - } - - public void WriteAzureBackupProtectionPolicy(ProtectionPolicyInfo sourcePolicy) - { - this.WriteObject(new AzureBackupProtectionPolicy(ResourceGroupName, ResourceName, Location, sourcePolicy)); - } - - public void WriteAzureBackupProtectionPolicy(IEnumerable sourcePolicyList) - { - List targetList = new List(); - - foreach (var sourcePolicy in sourcePolicyList) - { - targetList.Add(new AzureBackupProtectionPolicy(ResourceGroupName, ResourceName, Location, sourcePolicy)); - } - - this.WriteObject(targetList, true); - } - - public BackupSchedule GetBackupSchedule(string backupType, string scheduleType, DateTime scheduleStartTime, - string retentionType, int retentionDuration, string[] scheduleRunDays = null) - { - var backupSchedule = new BackupSchedule(); - - backupSchedule.BackupType = backupType; - backupSchedule.RetentionPolicy = GetRetentionPolicy(retentionType, retentionDuration); - //Enum.Parse(ScheduleRunType, this.ScheduleType), - backupSchedule.ScheduleRun = scheduleType; - if (string.Compare(scheduleType, "Weekly", true) == 0) - { - backupSchedule.ScheduleRunDays = GetScheduleRunDays(scheduleRunDays); - } - - DateTime scheduleRunTime = GetScheduleRunTime(scheduleStartTime); + WriteDebug(String.Format("Cmdlet called for ResourceGroupName: {0}, ResourceName: {1}, Location: {2}", ProtectionPolicy.ResourceGroupName, ProtectionPolicy.ResourceName, ProtectionPolicy.Location)); - backupSchedule.ScheduleRunTimes = new List { scheduleRunTime }; - - WriteDebug("Exiting GetBackupSchedule"); - return backupSchedule; - } - - private RetentionPolicy GetRetentionPolicy(string retentionType, int retentionDuration) - { - var retentionPolicy = new RetentionPolicy - { - RetentionType = (RetentionDurationType)Enum.Parse(typeof(RetentionDurationType), retentionType, true), - RetentionDuration = retentionDuration - }; - - return retentionPolicy; - } - - private IList GetScheduleRunDays(string[] scheduleRunDays) - { - if (scheduleRunDays == null || scheduleRunDays.Length <= 0) - { - var exception = new Exception("For weekly scheduletype , ScheduleRunDays param is required."); - var errorRecord = new ErrorRecord(exception, string.Empty, ErrorCategory.InvalidData, null); - WriteError(errorRecord); - } - - IList ListofWeekDays = new List(); - - foreach (var dayOfWeek in scheduleRunDays) - { - WriteDebug("dayOfWeek" + dayOfWeek.ToString()); - DayOfWeek item = (DayOfWeek)Enum.Parse(typeof(DayOfWeek), dayOfWeek, true); - WriteDebug("Item" + item.ToString()); - if (!ListofWeekDays.Contains(item)) - { - ListofWeekDays.Add(item); - } - } - - return ListofWeekDays; - } - - private DateTime GetScheduleRunTime(DateTime scheduleStartTime) - { - scheduleStartTime = scheduleStartTime.ToUniversalTime(); - DateTime scheduleRunTime = new DateTime(scheduleStartTime.Year, scheduleStartTime.Month, - scheduleStartTime.Day, scheduleStartTime.Hour, scheduleStartTime.Minute - (scheduleStartTime.Minute % 30), 0); - return scheduleRunTime; + InitializeAzureBackupCmdlet(ProtectionPolicy.ResourceGroupName, ProtectionPolicy.ResourceName, ProtectionPolicy.Location); } + } } \ No newline at end of file diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/GetAzureBackupProtectionPolicy.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/GetAzureBackupProtectionPolicy.cs index d51235f89b7e..54626ebc5dc9 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/GetAzureBackupProtectionPolicy.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/GetAzureBackupProtectionPolicy.cs @@ -53,7 +53,7 @@ public override void ExecuteCmdlet() } WriteDebug("Converting response"); - ProtectionPolicyHelper.WriteAzureBackupProtectionPolicy(this, ResourceGroupName, ResourceName, Location, policyObjects); + AzureBackupCmdletHelper.WriteAzureBackupProtectionPolicy(ResourceGroupName, ResourceName, Location, policyObjects); }); } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/NewAzureBackupProtectionPolicy.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/NewAzureBackupProtectionPolicy.cs index 94f35a8c0a0e..e940ccb460d1 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/NewAzureBackupProtectionPolicy.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/NewAzureBackupProtectionPolicy.cs @@ -24,11 +24,12 @@ namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets /// /// Create new protection policy /// - [Cmdlet(VerbsCommon.New, "AzureBackupProtectionPolicy", DefaultParameterSetName = DailyScheduleParamSet), OutputType(typeof(AzureBackupProtectionPolicy))] + [Cmdlet(VerbsCommon.New, "AzureBackupProtectionPolicy", DefaultParameterSetName = NoScheduleParamSet), OutputType(typeof(AzureBackupProtectionPolicy))] public class NewAzureBackupProtectionPolicy : AzureBackupVaultCmdletBase { protected const string WeeklyScheduleParamSet = "WeeklyScheduleParamSet"; protected const string DailyScheduleParamSet = "DailyScheduleParamSet"; + protected const string NoScheduleParamSet = "DailyScheduleParamSet"; [Parameter(Position = 3, Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.PolicyName)] [ValidateNotNullOrEmpty] @@ -59,6 +60,7 @@ public class NewAzureBackupProtectionPolicy : AzureBackupVaultCmdletBase public int RetentionDuration { get; set; } [Parameter(ParameterSetName = WeeklyScheduleParamSet, Position = 10, Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.ScheduleRunDays, ValueFromPipelineByPropertyName = true)] + [Parameter(ParameterSetName = NoScheduleParamSet, Position = 10, Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.ScheduleRunDays, ValueFromPipelineByPropertyName = true)] [ValidateSet("Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday", IgnoreCase = true)] public string[] ScheduleRunDays { get; set; } @@ -72,7 +74,7 @@ public override void ExecuteCmdlet() var ScheduleType = GetScheduelType(ScheduleRunDays); - var backupSchedule = ProtectionPolicyHelper.GetBackupSchedule(this,BackupType, ScheduleType, ScheduleRunTimes, + var backupSchedule = AzureBackupCmdletHelper.FillBackupSchedule(BackupType, ScheduleType, ScheduleRunTimes, RetentionType, RetentionDuration, ScheduleRunDays); @@ -96,21 +98,22 @@ public override void ExecuteCmdlet() policyObjects = policyListResponse.ProtectionPolicies.Where(x => x.Name.Equals(Name, System.StringComparison.InvariantCultureIgnoreCase)); WriteDebug("Converting response"); - ProtectionPolicyHelper.WriteAzureBackupProtectionPolicy(this, ResourceGroupName, ResourceName, Location, policyObjects); + AzureBackupCmdletHelper.WriteAzureBackupProtectionPolicy(ResourceGroupName, ResourceName, Location, policyObjects); }); } private string GetScheduelType(string[] ScheduleRunDays) { WriteDebug("ParameterSetName = " + this.ParameterSetName.ToString()); - if (this.ParameterSetName == WeeklyScheduleParamSet || (ScheduleRunDays != null && ScheduleRunDays.Length > 0)) + + if (ScheduleRunDays != null && ScheduleRunDays.Length > 0) { return ScheduleType.Weekly.ToString(); } - else + else { return ScheduleType.Daily.ToString(); - } + } } } } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/SetAzureBackupProtectionPolicy.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/SetAzureBackupProtectionPolicy.cs index acc4ee8dfd14..735c4403fa42 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/SetAzureBackupProtectionPolicy.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/SetAzureBackupProtectionPolicy.cs @@ -24,14 +24,41 @@ namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets /// /// Update existing protection policy /// - [Cmdlet(VerbsCommon.Set, "AzureBackupProtectionPolicy"), OutputType(typeof(AzureBackupProtectionPolicy))] + [Cmdlet(VerbsCommon.Set, "AzureBackupProtectionPolicy", DefaultParameterSetName = NoScheduleParamSet), OutputType(typeof(AzureBackupProtectionPolicy))] public class SetAzureBackupProtectionPolicy : AzureBackupPolicyCmdletBase { - + protected const string WeeklyScheduleParamSet = "WeeklyScheduleParamSet"; + protected const string DailyScheduleParamSet = "DailyScheduleParamSet"; + protected const string NoScheduleParamSet = "NoScheduleParamSet"; + [Parameter(Position = 3, Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.PolicyNewName, ValueFromPipelineByPropertyName = true)] [ValidateNotNullOrEmpty] public string NewName { get; set; } + [Parameter(Position = 5, Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.BackupType, ValueFromPipelineByPropertyName = true)] + [ValidateSet("Full")] + public string BackupType { get; set; } + + [Parameter(ParameterSetName = DailyScheduleParamSet, Position = 7, Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.ScheduleType)] + public SwitchParameter Daily { get; set; } + + [Parameter(ParameterSetName = WeeklyScheduleParamSet, Position = 6, Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.ScheduleType)] + public SwitchParameter Weekly { get; set; } + + [Parameter(Position = 7, Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.ScheduleRunTimes, ValueFromPipelineByPropertyName = true)] + public DateTime ScheduleRunTimes { get; set; } + + [Parameter(Position = 8, Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.RetentionType, ValueFromPipelineByPropertyName = true)] + [ValidateSet("Days", IgnoreCase = true)] + public string RetentionType { get; set; } + + [Parameter(Position = 9, Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.RententionDuration, ValueFromPipelineByPropertyName = true)] + public int RetentionDuration { get; set; } + + [Parameter(ParameterSetName = WeeklyScheduleParamSet, Position = 10, Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.ScheduleRunDays, ValueFromPipelineByPropertyName = true)] + [ValidateSet("Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday", IgnoreCase = true)] + public string[] ScheduleRunDays { get; set; } + public override void ExecuteCmdlet() { base.ExecuteCmdlet(); @@ -39,11 +66,15 @@ public override void ExecuteCmdlet() ExecutionBlock(() => { WriteDebug("Making client call"); + AzureBackupProtectionPolicy policy = ProtectionPolicy; - ProtectionPolicyHelper.ValidateAzureBackupPolicyRequest(this, policy); - var backupSchedule = ProtectionPolicyHelper.GetBackupSchedule(this, policy.BackupType, policy.ScheduleType, policy.ScheduleRunTimes, - policy.RetentionType, policy.RetentionDuration, policy.ScheduleRunDays.ToArray()); + FillRemainingValuesForSetPolicyRequest(policy); + + AzureBackupCmdletHelper.ValidateAzureBackupPolicyRequest(policy); + + var backupSchedule = AzureBackupCmdletHelper.FillBackupSchedule(BackupType, policy.ScheduleType, ScheduleRunTimes, + RetentionType, RetentionDuration, policy.ScheduleRunDays.ToArray()); var policyListResponse = AzureBackupClient.ProtectionPolicy.ListAsync(GetCustomRequestHeaders(), CmdletCancellationToken).Result; @@ -81,10 +112,52 @@ public override void ExecuteCmdlet() policyObjects = policyListResponse_afterUpdate.ProtectionPolicies.Where(x => x.Name.Equals(NewName, System.StringComparison.InvariantCultureIgnoreCase)); WriteDebug("Converting response"); - ProtectionPolicyHelper.WriteAzureBackupProtectionPolicy(this, policy.ResourceGroupName, policy.ResourceName, policy.Location, policyObjects); + AzureBackupCmdletHelper.WriteAzureBackupProtectionPolicy(policy.ResourceGroupName, policy.ResourceName, policy.Location, policyObjects); }); } + + private void FillRemainingValuesForSetPolicyRequest(AzureBackupProtectionPolicy policy) + { + if(string.IsNullOrEmpty(BackupType)) + { + BackupType = policy.BackupType; + } + + if (ScheduleRunTimes == null) + { + ScheduleRunTimes = policy.ScheduleRunTimes; + } + + if (string.IsNullOrEmpty(RetentionType)) + { + RetentionType = policy.RetentionType; + } + + if (RetentionDuration == 0) + { + RetentionDuration = policy.RetentionDuration; + } + + if (string.IsNullOrEmpty(BackupType)) + { + BackupType = policy.BackupType; + } + + if (this.ParameterSetName != NoScheduleParamSet ) + { + if (ScheduleRunDays != null && ScheduleRunDays.Length > 0) + { + policy.ScheduleType = ScheduleType.Weekly.ToString(); + policy.ScheduleRunDays = ScheduleRunDays.ToList(); + } + else + { + policy.ScheduleType = ScheduleType.Daily.ToString(); + } + + } + } } } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Library/ProtectionPolicyHelper.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Library/AzureBackupCmdletHelper.cs similarity index 72% rename from src/ResourceManager/AzureBackup/Commands.AzureBackup/Library/ProtectionPolicyHelper.cs rename to src/ResourceManager/AzureBackup/Commands.AzureBackup/Library/AzureBackupCmdletHelper.cs index 4a722d56942b..94f77f06b691 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Library/ProtectionPolicyHelper.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Library/AzureBackupCmdletHelper.cs @@ -28,20 +28,26 @@ namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets { - public class ProtectionPolicyHelper + public class AzureBackupCmdletHelper { public const int MinRetentionInDays = 7; public const int MaxRetentionInDays = 30; public const int MinRetentionInWeeks = 1; public const int MaxRetentionInWeeks = 4; + public static AzureBackupCmdletBase azureBackupCmdletBase; - public static void WriteAzureBackupProtectionPolicy(AzureBackupCmdletBase azureBackupCmd, string ResourceGroupName, + public AzureBackupCmdletHelper(AzureBackupCmdletBase azureBackupCmd) + { + azureBackupCmdletBase = azureBackupCmd; + } + + public static void WriteAzureBackupProtectionPolicy(string ResourceGroupName, string ResourceName, string Location, ProtectionPolicyInfo sourcePolicy) { - azureBackupCmd.WriteObject(new AzureBackupProtectionPolicy(ResourceGroupName, ResourceName, Location, sourcePolicy)); + azureBackupCmdletBase.WriteObject(new AzureBackupProtectionPolicy(ResourceGroupName, ResourceName, Location, sourcePolicy)); } - public static void WriteAzureBackupProtectionPolicy(AzureBackupCmdletBase azureBackupCmd, string ResourceGroupName, + public static void WriteAzureBackupProtectionPolicy(string ResourceGroupName, string ResourceName, string Location, IEnumerable sourcePolicyList) { List targetList = new List(); @@ -52,44 +58,44 @@ public static void WriteAzureBackupProtectionPolicy(AzureBackupCmdletBase azureB ResourceName, Location, sourcePolicy)); } - azureBackupCmd.WriteObject(targetList, true); + azureBackupCmdletBase.WriteObject(targetList, true); } - public static BackupSchedule GetBackupSchedule(AzureBackupCmdletBase azureBackupCmd, string backupType, string scheduleType, DateTime scheduleStartTime, + public static BackupSchedule FillBackupSchedule(string backupType, string scheduleType, DateTime scheduleStartTime, string retentionType, int retentionDuration, string[] scheduleRunDays) { var backupSchedule = new BackupSchedule(); backupSchedule.BackupType = backupType; - backupSchedule.RetentionPolicy = GetRetentionPolicy(azureBackupCmd, retentionType, retentionDuration); + backupSchedule.RetentionPolicy = FillRetentionPolicy(retentionType, retentionDuration); - scheduleType = GetScheduleType(scheduleType, scheduleRunDays); + scheduleType = FillScheduleType(scheduleType, scheduleRunDays); backupSchedule.ScheduleRun = scheduleType; if (string.Compare(scheduleType, ScheduleType.Weekly.ToString(), true) == 0) { - backupSchedule.ScheduleRunDays = GetScheduleRunDays(azureBackupCmd, scheduleRunDays); + backupSchedule.ScheduleRunDays = ParseScheduleRunDays(scheduleRunDays); } - DateTime scheduleRunTime = GetScheduleRunTime(scheduleStartTime); + DateTime scheduleRunTime = ParseScheduleRunTime(scheduleStartTime); backupSchedule.ScheduleRunTimes = new List { scheduleRunTime }; - azureBackupCmd.WriteDebug("Exiting GetBackupSchedule"); + azureBackupCmdletBase.WriteDebug("Exiting GetBackupSchedule"); return backupSchedule; } - public static void ValidateAzureBackupPolicyRequest(AzureBackupCmdletBase azureBackupCmd, AzureBackupProtectionPolicy policy) + public static void ValidateAzureBackupPolicyRequest(AzureBackupProtectionPolicy policy) { //ValidateWorkloadType(azureBackupCmd, policy.WorkloadType); - ValidateBackupType(azureBackupCmd, policy.BackupType); - ValidateScheduleType(azureBackupCmd, policy.ScheduleType); - ValidateScheduleRunDays(azureBackupCmd, policy.ScheduleRunDays); - ValidateRetentionType(azureBackupCmd, policy.RetentionType); + ValidateBackupType(policy.BackupType); + ValidateScheduleType(policy.ScheduleType); + ValidateScheduleRunDays(policy.ScheduleRunDays); + ValidateRetentionType(policy.RetentionType); } - private static void ValidateWorkloadType(AzureBackupCmdletBase azureBackupCmd, string workloadType) + private static void ValidateWorkloadType(string workloadType) { WorkloadType item = (WorkloadType)Enum.Parse(typeof(WorkloadType), workloadType, true); @@ -97,11 +103,11 @@ private static void ValidateWorkloadType(AzureBackupCmdletBase azureBackupCmd, s { var exception = new Exception("Invalid value for param WorkloadType, Valid values are VM."); var errorRecord = new ErrorRecord(exception, string.Empty, ErrorCategory.InvalidData, null); - azureBackupCmd.WriteError(errorRecord); + azureBackupCmdletBase.WriteError(errorRecord); } } - private static void ValidateBackupType(AzureBackupCmdletBase azureBackupCmd, string backupType) + private static void ValidateBackupType(string backupType) { BackupType item = (BackupType)Enum.Parse(typeof(BackupType), backupType, true); @@ -109,11 +115,11 @@ private static void ValidateBackupType(AzureBackupCmdletBase azureBackupCmd, str { var exception = new Exception("Invalid value for param BackupType, Valid values are Full."); var errorRecord = new ErrorRecord(exception, string.Empty, ErrorCategory.InvalidData, null); - azureBackupCmd.WriteError(errorRecord); + azureBackupCmdletBase.WriteError(errorRecord); } } - private static void ValidateScheduleType(AzureBackupCmdletBase azureBackupCmd, string scheduleType) + private static void ValidateScheduleType(string scheduleType) { ScheduleType item = (ScheduleType)Enum.Parse(typeof(ScheduleType), scheduleType, true); @@ -121,11 +127,11 @@ private static void ValidateScheduleType(AzureBackupCmdletBase azureBackupCmd, s { var exception = new Exception("Invalid value for param ScheduleType, Valid values are Daily, Weekly."); var errorRecord = new ErrorRecord(exception, string.Empty, ErrorCategory.InvalidData, null); - azureBackupCmd.WriteError(errorRecord); + azureBackupCmdletBase.WriteError(errorRecord); } } - private static void ValidateRetentionType(AzureBackupCmdletBase azureBackupCmd, string retentionType) + private static void ValidateRetentionType(string retentionType) { RetentionType item = (RetentionType)Enum.Parse(typeof(RetentionType), retentionType, true); @@ -133,11 +139,11 @@ private static void ValidateRetentionType(AzureBackupCmdletBase azureBackupCmd, { var exception = new Exception("Invalid value for param RetentionType, Valid values are Days, Weeks."); var errorRecord = new ErrorRecord(exception, string.Empty, ErrorCategory.InvalidData, null); - azureBackupCmd.WriteError(errorRecord); + azureBackupCmdletBase.WriteError(errorRecord); } } - private static void ValidateScheduleRunDays(AzureBackupCmdletBase azureBackupCmd, List scheduleRunDays) + private static void ValidateScheduleRunDays(List scheduleRunDays) { foreach (string scheduleRunDay in scheduleRunDays) { @@ -149,13 +155,13 @@ private static void ValidateScheduleRunDays(AzureBackupCmdletBase azureBackupCmd var exception = new Exception("Invalid value for param ScheduleRunDays, " + "Valid values are Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday"); var errorRecord = new ErrorRecord(exception, string.Empty, ErrorCategory.InvalidData, null); - azureBackupCmd.WriteError(errorRecord); + azureBackupCmdletBase.WriteError(errorRecord); } } } - private static RetentionPolicy GetRetentionPolicy(AzureBackupCmdletBase azureBackupCmd, string retentionType, int retentionDuration) + private static RetentionPolicy FillRetentionPolicy(string retentionType, int retentionDuration) { - ValidateRetentionRange(azureBackupCmd, retentionType, retentionDuration); + ValidateRetentionRange(retentionType, retentionDuration); var retentionPolicy = new RetentionPolicy { RetentionType = (RetentionDurationType)Enum.Parse(typeof(RetentionDurationType), retentionType, true), @@ -165,14 +171,14 @@ private static RetentionPolicy GetRetentionPolicy(AzureBackupCmdletBase azureBac return retentionPolicy; } - private static void ValidateRetentionRange(AzureBackupCmdletBase azureBackupCmd, string retentionType, int retentionDuration) + private static void ValidateRetentionRange(string retentionType, int retentionDuration) { if(retentionType == RetentionDurationType.Days.ToString() && (retentionDuration < MinRetentionInDays || retentionDuration > MaxRetentionInDays)) { var exception = new Exception("For Retention in days , valid values of retention duration are 7 to 30."); var errorRecord = new ErrorRecord(exception, string.Empty, ErrorCategory.InvalidData, null); - azureBackupCmd.WriteError(errorRecord); + azureBackupCmdletBase.WriteError(errorRecord); } if (retentionType == RetentionDurationType.Weeks.ToString() && (retentionDuration < MinRetentionInWeeks @@ -180,12 +186,12 @@ private static void ValidateRetentionRange(AzureBackupCmdletBase azureBackupCmd, { var exception = new Exception("For Retention in weeks , valid values of retention duration are 1 to 4."); var errorRecord = new ErrorRecord(exception, string.Empty, ErrorCategory.InvalidData, null); - azureBackupCmd.WriteError(errorRecord); + azureBackupCmdletBase.WriteError(errorRecord); } } - private static string GetScheduleType(string scheduleType, string[] scheduleRunDays) + private static string FillScheduleType(string scheduleType, string[] scheduleRunDays) { if (scheduleType == ScheduleType.Daily.ToString() && scheduleRunDays != null && scheduleRunDays.Length > 0) { @@ -198,22 +204,22 @@ private static string GetScheduleType(string scheduleType, string[] scheduleRunD } } - private static IList GetScheduleRunDays(AzureBackupCmdletBase azureBackupCmd, string[] scheduleRunDays) + private static IList ParseScheduleRunDays(string[] scheduleRunDays) { if (scheduleRunDays == null || scheduleRunDays.Length <= 0) { var exception = new Exception("For weekly scheduletype , ScheduleRunDays should not be empty."); var errorRecord = new ErrorRecord(exception, string.Empty, ErrorCategory.InvalidData, null); - azureBackupCmd.WriteError(errorRecord); + azureBackupCmdletBase.WriteError(errorRecord); } IList ListofWeekDays = new List(); foreach (var dayOfWeek in scheduleRunDays) { - azureBackupCmd.WriteDebug("dayOfWeek" + dayOfWeek.ToString()); + azureBackupCmdletBase.WriteDebug("dayOfWeek" + dayOfWeek.ToString()); DayOfWeek item = (DayOfWeek)Enum.Parse(typeof(DayOfWeek), dayOfWeek, true); - azureBackupCmd.WriteDebug("Item" + item.ToString()); + azureBackupCmdletBase.WriteDebug("Item" + item.ToString()); if (!ListofWeekDays.Contains(item)) { ListofWeekDays.Add(item); @@ -223,7 +229,7 @@ private static IList GetScheduleRunDays(AzureBackupCmdletBase azureBa return ListofWeekDays; } - private static DateTime GetScheduleRunTime(DateTime scheduleStartTime) + private static DateTime ParseScheduleRunTime(DateTime scheduleStartTime) { scheduleStartTime = scheduleStartTime.ToUniversalTime(); DateTime scheduleRunTime = new DateTime(scheduleStartTime.Year, scheduleStartTime.Month, From d78f9ae1392b794689dbb355a4f53bce5ccc0958 Mon Sep 17 00:00:00 2001 From: dragonfly91 Date: Wed, 17 Jun 2015 22:42:46 +0530 Subject: [PATCH 086/155] Separated container and vault tests + session records --- .../Commands.AzureBackup.Test.csproj | 16 ++-- ...rTests.cs => AzureBackupContainerTests.cs} | 2 +- ...ests.ps1 => AzureBackupContainerTests.ps1} | 0 ...eTypeTests.cs => AzureBackupVaultTests.cs} | 8 +- ...ypeTests.ps1 => AzureBackupVaultTests.ps1} | 9 +++ .../GetAzureBackupVaultCredentialsTests.cs | 32 -------- .../GetAzureBackupVaultCredentialsTests.ps1 | 26 ------- .../GetAzureBackupContainerTests.json | 14 ++-- .../GetAzureBackupVaultCredentialsTests.json | 75 ------------------- .../GetAzureBackupVaultCredentialsTests.json | 75 +++++++++++++++++++ 10 files changed, 109 insertions(+), 148 deletions(-) rename src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/{GetAzureBackupContainerTests.cs => AzureBackupContainerTests.cs} (94%) rename src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/{GetAzureBackupContainerTests.ps1 => AzureBackupContainerTests.ps1} (100%) rename src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/{SetAzureBackupVaultStorageTypeTests.cs => AzureBackupVaultTests.cs} (83%) rename src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/{SetAzureBackupVaultStorageTypeTests.ps1 => AzureBackupVaultTests.ps1} (80%) delete mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/GetAzureBackupVaultCredentialsTests.cs delete mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/GetAzureBackupVaultCredentialsTests.ps1 rename src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/{Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupTests => Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupContainerTests}/GetAzureBackupContainerTests.json (90%) delete mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupTests/GetAzureBackupVaultCredentialsTests.json create mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupVaultTests/GetAzureBackupVaultCredentialsTests.json diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/Commands.AzureBackup.Test.csproj b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/Commands.AzureBackup.Test.csproj index 031abce8de24..39aeb09ede93 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/Commands.AzureBackup.Test.csproj +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/Commands.AzureBackup.Test.csproj @@ -130,9 +130,8 @@ - - - + + @@ -173,16 +172,21 @@ Always + - - - + + Always + + + Always + PreserveNewest + diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/GetAzureBackupContainerTests.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupContainerTests.cs similarity index 94% rename from src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/GetAzureBackupContainerTests.cs rename to src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupContainerTests.cs index c3ecc2a07ee7..d82fef02114d 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/GetAzureBackupContainerTests.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupContainerTests.cs @@ -21,7 +21,7 @@ namespace Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests { - public class GetAzureBackupContainerTests : AzureBackupTestsBase + public class AzureBackupContainerTests : AzureBackupTestsBase { [Fact] public void GetAzureBackupContainerTests() diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/GetAzureBackupContainerTests.ps1 b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupContainerTests.ps1 similarity index 100% rename from src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/GetAzureBackupContainerTests.ps1 rename to src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupContainerTests.ps1 diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/SetAzureBackupVaultStorageTypeTests.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupVaultTests.cs similarity index 83% rename from src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/SetAzureBackupVaultStorageTypeTests.cs rename to src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupVaultTests.cs index 2b0c824eb2e1..b947043300e2 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/SetAzureBackupVaultStorageTypeTests.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupVaultTests.cs @@ -21,8 +21,14 @@ namespace Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests { - public class SetAzureBackupVaultStorageTypeTests : AzureBackupTestsBase + public class AzureBackupVaultTests : AzureBackupTestsBase { + [Fact] + public void GetAzureBackupVaultCredentialsTests() + { + this.RunPowerShellTest("Test-GetAzureBackupVaultCredentialsReturnsFileNameAndDownloadsCert"); + } + [Fact] public void SetAzureBackupVaultStorageTypeTests() { diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/SetAzureBackupVaultStorageTypeTests.ps1 b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupVaultTests.ps1 similarity index 80% rename from src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/SetAzureBackupVaultStorageTypeTests.ps1 rename to src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupVaultTests.ps1 index b2b80b7f6e57..42fc08c4f601 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/SetAzureBackupVaultStorageTypeTests.ps1 +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupVaultTests.ps1 @@ -15,6 +15,15 @@ $ResourceGroupName = "backuprg" $ResourceName = "backuprn" $Location = "SouthEast Asia" +$CertTargetLocation = (Get-Item -Path ".\" -Verbose).FullName; + +function Test-GetAzureBackupVaultCredentialsReturnsFileNameAndDownloadsCert +{ + $fileName = Get-AzureBackupVaultCredentials -ResourceGroupName $ResourceGroupName -ResourceName $ResourceName -Location $Location -TargetLocation $CertTargetLocation + Assert-NotNull $fileName 'File name should not be null'; + $certFileFullPath = [io.path]::combine($CertTargetLocation, $fileName); + Assert-True {{ Test-Path $certFileFullPath }} +} function Test-SetAzureBackupVaultStorageTypeWithFreshResourceDoesNotThrowException { diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/GetAzureBackupVaultCredentialsTests.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/GetAzureBackupVaultCredentialsTests.cs deleted file mode 100644 index a75ea3333e4c..000000000000 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/GetAzureBackupVaultCredentialsTests.cs +++ /dev/null @@ -1,32 +0,0 @@ -// ---------------------------------------------------------------------------------- -// -// Copyright Microsoft Corporation -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// http://www.apache.org/licenses/LICENSE-2.0 -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// ---------------------------------------------------------------------------------- - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Xunit; - -namespace Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests -{ - public class GetAzureBackupVaultCredentialsTests : AzureBackupTestsBase - { - [Fact] - public void GetAzureBackupVaultCredentialsTests() - { - this.RunPowerShellTest("Test-GetAzureBackupVaultCredentialsReturnsFileNameAndDownloadsCert"); - } - } -} diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/GetAzureBackupVaultCredentialsTests.ps1 b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/GetAzureBackupVaultCredentialsTests.ps1 deleted file mode 100644 index 78db70edc6fc..000000000000 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/GetAzureBackupVaultCredentialsTests.ps1 +++ /dev/null @@ -1,26 +0,0 @@ -# ---------------------------------------------------------------------------------- -# -# Copyright Microsoft Corporation -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# http://www.apache.org/licenses/LICENSE-2.0 -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# ---------------------------------------------------------------------------------- - -$ResourceGroupName = "backuprg" -$ResourceName = "backuprn" -$Location = "SouthEast Asia" -$CertTargetLocation = (Get-Item -Path ".\" -Verbose).FullName; - -function Test-GetAzureBackupVaultCredentialsReturnsFileNameAndDownloadsCert -{ - $fileName = Get-AzureBackupVaultCredentials -ResourceGroupName $ResourceGroupName -ResourceName $ResourceName -Location $Location -TargetLocation $CertTargetLocation - Assert-NotNull $fileName 'File name should not be null'; - $certFileFullPath = [io.path]::combine($CertTargetLocation, $fileName); - Assert-True {{ Test-Path $certFileFullPath }} -} diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupTests/GetAzureBackupContainerTests.json b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupContainerTests/GetAzureBackupContainerTests.json similarity index 90% rename from src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupTests/GetAzureBackupContainerTests.json rename to src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupContainerTests/GetAzureBackupContainerTests.json index 0cf761b79a2e..5ac9d61bc7c5 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupTests/GetAzureBackupContainerTests.json +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupContainerTests/GetAzureBackupContainerTests.json @@ -31,29 +31,29 @@ "no-cache" ], "x-ms-request-id": [ - "cb36f6ae-187d-4a30-b367-d714c0733647" + "ce4dfbf6-9708-49f2-9532-0dbc9e912bf7" ], "x-ms-client-request-id": [ - "4b55cb3b-c4db-4dda-8db9-891256be4264", - "4b55cb3b-c4db-4dda-8db9-891256be4264" + "0482c73c-7196-49f8-96a0-3dcd0ccdaa90", + "0482c73c-7196-49f8-96a0-3dcd0ccdaa90" ], "Strict-Transport-Security": [ "max-age=31536000; includeSubDomains" ], "x-ms-ratelimit-remaining-subscription-reads": [ - "14999" + "14997" ], "x-ms-correlation-request-id": [ - "cb36f6ae-187d-4a30-b367-d714c0733647" + "ce4dfbf6-9708-49f2-9532-0dbc9e912bf7" ], "x-ms-routing-request-id": [ - "CENTRALUS:20150616T144830Z:cb36f6ae-187d-4a30-b367-d714c0733647" + "CENTRALUS:20150617T170930Z:ce4dfbf6-9708-49f2-9532-0dbc9e912bf7" ], "Cache-Control": [ "no-cache" ], "Date": [ - "Tue, 16 Jun 2015 14:48:30 GMT" + "Wed, 17 Jun 2015 17:09:30 GMT" ], "Server": [ "Microsoft-IIS/8.0" diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupTests/GetAzureBackupVaultCredentialsTests.json b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupTests/GetAzureBackupVaultCredentialsTests.json deleted file mode 100644 index 16a38c9e8da8..000000000000 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupTests/GetAzureBackupVaultCredentialsTests.json +++ /dev/null @@ -1,75 +0,0 @@ -{ - "Entries": [ - { - "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/certificates/IdMgmtInternalCert?api-version=2015-03-15", - "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vY2VydGlmaWNhdGVzL0lkTWdtdEludGVybmFsQ2VydD9hcGktdmVyc2lvbj0yMDE1LTAzLTE1", - "RequestMethod": "PUT", - "RequestBody": "{\r\n \"properties\": {\r\n \"certificate\": \"MIIC3TCCAcWgAwIBAgIQfAPxy3CY6JlCIBZLq9ZwVjANBgkqhkiG9w0BAQUFADAeMRwwGgYDVQQDExNXaW5kb3dzIEF6dXJlIFRvb2xzMB4XDTE1MDYxNjE1NDQ1MVoXDTE1MDYxODE1NTQ1MVowHjEcMBoGA1UEAxMTV2luZG93cyBBenVyZSBUb29sczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJcmOVXMwQS3uiV3xRbeRbbQxjbS/eT/n3m7b9nd2NoPsMhGT+uvypAL3iG2wxd7HzqjZswIVMhsLqYMzQIv6kcAlbyosuiaT56ga/xLBZJGJg7DHA4ndQf4UnigmqLCZeE5dyvJ/U070iHEBS1M9pa6TPmYgIEVKFZ1p3qDnmHsz6DPb39vdzxpKAsseGD2ocdLmb0Eq1s7ZnS9djzLkiY7x2P715Iivz1PZx/JcjTAwCorfWU9elI+sdSY62DZKhZbrXnK+qFEYnRO1cPWXe9AvJynQvS+FRkD8HCLHweWXEvCs/BX8CGJbKi9XYnuDlhuxm4dLBCs92tXrhu2hUsCAwEAAaMXMBUwEwYDVR0lBAwwCgYIKwYBBQUHAwIwDQYJKoZIhvcNAQEFBQADggEBAGj+8Vo4WUUui7GepTrsRAKAx2ZpdfCTTBhsdQIxbtaz312xX93i6X0CCmJLRjeXNNoVv5b0zDFnIdoTqn3eraDNonkMUqNGGleC4gMnOLzbKURMWeJ2cfGIVGtHkSv8ZFgU+ttZtCPX6SpzAWcplCeEX8DNs87e9ew4jZg4gPYu9zEO+Z4iYQlGd55Pd8JiiCsVcs9KhtrbBHC9J4/tTAZsONPLqo3PFdXMqmuN5Yct+J5T93kW3FWb/X5oiNZXtn9O4j7T7rYSHje9IZnSoiNW0Nc9/JgQ5VPbUMpc6U6tE53yIQ1aWpLj49L+gxSoZ7KWefN/NDMGSXTzTuXJ9R0=\"\r\n }\r\n}", - "RequestHeaders": { - "Content-Type": [ - "application/json" - ], - "Content-Length": [ - "1035" - ], - "Accept-Language": [ - "en-us" - ], - "x-ms-version": [ - "2013-03-01" - ], - "User-Agent": [ - "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" - ] - }, - "ResponseBody": "{\r\n \"properties\": {\r\n \"certificate\": \"MIIC3TCCAcWgAwIBAgIQfAPxy3CY6JlCIBZLq9ZwVjANBgkqhkiG9w0BAQUFADAeMRwwGgYDVQQDExNXaW5kb3dzIEF6dXJlIFRvb2xzMB4XDTE1MDYxNjE1NDQ1MVoXDTE1MDYxODE1NTQ1MVowHjEcMBoGA1UEAxMTV2luZG93cyBBenVyZSBUb29sczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJcmOVXMwQS3uiV3xRbeRbbQxjbS/eT/n3m7b9nd2NoPsMhGT+uvypAL3iG2wxd7HzqjZswIVMhsLqYMzQIv6kcAlbyosuiaT56ga/xLBZJGJg7DHA4ndQf4UnigmqLCZeE5dyvJ/U070iHEBS1M9pa6TPmYgIEVKFZ1p3qDnmHsz6DPb39vdzxpKAsseGD2ocdLmb0Eq1s7ZnS9djzLkiY7x2P715Iivz1PZx/JcjTAwCorfWU9elI+sdSY62DZKhZbrXnK+qFEYnRO1cPWXe9AvJynQvS+FRkD8HCLHweWXEvCs/BX8CGJbKi9XYnuDlhuxm4dLBCs92tXrhu2hUsCAwEAAaMXMBUwEwYDVR0lBAwwCgYIKwYBBQUHAwIwDQYJKoZIhvcNAQEFBQADggEBAGj+8Vo4WUUui7GepTrsRAKAx2ZpdfCTTBhsdQIxbtaz312xX93i6X0CCmJLRjeXNNoVv5b0zDFnIdoTqn3eraDNonkMUqNGGleC4gMnOLzbKURMWeJ2cfGIVGtHkSv8ZFgU+ttZtCPX6SpzAWcplCeEX8DNs87e9ew4jZg4gPYu9zEO+Z4iYQlGd55Pd8JiiCsVcs9KhtrbBHC9J4/tTAZsONPLqo3PFdXMqmuN5Yct+J5T93kW3FWb/X5oiNZXtn9O4j7T7rYSHje9IZnSoiNW0Nc9/JgQ5VPbUMpc6U6tE53yIQ1aWpLj49L+gxSoZ7KWefN/NDMGSXTzTuXJ9R0=\",\r\n \"resourceId\": 3420983535961922368,\r\n \"globalAcsNamespace\": \"seadev01rp1users\",\r\n \"globalAcsHostName\": \"accesscontrol.windows.net\",\r\n \"globalAcsRPRealm\": \"http://windowscloudbackup/m3\",\r\n \"subject\": \"CN=Windows Azure Tools\",\r\n \"validFrom\": \"2015-06-16T21:14:51+05:30\",\r\n \"validTo\": \"2015-06-18T21:24:51+05:30\",\r\n \"thumbprint\": \"3C6F6F4C967A814B373E16F4E21903279E068704\",\r\n \"friendlyName\": \"\",\r\n \"issuer\": \"CN=Windows Azure Tools\"\r\n }\r\n}", - "ResponseHeaders": { - "Content-Length": [ - "1409" - ], - "Content-Type": [ - "application/json" - ], - "Expires": [ - "-1" - ], - "Pragma": [ - "no-cache" - ], - "x-ms-request-id": [ - "8511ee99-3e25-405e-aa6f-0cb873bdab7c" - ], - "x-ms-client-request-id": [ - "0c51abcf-3be9-4c40-ba65-de8e5ed0d233", - "0c51abcf-3be9-4c40-ba65-de8e5ed0d233" - ], - "Strict-Transport-Security": [ - "max-age=31536000; includeSubDomains" - ], - "x-ms-ratelimit-remaining-subscription-writes": [ - "1197" - ], - "x-ms-correlation-request-id": [ - "8511ee99-3e25-405e-aa6f-0cb873bdab7c" - ], - "x-ms-routing-request-id": [ - "CENTRALUS:20150616T155458Z:8511ee99-3e25-405e-aa6f-0cb873bdab7c" - ], - "Cache-Control": [ - "no-cache" - ], - "Date": [ - "Tue, 16 Jun 2015 15:54:58 GMT" - ], - "Server": [ - "Microsoft-IIS/8.0" - ] - }, - "StatusCode": 200 - } - ], - "Names": {}, - "Variables": { - "SubscriptionId": "f5303a0b-fae4-4cdb-b44d-0e4c032dde26" - } -} \ No newline at end of file diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupVaultTests/GetAzureBackupVaultCredentialsTests.json b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupVaultTests/GetAzureBackupVaultCredentialsTests.json new file mode 100644 index 000000000000..ecffd4ab1460 --- /dev/null +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupVaultTests/GetAzureBackupVaultCredentialsTests.json @@ -0,0 +1,75 @@ +{ + "Entries": [ + { + "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/certificates/IdMgmtInternalCert?api-version=2015-03-15", + "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vY2VydGlmaWNhdGVzL0lkTWdtdEludGVybmFsQ2VydD9hcGktdmVyc2lvbj0yMDE1LTAzLTE1", + "RequestMethod": "PUT", + "RequestBody": "{\r\n \"properties\": {\r\n \"certificate\": \"MIIC3TCCAcWgAwIBAgIQaa4WR+3Ra7pPjIzudnuuQTANBgkqhkiG9w0BAQUFADAeMRwwGgYDVQQDExNXaW5kb3dzIEF6dXJlIFRvb2xzMB4XDTE1MDYxNzE3MDAwM1oXDTE1MDYxOTE3MTAwM1owHjEcMBoGA1UEAxMTV2luZG93cyBBenVyZSBUb29sczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJhjKYhKBkE9TN6WLn8mlvkg3nCgbYwWJSuyMpcE2NH3B/rxndF1a/Mz3MJ5s3+EB9FJpuh5W2ZoqcZ2fpA3nSd+L1zrXY9gOqKqrLmRI3TwSF8X4UVXlA3eFu2QV18FfaNyDE6eBX9Rf0cDTWvNraCW/31fVGs+66d1qDhiEevPo6B9JXXauAN4NgA6uI8rwY/UOQY+3hIVjWJ/FZOAgN/T6Jb/hglCqVcyBn5bxJa3Zz49P3YSBwauf2uyiJlU64B3xmrT75Qo/+cRk5BpkWsBh57PxZhfgwL6IXSezcGTEBl5S3LEMeo+T0To6d+f/F38g2PLqteWHrtTWu+SGYkCAwEAAaMXMBUwEwYDVR0lBAwwCgYIKwYBBQUHAwIwDQYJKoZIhvcNAQEFBQADggEBAEspmwyUvBmbX97gwA3mMFiHyZXFL5MgcA0qjZWy7tUS3gcrLZRSv8SMmX8Yv9F4wMy1oe/H4PxCM2IX8cuQLZ2NfAo2sGVlmhdP12ksW/rKimHpnUTfSnslzqFg4sExu4WIkRn6AJMeqAjOul+A1a6UWKa+RRoRQc6MU/tvBAiEnlRAzFpv/4Ri3yS+KXD0gkOMpoJABkOEtdrgbyFICjfsaku4q1q8LycusFpbE+GEL5TWbUG9wwLZl/IPoy8NBtrv/7Dz8t8a6j/LUxvcChNSj4sID98uasBzOJ8I65xixv+XZXl76a0Q2J4icGkmomktz3TCd7yTVykjgyAbP8c=\"\r\n }\r\n}", + "RequestHeaders": { + "Content-Type": [ + "application/json" + ], + "Content-Length": [ + "1035" + ], + "Accept-Language": [ + "en-us" + ], + "x-ms-version": [ + "2013-03-01" + ], + "User-Agent": [ + "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" + ] + }, + "ResponseBody": "{\r\n \"properties\": {\r\n \"certificate\": \"MIIC3TCCAcWgAwIBAgIQaa4WR+3Ra7pPjIzudnuuQTANBgkqhkiG9w0BAQUFADAeMRwwGgYDVQQDExNXaW5kb3dzIEF6dXJlIFRvb2xzMB4XDTE1MDYxNzE3MDAwM1oXDTE1MDYxOTE3MTAwM1owHjEcMBoGA1UEAxMTV2luZG93cyBBenVyZSBUb29sczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJhjKYhKBkE9TN6WLn8mlvkg3nCgbYwWJSuyMpcE2NH3B/rxndF1a/Mz3MJ5s3+EB9FJpuh5W2ZoqcZ2fpA3nSd+L1zrXY9gOqKqrLmRI3TwSF8X4UVXlA3eFu2QV18FfaNyDE6eBX9Rf0cDTWvNraCW/31fVGs+66d1qDhiEevPo6B9JXXauAN4NgA6uI8rwY/UOQY+3hIVjWJ/FZOAgN/T6Jb/hglCqVcyBn5bxJa3Zz49P3YSBwauf2uyiJlU64B3xmrT75Qo/+cRk5BpkWsBh57PxZhfgwL6IXSezcGTEBl5S3LEMeo+T0To6d+f/F38g2PLqteWHrtTWu+SGYkCAwEAAaMXMBUwEwYDVR0lBAwwCgYIKwYBBQUHAwIwDQYJKoZIhvcNAQEFBQADggEBAEspmwyUvBmbX97gwA3mMFiHyZXFL5MgcA0qjZWy7tUS3gcrLZRSv8SMmX8Yv9F4wMy1oe/H4PxCM2IX8cuQLZ2NfAo2sGVlmhdP12ksW/rKimHpnUTfSnslzqFg4sExu4WIkRn6AJMeqAjOul+A1a6UWKa+RRoRQc6MU/tvBAiEnlRAzFpv/4Ri3yS+KXD0gkOMpoJABkOEtdrgbyFICjfsaku4q1q8LycusFpbE+GEL5TWbUG9wwLZl/IPoy8NBtrv/7Dz8t8a6j/LUxvcChNSj4sID98uasBzOJ8I65xixv+XZXl76a0Q2J4icGkmomktz3TCd7yTVykjgyAbP8c=\",\r\n \"resourceId\": 3420983535961922368,\r\n \"globalAcsNamespace\": \"seadev01rp1users\",\r\n \"globalAcsHostName\": \"accesscontrol.windows.net\",\r\n \"globalAcsRPRealm\": \"http://windowscloudbackup/m3\",\r\n \"subject\": \"CN=Windows Azure Tools\",\r\n \"validFrom\": \"2015-06-17T22:30:03+05:30\",\r\n \"validTo\": \"2015-06-19T22:40:03+05:30\",\r\n \"thumbprint\": \"39D0915AC95DFD234575A54502AEBC78E344B3E8\",\r\n \"friendlyName\": \"\",\r\n \"issuer\": \"CN=Windows Azure Tools\"\r\n }\r\n}", + "ResponseHeaders": { + "Content-Length": [ + "1409" + ], + "Content-Type": [ + "application/json" + ], + "Expires": [ + "-1" + ], + "Pragma": [ + "no-cache" + ], + "x-ms-request-id": [ + "c66c0373-80b0-43ff-8089-8075e57913e9" + ], + "x-ms-client-request-id": [ + "773dc534-8d14-4812-912f-d2834a9e8c05", + "773dc534-8d14-4812-912f-d2834a9e8c05" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "x-ms-ratelimit-remaining-subscription-writes": [ + "1198" + ], + "x-ms-correlation-request-id": [ + "c66c0373-80b0-43ff-8089-8075e57913e9" + ], + "x-ms-routing-request-id": [ + "CENTRALUS:20150617T171018Z:c66c0373-80b0-43ff-8089-8075e57913e9" + ], + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Wed, 17 Jun 2015 17:10:17 GMT" + ], + "Server": [ + "Microsoft-IIS/8.0" + ] + }, + "StatusCode": 200 + } + ], + "Names": {}, + "Variables": { + "SubscriptionId": "f5303a0b-fae4-4cdb-b44d-0e4c032dde26" + } +} \ No newline at end of file From 216c6817e05f9d82d863eeccc03f64be7d06277e Mon Sep 17 00:00:00 2001 From: dragonfly91 Date: Wed, 17 Jun 2015 22:53:24 +0530 Subject: [PATCH 087/155] Moving MKherani's tests to the common place for container tests --- .../Commands.AzureBackup.Test.csproj | 2 - .../AzureBackupContainerTests.cs | 12 ++++++ .../AzureBackupContainerTests.ps1 | 23 +++++++++++ .../ContainerTest/AzureBackupContainerTest.cs | 34 ---------------- .../AzureBackupContainerTest.ps1 | 39 ------------------- 5 files changed, 35 insertions(+), 75 deletions(-) delete mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/ContainerTest/AzureBackupContainerTest.cs delete mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/ContainerTest/AzureBackupContainerTest.ps1 diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/Commands.AzureBackup.Test.csproj b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/Commands.AzureBackup.Test.csproj index b738fc9c7572..9f901adff40b 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/Commands.AzureBackup.Test.csproj +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/Commands.AzureBackup.Test.csproj @@ -129,7 +129,6 @@ - @@ -170,7 +169,6 @@ Always - Always diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupContainerTests.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupContainerTests.cs index d82fef02114d..6289e8cd69bf 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupContainerTests.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupContainerTests.cs @@ -30,5 +30,17 @@ public void GetAzureBackupContainerTests() this.RunPowerShellTest("Test-GetAzureBackupContainerWithUniqueFilterReturnsOneContainer"); } + + [Fact] + public void RegisterAzureBackupContainerTest() + { + this.RunPowerShellTest("Test-RegisterAzureBackupContainer"); + } + + [Fact] + public void UnregisterAzureBackupContainerTest() + { + this.RunPowerShellTest("Test-UnregisterAzureBackupContainer"); + } } } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupContainerTests.ps1 b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupContainerTests.ps1 index 0e9b5b0805db..a7a1bb39118d 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupContainerTests.ps1 +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupContainerTests.ps1 @@ -18,6 +18,10 @@ $Location = "SouthEast Asia" $ContainerResourceGroupName = "dev01Testing" $ContainerResourceName = "dev01Testing" +<# +.SYNOPSIS +Tests to test list containers +#> function Test-GetAzureBackupContainerWithoutFilterReturnsNonZeroContainers { $containers = Get-AzureBackupContainer -ResourceGroupName $ResourceGroupName -ResourceName $ResourceName -Location $Location @@ -31,3 +35,22 @@ function Test-GetAzureBackupContainerWithUniqueFilterReturnsOneContainer Assert-AreEqual $container.ResourceName $ContainerResourceName -CaseSensitive 'Returned container resource name (a.k.a friendly name) does not match the test VM resource name'; Assert-AreEqual $container.ResourceGroupName $ContainerResourceGroupName -CaseSensitive 'Returned container resource group name (a.k.a parent friendly name) does not match the test VM resource group name'; } + +<# +.SYNOPSIS +Tests to register the container +#> +function Test-RegisterAzureBackupContainer +{ + $jobId = Register-AzureBackupContainer -ResourceGroupName $ResourceGroupName -ResourceName $ResourceName -location $Location -Name $ContainerResourceName -ServiceName $ContainerResourceGroupName + + Assert-NotNull $jobId 'JobID should not be null'; +} + +function Test-UnregisterAzureBackupContainer +{ + $container = Get-AzureBackupContainer -ResourceGroupName $ResourceGroupName -ResourceName $ResourceName -location $Location -ContainerResourceName $ContainerResourceName -ContainerResourceGroupName $ContainerResourceGroupName + $jobId = Unregister-AzureBackupContainer -ResourceGroupName $ResourceGroupName -ResourceName $ResourceName -location $Location -AzureBackupContainer $container + + Assert-NotNull $jobId 'JobID should not be null'; +} \ No newline at end of file diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/ContainerTest/AzureBackupContainerTest.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/ContainerTest/AzureBackupContainerTest.cs deleted file mode 100644 index 98f8572f2e74..000000000000 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/ContainerTest/AzureBackupContainerTest.cs +++ /dev/null @@ -1,34 +0,0 @@ -// ---------------------------------------------------------------------------------- -// -// Copyright Microsoft Corporation -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// http://www.apache.org/licenses/LICENSE-2.0 -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// ---------------------------------------------------------------------------------- - -using Microsoft.WindowsAzure.Commands.ScenarioTest; -using Xunit; - -namespace Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests -{ - public class AzureBackupContainerTest : AzureBackupTestsBase - { - [Fact] - public void RegisterAzureBackupContainerTest() - { - this.RunPowerShellTest("Test-RegisterAzureBackupContainer"); - } - - [Fact] - public void UnregisterAzureBackupContainerTest() - { - this.RunPowerShellTest("Test-UnregisterAzureBackupContainer"); - } - } -} diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/ContainerTest/AzureBackupContainerTest.ps1 b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/ContainerTest/AzureBackupContainerTest.ps1 deleted file mode 100644 index bb2c01db7921..000000000000 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/ContainerTest/AzureBackupContainerTest.ps1 +++ /dev/null @@ -1,39 +0,0 @@ -# ---------------------------------------------------------------------------------- -# -# Copyright Microsoft Corporation -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# http://www.apache.org/licenses/LICENSE-2.0 -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# ---------------------------------------------------------------------------------- - -$ResourceGroupName = "backuprg" -$ResourceName = "backuprn" -$Name = "dev01testing" -$VMServiceName = "dev01testing" -$ContainerType = "IaasVMContainer" -$Location = "westus" - -<# -.SYNOPSIS -Tests to register the container -#> -function Test-RegisterAzureBackupContainer -{ - $jobId = Register-AzureBackupContainer -ResourceGroupName $ResourceGroupName -ResourceName $ResourceName -location $Location -Name $VMName -ServiceName $VMServiceName - - Assert-NotNull $jobId 'JobID should not be null'; -} - -function Test-UnregisterAzureBackupContainer -{ - $container = Get-AzureBackupContainer -ResourceGroupName $ResourceGroupName -ResourceName $ResourceName -location $Location -ContainerResourceName $VMName -ContainerResourceGroupName $VMServiceName - $jobId = Unregister-AzureBackupContainer -ResourceGroupName $ResourceGroupName -ResourceName $ResourceName -location $Location -AzureBackupContainer $container - - Assert-NotNull $jobId 'JobID should not be null'; -} \ No newline at end of file From 959950b05e3299b5addbaa8838db9719a1126621 Mon Sep 17 00:00:00 2001 From: dragonfly91 Date: Wed, 17 Jun 2015 23:07:04 +0530 Subject: [PATCH 088/155] Including session records for register and unregister cmdlets. --- .../Commands.AzureBackup.Test.csproj | 9 +- .../RegisterAzureBackupContainerTest.json | 142 ++++++++++++++++++ .../UnregisterAzureBackupContainerTest.json | 139 +++++++++++++++++ .../Commands.AzureBackup.csproj | 7 +- 4 files changed, 291 insertions(+), 6 deletions(-) create mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupContainerTests/RegisterAzureBackupContainerTest.json create mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupContainerTests/UnregisterAzureBackupContainerTest.json diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/Commands.AzureBackup.Test.csproj b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/Commands.AzureBackup.Test.csproj index 9f901adff40b..112f7e9e16df 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/Commands.AzureBackup.Test.csproj +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/Commands.AzureBackup.Test.csproj @@ -39,9 +39,6 @@ False ..\..\..\packages\Microsoft.Azure.Common.Authentication.1.0.25-preview\lib\net45\Microsoft.Azure.Common.Authentication.dll - - ..\..\..\..\..\azure-sdk-for-net\src\ResourceManagement\AzureBackup\BackupServicesManagment\bin\Net45-Debug\Microsoft.Azure.Management.BackupServicesManagment.dll - False ..\..\..\packages\Microsoft.Azure.Management.Resources.2.18.0-preview\lib\net40\Microsoft.Azure.ResourceManager.dll @@ -134,6 +131,10 @@ + + {38a6741c-77a3-42a8-a846-83373be57c7f} + BackupServicesManagment + {5ee72c53-1720-4309-b54b-5fb79703195f} Commands.Common @@ -173,6 +174,8 @@ Always + + diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupContainerTests/RegisterAzureBackupContainerTest.json b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupContainerTests/RegisterAzureBackupContainerTest.json new file mode 100644 index 000000000000..17c12738a42f --- /dev/null +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupContainerTests/RegisterAzureBackupContainerTest.json @@ -0,0 +1,142 @@ +{ + "Entries": [ + { + "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/containers?api-version=2014-09-01&dummy=%26ContainerType%3DIaasVMContainer%26FriendlyName%3Ddev01Testing", + "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vY29udGFpbmVycz9hcGktdmVyc2lvbj0yMDE0LTA5LTAxJmR1bW15PSUyNkNvbnRhaW5lclR5cGUlM0RJYWFzVk1Db250YWluZXIlMjZGcmllbmRseU5hbWUlM0RkZXYwMVRlc3Rpbmc=", + "RequestMethod": "GET", + "RequestBody": "", + "RequestHeaders": { + "Accept-Language": [ + "en-us" + ], + "x-ms-version": [ + "2013-03-01" + ], + "User-Agent": [ + "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" + ] + }, + "ResponseBody": "{\r\n \"Objects\": [\r\n {\r\n \"FriendlyName\": \"dev01Testing\",\r\n \"SubscriptionId\": \"f5303a0b-fae4-4cdb-b44d-0e4c032dde26\",\r\n \"ContainerType\": \"IaasVMContainer\",\r\n \"ParentContainerName\": \"dev01Testing\",\r\n \"ParentContainerFriendlyName\": \"dev01Testing\",\r\n \"RegistrationStatus\": \"Registered\",\r\n \"HealthStatus\": \"Healthy\",\r\n \"PropertyBag\": null,\r\n \"InstanceId\": null,\r\n \"Name\": \"iaasvmcontainer;dev01testing;dev01testing\",\r\n \"OperationInProgress\": false\r\n }\r\n ],\r\n \"ResultCount\": 1,\r\n \"Skiptoken\": null\r\n}", + "ResponseHeaders": { + "Content-Length": [ + "425" + ], + "Content-Type": [ + "application/json" + ], + "Expires": [ + "-1" + ], + "Pragma": [ + "no-cache" + ], + "x-ms-request-id": [ + "440a2de2-c516-4b57-87ee-74839064470b" + ], + "x-ms-client-request-id": [ + "cdc53ea3-207a-4d07-b535-32e8e48f5b14", + "cdc53ea3-207a-4d07-b535-32e8e48f5b14" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "x-ms-ratelimit-remaining-subscription-reads": [ + "14992" + ], + "x-ms-correlation-request-id": [ + "440a2de2-c516-4b57-87ee-74839064470b" + ], + "x-ms-routing-request-id": [ + "CENTRALUS:20150617T172637Z:440a2de2-c516-4b57-87ee-74839064470b" + ], + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Wed, 17 Jun 2015 17:26:37 GMT" + ], + "Server": [ + "Microsoft-IIS/8.0" + ], + "X-Powered-By": [ + "ASP.NET" + ] + }, + "StatusCode": 200 + }, + { + "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/containers/register?api-version=2014-09-01", + "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vY29udGFpbmVycy9yZWdpc3Rlcj9hcGktdmVyc2lvbj0yMDE0LTA5LTAx", + "RequestMethod": "POST", + "RequestBody": "{\r\n \"ContainerUniqueNameList\": [\r\n \"iaasvmcontainer;dev01testing;dev01testing\"\r\n ],\r\n \"ContainerType\": \"IaasVMContainer\"\r\n}", + "RequestHeaders": { + "Content-Type": [ + "application/json" + ], + "Content-Length": [ + "129" + ], + "Accept-Language": [ + "en-us" + ], + "x-ms-version": [ + "2013-03-01" + ], + "User-Agent": [ + "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" + ] + }, + "ResponseBody": "\"4a6fddd3-bdfc-482e-b7db-446cf9d729bc\"", + "ResponseHeaders": { + "Content-Length": [ + "38" + ], + "Content-Type": [ + "application/json" + ], + "Expires": [ + "-1" + ], + "Pragma": [ + "no-cache" + ], + "x-ms-request-id": [ + "e6efbb84-1593-4db6-b064-31838096cc99" + ], + "x-ms-client-request-id": [ + "d208a9ee-2876-4dc5-98e9-ed753b5a9014", + "d208a9ee-2876-4dc5-98e9-ed753b5a9014" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "x-ms-ratelimit-remaining-subscription-writes": [ + "1194" + ], + "x-ms-correlation-request-id": [ + "e6efbb84-1593-4db6-b064-31838096cc99" + ], + "x-ms-routing-request-id": [ + "CENTRALUS:20150617T172639Z:e6efbb84-1593-4db6-b064-31838096cc99" + ], + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Wed, 17 Jun 2015 17:26:39 GMT" + ], + "Server": [ + "Microsoft-IIS/8.0" + ], + "X-Powered-By": [ + "ASP.NET" + ] + }, + "StatusCode": 202 + } + ], + "Names": {}, + "Variables": { + "SubscriptionId": "f5303a0b-fae4-4cdb-b44d-0e4c032dde26" + } +} \ No newline at end of file diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupContainerTests/UnregisterAzureBackupContainerTest.json b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupContainerTests/UnregisterAzureBackupContainerTest.json new file mode 100644 index 000000000000..fb251975358b --- /dev/null +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupContainerTests/UnregisterAzureBackupContainerTest.json @@ -0,0 +1,139 @@ +{ + "Entries": [ + { + "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/containers?api-version=2014-09-01&dummy=%26FriendlyName%3Ddev01Testing", + "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vY29udGFpbmVycz9hcGktdmVyc2lvbj0yMDE0LTA5LTAxJmR1bW15PSUyNkZyaWVuZGx5TmFtZSUzRGRldjAxVGVzdGluZw==", + "RequestMethod": "GET", + "RequestBody": "", + "RequestHeaders": { + "Accept-Language": [ + "en-us" + ], + "x-ms-version": [ + "2013-03-01" + ], + "User-Agent": [ + "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" + ] + }, + "ResponseBody": "{\r\n \"Objects\": [\r\n {\r\n \"FriendlyName\": \"dev01Testing\",\r\n \"SubscriptionId\": \"f5303a0b-fae4-4cdb-b44d-0e4c032dde26\",\r\n \"ContainerType\": \"IaasVMContainer\",\r\n \"ParentContainerName\": \"dev01Testing\",\r\n \"ParentContainerFriendlyName\": \"dev01Testing\",\r\n \"RegistrationStatus\": \"Registering\",\r\n \"HealthStatus\": \"Healthy\",\r\n \"PropertyBag\": null,\r\n \"InstanceId\": null,\r\n \"Name\": \"iaasvmcontainer;dev01testing;dev01testing\",\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"FriendlyName\": \"dev01Testing\",\r\n \"SubscriptionId\": \"f5303a0b-fae4-4cdb-b44d-0e4c032dde26\",\r\n \"ContainerType\": \"IaasVMServiceContainer\",\r\n \"ParentContainerName\": null,\r\n \"ParentContainerFriendlyName\": null,\r\n \"RegistrationStatus\": \"NotRegistered\",\r\n \"HealthStatus\": \"Healthy\",\r\n \"PropertyBag\": \"\",\r\n \"InstanceId\": null,\r\n \"Name\": \"dev01testing\",\r\n \"OperationInProgress\": false\r\n }\r\n ],\r\n \"ResultCount\": 2,\r\n \"Skiptoken\": null\r\n}", + "ResponseHeaders": { + "Content-Length": [ + "764" + ], + "Content-Type": [ + "application/json" + ], + "Expires": [ + "-1" + ], + "Pragma": [ + "no-cache" + ], + "x-ms-request-id": [ + "de369fec-4df6-4813-8ddb-24bceddba94e" + ], + "x-ms-client-request-id": [ + "341c6fb9-6b4c-4773-8450-32cf85173c91", + "341c6fb9-6b4c-4773-8450-32cf85173c91" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "x-ms-ratelimit-remaining-subscription-reads": [ + "14991" + ], + "x-ms-correlation-request-id": [ + "de369fec-4df6-4813-8ddb-24bceddba94e" + ], + "x-ms-routing-request-id": [ + "CENTRALUS:20150617T172721Z:de369fec-4df6-4813-8ddb-24bceddba94e" + ], + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Wed, 17 Jun 2015 17:27:21 GMT" + ], + "Server": [ + "Microsoft-IIS/8.0" + ], + "X-Powered-By": [ + "ASP.NET" + ] + }, + "StatusCode": 200 + }, + { + "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/containers?api-version=2014-09-01", + "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vY29udGFpbmVycz9hcGktdmVyc2lvbj0yMDE0LTA5LTAx", + "RequestMethod": "DELETE", + "RequestBody": "{\r\n \"ContainerUniqueName\": \"iaasvmcontainer;dev01testing;dev01testing\",\r\n \"ContainerType\": \"IaasVMContainer\"\r\n}", + "RequestHeaders": { + "Content-Type": [ + "application/json" + ], + "Content-Length": [ + "113" + ], + "Accept-Language": [ + "en-us" + ], + "User-Agent": [ + "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" + ] + }, + "ResponseBody": "\"8386018b-db83-4f50-b496-a4e4e1ad1824\"", + "ResponseHeaders": { + "Content-Length": [ + "38" + ], + "Content-Type": [ + "application/json" + ], + "Expires": [ + "-1" + ], + "Pragma": [ + "no-cache" + ], + "x-ms-request-id": [ + "9756b21f-b792-4b7a-b2ae-825c6625302c" + ], + "x-ms-client-request-id": [ + "75d2fb2f-daf1-4c97-865f-2a2f6230ee34", + "75d2fb2f-daf1-4c97-865f-2a2f6230ee34" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "x-ms-ratelimit-remaining-subscription-writes": [ + "1193" + ], + "x-ms-correlation-request-id": [ + "9756b21f-b792-4b7a-b2ae-825c6625302c" + ], + "x-ms-routing-request-id": [ + "CENTRALUS:20150617T172722Z:9756b21f-b792-4b7a-b2ae-825c6625302c" + ], + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Wed, 17 Jun 2015 17:27:22 GMT" + ], + "Server": [ + "Microsoft-IIS/8.0" + ], + "X-Powered-By": [ + "ASP.NET" + ] + }, + "StatusCode": 202 + } + ], + "Names": {}, + "Variables": { + "SubscriptionId": "f5303a0b-fae4-4cdb-b44d-0e4c032dde26" + } +} \ No newline at end of file diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj index 6b71dcb49e9f..b36222267916 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj @@ -65,9 +65,6 @@ ..\..\..\packages\Microsoft.Azure.Common.2.1.0\lib\net45\Microsoft.Azure.Common.NetFramework.dll - - ..\..\..\..\..\azure-sdk-for-net\src\ResourceManagement\AzureBackup\BackupServicesManagment\bin\Net45-Debug\Microsoft.Azure.Management.BackupServicesManagment.dll - ..\..\..\packages\Microsoft.Azure.Management.Resources.2.18.0-preview\lib\net40\Microsoft.Azure.ResourceManager.dll @@ -175,6 +172,10 @@ + + {38a6741c-77a3-42a8-a846-83373be57c7f} + BackupServicesManagment + {5ee72c53-1720-4309-b54b-5fb79703195f} Commands.Common From 09407d44cc034ec26e6265f2131b95dd86fed424 Mon Sep 17 00:00:00 2001 From: pragrawa Date: Wed, 17 Jun 2015 23:18:30 +0530 Subject: [PATCH 089/155] ProtectionPolicy Changes 3 --- .../AzureBackupCmdletBase.cs | 10 +- .../AzureBackupCmdletHelpMessage.cs | 3 +- .../AzureBackupPolicyCmdletBase.cs | 3 +- .../GetAzureBackupProtectionPolicy.cs | 17 +-- .../NewAzureBackupProtectionPolicy.cs | 38 ++---- .../RemoveAzureBackupProtectionPolicy.cs | 21 ++- .../SetAzureBackupProtectionPolicy.cs | 62 ++++----- .../Commands.AzureBackup.csproj | 2 +- .../Library/AzureBackupCmdletHelper.cs | 122 ++++++------------ 9 files changed, 105 insertions(+), 173 deletions(-) diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupCmdletBase.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupCmdletBase.cs index eef1713302e3..83bbee619a1b 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupCmdletBase.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupCmdletBase.cs @@ -60,12 +60,14 @@ public abstract class AzureBackupCmdletBase : AzurePSCmdlet /// Cancellation Token Source /// private CancellationTokenSource cancellationTokenSource = new CancellationTokenSource(); - protected CancellationToken CmdletCancellationToken; + internal CancellationToken CmdletCancellationToken; + + protected AzureBackupCmdletHelper azureBackupCmdletHelper; /// /// Get Azure backup client. /// - protected BackupServicesManagementClient AzureBackupClient + internal BackupServicesManagementClient AzureBackupClient { get { @@ -97,7 +99,7 @@ public void InitializeAzureBackupCmdlet(string rgName, string rName, string loca WriteDebug(string.Format("Initialized AzureBackup Cmdlet, ClientRequestId: {0}, ResourceGroupName: {1}, ResourceName : {2}", this.clientRequestId, resourceGroupName, resourceName)); CmdletCancellationToken = cancellationTokenSource.Token; - AzureBackupCmdletHelper cmdHelper = new AzureBackupCmdletHelper(this); + azureBackupCmdletHelper = new AzureBackupCmdletHelper(this); } protected void ExecutionBlock(Action execAction) @@ -170,7 +172,7 @@ private void HandleException(Exception exception) } } - protected CustomRequestHeaders GetCustomRequestHeaders() + internal CustomRequestHeaders GetCustomRequestHeaders() { var hdrs = new CustomRequestHeaders() { diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupCmdletHelpMessage.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupCmdletHelpMessage.cs index 38cf1cb69e10..c03a9df587d7 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupCmdletHelpMessage.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupCmdletHelpMessage.cs @@ -41,7 +41,8 @@ internal static class AzureBackupCmdletHelpMessage public const string Comments = "Comments for for removing protection"; public const string WorkloadType = "Workload type for which the policy is defined."; public const string BackupType = "Type of backup."; - public const string ScheduleType = "Type of schedule."; + public const string DailyScheduleType = "Switch parameter for daily backup schedule."; + public const string WeeklyScheduleType = "Switch parameter for weekly backup schedule."; public const string ScheduleRunDays = "Days of week for running backup, required for weekly schedule."; public const string ScheduleRunTimes = "Times of day for running backup."; public const string RetentionType = "Unit of retention for the recovery point."; diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupPolicyCmdletBase.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupPolicyCmdletBase.cs index c2e4c6a3486d..ae374269b6aa 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupPolicyCmdletBase.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupPolicyCmdletBase.cs @@ -39,7 +39,8 @@ public override void ExecuteCmdlet() { base.ExecuteCmdlet(); - WriteDebug(String.Format("Cmdlet called for ResourceGroupName: {0}, ResourceName: {1}, Location: {2}", ProtectionPolicy.ResourceGroupName, ProtectionPolicy.ResourceName, ProtectionPolicy.Location)); + WriteDebug(String.Format("Cmdlet called for ResourceGroupName: {0}, ResourceName: {1}, Location: {2}", + ProtectionPolicy.ResourceGroupName, ProtectionPolicy.ResourceName, ProtectionPolicy.Location)); InitializeAzureBackupCmdlet(ProtectionPolicy.ResourceGroupName, ProtectionPolicy.ResourceName, ProtectionPolicy.Location); } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/GetAzureBackupProtectionPolicy.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/GetAzureBackupProtectionPolicy.cs index 54626ebc5dc9..513dc2c16660 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/GetAzureBackupProtectionPolicy.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/GetAzureBackupProtectionPolicy.cs @@ -39,22 +39,23 @@ public override void ExecuteCmdlet() { WriteDebug("Making client call"); - var policyListResponse = AzureBackupClient.ProtectionPolicy.ListAsync(GetCustomRequestHeaders(), CmdletCancellationToken).Result; - - WriteDebug("Received policy response"); IEnumerable policyObjects = null; if (Name != null) { - policyObjects = policyListResponse.ProtectionPolicies.Objects.Where(x => x.Name.Equals(Name, System.StringComparison.InvariantCultureIgnoreCase)); + AzureBackupProtectionPolicy policyInfo = azureBackupCmdletHelper.GetAzureBackupProtectionPolicyByName(Name, ResourceGroupName, ResourceName, Location); + WriteDebug("Converting response"); + WriteObject(policyInfo); } else { + var policyListResponse = AzureBackupClient.ProtectionPolicy.ListAsync(GetCustomRequestHeaders(), CmdletCancellationToken).Result; + + WriteDebug("Received policy response"); policyObjects = policyListResponse.ProtectionPolicies.Objects; - } - WriteDebug("Converting response"); - AzureBackupCmdletHelper.WriteAzureBackupProtectionPolicy(ResourceGroupName, ResourceName, Location, policyObjects); - + WriteDebug("Converting response"); + azureBackupCmdletHelper.WriteAzureBackupProtectionPolicy(ResourceGroupName, ResourceName, Location, policyObjects); + } }); } } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/NewAzureBackupProtectionPolicy.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/NewAzureBackupProtectionPolicy.cs index e940ccb460d1..b0c6396f5e35 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/NewAzureBackupProtectionPolicy.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/NewAzureBackupProtectionPolicy.cs @@ -36,31 +36,32 @@ public class NewAzureBackupProtectionPolicy : AzureBackupVaultCmdletBase public string Name { get; set; } [Parameter(Position = 4, Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.WorkloadType, ValueFromPipelineByPropertyName = true)] - [ValidateSet("VM")] + [ValidateSet("VM", IgnoreCase = true)] public string WorkloadType { get; set; } [Parameter(Position = 5, Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.BackupType, ValueFromPipelineByPropertyName = true)] - [ValidateSet("Full")] + [ValidateSet("Full", IgnoreCase = true)] public string BackupType { get; set; } - [Parameter(ParameterSetName = DailyScheduleParamSet, Position = 7, Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.ScheduleType)] + [Parameter(ParameterSetName = DailyScheduleParamSet, Position = 6, Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.DailyScheduleType)] public SwitchParameter Daily { get; set; } - [Parameter(ParameterSetName = WeeklyScheduleParamSet, Position = 6, Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.ScheduleType)] + [Parameter(ParameterSetName = WeeklyScheduleParamSet, Position = 7, Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.WeeklyScheduleType)] public SwitchParameter Weekly { get; set; } - [Parameter(Position = 7, Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.ScheduleRunTimes, ValueFromPipelineByPropertyName = true)] + [Parameter(Position = 8, Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.ScheduleRunTimes, ValueFromPipelineByPropertyName = true)] public DateTime ScheduleRunTimes { get; set; } - [Parameter(Position = 8, Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.RetentionType, ValueFromPipelineByPropertyName = true)] + [Parameter(Position = 9, Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.RetentionType, ValueFromPipelineByPropertyName = true)] [ValidateSet("Days", IgnoreCase = true)] public string RetentionType { get; set; } - [Parameter(Position = 9, Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.RententionDuration, ValueFromPipelineByPropertyName = true)] + [Parameter(Position = 10, Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.RententionDuration, ValueFromPipelineByPropertyName = true)] public int RetentionDuration { get; set; } - [Parameter(ParameterSetName = WeeklyScheduleParamSet, Position = 10, Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.ScheduleRunDays, ValueFromPipelineByPropertyName = true)] - [Parameter(ParameterSetName = NoScheduleParamSet, Position = 10, Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.ScheduleRunDays, ValueFromPipelineByPropertyName = true)] + [Parameter(ParameterSetName = WeeklyScheduleParamSet, Position = 11, Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.ScheduleRunDays, ValueFromPipelineByPropertyName = true)] + [Parameter(ParameterSetName = NoScheduleParamSet, Position = 11, Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.ScheduleRunDays, ValueFromPipelineByPropertyName = true)] + [AllowEmptyCollection] [ValidateSet("Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday", IgnoreCase = true)] public string[] ScheduleRunDays { get; set; } @@ -74,31 +75,20 @@ public override void ExecuteCmdlet() var ScheduleType = GetScheduelType(ScheduleRunDays); - var backupSchedule = AzureBackupCmdletHelper.FillBackupSchedule(BackupType, ScheduleType, ScheduleRunTimes, + var backupSchedule = azureBackupCmdletHelper.FillBackupSchedule(BackupType, ScheduleType, ScheduleRunTimes, RetentionType, RetentionDuration, ScheduleRunDays); - - //var backupSchedule = GetBackupSchedule(BackupType, ScheduleType, ScheduleRunTimes, - // RetentionType, RetentionDuration, ScheduleRunDays); - var addProtectionPolicyRequest = new AddProtectionPolicyRequest(); addProtectionPolicyRequest.PolicyName = this.Name; addProtectionPolicyRequest.Schedule = backupSchedule; - addProtectionPolicyRequest.WorkloadType = this.WorkloadType; + addProtectionPolicyRequest.WorkloadType = Enum.Parse(typeof(WorkloadType), this.WorkloadType, true).ToString(); var operationId = AzureBackupClient.ProtectionPolicy.AddAsync(addProtectionPolicyRequest, GetCustomRequestHeaders(), CmdletCancellationToken).Result; - WriteDebug("Protection policy created successfully"); - - var policyListResponse = AzureBackupClient.ProtectionPolicy.ListAsync(GetCustomRequestHeaders(), CmdletCancellationToken).Result; - - WriteDebug("Received policy response"); - - IEnumerable policyObjects = null; - policyObjects = policyListResponse.ProtectionPolicies.Where(x => x.Name.Equals(Name, System.StringComparison.InvariantCultureIgnoreCase)); + AzureBackupProtectionPolicy policyInfo = azureBackupCmdletHelper.GetAzureBackupProtectionPolicyByName(Name, ResourceGroupName, ResourceName, Location); WriteDebug("Converting response"); - AzureBackupCmdletHelper.WriteAzureBackupProtectionPolicy(ResourceGroupName, ResourceName, Location, policyObjects); + WriteObject(policyInfo); }); } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/RemoveAzureBackupProtectionPolicy.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/RemoveAzureBackupProtectionPolicy.cs index 07c425d3000c..b0fd31d5fe59 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/RemoveAzureBackupProtectionPolicy.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/RemoveAzureBackupProtectionPolicy.cs @@ -35,25 +35,20 @@ public override void ExecuteCmdlet() { WriteDebug("Making client call"); - var policyListResponse = AzureBackupClient.ProtectionPolicy.ListAsync(GetCustomRequestHeaders(), CmdletCancellationToken).Result; - - WriteDebug("Received policy response"); - IEnumerable policyObjects = null; - - policyObjects = policyListResponse.ProtectionPolicies.Objects.Where(x => x.Name.Equals(ProtectionPolicy.Name, System.StringComparison.InvariantCultureIgnoreCase)); - - if (policyObjects.Count() != 0) + AzureBackupProtectionPolicy policyInfo = azureBackupCmdletHelper.GetAzureBackupProtectionPolicyByName(ProtectionPolicy.Name, + ProtectionPolicy.ResourceGroupName, ProtectionPolicy.ResourceName, ProtectionPolicy.Location); + + if (policyInfo != null) { - ProtectionPolicyInfo protectionPolicyInfo = policyObjects.ElementAt(0); - var policyRemoveResponse = AzureBackupClient.ProtectionPolicy.DeleteAsync(protectionPolicyInfo.InstanceId, GetCustomRequestHeaders(), CmdletCancellationToken).Result; + var policyRemoveResponse = AzureBackupClient.ProtectionPolicy.DeleteAsync(policyInfo.InstanceId, GetCustomRequestHeaders(), CmdletCancellationToken).Result; + + WriteDebug("Converting response"); + WriteVerbose("Successfully deleted policy"); } else { WriteVerbose("Policy Not Found"); } - - WriteDebug("Converting response"); - WriteVerbose("Successfully deleted policy"); }); } } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/SetAzureBackupProtectionPolicy.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/SetAzureBackupProtectionPolicy.cs index 735c4403fa42..4f772724e10b 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/SetAzureBackupProtectionPolicy.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/SetAzureBackupProtectionPolicy.cs @@ -31,31 +31,31 @@ public class SetAzureBackupProtectionPolicy : AzureBackupPolicyCmdletBase protected const string DailyScheduleParamSet = "DailyScheduleParamSet"; protected const string NoScheduleParamSet = "NoScheduleParamSet"; - [Parameter(Position = 3, Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.PolicyNewName, ValueFromPipelineByPropertyName = true)] + [Parameter(Position = 1, Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.PolicyNewName)] [ValidateNotNullOrEmpty] public string NewName { get; set; } - [Parameter(Position = 5, Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.BackupType, ValueFromPipelineByPropertyName = true)] - [ValidateSet("Full")] + [Parameter(Position = 2, Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.BackupType)] + [ValidateSet("Full", IgnoreCase = true)] public string BackupType { get; set; } - [Parameter(ParameterSetName = DailyScheduleParamSet, Position = 7, Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.ScheduleType)] + [Parameter(ParameterSetName = DailyScheduleParamSet, Position = 3, Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.DailyScheduleType)] public SwitchParameter Daily { get; set; } - [Parameter(ParameterSetName = WeeklyScheduleParamSet, Position = 6, Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.ScheduleType)] + [Parameter(ParameterSetName = WeeklyScheduleParamSet, Position = 4, Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.WeeklyScheduleType)] public SwitchParameter Weekly { get; set; } - [Parameter(Position = 7, Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.ScheduleRunTimes, ValueFromPipelineByPropertyName = true)] + [Parameter(Position = 5, Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.ScheduleRunTimes)] public DateTime ScheduleRunTimes { get; set; } - [Parameter(Position = 8, Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.RetentionType, ValueFromPipelineByPropertyName = true)] + [Parameter(Position = 6, Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.RetentionType)] [ValidateSet("Days", IgnoreCase = true)] public string RetentionType { get; set; } - [Parameter(Position = 9, Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.RententionDuration, ValueFromPipelineByPropertyName = true)] + [Parameter(Position = 7, Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.RententionDuration)] public int RetentionDuration { get; set; } - [Parameter(ParameterSetName = WeeklyScheduleParamSet, Position = 10, Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.ScheduleRunDays, ValueFromPipelineByPropertyName = true)] + [Parameter(ParameterSetName = WeeklyScheduleParamSet, Position = 8, Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.ScheduleRunDays)] [ValidateSet("Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday", IgnoreCase = true)] public string[] ScheduleRunDays { get; set; } @@ -66,53 +66,38 @@ public override void ExecuteCmdlet() ExecutionBlock(() => { WriteDebug("Making client call"); - - AzureBackupProtectionPolicy policy = ProtectionPolicy; - - FillRemainingValuesForSetPolicyRequest(policy); - AzureBackupCmdletHelper.ValidateAzureBackupPolicyRequest(policy); + AzureBackupProtectionPolicy policyInfo = azureBackupCmdletHelper.GetAzureBackupProtectionPolicyByName(ProtectionPolicy.Name, + ProtectionPolicy.ResourceGroupName, ProtectionPolicy.ResourceName, ProtectionPolicy.Location); + + FillRemainingValuesForSetPolicyRequest(policyInfo); - var backupSchedule = AzureBackupCmdletHelper.FillBackupSchedule(BackupType, policy.ScheduleType, ScheduleRunTimes, - RetentionType, RetentionDuration, policy.ScheduleRunDays.ToArray()); - - - var policyListResponse = AzureBackupClient.ProtectionPolicy.ListAsync(GetCustomRequestHeaders(), CmdletCancellationToken).Result; + var backupSchedule = azureBackupCmdletHelper.FillBackupSchedule(BackupType, policyInfo.ScheduleType, ScheduleRunTimes, + RetentionType, RetentionDuration, policyInfo.ScheduleRunDays.ToArray()); - NewName = (string.IsNullOrEmpty(NewName) ? policy.Name: NewName); + NewName = (string.IsNullOrEmpty(NewName) ? policyInfo.Name : NewName); var updateProtectionPolicyRequest = new UpdateProtectionPolicyRequest(); updateProtectionPolicyRequest.PolicyName = this.NewName; updateProtectionPolicyRequest.Schedule = backupSchedule; - WriteDebug("Got the protectionPolicy List"); - - IEnumerable policyObjects = null; - - policyObjects = policyListResponse.ProtectionPolicies.Objects.Where(x => x.Name.Equals(policy.Name, System.StringComparison.InvariantCultureIgnoreCase)); - - WriteDebug("Got the protectionPolicy with Name" + this.ProtectionPolicy.Name); - - if (policyObjects.Count() != 0) + if (policyInfo != null) { - var operationId = AzureBackupClient.ProtectionPolicy.UpdateAsync(ProtectionPolicy.InstanceId, updateProtectionPolicyRequest, GetCustomRequestHeaders(), CmdletCancellationToken).Result; + var operationId = AzureBackupClient.ProtectionPolicy.UpdateAsync(policyInfo.InstanceId, updateProtectionPolicyRequest, GetCustomRequestHeaders(), CmdletCancellationToken).Result; } else { var exception = new Exception("Protection Policy Not Found with Name" + ProtectionPolicy.Name); var errorRecord = new ErrorRecord(exception, string.Empty, ErrorCategory.InvalidData, null); - WriteError(errorRecord); + WriteError(errorRecord); + return; } WriteDebug("Protection Policy successfully updated"); - var policyListResponse_afterUpdate = AzureBackupClient.ProtectionPolicy.ListAsync(GetCustomRequestHeaders(), CmdletCancellationToken).Result; - - WriteDebug("Received policy response"); - - policyObjects = policyListResponse_afterUpdate.ProtectionPolicies.Where(x => x.Name.Equals(NewName, System.StringComparison.InvariantCultureIgnoreCase)); - + AzureBackupProtectionPolicy updatedPolicyInfo = azureBackupCmdletHelper.GetAzureBackupProtectionPolicyByName(NewName, + ProtectionPolicy.ResourceGroupName, ProtectionPolicy.ResourceName, ProtectionPolicy.Location); WriteDebug("Converting response"); - AzureBackupCmdletHelper.WriteAzureBackupProtectionPolicy(policy.ResourceGroupName, policy.ResourceName, policy.Location, policyObjects); + WriteObject(updatedPolicyInfo); }); } @@ -154,6 +139,7 @@ private void FillRemainingValuesForSetPolicyRequest(AzureBackupProtectionPolicy else { policy.ScheduleType = ScheduleType.Daily.ToString(); + policy.ScheduleRunDays = new List(); } } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj index 500bb4055ca3..6da6d473fb74 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj @@ -151,7 +151,7 @@ - + diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Library/AzureBackupCmdletHelper.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Library/AzureBackupCmdletHelper.cs index 94f77f06b691..8cade17c75f6 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Library/AzureBackupCmdletHelper.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Library/AzureBackupCmdletHelper.cs @@ -25,6 +25,7 @@ using System.Net; using Microsoft.Azure.Management.BackupServices.Models; using Microsoft.Azure.Commands.AzureBackup.Cmdlets; +using System.Linq; namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets { @@ -34,20 +35,20 @@ public class AzureBackupCmdletHelper public const int MaxRetentionInDays = 30; public const int MinRetentionInWeeks = 1; public const int MaxRetentionInWeeks = 4; - public static AzureBackupCmdletBase azureBackupCmdletBase; + public AzureBackupCmdletBase azureBackupCmdletBase {get; set;} public AzureBackupCmdletHelper(AzureBackupCmdletBase azureBackupCmd) { azureBackupCmdletBase = azureBackupCmd; } - public static void WriteAzureBackupProtectionPolicy(string ResourceGroupName, + public void WriteAzureBackupProtectionPolicy(string ResourceGroupName, string ResourceName, string Location, ProtectionPolicyInfo sourcePolicy) { azureBackupCmdletBase.WriteObject(new AzureBackupProtectionPolicy(ResourceGroupName, ResourceName, Location, sourcePolicy)); } - public static void WriteAzureBackupProtectionPolicy(string ResourceGroupName, + public void WriteAzureBackupProtectionPolicy(string ResourceGroupName, string ResourceName, string Location, IEnumerable sourcePolicyList) { List targetList = new List(); @@ -61,7 +62,33 @@ public static void WriteAzureBackupProtectionPolicy(string ResourceGroupName, azureBackupCmdletBase.WriteObject(targetList, true); } - public static BackupSchedule FillBackupSchedule(string backupType, string scheduleType, DateTime scheduleStartTime, + public AzureBackupProtectionPolicy GetAzureBackupProtectionPolicyByName(string policyName, string ResourceGroupName, + string ResourceName, string Location) + { + var policyListResponse = azureBackupCmdletBase.AzureBackupClient.ProtectionPolicy.ListAsync(azureBackupCmdletBase.GetCustomRequestHeaders(), azureBackupCmdletBase.CmdletCancellationToken).Result; + + azureBackupCmdletBase.WriteDebug("Got the protectionPolicy List"); + + IEnumerable policyObjects = null; + + policyObjects = policyListResponse.ProtectionPolicies.Objects.Where(x => x.Name.Equals(policyName, System.StringComparison.InvariantCultureIgnoreCase)); + + azureBackupCmdletBase.WriteDebug("Got the protectionPolicy with Name" + policyName); + + IEnumerator enumerator = policyObjects.GetEnumerator(); + enumerator.MoveNext(); + + ProtectionPolicyInfo protectionPolicyInfo = enumerator.Current; + + if (protectionPolicyInfo == null) + { + return null; + } + + return new AzureBackupProtectionPolicy(ResourceGroupName, ResourceName, Location, protectionPolicyInfo); + } + + public BackupSchedule FillBackupSchedule(string backupType, string scheduleType, DateTime scheduleStartTime, string retentionType, int retentionDuration, string[] scheduleRunDays) { var backupSchedule = new BackupSchedule(); @@ -85,81 +112,7 @@ public static BackupSchedule FillBackupSchedule(string backupType, string schedu return backupSchedule; } - public static void ValidateAzureBackupPolicyRequest(AzureBackupProtectionPolicy policy) - { - - //ValidateWorkloadType(azureBackupCmd, policy.WorkloadType); - ValidateBackupType(policy.BackupType); - ValidateScheduleType(policy.ScheduleType); - ValidateScheduleRunDays(policy.ScheduleRunDays); - ValidateRetentionType(policy.RetentionType); - } - - private static void ValidateWorkloadType(string workloadType) - { - WorkloadType item = (WorkloadType)Enum.Parse(typeof(WorkloadType), workloadType, true); - - if (item != WorkloadType.VM) - { - var exception = new Exception("Invalid value for param WorkloadType, Valid values are VM."); - var errorRecord = new ErrorRecord(exception, string.Empty, ErrorCategory.InvalidData, null); - azureBackupCmdletBase.WriteError(errorRecord); - } - } - - private static void ValidateBackupType(string backupType) - { - BackupType item = (BackupType)Enum.Parse(typeof(BackupType), backupType, true); - - if (item != BackupType.Full) - { - var exception = new Exception("Invalid value for param BackupType, Valid values are Full."); - var errorRecord = new ErrorRecord(exception, string.Empty, ErrorCategory.InvalidData, null); - azureBackupCmdletBase.WriteError(errorRecord); - } - } - - private static void ValidateScheduleType(string scheduleType) - { - ScheduleType item = (ScheduleType)Enum.Parse(typeof(ScheduleType), scheduleType, true); - - if (!(item == ScheduleType.Daily || item == ScheduleType.Weekly)) - { - var exception = new Exception("Invalid value for param ScheduleType, Valid values are Daily, Weekly."); - var errorRecord = new ErrorRecord(exception, string.Empty, ErrorCategory.InvalidData, null); - azureBackupCmdletBase.WriteError(errorRecord); - } - } - - private static void ValidateRetentionType(string retentionType) - { - RetentionType item = (RetentionType)Enum.Parse(typeof(RetentionType), retentionType, true); - - if (!(item == RetentionType.Days || item == RetentionType.Weeks)) - { - var exception = new Exception("Invalid value for param RetentionType, Valid values are Days, Weeks."); - var errorRecord = new ErrorRecord(exception, string.Empty, ErrorCategory.InvalidData, null); - azureBackupCmdletBase.WriteError(errorRecord); - } - } - - private static void ValidateScheduleRunDays(List scheduleRunDays) - { - foreach (string scheduleRunDay in scheduleRunDays) - { - DayOfWeek item = (DayOfWeek)Enum.Parse(typeof(DayOfWeek), scheduleRunDay, true); - - if (!(item == DayOfWeek.Sunday || item == DayOfWeek.Monday || item == DayOfWeek.Tuesday || - item == DayOfWeek.Wednesday || item == DayOfWeek.Thursday || item == DayOfWeek.Friday || item == DayOfWeek.Saturday)) - { - var exception = new Exception("Invalid value for param ScheduleRunDays, " + - "Valid values are Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday"); - var errorRecord = new ErrorRecord(exception, string.Empty, ErrorCategory.InvalidData, null); - azureBackupCmdletBase.WriteError(errorRecord); - } - } - } - private static RetentionPolicy FillRetentionPolicy(string retentionType, int retentionDuration) + private RetentionPolicy FillRetentionPolicy(string retentionType, int retentionDuration) { ValidateRetentionRange(retentionType, retentionDuration); var retentionPolicy = new RetentionPolicy @@ -171,7 +124,7 @@ private static RetentionPolicy FillRetentionPolicy(string retentionType, int ret return retentionPolicy; } - private static void ValidateRetentionRange(string retentionType, int retentionDuration) + private void ValidateRetentionRange(string retentionType, int retentionDuration) { if(retentionType == RetentionDurationType.Days.ToString() && (retentionDuration < MinRetentionInDays || retentionDuration > MaxRetentionInDays)) @@ -179,6 +132,7 @@ private static void ValidateRetentionRange(string retentionType, int retentionDu var exception = new Exception("For Retention in days , valid values of retention duration are 7 to 30."); var errorRecord = new ErrorRecord(exception, string.Empty, ErrorCategory.InvalidData, null); azureBackupCmdletBase.WriteError(errorRecord); + throw exception; } if (retentionType == RetentionDurationType.Weeks.ToString() && (retentionDuration < MinRetentionInWeeks @@ -187,11 +141,12 @@ private static void ValidateRetentionRange(string retentionType, int retentionDu var exception = new Exception("For Retention in weeks , valid values of retention duration are 1 to 4."); var errorRecord = new ErrorRecord(exception, string.Empty, ErrorCategory.InvalidData, null); azureBackupCmdletBase.WriteError(errorRecord); + throw exception; } } - private static string FillScheduleType(string scheduleType, string[] scheduleRunDays) + private string FillScheduleType(string scheduleType, string[] scheduleRunDays) { if (scheduleType == ScheduleType.Daily.ToString() && scheduleRunDays != null && scheduleRunDays.Length > 0) { @@ -204,13 +159,14 @@ private static string FillScheduleType(string scheduleType, string[] scheduleRun } } - private static IList ParseScheduleRunDays(string[] scheduleRunDays) + private IList ParseScheduleRunDays(string[] scheduleRunDays) { if (scheduleRunDays == null || scheduleRunDays.Length <= 0) { var exception = new Exception("For weekly scheduletype , ScheduleRunDays should not be empty."); var errorRecord = new ErrorRecord(exception, string.Empty, ErrorCategory.InvalidData, null); azureBackupCmdletBase.WriteError(errorRecord); + throw exception; } IList ListofWeekDays = new List(); @@ -229,7 +185,7 @@ private static IList ParseScheduleRunDays(string[] scheduleRunDays) return ListofWeekDays; } - private static DateTime ParseScheduleRunTime(DateTime scheduleStartTime) + private DateTime ParseScheduleRunTime(DateTime scheduleStartTime) { scheduleStartTime = scheduleStartTime.ToUniversalTime(); DateTime scheduleRunTime = new DateTime(scheduleStartTime.Year, scheduleStartTime.Month, From 0b907cd6ec7bef32ec32a09751f75b700dca1d6e Mon Sep 17 00:00:00 2001 From: pragrawa Date: Wed, 17 Jun 2015 23:27:35 +0530 Subject: [PATCH 090/155] Making param BackupType case insensitive --- .../Commands.AzureBackup/Library/AzureBackupCmdletHelper.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Library/AzureBackupCmdletHelper.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Library/AzureBackupCmdletHelper.cs index 8cade17c75f6..afaadbf62c66 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Library/AzureBackupCmdletHelper.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Library/AzureBackupCmdletHelper.cs @@ -93,7 +93,7 @@ public BackupSchedule FillBackupSchedule(string backupType, string scheduleType, { var backupSchedule = new BackupSchedule(); - backupSchedule.BackupType = backupType; + backupSchedule.BackupType = Enum.Parse(typeof(BackupType), backupType, true).ToString(); backupSchedule.RetentionPolicy = FillRetentionPolicy(retentionType, retentionDuration); scheduleType = FillScheduleType(scheduleType, scheduleRunDays); From fa9ece2b9232e6d99e2743679551308f7d6484a5 Mon Sep 17 00:00:00 2001 From: pragrawa Date: Wed, 17 Jun 2015 23:50:56 +0530 Subject: [PATCH 091/155] merge Conflict2 --- .../AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj | 1 + 1 file changed, 1 insertion(+) diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj index b36222267916..dceba4b35f53 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj @@ -153,6 +153,7 @@ + From c7d31c7454f0b1dd8afe05ffd78cadc2bc678df6 Mon Sep 17 00:00:00 2001 From: pragrawa Date: Thu, 18 Jun 2015 00:39:51 +0530 Subject: [PATCH 092/155] Policy Test Cases --- .../Commands.AzureBackup.Test.csproj | 3 + ...ckupTests.cs => AzureBackupPolicyTests.cs} | 28 +++- .../ScenarioTests/AzureBackupPolicyTests.ps1 | 125 ++++++++++++++++++ .../ScenarioTests/AzureBackupTests.ps1 | 47 ------- 4 files changed, 155 insertions(+), 48 deletions(-) rename src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/{AzureBackupTests.cs => AzureBackupPolicyTests.cs} (59%) create mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupPolicyTests.ps1 delete mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupTests.ps1 diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/Commands.AzureBackup.Test.csproj b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/Commands.AzureBackup.Test.csproj index 112f7e9e16df..6eed393c40cc 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/Commands.AzureBackup.Test.csproj +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/Commands.AzureBackup.Test.csproj @@ -35,6 +35,9 @@ 4 + + ..\..\..\Package\Debug\ResourceManager\AzureResourceManager\AzureBackup\Microsoft.Azure.Commands.AzureBackup.dll + False ..\..\..\packages\Microsoft.Azure.Common.Authentication.1.0.25-preview\lib\net45\Microsoft.Azure.Common.Authentication.dll diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupTests.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupPolicyTests.cs similarity index 59% rename from src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupTests.cs rename to src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupPolicyTests.cs index 97a25779fd49..2b4b4c8b683a 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupTests.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupPolicyTests.cs @@ -17,12 +17,38 @@ namespace Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests { - public class AzureBackupTests : AzureBackupTestsBase + public class AzureBackupPolicyTests : AzureBackupTestsBase { [Fact] public void ListProtectionPolicyTests() { this.RunPowerShellTest("Test-GetAzureBackupProtectionPolicyTests"); } + + [Fact] + public void NewProtectionPolicyTests() + { + this.RunPowerShellTest("Test-NewAzureBackupProtectionPolicyTests"); + } + + [Fact] + public void ListProtectionPolicyByNameTests() + { + this.RunPowerShellTest("Test-GetAzureBackupProtectionPolicyByNameTests"); + } + + [Fact] + public void SetProtectionPolicyTests() + { + this.RunPowerShellTest("Test-SetAzureBackupProtectionPolicyTests"); + } + + [Fact] + public void RemoveProtectionPolicyTests() + { + this.RunPowerShellTest("Test-RemoveAzureBackupProtectionPolicyTests"); + } + + } } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupPolicyTests.ps1 b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupPolicyTests.ps1 new file mode 100644 index 000000000000..32bd25fd1d09 --- /dev/null +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupPolicyTests.ps1 @@ -0,0 +1,125 @@ +# ---------------------------------------------------------------------------------- +# +# Copyright Microsoft Corporation +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# http://www.apache.org/licenses/LICENSE-2.0 +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ---------------------------------------------------------------------------------- + +$ResourceGroupName = "backuprg" +$ResourceName = "backuprn" +$DataSourceType = "VM" +$Location = "SouthEast Asia" +$PolicyName = "Policy9"; +$PolicyId = "c87bbada-6e1b-4db2-b76c-9062d28959a4"; +$POName = "iaasvmcontainer;dev01testing;dev01testing" +$WorkloadType = "VM" +$RetentionType = "Days" +$ScheduleRunTimes = "2015-06-13T20:30:00" +$ScheduleRunDays = "Monday" +$RetentionDuration = 30 +$BackupType = "Full" +$ScheduleType = "Daily" + +<# +.SYNOPSIS +Tests creating new resource group and a simple resource. +#> +function Test-GetAzureBackupProtectionPolicyTests +{ + $protectionPolicies = Get-AzureBackupProtectionPolicy -ResourceGroupName $ResourceGroupName -ResourceName $ResourceName -Location $Location + Assert-NotNull $protectionPolicies 'Protection Policies should not be null' + foreach($protectionPolicy in $protectionPolicies) + { + Assert-NotNull $protectionPolicy.InstanceId 'InstanceId should not be null' + Assert-NotNull $protectionPolicy.Name 'Name should not be null' + Assert-NotNull $protectionPolicy.WorkloadType 'WorkloadType should not be null' + Assert-NotNull $protectionPolicy.BackupType 'BackupType should not be null' + Assert-NotNull $protectionPolicy.ScheduleRunTimes 'ScheduleRunTimes should not be null' + Assert-NotNull $protectionPolicy.RetentionDuration 'RetentionDuration should not be null' + Assert-NotNull $protectionPolicy.ResourceGroupName 'ResourceGroupName should not be null' + Assert-NotNull $protectionPolicy.ResourceName 'ResourceName should not be null' + Assert-NotNull $protectionPolicy.Location 'Location should not be null' + } +} + +function Test-GetAzureBackupProtectionPolicyByNameTests +{ + $protectionPolicy = Get-AzureBackupProtectionPolicy -ResourceGroupName $ResourceGroupName -ResourceName $ResourceName -Location $Location -Name $PolicyName + + Assert-NotNull $protectionPolicy.InstanceId 'InstanceId should not be null' + Assert-NotNull $protectionPolicy.Name 'Name should not be null' + Assert-NotNull $protectionPolicy.WorkloadType 'WorkloadType should not be null' + Assert-NotNull $protectionPolicy.BackupType 'BackupType should not be null' + Assert-NotNull $protectionPolicy.ScheduleRunTimes 'ScheduleRunTimes should not be null' + Assert-NotNull $protectionPolicy.RetentionDuration 'RetentionDuration should not be null' + Assert-NotNull $protectionPolicy.ResourceGroupName 'ResourceGroupName should not be null' + Assert-NotNull $protectionPolicy.ResourceName 'ResourceName should not be null' + Assert-NotNull $protectionPolicy.Location 'Location should not be null' + +} + +function Test-NewAzureBackupProtectionPolicyTests +{ + $protectionPolicy = New-AzureBackupProtectionPolicy -Name $PolicyName -WorkloadType $WorkloadType -BackupType $BackupType -Daily -RetentionType $RetentionType -RetentionDuration $RetentionDuration -ScheduleRunTimes $ScheduleRunTimes -ResourceGroupName $ResourceGroupName -ResourceName $ResourceName -Location $Location + + Assert-NotNull $protectionPolicy.InstanceId 'InstanceId should not be null' + Assert-NotNull $protectionPolicy.Name 'Name should not be null' + Assert-NotNull $protectionPolicy.WorkloadType 'WorkloadType should not be null' + Assert-NotNull $protectionPolicy.BackupType 'BackupType should not be null' + Assert-NotNull $protectionPolicy.ScheduleRunTimes 'ScheduleRunTimes should not be null' + Assert-NotNull $protectionPolicy.RetentionDuration 'RetentionDuration should not be null' + Assert-NotNull $protectionPolicy.ResourceGroupName 'ResourceGroupName should not be null' + Assert-NotNull $protectionPolicy.ResourceName 'ResourceName should not be null' + Assert-NotNull $protectionPolicy.Location 'Location should not be null' +} + +function Test-SetAzureBackupProtectionPolicyTests +{ + $policy = New-Object Microsoft.Azure.Commands.AzureBackup.Cmdlets.AzureBackupProtectionPolicy + $policy.InstanceId = $PolicyId + $policy.Name = $PolicyName + $policy.ResourceGroupName = $ResourceGroupName + $policy.ResourceName = $ResourceName + $policy.Location = $Location + $policy.WorkloadType = $WorkloadType + $policy.RetentionType = $RetentionType + $policy.ScheduleRunTimes = $ScheduleRunTimes + $policy.ScheduleType = $ScheduleType + $policyNewName = "policy09_new" + + $protectionPolicy = New-AzureBackupProtectionPolicy -ProtectionPolicy $policy -NewName $policyNewName + + Assert-NotNull $protectionPolicy.InstanceId 'InstanceId should not be null' + Assert-NotNull $protectionPolicy.Name 'Name should not be null' + Assert-NotNull $protectionPolicy.WorkloadType 'WorkloadType should not be null' + Assert-NotNull $protectionPolicy.BackupType 'BackupType should not be null' + Assert-NotNull $protectionPolicy.ScheduleRunTimes 'ScheduleRunTimes should not be null' + Assert-NotNull $protectionPolicy.RetentionDuration 'RetentionDuration should not be null' + Assert-NotNull $protectionPolicy.ResourceGroupName 'ResourceGroupName should not be null' + Assert-NotNull $protectionPolicy.ResourceName 'ResourceName should not be null' + Assert-NotNull $protectionPolicy.Location 'Location should not be null' +} + +function Test-RemoveAzureBackupProtectionPolicyTests +{ + $policyNewName = "policy09_new" + $policy = New-Object Microsoft.Azure.Commands.AzureBackup.Cmdlets.AzureBackupProtectionPolicy + $policy.InstanceId = $PolicyId + $policy.Name = $policyNewName + $policy.ResourceGroupName = $ResourceGroupName + $policy.ResourceName = $ResourceName + $policy.Location = $Location + $policy.WorkloadType = $WorkloadType + $policy.RetentionType = $RetentionType + $policy.ScheduleRunTimes = $ScheduleRunTimes + $policy.ScheduleType = $ScheduleType + + Remove-AzureBackupProtectionPolicy -ProtectionPolicy $policy +} diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupTests.ps1 b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupTests.ps1 deleted file mode 100644 index 75e03eaa73a5..000000000000 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupTests.ps1 +++ /dev/null @@ -1,47 +0,0 @@ -# ---------------------------------------------------------------------------------- -# -# Copyright Microsoft Corporation -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# http://www.apache.org/licenses/LICENSE-2.0 -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# ---------------------------------------------------------------------------------- - -$ResourceGroupName = "backuprg" -$ResourceName = "backuprn" -$ContainerName = "iaasvmcontainer;dev01testing;dev01testing" -$ContainerResourceGroupName = "dev01Testing" -$ContainerResourceName = "dev01Testing" -$ContainerType = "IaasVMContainer" -$DataSourceType = "VM" -$DataSourceId = "17593283453810" -$Location = "SouthEast Asia" -$PolicyName = "Policy9"; -$PolicyId = "c87bbada-6e1b-4db2-b76c-9062d28959a4"; -$POName = "iaasvmcontainer;dev01testing;dev01testing" - -<# -.SYNOPSIS -Tests creating new resource group and a simple resource. -#> -function Test-GetAzureBackupProtectionPolicyTests -{ - $protectionPolicies = Get-AzureBackupProtectionPolicy -ResourceGroupName $ResourceGroupName -ResourceName $ResourceName -Location $Location - Assert-NotNull $protectionPolicies 'Protection Policies should not be null' - foreach($protectionPolicy in $protectionPolicies) - { - Assert-NotNull $protectionPolicy.InstanceId 'InstanceId should not be null' - Assert-NotNull $protectionPolicy.Name 'Name should not be null' - Assert-NotNull $protectionPolicy.WorkloadType 'WorkloadType should not be null' - Assert-NotNull $protectionPolicy.BackupType 'BackupType should not be null' - Assert-NotNull $protectionPolicy.ScheduleRunTimes 'ScheduleRunTimes should not be null' - Assert-NotNull $protectionPolicy.RetentionDuration 'RetentionDuration should not be null' - Assert-NotNull $protectionPolicy.ResourceGroupName 'ResourceGroupName should not be null' - Assert-NotNull $protectionPolicy.ResourceName 'ResourceName should not be null' - } -} From bbe943d5a1c835ac6770eeb1533b3168d7518fea Mon Sep 17 00:00:00 2001 From: pragrawa Date: Thu, 18 Jun 2015 00:48:48 +0530 Subject: [PATCH 093/155] Merge Conflict --- .../Commands.AzureBackup.Test.csproj | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/Commands.AzureBackup.Test.csproj b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/Commands.AzureBackup.Test.csproj index 6eed393c40cc..212c28f03ee7 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/Commands.AzureBackup.Test.csproj +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/Commands.AzureBackup.Test.csproj @@ -35,9 +35,6 @@ 4 - - ..\..\..\Package\Debug\ResourceManager\AzureResourceManager\AzureBackup\Microsoft.Azure.Commands.AzureBackup.dll - False ..\..\..\packages\Microsoft.Azure.Common.Authentication.1.0.25-preview\lib\net45\Microsoft.Azure.Common.Authentication.dll @@ -124,7 +121,7 @@ - + @@ -164,7 +161,7 @@ Always - + Always From af6b58f4fb4174a8d4e8d90a3dd4d080fafebd5d Mon Sep 17 00:00:00 2001 From: dragonfly91 Date: Thu, 18 Jun 2015 13:35:42 +0530 Subject: [PATCH 094/155] Including all test case files in sln - which seems to have been missed in the previous commits. --- .../Commands.AzureBackup.Test.csproj | 31 ++++++------------- 1 file changed, 9 insertions(+), 22 deletions(-) diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/Commands.AzureBackup.Test.csproj b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/Commands.AzureBackup.Test.csproj index 112f7e9e16df..24b16977df0b 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/Commands.AzureBackup.Test.csproj +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/Commands.AzureBackup.Test.csproj @@ -120,15 +120,15 @@ + + + - - - @@ -158,21 +158,15 @@ Designer - - Always - + + + Always - - Always - - - Always - - - Always - + + + @@ -180,12 +174,6 @@ - - Always - - - Always - PreserveNewest @@ -193,7 +181,6 @@ - From 7e1e102587d81503135975d9357605901cfaf076 Mon Sep 17 00:00:00 2001 From: dragonfly91 Date: Thu, 18 Jun 2015 15:25:26 +0530 Subject: [PATCH 095/155] 1. Removed product DLL dependency in Get-Container cmdlet. 2. Fixed an issue (probably infused during a previous merge) in the tests project. --- .../Commands.AzureBackup.Test.csproj | 24 +++++++++++++----- .../Container/GetAzureBackupContainer.cs | 13 +++++----- .../Commands.AzureBackup.csproj | 16 ++++++------ .../Resources/BMSCommonInterface.dll | Bin 17608 -> 0 bytes .../Resources/BackupManagementInterface.dll | Bin 64712 -> 0 bytes 5 files changed, 32 insertions(+), 21 deletions(-) delete mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup/Resources/BMSCommonInterface.dll delete mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup/Resources/BackupManagementInterface.dll diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/Commands.AzureBackup.Test.csproj b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/Commands.AzureBackup.Test.csproj index ea25d9131f96..7f29843aa55f 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/Commands.AzureBackup.Test.csproj +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/Commands.AzureBackup.Test.csproj @@ -161,12 +161,24 @@ Always - - - - - - + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/GetAzureBackupContainer.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/GetAzureBackupContainer.cs index fbe7b1ad1604..3e9c9fa2c9ce 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/GetAzureBackupContainer.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/GetAzureBackupContainer.cs @@ -12,8 +12,7 @@ // limitations under the License. // ---------------------------------------------------------------------------------- -using BCI = Microsoft.BackupManagementService.CommonInterface; -using BMI = Microsoft.BackupManagementService.ManagementInterface; +using Microsoft.Azure.Commands.AzureBackup.Library; using Microsoft.Azure.Management.BackupServices.Models; using System; using System.Collections.Generic; @@ -94,12 +93,12 @@ public override void ExecuteCmdlet() private string ConstructQueryFilterString() { - BMI.ContainerQueryObject containerQueryObject = new BMI.ContainerQueryObject(); + ContainerQueryObject containerQueryObject = new ContainerQueryObject(); switch (Type) { case AzureBackupContainerTypeInput.AzureVirtualMachine: - containerQueryObject.Type = BCI.ContainerType.IaasVMContainer.ToString(); + containerQueryObject.Type = ContainerType.IaasVMContainer.ToString(); break; default: break; @@ -108,10 +107,10 @@ private string ConstructQueryFilterString() switch (Status) { case AzureBackupContainerStatusInput.Registered: - containerQueryObject.Status = BCI.RegistrationStatus.Registered.ToString(); + containerQueryObject.Status = RegistrationStatus.Registered.ToString(); break; case AzureBackupContainerStatusInput.Registering: - containerQueryObject.Status = BCI.RegistrationStatus.Registering.ToString(); + containerQueryObject.Status = RegistrationStatus.Registering.ToString(); break; default: break; @@ -122,7 +121,7 @@ private string ConstructQueryFilterString() containerQueryObject.FriendlyName = ContainerResourceName; } - return BMI.BackupManagementAPIHelper.GetQueryString(containerQueryObject.GetNameValueCollection()); + return BackupManagementAPIHelper.GetQueryString(containerQueryObject.GetNameValueCollection()); } } } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj index dceba4b35f53..f9c6e93ec533 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj @@ -55,7 +55,8 @@ ..\..\..\packages\Hyak.Common.1.0.2\lib\portable-net403+win+wpa81\Hyak.Common.dll - + + False ..\..\..\packages\Microsoft.Azure.Common.2.1.0\lib\net45\Microsoft.Azure.Common.dll @@ -86,9 +87,13 @@ ..\..\..\packages\Microsoft.WindowsAzure.Management.4.1.1\lib\net40\Microsoft.WindowsAzure.Management.dll + + False + ..\..\..\..\..\azure-sdk-for-net\src\ResourceManagement\AzureBackup\BackupServicesManagment\bin\Net45-Debug\Microsoft.WindowsAzure.Management.BackupServicesManagment.dll + False - Cmdlets\VaultCredentials\Microsoft.WindowsAzure.Management.Common.dll + Resources\Microsoft.WindowsAzure.Management.Common.dll ..\..\..\packages\Microsoft.WindowsAzure.Management.Scheduler.6.0.0\lib\net40\Microsoft.WindowsAzure.Management.Scheduler.dll @@ -154,6 +159,7 @@ + @@ -173,10 +179,6 @@ - - {38a6741c-77a3-42a8-a846-83373be57c7f} - BackupServicesManagment - {5ee72c53-1720-4309-b54b-5fb79703195f} Commands.Common @@ -202,8 +204,6 @@ - - diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Resources/BMSCommonInterface.dll b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Resources/BMSCommonInterface.dll deleted file mode 100644 index adc7d99efcdbc2f02869b8a63fa1dc1e10a89697..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17608 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 Date: Thu, 18 Jun 2015 15:55:40 +0530 Subject: [PATCH 096/155] Adding container cmdlet helper --- .../AzureBackupContainerCmdletHelper.cs | 309 ++++++++++++++++++ 1 file changed, 309 insertions(+) create mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup/Library/AzureBackupContainerCmdletHelper.cs diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Library/AzureBackupContainerCmdletHelper.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Library/AzureBackupContainerCmdletHelper.cs new file mode 100644 index 000000000000..3aa85b7a9ed7 --- /dev/null +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Library/AzureBackupContainerCmdletHelper.cs @@ -0,0 +1,309 @@ +using System; +using System.Collections.Generic; +using System.Collections.Specialized; +using System.Globalization; +using System.Linq; +using System.Runtime.Serialization; +using System.Text; +using System.Threading.Tasks; +using System.Web; + +namespace Microsoft.Azure.Commands.AzureBackup.Library +{ + public class ServiceNamespaces + { + /// + /// Namespace used by data contracts in BMS interface + /// + public const string BMSServiceNamespace = "http://windowscloudbackup.com/BackupManagement/V2014_09"; + } + + [DataContract(Namespace = ServiceNamespaces.BMSServiceNamespace)] + public class ManagementBaseObject + { + } + + [DataContract(Namespace = ServiceNamespaces.BMSServiceNamespace)] + [KnownType(typeof(ContainerQueryObject))] + public class ManagementQueryObject : ManagementBaseObject + { + public static string DateTimeFormat = "yyyy-MM-dd hh:mm:ss tt"; + public ManagementQueryObject() + { + } + + public virtual NameValueCollection GetNameValueCollection() + { + return new NameValueCollection(); + } + + public virtual void Initialize(NameValueCollection filters) + { + ValidateCollection(filters); + } + + public virtual List GetSupportedFilters() + { + return new List(); + } + + public override string ToString() + { + return "ManagementQueryObject"; + } + + private void ValidateCollection(NameValueCollection filters) + { + List supportedFilters = GetSupportedFilters(); + + if (filters == null) + { + throw new ArgumentException("Null collection", "Filters"); + } + + if (filters.Count != filters.AllKeys.Length) + { + throw new ArgumentException("Duplicate keys", "Filters"); + } + + if (filters.Count > supportedFilters.Count) + { + string errMsg = String.Format("Unsupported filters specified, filter count: {0}", filters.Count); + throw new ArgumentException(errMsg, "Filters"); + } + + foreach (var filter in filters.AllKeys) + { + if (!supportedFilters.Contains(filter)) + { + string errMsg = String.Format("Unsupported filters specified, filter: {0}", filter); + throw new ArgumentException(errMsg, "Filters"); + } + } + } + + //Helper functions that can be used + //while convertion of different dataTypes + //Override this to handle new dataTypes if required + public static string GetString(string str) + { + return str; + } + + public static string GetString(DateTime date) + { + return date.ToUniversalTime().ToString(DateTimeFormat, CultureInfo.InvariantCulture); + } + + public static string GetString(List strList) + { + String[] strtArr = strList.ToArray(); + return String.Join(",", strtArr); + } + + //Helper funtions to get the DataType format from string + //Add new dataType conversion if required. + public static T GetValueFromString(string str) + { + if (typeof(T) == typeof(string)) + { + return (T)Convert.ChangeType(str, typeof(T)); + } + else if (typeof(T) == typeof(List)) + { + String[] strArr = str.Split(','); + List list = new List(strArr.Length); + foreach (string s in strArr) + { + list.Add(s); + } + return (T)Convert.ChangeType(list, typeof(T)); + } + else if (typeof(T) == typeof(DateTime)) + { + DateTime date = DateTime.ParseExact(str, DateTimeFormat, CultureInfo.InvariantCulture); + return (T)Convert.ChangeType(date, typeof(T)); + } + else + { + throw new NotSupportedException(); + } + } + } + + [DataContract(Namespace = ServiceNamespaces.BMSServiceNamespace)] + public enum ContainerType + { + [EnumMember] + Invalid = 0, + + [EnumMember] + Unknown, + + // used by fabric adapter to populate discovered VMs + [EnumMember] + IaasVMContainer, + + // used by fabric adapter to populate discovered services + // VMs are child containers of services they belong to + [EnumMember] + IaasVMServiceContainer + } + + [DataContract(Namespace = ServiceNamespaces.BMSServiceNamespace)] + public enum RegistrationStatus + { + [EnumMember] + Invalid = 0, + + [EnumMember] + Unknown, + + [EnumMember] + NotRegistered, + + [EnumMember] + Registered, + + [EnumMember] + Registering, + } + + [DataContract(Namespace = ServiceNamespaces.BMSServiceNamespace)] + public class ContainerQueryObject : ManagementQueryObject + { + public const string ContainerTypeField = "ContainerType"; + public const string ContainerStatusField = "ContainerStatus"; + public const string ContainerFriendlyNameField = "FriendlyName"; + + [DataMember] + public string Type { get; set; } + + [DataMember] + public string Status { get; set; } + + [DataMember] + public string FriendlyName { get; set; } + + public ContainerQueryObject() + { + } + + public ContainerQueryObject(string type, string status) + { + this.Type = type; + this.Status = status; + this.FriendlyName = string.Empty; + } + + public ContainerQueryObject(string type, string status, string name) + { + this.Type = type; + this.Status = status; + this.FriendlyName = name; + } + + public override List GetSupportedFilters() + { + var filterList = base.GetSupportedFilters(); + filterList.Add(ContainerTypeField); + filterList.Add(ContainerStatusField); + filterList.Add(ContainerFriendlyNameField); + return filterList; + } + + public override NameValueCollection GetNameValueCollection() + { + var collection = base.GetNameValueCollection(); + + if (!String.IsNullOrEmpty(Type)) + { + collection.Add(ContainerTypeField, Type); + } + + if (!String.IsNullOrEmpty(Status)) + { + collection.Add(ContainerStatusField, Status); + } + + if (!String.IsNullOrEmpty(FriendlyName)) + { + collection.Add(ContainerFriendlyNameField, FriendlyName); + } + return collection; + } + + public override void Initialize(NameValueCollection collection) + { + base.Initialize(collection); + + if (collection[ContainerTypeField] != null) + { + SetType(collection[ContainerTypeField]); + } + + if (collection[ContainerStatusField] != null) + { + SetStatus(collection[ContainerStatusField]); + } + + if (collection[ContainerFriendlyNameField] != null) + { + SetFriendlyName(collection[ContainerFriendlyNameField]); + } + } + + public override string ToString() + { + return String.Format("{0} ContainerTypeField: {1}, ContainerStatusField: {2}", base.ToString(), Type, Status); + } + + private void SetType(string type) + { + ContainerType containerType; + if (!Enum.TryParse(type, out containerType) || containerType == ContainerType.Invalid || containerType == ContainerType.Unknown) + { + throw new ArgumentException("Invalid type filter", ContainerTypeField); + } + + Type = type; + } + + private void SetStatus(string status) + { + RegistrationStatus contatinerStatus; + if (!Enum.TryParse(status, out contatinerStatus) || contatinerStatus == RegistrationStatus.Invalid || contatinerStatus == RegistrationStatus.Unknown) + { + throw new ArgumentException("Invalid status filter", ContainerStatusField); + } + + Status = status; + } + + private void SetFriendlyName(string name) + { + if (String.IsNullOrEmpty(name)) + { + throw new ArgumentException("Name is NullorEmpty", ContainerFriendlyNameField); + } + + FriendlyName = name; + } + } + + public static class BackupManagementAPIHelper + { + public static string GetQueryString(NameValueCollection collection) + { + if (collection == null || collection.Count == 0) + { + return String.Empty; + } + + var httpValueCollection = HttpUtility.ParseQueryString(String.Empty); + httpValueCollection.Add(collection); + + return "&" + httpValueCollection.ToString(); + } + } +} From 13b4ec2ece384b853a072ceb8bb04e980c0456dd Mon Sep 17 00:00:00 2001 From: dragonfly91 Date: Thu, 18 Jun 2015 17:03:17 +0530 Subject: [PATCH 097/155] policy tests fixes - pragrawa --- .../ScenarioTests/AzureBackupPolicyTests.ps1 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupPolicyTests.ps1 b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupPolicyTests.ps1 index 32bd25fd1d09..af8176ea820a 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupPolicyTests.ps1 +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupPolicyTests.ps1 @@ -16,7 +16,7 @@ $ResourceGroupName = "backuprg" $ResourceName = "backuprn" $DataSourceType = "VM" $Location = "SouthEast Asia" -$PolicyName = "Policy9"; +$PolicyName = "Policy10"; $PolicyId = "c87bbada-6e1b-4db2-b76c-9062d28959a4"; $POName = "iaasvmcontainer;dev01testing;dev01testing" $WorkloadType = "VM" @@ -94,7 +94,7 @@ function Test-SetAzureBackupProtectionPolicyTests $policy.ScheduleType = $ScheduleType $policyNewName = "policy09_new" - $protectionPolicy = New-AzureBackupProtectionPolicy -ProtectionPolicy $policy -NewName $policyNewName + $protectionPolicy = Set-AzureBackupProtectionPolicy -ProtectionPolicy $policy -NewName $policyNewName Assert-NotNull $protectionPolicy.InstanceId 'InstanceId should not be null' Assert-NotNull $protectionPolicy.Name 'Name should not be null' From 61658029db9c18ab9636aca65aa22f81ccf22851 Mon Sep 17 00:00:00 2001 From: dragonfly91 Date: Thu, 18 Jun 2015 17:05:26 +0530 Subject: [PATCH 098/155] policy tests session records --- .../Commands.AzureBackup.Test.csproj | 4 + .../ListProtectionPolicyByNameTests.json | 72 +++++++++ .../ListProtectionPolicyTests.json | 72 +++++++++ .../NewProtectionPolicyTests.json | 142 ++++++++++++++++++ .../RemoveProtectionPolicyTests.json | 72 +++++++++ 5 files changed, 362 insertions(+) create mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupPolicyTests/ListProtectionPolicyByNameTests.json create mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupPolicyTests/ListProtectionPolicyTests.json create mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupPolicyTests/NewProtectionPolicyTests.json create mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupPolicyTests/RemoveProtectionPolicyTests.json diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/Commands.AzureBackup.Test.csproj b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/Commands.AzureBackup.Test.csproj index 7f29843aa55f..3a84478da8a9 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/Commands.AzureBackup.Test.csproj +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/Commands.AzureBackup.Test.csproj @@ -186,6 +186,10 @@ + + + + PreserveNewest diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupPolicyTests/ListProtectionPolicyByNameTests.json b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupPolicyTests/ListProtectionPolicyByNameTests.json new file mode 100644 index 000000000000..cf7d1a640424 --- /dev/null +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupPolicyTests/ListProtectionPolicyByNameTests.json @@ -0,0 +1,72 @@ +{ + "Entries": [ + { + "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/protectionpolicies?api-version=2014-09-01", + "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vcHJvdGVjdGlvbnBvbGljaWVzP2FwaS12ZXJzaW9uPTIwMTQtMDktMDE=", + "RequestMethod": "GET", + "RequestBody": "", + "RequestHeaders": { + "Accept-Language": [ + "en-us" + ], + "x-ms-client-request-id": [ + "fb9a6698-7ee6-4772-8a5b-1f5c5d5f360f-2015-06-18 09:52:11Z-PS" + ], + "User-Agent": [ + "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" + ] + }, + "ResponseBody": "{\r\n \"Objects\": [\r\n {\r\n \"WorkloadType\": \"VM\",\r\n \"Schedule\": {\r\n \"BackupType\": \"Full\",\r\n \"ScheduleRun\": \"Daily\",\r\n \"ScheduleStartTime\": \"0001-01-01T00:00:00\",\r\n \"ScheduleRunDays\": null,\r\n \"ScheduleRunTimes\": [\r\n \"2015-06-18T17:30:00\"\r\n ],\r\n \"RetentionPolicy\": {\r\n \"RetentionType\": 1,\r\n \"RetentionDuration\": 30\r\n }\r\n },\r\n \"InstanceId\": \"40716838-2fa2-453b-8901-3f16ecb5359b\",\r\n \"Name\": \"DefaultPolicy\",\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"WorkloadType\": \"VM\",\r\n \"Schedule\": {\r\n \"BackupType\": \"Full\",\r\n \"ScheduleRun\": \"Daily\",\r\n \"ScheduleStartTime\": \"0001-01-01T00:00:00\",\r\n \"ScheduleRunDays\": null,\r\n \"ScheduleRunTimes\": [\r\n \"2015-06-11T14:39:04.6630584Z\"\r\n ],\r\n \"RetentionPolicy\": {\r\n \"RetentionType\": 1,\r\n \"RetentionDuration\": 2\r\n }\r\n },\r\n \"InstanceId\": \"c87bbada-6e1b-4db2-b76c-9062d28959a4\",\r\n \"Name\": \"Policy9\",\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"WorkloadType\": \"VM\",\r\n \"Schedule\": {\r\n \"BackupType\": \"Full\",\r\n \"ScheduleRun\": \"Daily\",\r\n \"ScheduleStartTime\": \"0001-01-01T00:00:00\",\r\n \"ScheduleRunDays\": null,\r\n \"ScheduleRunTimes\": [\r\n \"2015-12-06T19:30:00\"\r\n ],\r\n \"RetentionPolicy\": {\r\n \"RetentionType\": 1,\r\n \"RetentionDuration\": 30\r\n }\r\n },\r\n \"InstanceId\": \"f9e9691b-e05e-45ee-a273-e39e40216a04\",\r\n \"Name\": \"ProtPolicy01_updated\",\r\n \"OperationInProgress\": false\r\n }\r\n ],\r\n \"ResultCount\": 3,\r\n \"Skiptoken\": null\r\n}", + "ResponseHeaders": { + "Content-Length": [ + "1102" + ], + "Content-Type": [ + "application/json" + ], + "Expires": [ + "-1" + ], + "Pragma": [ + "no-cache" + ], + "x-ms-request-id": [ + "93887f1f-d2ed-459f-aa32-8add084e206e" + ], + "x-ms-client-request-id": [ + "fb9a6698-7ee6-4772-8a5b-1f5c5d5f360f-2015-06-18 09:52:11Z-PS", + "fb9a6698-7ee6-4772-8a5b-1f5c5d5f360f-2015-06-18 09:52:11Z-PS" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "x-ms-ratelimit-remaining-subscription-reads": [ + "14998" + ], + "x-ms-correlation-request-id": [ + "93887f1f-d2ed-459f-aa32-8add084e206e" + ], + "x-ms-routing-request-id": [ + "CENTRALUS:20150618T095214Z:93887f1f-d2ed-459f-aa32-8add084e206e" + ], + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Thu, 18 Jun 2015 09:52:14 GMT" + ], + "Server": [ + "Microsoft-IIS/8.0" + ], + "X-Powered-By": [ + "ASP.NET" + ] + }, + "StatusCode": 200 + } + ], + "Names": {}, + "Variables": { + "SubscriptionId": "f5303a0b-fae4-4cdb-b44d-0e4c032dde26" + } +} \ No newline at end of file diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupPolicyTests/ListProtectionPolicyTests.json b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupPolicyTests/ListProtectionPolicyTests.json new file mode 100644 index 000000000000..204c5b230857 --- /dev/null +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupPolicyTests/ListProtectionPolicyTests.json @@ -0,0 +1,72 @@ +{ + "Entries": [ + { + "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/protectionpolicies?api-version=2014-09-01", + "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vcHJvdGVjdGlvbnBvbGljaWVzP2FwaS12ZXJzaW9uPTIwMTQtMDktMDE=", + "RequestMethod": "GET", + "RequestBody": "", + "RequestHeaders": { + "Accept-Language": [ + "en-us" + ], + "x-ms-client-request-id": [ + "8f0e14ea-9791-460a-b345-15de9ae18756-2015-06-18 10:29:32Z-PS" + ], + "User-Agent": [ + "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" + ] + }, + "ResponseBody": "{\r\n \"Objects\": [\r\n {\r\n \"WorkloadType\": \"VM\",\r\n \"Schedule\": {\r\n \"BackupType\": \"Full\",\r\n \"ScheduleRun\": \"Daily\",\r\n \"ScheduleStartTime\": \"0001-01-01T00:00:00\",\r\n \"ScheduleRunDays\": null,\r\n \"ScheduleRunTimes\": [\r\n \"2015-06-18T17:30:00\"\r\n ],\r\n \"RetentionPolicy\": {\r\n \"RetentionType\": 1,\r\n \"RetentionDuration\": 30\r\n }\r\n },\r\n \"InstanceId\": \"40716838-2fa2-453b-8901-3f16ecb5359b\",\r\n \"Name\": \"DefaultPolicy\",\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"WorkloadType\": \"VM\",\r\n \"Schedule\": {\r\n \"BackupType\": \"Full\",\r\n \"ScheduleRun\": \"Daily\",\r\n \"ScheduleStartTime\": \"0001-01-01T00:00:00\",\r\n \"ScheduleRunDays\": null,\r\n \"ScheduleRunTimes\": [\r\n \"2015-06-11T14:39:04.6630584Z\"\r\n ],\r\n \"RetentionPolicy\": {\r\n \"RetentionType\": 1,\r\n \"RetentionDuration\": 2\r\n }\r\n },\r\n \"InstanceId\": \"c87bbada-6e1b-4db2-b76c-9062d28959a4\",\r\n \"Name\": \"Policy9\",\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"WorkloadType\": \"VM\",\r\n \"Schedule\": {\r\n \"BackupType\": \"Full\",\r\n \"ScheduleRun\": \"Daily\",\r\n \"ScheduleStartTime\": \"0001-01-01T00:00:00\",\r\n \"ScheduleRunDays\": null,\r\n \"ScheduleRunTimes\": [\r\n \"2015-12-06T19:30:00\"\r\n ],\r\n \"RetentionPolicy\": {\r\n \"RetentionType\": 1,\r\n \"RetentionDuration\": 30\r\n }\r\n },\r\n \"InstanceId\": \"f9e9691b-e05e-45ee-a273-e39e40216a04\",\r\n \"Name\": \"ProtPolicy01_updated\",\r\n \"OperationInProgress\": false\r\n }\r\n ],\r\n \"ResultCount\": 3,\r\n \"Skiptoken\": null\r\n}", + "ResponseHeaders": { + "Content-Length": [ + "1102" + ], + "Content-Type": [ + "application/json" + ], + "Expires": [ + "-1" + ], + "Pragma": [ + "no-cache" + ], + "x-ms-request-id": [ + "a026a048-9c9a-4083-8b22-275bbf4b16e5" + ], + "x-ms-client-request-id": [ + "8f0e14ea-9791-460a-b345-15de9ae18756-2015-06-18 10:29:32Z-PS", + "8f0e14ea-9791-460a-b345-15de9ae18756-2015-06-18 10:29:32Z-PS" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "x-ms-ratelimit-remaining-subscription-reads": [ + "14995" + ], + "x-ms-correlation-request-id": [ + "a026a048-9c9a-4083-8b22-275bbf4b16e5" + ], + "x-ms-routing-request-id": [ + "CENTRALUS:20150618T102935Z:a026a048-9c9a-4083-8b22-275bbf4b16e5" + ], + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Thu, 18 Jun 2015 10:29:34 GMT" + ], + "Server": [ + "Microsoft-IIS/8.0" + ], + "X-Powered-By": [ + "ASP.NET" + ] + }, + "StatusCode": 200 + } + ], + "Names": {}, + "Variables": { + "SubscriptionId": "f5303a0b-fae4-4cdb-b44d-0e4c032dde26" + } +} \ No newline at end of file diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupPolicyTests/NewProtectionPolicyTests.json b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupPolicyTests/NewProtectionPolicyTests.json new file mode 100644 index 000000000000..79e6438dd231 --- /dev/null +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupPolicyTests/NewProtectionPolicyTests.json @@ -0,0 +1,142 @@ +{ + "Entries": [ + { + "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/protectionpolicies?api-version=2014-09-01", + "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vcHJvdGVjdGlvbnBvbGljaWVzP2FwaS12ZXJzaW9uPTIwMTQtMDktMDE=", + "RequestMethod": "POST", + "RequestBody": "{\r\n \"workloadtype\": \"VM\",\r\n \"policyname\": \"Policy10\",\r\n \"schedule\": {\r\n \"BackupType\": \"Full\",\r\n \"ScheduleRun\": \"Daily\",\r\n \"ScheduleStartTime\": \"0001-01-01T00:00:00\",\r\n \"ScheduleRunDays\": [],\r\n \"ScheduleRunTimes\": [\r\n \"2015-06-13T15:00:00\"\r\n ],\r\n \"RetentionPolicy\": {\r\n \"RetentionType\": \"Days\",\r\n \"RetentionDuration\": 30\r\n }\r\n }\r\n}", + "RequestHeaders": { + "Content-Type": [ + "application/json" + ], + "Content-Length": [ + "373" + ], + "Accept-Language": [ + "en-us" + ], + "x-ms-client-request-id": [ + "98e2d3dc-c532-4f21-b386-0f2d221e653c-2015-06-18 10:30:08Z-PS" + ], + "User-Agent": [ + "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" + ] + }, + "ResponseBody": "\"00000000-0000-0000-0000-000000000000\"", + "ResponseHeaders": { + "Content-Length": [ + "38" + ], + "Content-Type": [ + "application/json" + ], + "Expires": [ + "-1" + ], + "Pragma": [ + "no-cache" + ], + "x-ms-request-id": [ + "42a191c6-8ab9-484c-b049-324776a14245" + ], + "x-ms-client-request-id": [ + "98e2d3dc-c532-4f21-b386-0f2d221e653c-2015-06-18 10:30:08Z-PS", + "98e2d3dc-c532-4f21-b386-0f2d221e653c-2015-06-18 10:30:08Z-PS" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "x-ms-ratelimit-remaining-subscription-writes": [ + "1196" + ], + "x-ms-correlation-request-id": [ + "42a191c6-8ab9-484c-b049-324776a14245" + ], + "x-ms-routing-request-id": [ + "CENTRALUS:20150618T103011Z:42a191c6-8ab9-484c-b049-324776a14245" + ], + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Thu, 18 Jun 2015 10:30:11 GMT" + ], + "Server": [ + "Microsoft-IIS/8.0" + ], + "X-Powered-By": [ + "ASP.NET" + ] + }, + "StatusCode": 200 + }, + { + "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/protectionpolicies?api-version=2014-09-01", + "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vcHJvdGVjdGlvbnBvbGljaWVzP2FwaS12ZXJzaW9uPTIwMTQtMDktMDE=", + "RequestMethod": "GET", + "RequestBody": "", + "RequestHeaders": { + "Accept-Language": [ + "en-us" + ], + "x-ms-client-request-id": [ + "98e2d3dc-c532-4f21-b386-0f2d221e653c-2015-06-18 10:30:08Z-PS" + ], + "User-Agent": [ + "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" + ] + }, + "ResponseBody": "{\r\n \"Objects\": [\r\n {\r\n \"WorkloadType\": \"VM\",\r\n \"Schedule\": {\r\n \"BackupType\": \"Full\",\r\n \"ScheduleRun\": \"Daily\",\r\n \"ScheduleStartTime\": \"0001-01-01T00:00:00\",\r\n \"ScheduleRunDays\": null,\r\n \"ScheduleRunTimes\": [\r\n \"2015-06-18T17:30:00\"\r\n ],\r\n \"RetentionPolicy\": {\r\n \"RetentionType\": 1,\r\n \"RetentionDuration\": 30\r\n }\r\n },\r\n \"InstanceId\": \"40716838-2fa2-453b-8901-3f16ecb5359b\",\r\n \"Name\": \"DefaultPolicy\",\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"WorkloadType\": \"VM\",\r\n \"Schedule\": {\r\n \"BackupType\": \"Full\",\r\n \"ScheduleRun\": \"Daily\",\r\n \"ScheduleStartTime\": \"0001-01-01T00:00:00\",\r\n \"ScheduleRunDays\": null,\r\n \"ScheduleRunTimes\": [\r\n \"2015-06-13T15:00:00\"\r\n ],\r\n \"RetentionPolicy\": {\r\n \"RetentionType\": 1,\r\n \"RetentionDuration\": 30\r\n }\r\n },\r\n \"InstanceId\": \"b612df34-b1c0-4099-b32c-52a42ba69203\",\r\n \"Name\": \"Policy10\",\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"WorkloadType\": \"VM\",\r\n \"Schedule\": {\r\n \"BackupType\": \"Full\",\r\n \"ScheduleRun\": \"Daily\",\r\n \"ScheduleStartTime\": \"0001-01-01T00:00:00\",\r\n \"ScheduleRunDays\": null,\r\n \"ScheduleRunTimes\": [\r\n \"2015-06-11T14:39:04.6630584Z\"\r\n ],\r\n \"RetentionPolicy\": {\r\n \"RetentionType\": 1,\r\n \"RetentionDuration\": 2\r\n }\r\n },\r\n \"InstanceId\": \"c87bbada-6e1b-4db2-b76c-9062d28959a4\",\r\n \"Name\": \"Policy9\",\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"WorkloadType\": \"VM\",\r\n \"Schedule\": {\r\n \"BackupType\": \"Full\",\r\n \"ScheduleRun\": \"Daily\",\r\n \"ScheduleStartTime\": \"0001-01-01T00:00:00\",\r\n \"ScheduleRunDays\": null,\r\n \"ScheduleRunTimes\": [\r\n \"2015-12-06T19:30:00\"\r\n ],\r\n \"RetentionPolicy\": {\r\n \"RetentionType\": 1,\r\n \"RetentionDuration\": 30\r\n }\r\n },\r\n \"InstanceId\": \"f9e9691b-e05e-45ee-a273-e39e40216a04\",\r\n \"Name\": \"ProtPolicy01_updated\",\r\n \"OperationInProgress\": false\r\n }\r\n ],\r\n \"ResultCount\": 4,\r\n \"Skiptoken\": null\r\n}", + "ResponseHeaders": { + "Content-Length": [ + "1446" + ], + "Content-Type": [ + "application/json" + ], + "Expires": [ + "-1" + ], + "Pragma": [ + "no-cache" + ], + "x-ms-request-id": [ + "cd1d9dc9-6a97-4863-bad3-4a2572e67089" + ], + "x-ms-client-request-id": [ + "98e2d3dc-c532-4f21-b386-0f2d221e653c-2015-06-18 10:30:08Z-PS", + "98e2d3dc-c532-4f21-b386-0f2d221e653c-2015-06-18 10:30:08Z-PS" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "x-ms-ratelimit-remaining-subscription-reads": [ + "14997" + ], + "x-ms-correlation-request-id": [ + "cd1d9dc9-6a97-4863-bad3-4a2572e67089" + ], + "x-ms-routing-request-id": [ + "CENTRALUS:20150618T103012Z:cd1d9dc9-6a97-4863-bad3-4a2572e67089" + ], + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Thu, 18 Jun 2015 10:30:11 GMT" + ], + "Server": [ + "Microsoft-IIS/8.0" + ], + "X-Powered-By": [ + "ASP.NET" + ] + }, + "StatusCode": 200 + } + ], + "Names": {}, + "Variables": { + "SubscriptionId": "f5303a0b-fae4-4cdb-b44d-0e4c032dde26" + } +} \ No newline at end of file diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupPolicyTests/RemoveProtectionPolicyTests.json b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupPolicyTests/RemoveProtectionPolicyTests.json new file mode 100644 index 000000000000..c4efc276b944 --- /dev/null +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupPolicyTests/RemoveProtectionPolicyTests.json @@ -0,0 +1,72 @@ +{ + "Entries": [ + { + "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/protectionpolicies?api-version=2014-09-01", + "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vcHJvdGVjdGlvbnBvbGljaWVzP2FwaS12ZXJzaW9uPTIwMTQtMDktMDE=", + "RequestMethod": "GET", + "RequestBody": "", + "RequestHeaders": { + "Accept-Language": [ + "en-us" + ], + "x-ms-client-request-id": [ + "43ff4d15-6f28-418f-9a1a-cf05ee68a15e-2015-06-18 09:51:33Z-PS" + ], + "User-Agent": [ + "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" + ] + }, + "ResponseBody": "{\r\n \"Objects\": [\r\n {\r\n \"WorkloadType\": \"VM\",\r\n \"Schedule\": {\r\n \"BackupType\": \"Full\",\r\n \"ScheduleRun\": \"Daily\",\r\n \"ScheduleStartTime\": \"0001-01-01T00:00:00\",\r\n \"ScheduleRunDays\": null,\r\n \"ScheduleRunTimes\": [\r\n \"2015-06-18T17:30:00\"\r\n ],\r\n \"RetentionPolicy\": {\r\n \"RetentionType\": 1,\r\n \"RetentionDuration\": 30\r\n }\r\n },\r\n \"InstanceId\": \"40716838-2fa2-453b-8901-3f16ecb5359b\",\r\n \"Name\": \"DefaultPolicy\",\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"WorkloadType\": \"VM\",\r\n \"Schedule\": {\r\n \"BackupType\": \"Full\",\r\n \"ScheduleRun\": \"Daily\",\r\n \"ScheduleStartTime\": \"0001-01-01T00:00:00\",\r\n \"ScheduleRunDays\": null,\r\n \"ScheduleRunTimes\": [\r\n \"2015-06-11T14:39:04.6630584Z\"\r\n ],\r\n \"RetentionPolicy\": {\r\n \"RetentionType\": 1,\r\n \"RetentionDuration\": 2\r\n }\r\n },\r\n \"InstanceId\": \"c87bbada-6e1b-4db2-b76c-9062d28959a4\",\r\n \"Name\": \"Policy9\",\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"WorkloadType\": \"VM\",\r\n \"Schedule\": {\r\n \"BackupType\": \"Full\",\r\n \"ScheduleRun\": \"Daily\",\r\n \"ScheduleStartTime\": \"0001-01-01T00:00:00\",\r\n \"ScheduleRunDays\": null,\r\n \"ScheduleRunTimes\": [\r\n \"2015-12-06T19:30:00\"\r\n ],\r\n \"RetentionPolicy\": {\r\n \"RetentionType\": 1,\r\n \"RetentionDuration\": 30\r\n }\r\n },\r\n \"InstanceId\": \"f9e9691b-e05e-45ee-a273-e39e40216a04\",\r\n \"Name\": \"ProtPolicy01_updated\",\r\n \"OperationInProgress\": false\r\n }\r\n ],\r\n \"ResultCount\": 3,\r\n \"Skiptoken\": null\r\n}", + "ResponseHeaders": { + "Content-Length": [ + "1102" + ], + "Content-Type": [ + "application/json" + ], + "Expires": [ + "-1" + ], + "Pragma": [ + "no-cache" + ], + "x-ms-request-id": [ + "e412c33e-32ea-42c6-998e-40666d34d391" + ], + "x-ms-client-request-id": [ + "43ff4d15-6f28-418f-9a1a-cf05ee68a15e-2015-06-18 09:51:33Z-PS", + "43ff4d15-6f28-418f-9a1a-cf05ee68a15e-2015-06-18 09:51:33Z-PS" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "x-ms-ratelimit-remaining-subscription-reads": [ + "14996" + ], + "x-ms-correlation-request-id": [ + "e412c33e-32ea-42c6-998e-40666d34d391" + ], + "x-ms-routing-request-id": [ + "CENTRALUS:20150618T095136Z:e412c33e-32ea-42c6-998e-40666d34d391" + ], + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Thu, 18 Jun 2015 09:51:36 GMT" + ], + "Server": [ + "Microsoft-IIS/8.0" + ], + "X-Powered-By": [ + "ASP.NET" + ] + }, + "StatusCode": 200 + } + ], + "Names": {}, + "Variables": { + "SubscriptionId": "f5303a0b-fae4-4cdb-b44d-0e4c032dde26" + } +} \ No newline at end of file From 58caf76d7697aceaab7ef45912152a44af9a6f21 Mon Sep 17 00:00:00 2001 From: pragrawa Date: Mon, 22 Jun 2015 12:51:19 +0530 Subject: [PATCH 099/155] Protection Policy changes --- .../Commands.AzureBackup/AzureBackupCmdletHelpMessage.cs | 2 +- .../ProtectionPolicy/SetAzureBackupProtectionPolicy.cs | 7 +------ 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupCmdletHelpMessage.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupCmdletHelpMessage.cs index b72548942529..ab4a21c666ed 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupCmdletHelpMessage.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupCmdletHelpMessage.cs @@ -67,7 +67,7 @@ internal static class AzureBackupCmdletHelpMessage public const string DailyScheduleType = "Switch parameter for daily backup schedule."; public const string WeeklyScheduleType = "Switch parameter for weekly backup schedule."; public const string ScheduleRunDays = "Days of week for running backup, required for weekly schedule."; - public const string ScheduleRunTimes = "Times of day for running backup."; + public const string ScheduleRunTimes = "Times of day in UTC for running backup."; public const string RetentionType = "Unit of retention for the recovery point."; public const string RententionDuration = "Duration of retention for the recovery point in units specified by RetentionType."; public const string PolicyNewName = "Policy new name"; diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/SetAzureBackupProtectionPolicy.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/SetAzureBackupProtectionPolicy.cs index 4f772724e10b..224db1c985f1 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/SetAzureBackupProtectionPolicy.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/SetAzureBackupProtectionPolicy.cs @@ -109,7 +109,7 @@ private void FillRemainingValuesForSetPolicyRequest(AzureBackupProtectionPolicy BackupType = policy.BackupType; } - if (ScheduleRunTimes == null) + if (ScheduleRunTimes == null || ScheduleRunTimes == DateTime.MinValue) { ScheduleRunTimes = policy.ScheduleRunTimes; } @@ -124,11 +124,6 @@ private void FillRemainingValuesForSetPolicyRequest(AzureBackupProtectionPolicy RetentionDuration = policy.RetentionDuration; } - if (string.IsNullOrEmpty(BackupType)) - { - BackupType = policy.BackupType; - } - if (this.ParameterSetName != NoScheduleParamSet ) { if (ScheduleRunDays != null && ScheduleRunDays.Length > 0) From 1c420c167f696dfcb30ab4fb84d340bc5666bde4 Mon Sep 17 00:00:00 2001 From: piyushka17 Date: Mon, 22 Jun 2015 13:07:46 +0530 Subject: [PATCH 100/155] Vault cmdlets, and code restructuring --- .../AzureBackupClientAdapter.cs | 121 +++++++ .../ContainerAdapter.cs | 78 +++++ .../AzureBackupClientAdapter/ItemAdapter.cs | 107 ++++++ .../AzureBackupClientAdapter/JobAdapter.cs | 41 +++ .../OperationStatusAdapter.cs | 39 +++ .../AzureBackupClientAdapter/PolicyAdapter.cs | 86 +++++ .../AzureBackupClientAdapter/VaultAdapter.cs | 133 ++++++++ .../AzureBackupCmdletBase.cs | 114 ++++--- .../AzureBackupCmdletHelpMessage.cs | 4 +- .../AzureBackupContainerCmdletBase.cs | 3 +- .../AzureBackupDSCmdletBase.cs | 3 +- .../AzureBackupItemCmdletBase.cs | 3 +- .../AzureBackupPolicyCmdletBase.cs | 6 +- .../AzureBackupVaultCmdletBase.cs | 18 +- .../Cmdlets/BackUp/TriggerBackUp.cs | 23 +- .../Container/GetAzureBackupContainer.cs | 31 +- .../Container/RegisterAzureBackupContainer.cs | 77 ++--- .../UnregisterAzureBackupContainer.cs | 41 +-- .../Disable-AzureBackupProtection .cs | 22 +- .../Enable-AzureBackupProtection .cs | 51 +-- .../GetAzureBackupItem.cs | 20 +- .../Cmdlets/Jobs/GetAzureBackupJob.cs | 21 +- .../GetAzureBackupProtectionPolicy.cs | 23 +- .../NewAzureBackupProtectionPolicy.cs | 18 +- .../RemoveAzureBackupProtectionPolicy.cs | 13 +- .../SetAzureBackupProtectionPolicy.cs | 34 +- .../GetAzureBackupRecoveryPoint.cs | 22 +- .../Cmdlets/Vault/GetAzureBackupVault.cs | 92 ++++++ .../Cmdlets/Vault/NewAzureBackupVault.cs | 91 ++++++ .../Cmdlets/Vault/RemoveAzureBackupVault.cs | 50 +++ .../Cmdlets/Vault/SetAzureBackupVault.cs | 76 +++++ .../Vault/SetAzureBackupVaultStorageType.cs | 21 +- .../GetAzureBackupVaultCredentials.cs | 209 ++++++++++++ .../Commands.AzureBackup.csproj | 70 ++-- .../Helpers/ContainerHelpers.cs | 67 ++++ .../Helpers/ProtectionPolicyHelpers.cs | 175 ++++++++++ .../Helpers/VaultHelpers.cs | 66 ++++ .../Library/AzureBackupCmdletHelper.cs | 196 ----------- .../AzureBackupContainerCmdletHelper.cs | 309 ------------------ .../Commands.AzureBackup/Library/CertUtils.cs | 131 ++++++++ .../Models/AzureBackupBaseObjects.cs | 11 +- .../Models/AzureBackupContainer.cs | 6 +- .../Models/AzureBackupEnums.cs | 13 +- .../Models/AzureBackupItem.cs | 2 +- .../Models/AzureBackupRecoveryPoint.cs | 2 +- .../Models/AzureBackupVault.cs | 66 ++++ .../Commands.AzureBackup/Models/JobObjects.cs | 10 +- .../Models/ListContainerQueryParameter.cs | 4 +- .../Models/ProtectionPolicy.cs | 6 +- .../Models/VaultCredentials.cs | 166 ++++++++++ ...ure.Management.BackupServicesManagment.dll | Bin 0 -> 168960 bytes 51 files changed, 2085 insertions(+), 906 deletions(-) create mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupClientAdapter/AzureBackupClientAdapter.cs create mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupClientAdapter/ContainerAdapter.cs create mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupClientAdapter/ItemAdapter.cs create mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupClientAdapter/JobAdapter.cs create mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupClientAdapter/OperationStatusAdapter.cs create mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupClientAdapter/PolicyAdapter.cs create mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupClientAdapter/VaultAdapter.cs rename src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/{DataSource => Item}/Disable-AzureBackupProtection .cs (80%) rename src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/{DataSource => Item}/Enable-AzureBackupProtection .cs (65%) rename src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/{DataSource => Item}/GetAzureBackupItem.cs (81%) create mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/GetAzureBackupVault.cs create mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/NewAzureBackupVault.cs create mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/RemoveAzureBackupVault.cs create mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/SetAzureBackupVault.cs create mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/VaultCredentials/GetAzureBackupVaultCredentials.cs create mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup/Helpers/ContainerHelpers.cs create mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup/Helpers/ProtectionPolicyHelpers.cs create mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup/Helpers/VaultHelpers.cs delete mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup/Library/AzureBackupCmdletHelper.cs delete mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup/Library/AzureBackupContainerCmdletHelper.cs create mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup/Library/CertUtils.cs create mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupVault.cs create mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/VaultCredentials.cs create mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup/Resources/Microsoft.WindowsAzure.Management.BackupServicesManagment.dll diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupClientAdapter/AzureBackupClientAdapter.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupClientAdapter/AzureBackupClientAdapter.cs new file mode 100644 index 000000000000..7640563f086b --- /dev/null +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupClientAdapter/AzureBackupClientAdapter.cs @@ -0,0 +1,121 @@ +// ---------------------------------------------------------------------------------- +// +// Copyright Microsoft Corporation +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// ---------------------------------------------------------------------------------- + +using System; +using System.Management.Automation; +using System.Collections.Generic; +using System.Xml; +using Microsoft.WindowsAzure.Commands.Utilities.Common; +using Microsoft.Azure.Common.Authentication; +using Microsoft.Azure.Common.Authentication.Models; +using System.Threading; +using Hyak.Common; +using Microsoft.Azure.Commands.AzureBackup.Properties; +using System.Net; +using Microsoft.WindowsAzure.Management.Scheduler; +using Microsoft.Azure.Management.BackupServices; +using Microsoft.Azure.Management.BackupServices.Models; + +namespace Microsoft.Azure.Commands.AzureBackup.ClientAdapter +{ + public partial class AzureBackupClientAdapter + { + /// + /// Cloud credentials for client calls + /// + private SubscriptionCloudCredentials cloudCreds { get; set; } + + /// + /// Base URI for client calls + /// + private Uri baseURI { get; set; } + + /// + /// ResourceGroup context for the operation + /// + private string resourceGroupName { get; set; } + + /// + /// Resource context for the operation + /// + private string resourceName { get; set; } + + /// + /// Client request id. + /// + private string clientRequestId; + + /// + /// Azure backup client. + /// + private BackupServicesManagementClient azureBackupClient; + + /// + /// Cancellation Token Source + /// + private CancellationTokenSource cancellationTokenSource = new CancellationTokenSource(); + private CancellationToken CmdletCancellationToken; + + /// + /// Get Azure backup client. + /// + private BackupServicesManagementClient AzureBackupClient + { + get + { + if (this.azureBackupClient == null) + { + this.azureBackupClient = AzureSession.ClientFactory.CreateCustomClient(resourceName, resourceGroupName, cloudCreds, baseURI); + } + + return this.azureBackupClient; + } + } + + public AzureBackupClientAdapter(SubscriptionCloudCredentials creds, Uri baseUri, string rgName, string rName) + { + cloudCreds = creds; + baseURI = baseUri; + resourceGroupName = rgName; + resourceName = rName; + + RefreshClientRequestId(); + + // Temp code to be able to test internal env. + ServicePointManager.ServerCertificateValidationCallback = delegate { return true; }; + } + + public void RefreshClientRequestId() + { + clientRequestId = Guid.NewGuid().ToString() + "-" + DateTime.Now.ToUniversalTime().ToString("yyyy-MM-dd HH:mm:ssZ") + "-PS"; + } + + public string GetClientRequestId() + { + return clientRequestId; + } + + internal CustomRequestHeaders GetCustomRequestHeaders() + { + var hdrs = new CustomRequestHeaders() + { + // ClientRequestId is a unique ID for every request to backend service. + ClientRequestId = this.clientRequestId, + }; + + return hdrs; + } + } +} + diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupClientAdapter/ContainerAdapter.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupClientAdapter/ContainerAdapter.cs new file mode 100644 index 000000000000..ac13b989177e --- /dev/null +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupClientAdapter/ContainerAdapter.cs @@ -0,0 +1,78 @@ +// ---------------------------------------------------------------------------------- +// +// Copyright Microsoft Corporation +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// ---------------------------------------------------------------------------------- + +using System; +using System.Management.Automation; +using System.Collections.Generic; +using System.Xml; +using Microsoft.WindowsAzure.Commands.Utilities.Common; +using Microsoft.Azure.Common.Authentication; +using Microsoft.Azure.Common.Authentication.Models; +using System.Threading; +using Hyak.Common; +using Microsoft.Azure.Commands.AzureBackup.Properties; +using System.Net; +using System.Linq; +using Microsoft.WindowsAzure.Management.Scheduler; +using Microsoft.Azure.Management.BackupServices; +using Microsoft.Azure.Management.BackupServices.Models; + +namespace Microsoft.Azure.Commands.AzureBackup.ClientAdapter +{ + public partial class AzureBackupClientAdapter + { + /// + /// Gets all containers in the vault + /// + /// + /// + public IEnumerable ListContainers(string filter) + { + var listResponse = AzureBackupClient.Container.ListAsync(filter, GetCustomRequestHeaders(), CmdletCancellationToken).Result; + return listResponse.Objects; + } + + /// + /// Register container + /// + /// + /// + public Guid RegisterContainer(RegisterContainerRequestInput request) + { + var response = AzureBackupClient.Container.RegisterAsync(request, GetCustomRequestHeaders(), CmdletCancellationToken).Result; + return response.OperationId; + } + + /// + /// UnRegister container + /// + /// + /// + public Guid UnRegisterContainer(UnregisterContainerRequestInput request) + { + var response = AzureBackupClient.Container.UnregisterAsync(request, GetCustomRequestHeaders(), CmdletCancellationToken).Result; + return response.OperationId; + } + + /// + /// Refresh container list in service + /// + /// + public Guid RefreshContainers() + { + var response = AzureBackupClient.Container.RefreshAsync(GetCustomRequestHeaders(), CmdletCancellationToken).Result; + return response.OperationId; + } + } +} \ No newline at end of file diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupClientAdapter/ItemAdapter.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupClientAdapter/ItemAdapter.cs new file mode 100644 index 000000000000..193114bb179b --- /dev/null +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupClientAdapter/ItemAdapter.cs @@ -0,0 +1,107 @@ +// ---------------------------------------------------------------------------------- +// +// Copyright Microsoft Corporation +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// ---------------------------------------------------------------------------------- + +using System; +using System.Management.Automation; +using System.Collections.Generic; +using System.Xml; +using Microsoft.WindowsAzure.Commands.Utilities.Common; +using Microsoft.Azure.Common.Authentication; +using Microsoft.Azure.Common.Authentication.Models; +using System.Threading; +using Hyak.Common; +using Microsoft.Azure.Commands.AzureBackup.Properties; +using System.Net; +using Microsoft.WindowsAzure.Management.Scheduler; +using Microsoft.Azure.Management.BackupServices; +using Microsoft.Azure.Management.BackupServices.Models; + +namespace Microsoft.Azure.Commands.AzureBackup.ClientAdapter +{ + public partial class AzureBackupClientAdapter + { + /// + /// Lists datasources in the vault + /// + /// + /// + public IEnumerable ListDataSources(DataSourceQueryParameter query) + { + var response = AzureBackupClient.DataSource.ListAsync(query, GetCustomRequestHeaders(), CmdletCancellationToken).Result; + return (response != null) ? response.DataSources.Objects : null; + } + + /// + /// Lists protectable objects in the vault + /// + /// + /// + public IEnumerable ListProtectableObjects(POQueryParameter query) + { + var response = AzureBackupClient.ProtectableObject.ListAsync(query, GetCustomRequestHeaders(), CmdletCancellationToken).Result; + return (response != null) ? response.ProtectableObject.Objects : null; + } + + /// + /// Dsiable protection + /// + /// + /// + /// + /// + /// + public Guid DisableProtection(string containerName, string dsType, string dsId, RemoveProtectionRequestInput request) + { + var response = AzureBackupClient.DataSource.DisableProtectionAsync(GetCustomRequestHeaders(), containerName, dsType, dsId, request, CmdletCancellationToken).Result; + return response.OperationId; + } + + /// + /// Enable Protection + /// + /// + /// + public Guid EnableProtection(SetProtectionRequestInput request) + { + var response = AzureBackupClient.DataSource.EnableProtectionAsync(GetCustomRequestHeaders(), request, CmdletCancellationToken).Result; + return response.OperationId; + } + + /// + /// Trigger backup on a DS + /// + /// + /// + /// + /// + public Guid TriggerBackup(string containerName, string dsType, string dsId) + { + var response = AzureBackupClient.BackUp.TriggerBackUpAsync(GetCustomRequestHeaders(), containerName, dsType, dsId, CmdletCancellationToken).Result; + return response.OperationId; + } + + /// + /// Lists recovery points for specified item + /// + /// + /// + /// + /// + public IEnumerable ListRecoveryPoints(string containerName, string dsType, string dsId) + { + var response = AzureBackupClient.RecoveryPoint.ListAsync(GetCustomRequestHeaders(), containerName, dsType, dsId, CmdletCancellationToken).Result; + return (response != null) ? response.RecoveryPoints.Objects : null; + } + } +} \ No newline at end of file diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupClientAdapter/JobAdapter.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupClientAdapter/JobAdapter.cs new file mode 100644 index 000000000000..03bc42586748 --- /dev/null +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupClientAdapter/JobAdapter.cs @@ -0,0 +1,41 @@ +// ---------------------------------------------------------------------------------- +// +// Copyright Microsoft Corporation +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// ---------------------------------------------------------------------------------- + +using System; +using System.Management.Automation; +using System.Collections.Generic; +using System.Xml; +using Microsoft.WindowsAzure.Commands.Utilities.Common; +using Microsoft.Azure.Common.Authentication; +using Microsoft.Azure.Common.Authentication.Models; +using System.Threading; +using Hyak.Common; +using Microsoft.Azure.Commands.AzureBackup.Properties; +using System.Net; +using Microsoft.WindowsAzure.Management.Scheduler; +using Microsoft.Azure.Management.BackupServices; +using Microsoft.Azure.Management.BackupServices.Models; +using Mgmt = Microsoft.Azure.Management.BackupServices.Models; + +namespace Microsoft.Azure.Commands.AzureBackup.ClientAdapter +{ + public partial class AzureBackupClientAdapter + { + public IEnumerable ListJobs(JobQueryParameter queryParams) + { + var response = AzureBackupClient.Job.ListAsync(queryParams, GetCustomRequestHeaders(), CmdletCancellationToken).Result; + return response.Jobs.Objects; + } + } +} \ No newline at end of file diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupClientAdapter/OperationStatusAdapter.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupClientAdapter/OperationStatusAdapter.cs new file mode 100644 index 000000000000..6d4c63dc7aa3 --- /dev/null +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupClientAdapter/OperationStatusAdapter.cs @@ -0,0 +1,39 @@ +// ---------------------------------------------------------------------------------- +// +// Copyright Microsoft Corporation +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// ---------------------------------------------------------------------------------- + +using System; +using System.Management.Automation; +using System.Collections.Generic; +using System.Xml; +using Microsoft.WindowsAzure.Commands.Utilities.Common; +using Microsoft.Azure.Common.Authentication; +using Microsoft.Azure.Common.Authentication.Models; +using System.Threading; +using Hyak.Common; +using Microsoft.Azure.Commands.AzureBackup.Properties; +using System.Net; +using Microsoft.WindowsAzure.Management.Scheduler; +using Microsoft.Azure.Management.BackupServices; +using Microsoft.Azure.Management.BackupServices.Models; + +namespace Microsoft.Azure.Commands.AzureBackup.ClientAdapter +{ + public partial class AzureBackupClientAdapter + { + public OperationResultResponse GetOperationStatus(string operationId) + { + return AzureBackupClient.OperationStatus.GetAsync(operationId, GetCustomRequestHeaders(), CmdletCancellationToken).Result; + } + } +} \ No newline at end of file diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupClientAdapter/PolicyAdapter.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupClientAdapter/PolicyAdapter.cs new file mode 100644 index 000000000000..360aec16bac3 --- /dev/null +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupClientAdapter/PolicyAdapter.cs @@ -0,0 +1,86 @@ +// ---------------------------------------------------------------------------------- +// +// Copyright Microsoft Corporation +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// ---------------------------------------------------------------------------------- + +using System; +using System.Management.Automation; +using System.Collections.Generic; +using System.Xml; +using Microsoft.WindowsAzure.Commands.Utilities.Common; +using Microsoft.Azure.Common.Authentication; +using Microsoft.Azure.Common.Authentication.Models; +using System.Threading; +using Hyak.Common; +using Microsoft.Azure.Commands.AzureBackup.Properties; +using System.Net; +using System.Linq; +using Microsoft.WindowsAzure.Management.Scheduler; +using Microsoft.Azure.Management.BackupServices; +using Microsoft.Azure.Management.BackupServices.Models; + +namespace Microsoft.Azure.Commands.AzureBackup.ClientAdapter +{ + public partial class AzureBackupClientAdapter + { + /// + /// Gets protection policies of matching name + /// + /// + /// + public ProtectionPolicyInfo GetProtectionPolicyByName(string name) + { + var policyList = ListProtectionPolicies(); + + var filteredList = policyList.Where(x => x.Name.Equals(name, System.StringComparison.InvariantCultureIgnoreCase)); + return filteredList.FirstOrDefault(); + } + + /// + /// Gets all policies in the vault + /// + /// + public IEnumerable ListProtectionPolicies() + { + var listResponse = AzureBackupClient.ProtectionPolicy.ListAsync(GetCustomRequestHeaders(), CmdletCancellationToken).Result; + return listResponse.ProtectionPolicies.Objects; + } + + /// + /// Add protection policy + /// + /// + public void AddProtectionPolicy(AddProtectionPolicyRequest request) + { + AzureBackupClient.ProtectionPolicy.AddAsync(request, GetCustomRequestHeaders(), CmdletCancellationToken).Wait(); + } + + /// + /// Delete protection policy + /// + /// + public void DeleteProtectionPolicy(string policyId) + { + AzureBackupClient.ProtectionPolicy.DeleteAsync(policyId, GetCustomRequestHeaders(), CmdletCancellationToken).Wait(); + } + + /// + /// Update specified protection policy + /// + /// + /// + public void UpdateProtectionPolicy(string policyId, UpdateProtectionPolicyRequest request) + { + AzureBackupClient.ProtectionPolicy.UpdateAsync(policyId, request, GetCustomRequestHeaders(), CmdletCancellationToken).Wait(); + } + } +} \ No newline at end of file diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupClientAdapter/VaultAdapter.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupClientAdapter/VaultAdapter.cs new file mode 100644 index 000000000000..9af4acc39f07 --- /dev/null +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupClientAdapter/VaultAdapter.cs @@ -0,0 +1,133 @@ +// ---------------------------------------------------------------------------------- +// +// Copyright Microsoft Corporation +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// ---------------------------------------------------------------------------------- + +using System; +using System.Management.Automation; +using System.Collections.Generic; +using System.Xml; +using Microsoft.WindowsAzure.Commands.Utilities.Common; +using Microsoft.Azure.Common.Authentication; +using Microsoft.Azure.Common.Authentication.Models; +using System.Threading; +using Hyak.Common; +using Microsoft.Azure.Commands.AzureBackup.Properties; +using System.Net; +using Microsoft.WindowsAzure.Management.Scheduler; +using Microsoft.Azure.Management.BackupServices; +using Microsoft.Azure.Management.BackupServices.Models; + +namespace Microsoft.Azure.Commands.AzureBackup.ClientAdapter +{ + public partial class AzureBackupClientAdapter + { + public const int defaultTop = 100; + + /// + /// Creates or updates the vault identified by client + /// + /// + /// + /// + public AzureBackupVault CreateOrUpdateAzureBackupVault(string resourceGroupName, string vaultName, string location, string skuParam) + { + var createResourceParameters = new AzureBackupVaultCreateOrUpdateParameters() + { + Location = location, + Properties = new AzureBackupVaultProperties() + { + Sku = new SkuProperties() + { + Name = skuParam, + }, + }, + }; + + var response = AzureBackupClient.Vault.CreateOrUpdateAsync(resourceGroupName, vaultName, createResourceParameters, GetCustomRequestHeaders(), CmdletCancellationToken).Result; + return response.Vault; + } + + /// + /// Updates storage type of the vault identified by client + /// + /// + public void UpdateStorageType(string storageType) + { + UpdateVaultStorageTypeRequest updateVaultStorageTypeRequest = new UpdateVaultStorageTypeRequest() + { + StorageTypeProperties = new StorageTypeProperties() + { + StorageModelType = storageType, + }, + }; + + AzureBackupClient.Vault.UpdateStorageTypeAsync(updateVaultStorageTypeRequest, GetCustomRequestHeaders(), CmdletCancellationToken).Wait(); + } + + /// + /// Gets storage type details of the specified resource + /// + /// + public StorageDetails GetStorageTypeDetails(string resourceGroupName, string vaultName) + { + var response = AzureBackupClient.Vault.GetResourceStorageConfigAsync(resourceGroupName, vaultName, GetCustomRequestHeaders(), CmdletCancellationToken).Result; + return (response != null) ? response.StorageDetails : null; + } + + /// + /// Gets the vault identified by the client + /// + /// + public AzureBackupVault GetVault(string resourceGroupName, string vaultName) + { + var getResponse = AzureBackupClient.Vault.GetAsync(resourceGroupName, vaultName, GetCustomRequestHeaders(), CmdletCancellationToken).Result; + return (getResponse != null) ? getResponse.Vault : null; + } + + /// + /// Gets backup vaults in current subscription + /// + /// + public IEnumerable GetVaults() + { + var listResponse = AzureBackupClient.Vault.ListAsync(defaultTop, GetCustomRequestHeaders(), CmdletCancellationToken).Result; + return (listResponse != null) ? listResponse.Vaults : null; + } + + /// + /// Gets backup vaults in given resource group + /// + /// + /// + public IEnumerable GetVaultsInResourceGroup(string resourceGroupName) + { + var listResponse = AzureBackupClient.Vault.ListByResourceGroupAsync(resourceGroupName, defaultTop, GetCustomRequestHeaders(), CmdletCancellationToken).Result; + return (listResponse != null) ? listResponse.Vaults : null; + } + + /// + /// Deletes the specified backup vault + /// + /// + /// + public void DeleteVault(string resourceGroupName, string vaultName) + { + AzureBackupClient.Vault.DeleteAsync(resourceGroupName, vaultName, GetCustomRequestHeaders(), CmdletCancellationToken).Wait(); + } + + public VaultCredUploadCertResponse UploadCertificate(string certName, VaultCredUploadCertRequest request) + { + return AzureBackupClient.Vault.UploadCertificateAsync(certName, request, GetCustomRequestHeaders(), CmdletCancellationToken).Result; + } + } +} \ No newline at end of file diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupCmdletBase.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupCmdletBase.cs index 83bbee619a1b..29f2f02a0d04 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupCmdletBase.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupCmdletBase.cs @@ -26,80 +26,50 @@ using Microsoft.WindowsAzure.Management.Scheduler; using Microsoft.Azure.Management.BackupServices; using Microsoft.Azure.Management.BackupServices.Models; +using Microsoft.Azure.Commands.AzureBackup.ClientAdapter; +using Microsoft.Azure.Commands.AzureBackup.Models; +using CmdletModel = Microsoft.Azure.Commands.AzureBackup.Models; namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets { public abstract class AzureBackupCmdletBase : AzurePSCmdlet { - /// - /// ResourceGroup context for the operation - /// - private string resourceGroupName { get; set; } - - /// - /// Resource context for the operation - /// - private string resourceName { get; set; } - - /// - /// Resource context for the operation - /// - private string location { get; set; } - - /// - /// Client request id. - /// - private string clientRequestId; - /// /// Azure backup client. /// - private BackupServicesManagementClient azureBackupClient; - - /// - /// Cancellation Token Source - /// - private CancellationTokenSource cancellationTokenSource = new CancellationTokenSource(); - internal CancellationToken CmdletCancellationToken; - - protected AzureBackupCmdletHelper azureBackupCmdletHelper; - + private AzureBackupClientAdapter azureBackupClientAdapter; + /// /// Get Azure backup client. /// - internal BackupServicesManagementClient AzureBackupClient + protected AzureBackupClientAdapter AzureBackupClient { get { - if (this.azureBackupClient == null) - { - // Temp code to be able to test internal env. - ServicePointManager.ServerCertificateValidationCallback = delegate { return true; }; - - var cloudServicesClient = AzureSession.ClientFactory.CreateClient(Profile, Profile.Context.Subscription, AzureEnvironment.Endpoint.ResourceManager); - this.azureBackupClient = AzureSession.ClientFactory.CreateCustomClient(resourceName, resourceGroupName, cloudServicesClient.Credentials, cloudServicesClient.BaseUri); - } - - return this.azureBackupClient; + return this.azureBackupClientAdapter; } } - protected void RefreshClientRequestId() + /// + /// Initializes required client adapters + /// + /// + /// + protected void InitializeAzureBackupCmdlet(string rgName, string rName) { - clientRequestId = Guid.NewGuid().ToString() + "-" + DateTime.Now.ToUniversalTime().ToString("yyyy-MM-dd HH:mm:ssZ") + "-PS"; + var cloudServicesClient = AzureSession.ClientFactory.CreateClient(Profile, Profile.Context.Subscription, AzureEnvironment.Endpoint.ResourceManager); + azureBackupClientAdapter = new AzureBackupClientAdapter(cloudServicesClient.Credentials, cloudServicesClient.BaseUri, rgName, rName); + + WriteDebug(string.Format("Initialized AzureBackup Cmdlet, ClientRequestId: {0}, ResourceGroupName: {1}, ResourceName : {2}", azureBackupClientAdapter.GetClientRequestId(), rgName, rName)); } - public void InitializeAzureBackupCmdlet(string rgName, string rName, string locationName) + /// + /// Initializes required client adapters + /// + /// + protected void InitializeAzureBackupCmdlet(CmdletModel.AzureBackupVault vault) { - resourceGroupName = rgName; - resourceName = rName; - location = locationName; - - RefreshClientRequestId(); - WriteDebug(string.Format("Initialized AzureBackup Cmdlet, ClientRequestId: {0}, ResourceGroupName: {1}, ResourceName : {2}", this.clientRequestId, resourceGroupName, resourceName)); - - CmdletCancellationToken = cancellationTokenSource.Token; - azureBackupCmdletHelper = new AzureBackupCmdletHelper(this); + InitializeAzureBackupCmdlet(vault.ResourceGroupName, vault.Name); } protected void ExecutionBlock(Action execAction) @@ -172,15 +142,41 @@ private void HandleException(Exception exception) } } - internal CustomRequestHeaders GetCustomRequestHeaders() + /// + /// Get status of long running operation + /// + /// + /// + internal OperationResultResponse GetOperationStatus(Guid operationId) { - var hdrs = new CustomRequestHeaders() + return AzureBackupClient.GetOperationStatus(operationId.ToString()); + } + + private const int defaultOperationStatusRetryTimeInMilliSec = 10 * 1000; // 10 sec + + /// + /// Track completion of long running operation + /// + /// + /// In Millisec + /// + internal OperationResultResponse TrackOperation(Guid operationId, int checkFrequency = defaultOperationStatusRetryTimeInMilliSec) + { + OperationResultResponse response = null; + + while (true) { - // ClientRequestId is a unique ID for every request to backend service. - ClientRequestId = this.clientRequestId, - }; + response = GetOperationStatus(operationId); + + if (response.OperationStatus == AzureBackupOperationStatus.Completed.ToString()) + { + break; + } + + Thread.Sleep(checkFrequency); + } - return hdrs; + return response; } } } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupCmdletHelpMessage.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupCmdletHelpMessage.cs index b72548942529..bb7a751f1fc5 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupCmdletHelpMessage.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupCmdletHelpMessage.cs @@ -20,7 +20,9 @@ internal static class AzureBackupCmdletHelpMessage public const string PolicyName = "The protection policy name."; public const string ResourceGroupName = "The ResourceGroup name."; public const string ResourceName = "The Resource name."; - public const string Location = "Location."; + public const string Location = "The resource location."; + public const string Sku = "The SKU of the backup vault instance."; + public const string ResourceTags = "A hash table which represents resource tags."; public const string TargetLocation = "The directory where the credentials file will be saved. This must be an absolute path."; public const string ContainerResourceName = "The container resource name aka friendly name."; public const string ContainerId = "The container ID."; diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupContainerCmdletBase.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupContainerCmdletBase.cs index 37a6dfe395f9..6018452616e5 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupContainerCmdletBase.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupContainerCmdletBase.cs @@ -23,6 +23,7 @@ using Hyak.Common; using Microsoft.Azure.Commands.AzureBackup.Properties; using System.Net; +using Microsoft.Azure.Commands.AzureBackup.Models; namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets { @@ -38,7 +39,7 @@ public override void ExecuteCmdlet() WriteDebug(String.Format("Cmdlet called for ResourceGroupName: {0}, ResourceName: {1}, Location: {2}", Container.ResourceGroupName, Container.ResourceName, Container.Location)); - InitializeAzureBackupCmdlet(Container.ResourceGroupName, Container.ResourceName, Container.Location); + InitializeAzureBackupCmdlet(Container.ResourceGroupName, Container.ResourceName); } } } \ No newline at end of file diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupDSCmdletBase.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupDSCmdletBase.cs index 255108bf5392..aec5d07b3836 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupDSCmdletBase.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupDSCmdletBase.cs @@ -23,6 +23,7 @@ using Hyak.Common; using Microsoft.Azure.Commands.AzureBackup.Properties; using System.Net; +using Microsoft.Azure.Commands.AzureBackup.Models; namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets { @@ -38,7 +39,7 @@ public override void ExecuteCmdlet() WriteDebug(String.Format("Cmdlet called for ResourceGroupName: {0}, ResourceName: {1}", Item.ResourceGroupName, Item.ResourceName)); - InitializeAzureBackupCmdlet(Item.ResourceGroupName, Item.ResourceName, Item.Location); + InitializeAzureBackupCmdlet(Item.ResourceGroupName, Item.ResourceName); } } } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupItemCmdletBase.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupItemCmdletBase.cs index 7434c5cfa8b1..a08fe6208834 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupItemCmdletBase.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupItemCmdletBase.cs @@ -23,6 +23,7 @@ using Hyak.Common; using Microsoft.Azure.Commands.AzureBackup.Properties; using System.Net; +using Microsoft.Azure.Commands.AzureBackup.Models; namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets { @@ -36,7 +37,7 @@ public override void ExecuteCmdlet() { base.ExecuteCmdlet(); WriteDebug(String.Format("Cmdlet called for ResourceGroupName: {0}, ResourceName: {1}, Location: {2}", Item.ResourceGroupName, Item.ResourceName, Item.Location)); - InitializeAzureBackupCmdlet(Item.ResourceGroupName, Item.ResourceName, Item.Location); + InitializeAzureBackupCmdlet(Item.ResourceGroupName, Item.ResourceName); } } } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupPolicyCmdletBase.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupPolicyCmdletBase.cs index ae374269b6aa..46823713a2ff 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupPolicyCmdletBase.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupPolicyCmdletBase.cs @@ -24,6 +24,7 @@ using Microsoft.Azure.Commands.AzureBackup.Properties; using System.Net; using Microsoft.Azure.Management.BackupServices.Models; +using Microsoft.Azure.Commands.AzureBackup.Models; namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets { @@ -42,8 +43,7 @@ public override void ExecuteCmdlet() WriteDebug(String.Format("Cmdlet called for ResourceGroupName: {0}, ResourceName: {1}, Location: {2}", ProtectionPolicy.ResourceGroupName, ProtectionPolicy.ResourceName, ProtectionPolicy.Location)); - InitializeAzureBackupCmdlet(ProtectionPolicy.ResourceGroupName, ProtectionPolicy.ResourceName, ProtectionPolicy.Location); - } - + InitializeAzureBackupCmdlet(ProtectionPolicy.ResourceGroupName, ProtectionPolicy.ResourceName); + } } } \ No newline at end of file diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupVaultCmdletBase.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupVaultCmdletBase.cs index c57d742345c1..16ee0fad41e9 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupVaultCmdletBase.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupVaultCmdletBase.cs @@ -23,30 +23,22 @@ using Hyak.Common; using Microsoft.Azure.Commands.AzureBackup.Properties; using System.Net; +using Microsoft.Azure.Commands.AzureBackup.Models; namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets { public abstract class AzureBackupVaultCmdletBase : AzureBackupCmdletBase { - [Parameter(Position = 0, Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.ResourceGroupName, ValueFromPipelineByPropertyName = true)] + [Parameter(Position = 0, Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.Vault, ValueFromPipeline = true)] [ValidateNotNullOrEmpty] - public string ResourceGroupName { get; set; } - - [Parameter(Position = 1, Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.ResourceName, ValueFromPipelineByPropertyName = true)] - [ValidateNotNullOrEmpty] - public string ResourceName { get; set; } - - [Parameter(Position = 2, Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.Location, ValueFromPipelineByPropertyName = true)] - [ValidateNotNullOrEmpty] - public string Location { get; set; } + public AzureBackupVault vault { get; set; } public override void ExecuteCmdlet() { base.ExecuteCmdlet(); + vault.Validate(); - WriteDebug(String.Format("Cmdlet called for ResourceGroupName: {0}, ResourceName: {1}", ResourceGroupName, ResourceName)); - - InitializeAzureBackupCmdlet(ResourceGroupName, ResourceName, Location); + InitializeAzureBackupCmdlet(vault); } } } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/BackUp/TriggerBackUp.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/BackUp/TriggerBackUp.cs index 4021d521e5ae..d5a41254fde7 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/BackUp/TriggerBackUp.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/BackUp/TriggerBackUp.cs @@ -36,24 +36,17 @@ public class TriggerAzureBackup : AzureBackupDSCmdletBase { public override void ExecuteCmdlet() { - base.ExecuteCmdlet(); - ExecutionBlock(() => { - WriteVerbose("Making client call"); - Guid jobId = Guid.Empty; - MBS.OperationResponse triggerBackUpInfo = - AzureBackupClient.BackUp.TriggerBackUpAsync(GetCustomRequestHeaders(), - Item.ContainerUniqueName, - Item.Type, - Item.DataSourceId, - CmdletCancellationToken).Result; + base.ExecuteCmdlet(); + + WriteDebug("Making client call"); + Guid operationId = AzureBackupClient.TriggerBackup(Item.ContainerUniqueName, Item.Type, Item.DataSourceId); + + WriteDebug("Triggered backup. Converting response"); - WriteVerbose("Received backup response"); - - WriteVerbose("Converting response"); - jobId = triggerBackUpInfo.OperationId; - this.WriteObject(jobId); + var operationStatus = GetOperationStatus(operationId); + this.WriteObject(operationStatus.JobList.FirstOrDefault()); }); } } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/GetAzureBackupContainer.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/GetAzureBackupContainer.cs index 3e9c9fa2c9ce..793818609532 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/GetAzureBackupContainer.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/GetAzureBackupContainer.cs @@ -12,7 +12,9 @@ // limitations under the License. // ---------------------------------------------------------------------------------- +using Microsoft.Azure.Commands.AzureBackup.Helpers; using Microsoft.Azure.Commands.AzureBackup.Library; +using Microsoft.Azure.Commands.AzureBackup.Models; using Microsoft.Azure.Management.BackupServices.Models; using System; using System.Collections.Generic; @@ -47,18 +49,17 @@ public class GetAzureBackupContainer : AzureBackupVaultCmdletBase public override void ExecuteCmdlet() { - base.ExecuteCmdlet(); - ExecutionBlock(() => { + base.ExecuteCmdlet(); + string queryFilterString = string.Empty; queryFilterString = ConstructQueryFilterString(); - ListContainerResponse listContainerResponse = AzureBackupClient.Container.ListAsync(queryFilterString, - GetCustomRequestHeaders(), CmdletCancellationToken).Result; + var containerList = AzureBackupClient.ListContainers(queryFilterString); - WriteVerbose(string.Format("# of fetched containers = {0}", listContainerResponse.Objects.Count)); + WriteDebug(string.Format("Fetched {0} containers", containerList.Count())); - List containerInfos = listContainerResponse.Objects.ToList(); + List containerInfos = containerList.ToList(); // When resource group name is specified, remove all containers whose resource group name // doesn't match the given resource group name @@ -70,11 +71,13 @@ public override void ExecuteCmdlet() }); } - WriteVerbose(string.Format("# of containers after resource group filter = {0}", listContainerResponse.Objects.Count)); + WriteDebug(string.Format("Count of containers after resource group filter = {0}", containerInfos.Count)); + // TODO: Container friendly name is not captures in Container response + // BUG: Friendly name was previously assigned to ResourceName (vault name) List containers = containerInfos.ConvertAll(containerInfo => { - return new AzureBackupContainer(containerInfo, containerInfo.ParentContainerName, containerInfo.FriendlyName, Location); + return new AzureBackupContainer(vault, containerInfo); }); if (!string.IsNullOrEmpty(ContainerResourceName) & !string.IsNullOrEmpty(ContainerResourceGroupName)) @@ -93,12 +96,12 @@ public override void ExecuteCmdlet() private string ConstructQueryFilterString() { - ContainerQueryObject containerQueryObject = new ContainerQueryObject(); + var containerQueryObject = new ListContainerQueryParameter(); switch (Type) { case AzureBackupContainerTypeInput.AzureVirtualMachine: - containerQueryObject.Type = ContainerType.IaasVMContainer.ToString(); + containerQueryObject.ContainerTypeField = AzureBackupContainerType.IaasVMContainer.ToString(); break; default: break; @@ -107,10 +110,10 @@ private string ConstructQueryFilterString() switch (Status) { case AzureBackupContainerStatusInput.Registered: - containerQueryObject.Status = RegistrationStatus.Registered.ToString(); + containerQueryObject.ContainerStatusField = AzureBackupContainerRegistrationStatus.Registered.ToString(); break; case AzureBackupContainerStatusInput.Registering: - containerQueryObject.Status = RegistrationStatus.Registering.ToString(); + containerQueryObject.ContainerStatusField = AzureBackupContainerRegistrationStatus.Registering.ToString(); break; default: break; @@ -118,10 +121,10 @@ private string ConstructQueryFilterString() if (!string.IsNullOrEmpty(ContainerResourceName)) { - containerQueryObject.FriendlyName = ContainerResourceName; + containerQueryObject.ContainerFriendlyNameField = ContainerResourceName; } - return BackupManagementAPIHelper.GetQueryString(containerQueryObject.GetNameValueCollection()); + return ContainerHelpers.GetQueryFilter(containerQueryObject); } } } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/RegisterAzureBackupContainer.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/RegisterAzureBackupContainer.cs index 8e05f25313a9..155bf8185510 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/RegisterAzureBackupContainer.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/RegisterAzureBackupContainer.cs @@ -23,13 +23,16 @@ using Microsoft.Azure.Management.BackupServices.Models; using MBS = Microsoft.Azure.Management.BackupServices; using Microsoft.WindowsAzure.Commands.ServiceManagement.Model; +using Microsoft.Azure.Commands.AzureBackup.Models; +using Microsoft.Azure.Commands.AzureBackup.Helpers; +using Microsoft.Azure.Management.BackupServices; namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets { /// /// Get list of containers /// - [Cmdlet(VerbsLifecycle.Register, "AzureBackupContainer", DefaultParameterSetName = V1VMParameterSet), OutputType(typeof(Guid))] + [Cmdlet(VerbsLifecycle.Register, "AzureBackupContainer", DefaultParameterSetName = V1VMParameterSet), OutputType(typeof(string))] public class RegisterAzureBackupContainer : AzureBackupVaultCmdletBase { internal const string V1VMParameterSet = "V1VM"; @@ -48,10 +51,10 @@ public class RegisterAzureBackupContainer : AzureBackupVaultCmdletBase public override void ExecuteCmdlet() { - base.ExecuteCmdlet(); - ExecutionBlock(() => { + base.ExecuteCmdlet(); + string vmName = String.Empty; string rgName = String.Empty; string ServiceOrRG = String.Empty; @@ -78,7 +81,6 @@ public override void ExecuteCmdlet() Guid jobId = Guid.Empty; bool isDiscoveryNeed = false; - MBS.OperationResponse operationResponse; ContainerInfo container = null; isDiscoveryNeed = IsDiscoveryNeeded(vmName, rgName, out container); @@ -101,11 +103,10 @@ public override void ExecuteCmdlet() List containerNameList = new List(); containerNameList.Add(container.Name); RegisterContainerRequestInput registrationRequest = new RegisterContainerRequestInput(containerNameList, AzureBackupContainerType.IaasVMContainer.ToString()); - operationResponse = AzureBackupClient.Container.RegisterAsync(registrationRequest, GetCustomRequestHeaders(), CmdletCancellationToken).Result; + var operationId = AzureBackupClient.RegisterContainer(registrationRequest); - //TODO fix the OperationResponse to JobID conversion - jobId = operationResponse.OperationId; - WriteObject(jobId); + var operationStatus = GetOperationStatus(operationId); + WriteObject(operationStatus.JobList.FirstOrDefault()); }); } @@ -116,11 +117,10 @@ private void RefreshContainer() bool isDiscoverySuccessful = false; while (isRetyNeeded && retryCount <= 3) { - MBS.OperationResponse opResponse = - AzureBackupClient.Container.RefreshAsync(GetCustomRequestHeaders(), CmdletCancellationToken).Result; + var operationId = AzureBackupClient.RefreshContainers(); //Now wait for the operation to Complete - isRetyNeeded = WaitForDiscoveryToCOmplete(opResponse.OperationId.ToString(), out isDiscoverySuccessful); + isRetyNeeded = WaitForDiscoveryToCOmplete(operationId, out isDiscoverySuccessful); retryCount++; } @@ -131,26 +131,17 @@ private void RefreshContainer() } } - private bool WaitForDiscoveryToCOmplete(string operationId, out bool isDiscoverySuccessful) + private bool WaitForDiscoveryToCOmplete(Guid operationId, out bool isDiscoverySuccessful) { bool isRetryNeeded = false; - 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)); - } + var status = TrackOperation(operationId); isDiscoverySuccessful = true; //If operation fails check if retry is needed or not if (status.OperationResult != AzureBackupOperationResult.Succeeded.ToString()) { isDiscoverySuccessful = false; - WriteDebug(String.Format("DiscoveryOperation failed wit ErrorCOde: {0}", status.ErrorCode)); + WriteDebug(String.Format("Discovery operation failed with ErrorCode: {0}", status.ErrorCode)); if ((status.ErrorCode == AzureBackupOperationErrorCode.DiscoveryInProgress.ToString() || (status.ErrorCode == AzureBackupOperationErrorCode.BMSUserErrorObjectLocked.ToString()))) { @@ -170,12 +161,11 @@ private bool IsDiscoveryNeeded(string vmName, string rgName, out ContainerInfo c queryParams.ContainerTypeField = AzureBackupContainerType.IaasVMContainer.ToString(); queryParams.ContainerStatusField = String.Empty; queryParams.ContainerFriendlyNameField = vmName; - string queryString = GetQueryFileter(queryParams); + string queryString = ContainerHelpers.GetQueryFilter(queryParams); - 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) + var containers = AzureBackupClient.ListContainers(queryString); + WriteDebug(String.Format("Container count returned from service: {0}.", containers.Count())); + if (containers.Count() == 0) { //Container is not discover WriteDebug("Container is not discovered"); @@ -187,7 +177,7 @@ private bool IsDiscoveryNeeded(string vmName, string rgName, out ContainerInfo c { //We can have multiple container with same friendly name. //Look for resourceGroup name in the container unoque name - container = containers.Objects.Where(c => c.ParentContainerFriendlyName.ToLower().Equals(rgName.ToLower())).FirstOrDefault(); + container = containers.Where(c => c.ParentContainerFriendlyName.ToLower().Equals(rgName.ToLower())).FirstOrDefault(); if (container == null) { //Container is not in list of registered container @@ -197,34 +187,5 @@ private bool IsDiscoveryNeeded(string vmName, string rgName, out ContainerInfo c } return isDiscoveryNeed; } - - private string GetQueryFileter(ListContainerQueryParameter queryParams) - { - NameValueCollection collection = new NameValueCollection(); - if (!String.IsNullOrEmpty(queryParams.ContainerTypeField)) - { - collection.Add("ContainerType", queryParams.ContainerTypeField); - } - - if (!String.IsNullOrEmpty(queryParams.ContainerStatusField)) - { - collection.Add("ContainerStatus", queryParams.ContainerStatusField); - } - - if (!String.IsNullOrEmpty(queryParams.ContainerFriendlyNameField)) - { - collection.Add("FriendlyName", queryParams.ContainerFriendlyNameField); - } - - if (collection == null || collection.Count == 0) - { - return String.Empty; - } - - var httpValueCollection = HttpUtility.ParseQueryString(String.Empty); - httpValueCollection.Add(collection); - - return "&" + httpValueCollection.ToString(); - } } } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/UnregisterAzureBackupContainer.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/UnregisterAzureBackupContainer.cs index 33fd22499d9c..e27eb3316b68 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/UnregisterAzureBackupContainer.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/UnregisterAzureBackupContainer.cs @@ -22,13 +22,14 @@ using System.Threading.Tasks; using Microsoft.Azure.Management.BackupServices.Models; using MBS = Microsoft.Azure.Management.BackupServices; +using Microsoft.Azure.Commands.AzureBackup.Models; namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets { /// /// Get list of containers /// - [Cmdlet(VerbsLifecycle.Unregister, "AzureBackupContainer"), OutputType(typeof(Guid))] + [Cmdlet(VerbsLifecycle.Unregister, "AzureBackupContainer"), OutputType(typeof(string))] public class UnregisterAzureBackupContainer : AzureBackupVaultCmdletBase { [Parameter(Position = 2, Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.VirtualMachine, ValueFromPipeline = true)] @@ -37,47 +38,17 @@ public class UnregisterAzureBackupContainer : AzureBackupVaultCmdletBase public override void ExecuteCmdlet() { - base.ExecuteCmdlet(); - ExecutionBlock(() => { + base.ExecuteCmdlet(); + 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 + var operationId = AzureBackupClient.UnRegisterContainer(unregRequest); + var jobId = GetOperationStatus(operationId).JobList.FirstOrDefault(); WriteObject(jobId); }); } - - private string GetQueryFileter(ListContainerQueryParameter queryParams) - { - NameValueCollection collection = new NameValueCollection(); - if (!String.IsNullOrEmpty(queryParams.ContainerTypeField)) - { - collection.Add("ContainerType", queryParams.ContainerTypeField); - } - - if (!String.IsNullOrEmpty(queryParams.ContainerStatusField)) - { - collection.Add("ContainerStatus", queryParams.ContainerStatusField); - } - - if (!String.IsNullOrEmpty(queryParams.ContainerFriendlyNameField)) - { - collection.Add("FriendlyName", queryParams.ContainerFriendlyNameField); - } - - if (collection == null || collection.Count == 0) - { - return String.Empty; - } - - var httpValueCollection = HttpUtility.ParseQueryString(String.Empty); - httpValueCollection.Add(collection); - - return "&" + httpValueCollection.ToString(); - - } } } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/DataSource/Disable-AzureBackupProtection .cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Item/Disable-AzureBackupProtection .cs similarity index 80% rename from src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/DataSource/Disable-AzureBackupProtection .cs rename to src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Item/Disable-AzureBackupProtection .cs index 8cc27e56121a..9917034e6024 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/DataSource/Disable-AzureBackupProtection .cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Item/Disable-AzureBackupProtection .cs @@ -24,12 +24,10 @@ namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets.DataSource { - // ToDo: - // Get Tracking API from Piyush and Get JobResponse /// /// Disable Azure Backup protection /// - [Cmdlet(VerbsLifecycle.Disable, "AzureBackupProtection"), OutputType(typeof(Guid))] + [Cmdlet(VerbsLifecycle.Disable, "AzureBackupProtection"), OutputType(typeof(string))] public class DisableAzureBackupProtection : AzureBackupDSCmdletBase { [Parameter(Position = 1, Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.RemoveProtectionOption)] @@ -47,12 +45,12 @@ public SwitchParameter RemoveRecoveryPoints public string Comments { get; set; } public override void ExecuteCmdlet() - { - base.ExecuteCmdlet(); - + { ExecutionBlock(() => { - WriteVerbose("Making client call"); + base.ExecuteCmdlet(); + + WriteDebug("Making client call"); RemoveProtectionRequestInput input = new RemoveProtectionRequestInput() { RemoveProtectionOption = this.DeleteBackupData ? RemoveProtectionOptions.DeleteBackupData.ToString() : RemoveProtectionOptions.RetainBackupData.ToString(), @@ -60,15 +58,15 @@ public override void ExecuteCmdlet() Comments = this.Comments, }; - WriteVerbose("RemoveProtectionOption is = " + input.RemoveProtectionOption); - Guid jobId = Guid.Empty; - var disbaleAzureBackupProtection = AzureBackupClient.DataSource.DisableProtectionAsync(GetCustomRequestHeaders(), Item.ContainerUniqueName, Item.Type, Item.DataSourceId, input, CmdletCancellationToken).Result; + WriteDebug("RemoveProtectionOption is = " + input.RemoveProtectionOption); + var operationId = AzureBackupClient.DisableProtection(Item.ContainerUniqueName, Item.Type, Item.DataSourceId, input); WriteVerbose("Received disable azure backup protection response"); - jobId = disbaleAzureBackupProtection.OperationId; - this.WriteObject(jobId); + var operationStatus = GetOperationStatus(operationId); + this.WriteObject(operationStatus.JobList.FirstOrDefault()); }); } + public enum RemoveProtectionOptions { [EnumMember] diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/DataSource/Enable-AzureBackupProtection .cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Item/Enable-AzureBackupProtection .cs similarity index 65% rename from src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/DataSource/Enable-AzureBackupProtection .cs rename to src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Item/Enable-AzureBackupProtection .cs index 5f5c88f26377..2b5620f814e3 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/DataSource/Enable-AzureBackupProtection .cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Item/Enable-AzureBackupProtection .cs @@ -21,28 +21,27 @@ using MBS = Microsoft.Azure.Management.BackupServices; using System.Runtime.Serialization; using Microsoft.Azure.Management.BackupServices; +using Microsoft.Azure.Commands.AzureBackup.Models; namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets { - // ToDo: - // Get Tracking API from Piyush and Get JobResponse - /// /// Enable Azure Backup protection /// - [Cmdlet(VerbsLifecycle.Enable, "AzureBackupProtection"), OutputType(typeof(Guid))] + [Cmdlet(VerbsLifecycle.Enable, "AzureBackupProtection"), OutputType(typeof(string))] public class EnableAzureBackupProtection : AzureBackupItemCmdletBase { [Parameter(Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.PolicyName)] [ValidateNotNullOrEmpty] public AzureBackupProtectionPolicy Policy { get; set; } + public override void ExecuteCmdlet() { - base.ExecuteCmdlet(); - ExecutionBlock(() => { - WriteVerbose("Making client call"); + base.ExecuteCmdlet(); + + WriteDebug("Making client call"); SetProtectionRequestInput input = new SetProtectionRequestInput(); input.PolicyId = Policy.InstanceId; if (Item.GetType() == typeof(AzureBackupItem)) @@ -52,10 +51,10 @@ public override void ExecuteCmdlet() } else if (Item.GetType() == typeof(AzureBackupContainer)) { - WriteVerbose("Input is container Type = "+Item.GetType()); - if((Item as AzureBackupContainer).ContainerType == ContainerType.IaasVMContainer.ToString()) + WriteDebug("Input is container Type = " + Item.GetType()); + if ((Item as AzureBackupContainer).ContainerType == AzureBackupContainerType.IaasVMContainer.ToString()) { - WriteVerbose("container Type = " + (Item as AzureBackupContainer).ContainerType); + WriteDebug("container Type = " + (Item as AzureBackupContainer).ContainerType); input.ProtectableObjectType = DataSourceType.VM.ToString(); input.ProtectableObjects.Add((Item as AzureBackupContainer).ContainerUniqueName); } @@ -69,36 +68,12 @@ public override void ExecuteCmdlet() throw new Exception("Uknown item type"); } - Guid jobId = Guid.Empty; - var enableAzureBackupProtection = AzureBackupClient.DataSource.EnableProtectionAsync(GetCustomRequestHeaders(), input, CmdletCancellationToken).Result; + var operationId = AzureBackupClient.EnableProtection(input); + WriteDebug("Received enable azure backup protection response"); - WriteVerbose("Received enable azure backup protection response"); - jobId = enableAzureBackupProtection.OperationId; - this.WriteObject(jobId); + var operationStatus = GetOperationStatus(operationId); + this.WriteObject(operationStatus.JobList.FirstOrDefault()); }); } - - public enum ContainerType - { - [EnumMember] - Invalid = 0, - - [EnumMember] - Unknown, - - // used by fabric adapter to populate discovered VMs - [EnumMember] - IaasVMContainer, - - // used by fabric adapter to populate discovered services - // VMs are child containers of services they belong to - [EnumMember] - IaasVMServiceContainer - } - public enum DataSourceType - { - [EnumMember] - VM - } } } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/DataSource/GetAzureBackupItem.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Item/GetAzureBackupItem.cs similarity index 81% rename from src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/DataSource/GetAzureBackupItem.cs rename to src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Item/GetAzureBackupItem.cs index 97ec79cbefe9..178592fd743e 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/DataSource/GetAzureBackupItem.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Item/GetAzureBackupItem.cs @@ -21,6 +21,7 @@ using System.Runtime.Serialization; using System.Collections.Specialized; using Microsoft.Azure.Common.OData; +using Microsoft.Azure.Commands.AzureBackup.Models; namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets { @@ -44,15 +45,14 @@ public class GetAzureBackupItem : AzureBackupContainerCmdletBase public override void ExecuteCmdlet() { - base.ExecuteCmdlet(); - ExecutionBlock(() => { + base.ExecuteCmdlet(); + List azureBackupDatasourceObjects = null; List azureBackupPOObjects = null; - DataSourceListResponse azureBackupDatasourceListResponse = null; - ProtectableObjectListResponse azureBackupPOListResponse = null; - WriteVerbose("Making client call"); + + WriteDebug("Making client call"); DataSourceQueryParameter DSQueryParam = new DataSourceQueryParameter() { ProtectionStatus = this.ProtectionStatus, @@ -66,16 +66,16 @@ public override void ExecuteCmdlet() Type = this.Type }; - azureBackupDatasourceListResponse = AzureBackupClient.DataSource.ListAsync(DSQueryParam, GetCustomRequestHeaders(), CmdletCancellationToken).Result; - azureBackupDatasourceObjects = azureBackupDatasourceListResponse.DataSources.Objects.Where(x => x.ContainerName.Equals(Container.ContainerUniqueName, System.StringComparison.InvariantCultureIgnoreCase)).ToList(); + var azureBackupDatasourceListResponse = AzureBackupClient.ListDataSources(DSQueryParam); + azureBackupDatasourceObjects = azureBackupDatasourceListResponse.Where(x => x.ContainerName.Equals(Container.ContainerUniqueName, System.StringComparison.InvariantCultureIgnoreCase)).ToList(); if (this.Status == null) { - azureBackupPOListResponse = AzureBackupClient.ProtectableObject.ListAsync(POQueryParam, GetCustomRequestHeaders(), CmdletCancellationToken).Result; - azureBackupPOObjects = azureBackupPOListResponse.ProtectableObject.Objects.Where(x => x.ContainerName.Equals(Container.ContainerUniqueName, System.StringComparison.InvariantCultureIgnoreCase)).ToList(); + var azureBackupPOListResponse = AzureBackupClient.ListProtectableObjects(POQueryParam); + azureBackupPOObjects = azureBackupPOListResponse.Where(x => x.ContainerName.Equals(Container.ContainerUniqueName, System.StringComparison.InvariantCultureIgnoreCase)).ToList(); } - WriteVerbose("Received azure backup item response"); + WriteDebug("Received azure backup item response"); WriteAzureBackupItem(azureBackupDatasourceObjects, azureBackupPOObjects, Container); }); } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Jobs/GetAzureBackupJob.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Jobs/GetAzureBackupJob.cs index ea347aa6e9d2..fef16167257a 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Jobs/GetAzureBackupJob.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Jobs/GetAzureBackupJob.cs @@ -20,6 +20,7 @@ using System.Web; using Microsoft.Azure.Management.BackupServices; using Mgmt = Microsoft.Azure.Management.BackupServices.Models; +using Microsoft.Azure.Commands.AzureBackup.Models; namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets { @@ -59,15 +60,16 @@ public class GetAzureBackupJob : AzureBackupVaultCmdletBase public override void ExecuteCmdlet() { - if (Job != null) + ExecutionBlock(() => { - InitializeAzureBackupCmdlet(Job.ResourceGroupName, Job.ResourceName, Job.Location); - } + if (Job != null) + { + InitializeAzureBackupCmdlet(Job.ResourceGroupName, Job.ResourceName); + } - base.ExecuteCmdlet(); + // TODO: BUG: This will overwrite the above initialization + base.ExecuteCmdlet(); - ExecutionBlock(() => - { //if (Job != null && JobId != null) //{ // throw new Exception("Please use either JobID filter or Job filter but not both."); @@ -135,12 +137,13 @@ public override void ExecuteCmdlet() JobId = JobId }; - Mgmt.JobListResponse jobsList = AzureBackupClient.Job.ListAsync(queryParams, GetCustomRequestHeaders(), CmdletCancellationToken).Result; + var jobsList = AzureBackupClient.ListJobs(queryParams); List retrievedJobs = new List(); - foreach (Mgmt.Job serviceJob in jobsList.Jobs) + foreach (Mgmt.Job serviceJob in jobsList) { - retrievedJobs.Add(new AzureBackupJob(serviceJob, ResourceGroupName, ResourceName, Location)); + // TODO: Initialize vault from Job object when vault is made optional + retrievedJobs.Add(new AzureBackupJob(vault, serviceJob)); } WriteDebug("Successfully retrieved all jobs. Number of jobs retrieved: " + retrievedJobs.Count()); diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/GetAzureBackupProtectionPolicy.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/GetAzureBackupProtectionPolicy.cs index 513dc2c16660..931504977024 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/GetAzureBackupProtectionPolicy.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/GetAzureBackupProtectionPolicy.cs @@ -18,6 +18,8 @@ using System.Xml; using System.Linq; using Microsoft.Azure.Management.BackupServices.Models; +using Microsoft.Azure.Commands.AzureBackup.Models; +using Microsoft.Azure.Commands.AzureBackup.Helpers; namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets { @@ -33,28 +35,19 @@ public class GetAzureBackupProtectionPolicy : AzureBackupVaultCmdletBase public override void ExecuteCmdlet() { - base.ExecuteCmdlet(); - ExecutionBlock(() => { - WriteDebug("Making client call"); - - IEnumerable policyObjects = null; + base.ExecuteCmdlet(); + if (Name != null) { - AzureBackupProtectionPolicy policyInfo = azureBackupCmdletHelper.GetAzureBackupProtectionPolicyByName(Name, ResourceGroupName, ResourceName, Location); - WriteDebug("Converting response"); - WriteObject(policyInfo); + var policyInfo = AzureBackupClient.GetProtectionPolicyByName(Name); + WriteObject(ProtectionPolicyHelpers.GetCmdletPolicy(vault, policyInfo)); } else { - var policyListResponse = AzureBackupClient.ProtectionPolicy.ListAsync(GetCustomRequestHeaders(), CmdletCancellationToken).Result; - - WriteDebug("Received policy response"); - policyObjects = policyListResponse.ProtectionPolicies.Objects; - - WriteDebug("Converting response"); - azureBackupCmdletHelper.WriteAzureBackupProtectionPolicy(ResourceGroupName, ResourceName, Location, policyObjects); + var policyObjects = AzureBackupClient.ListProtectionPolicies(); + WriteObject(ProtectionPolicyHelpers.GetCmdletPolicies(vault, policyObjects)); } }); } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/NewAzureBackupProtectionPolicy.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/NewAzureBackupProtectionPolicy.cs index b0c6396f5e35..924c5b181ce8 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/NewAzureBackupProtectionPolicy.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/NewAzureBackupProtectionPolicy.cs @@ -18,6 +18,8 @@ using System.Xml; using System.Linq; using Microsoft.Azure.Management.BackupServices.Models; +using Microsoft.Azure.Commands.AzureBackup.Helpers; +using Microsoft.Azure.Commands.AzureBackup.Models; namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets { @@ -67,15 +69,14 @@ public class NewAzureBackupProtectionPolicy : AzureBackupVaultCmdletBase public override void ExecuteCmdlet() { - base.ExecuteCmdlet(); - ExecutionBlock(() => { + base.ExecuteCmdlet(); WriteDebug("Making client call"); - var ScheduleType = GetScheduelType(ScheduleRunDays); + var ScheduleType = GetScheduleType(ScheduleRunDays); - var backupSchedule = azureBackupCmdletHelper.FillBackupSchedule(BackupType, ScheduleType, ScheduleRunTimes, + var backupSchedule = ProtectionPolicyHelpers.FillBackupSchedule(BackupType, ScheduleType, ScheduleRunTimes, RetentionType, RetentionDuration, ScheduleRunDays); var addProtectionPolicyRequest = new AddProtectionPolicyRequest(); @@ -83,16 +84,15 @@ public override void ExecuteCmdlet() addProtectionPolicyRequest.Schedule = backupSchedule; addProtectionPolicyRequest.WorkloadType = Enum.Parse(typeof(WorkloadType), this.WorkloadType, true).ToString(); - var operationId = AzureBackupClient.ProtectionPolicy.AddAsync(addProtectionPolicyRequest, GetCustomRequestHeaders(), CmdletCancellationToken).Result; + AzureBackupClient.AddProtectionPolicy(addProtectionPolicyRequest); WriteDebug("Protection policy created successfully"); - AzureBackupProtectionPolicy policyInfo = azureBackupCmdletHelper.GetAzureBackupProtectionPolicyByName(Name, ResourceGroupName, ResourceName, Location); - WriteDebug("Converting response"); - WriteObject(policyInfo); + var policyInfo = AzureBackupClient.GetProtectionPolicyByName(Name); + WriteObject(ProtectionPolicyHelpers.GetCmdletPolicy(vault, policyInfo)); }); } - private string GetScheduelType(string[] ScheduleRunDays) + private string GetScheduleType(string[] ScheduleRunDays) { WriteDebug("ParameterSetName = " + this.ParameterSetName.ToString()); diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/RemoveAzureBackupProtectionPolicy.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/RemoveAzureBackupProtectionPolicy.cs index b0fd31d5fe59..8b907ed2381e 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/RemoveAzureBackupProtectionPolicy.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/RemoveAzureBackupProtectionPolicy.cs @@ -18,6 +18,7 @@ using System.Xml; using System.Linq; using Microsoft.Azure.Management.BackupServices.Models; +using Microsoft.Azure.Commands.AzureBackup.Models; namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets { @@ -29,20 +30,16 @@ public class RemoveAzureBackupProtectionPolicy : AzureBackupPolicyCmdletBase { public override void ExecuteCmdlet() { - base.ExecuteCmdlet(); - ExecutionBlock(() => { + base.ExecuteCmdlet(); + WriteDebug("Making client call"); - AzureBackupProtectionPolicy policyInfo = azureBackupCmdletHelper.GetAzureBackupProtectionPolicyByName(ProtectionPolicy.Name, - ProtectionPolicy.ResourceGroupName, ProtectionPolicy.ResourceName, ProtectionPolicy.Location); - + var policyInfo = AzureBackupClient.GetProtectionPolicyByName(ProtectionPolicy.Name); if (policyInfo != null) { - var policyRemoveResponse = AzureBackupClient.ProtectionPolicy.DeleteAsync(policyInfo.InstanceId, GetCustomRequestHeaders(), CmdletCancellationToken).Result; - - WriteDebug("Converting response"); + AzureBackupClient.DeleteProtectionPolicy(policyInfo.InstanceId); WriteVerbose("Successfully deleted policy"); } else diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/SetAzureBackupProtectionPolicy.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/SetAzureBackupProtectionPolicy.cs index 4f772724e10b..7a07545994d0 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/SetAzureBackupProtectionPolicy.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/SetAzureBackupProtectionPolicy.cs @@ -18,6 +18,9 @@ using System.Xml; using System.Linq; using Microsoft.Azure.Management.BackupServices.Models; +using Microsoft.Azure.Commands.AzureBackup.Helpers; +using Microsoft.Azure.Commands.AzureBackup.Models; +using CmdletModel = Microsoft.Azure.Commands.AzureBackup.Models; namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets { @@ -61,18 +64,20 @@ public class SetAzureBackupProtectionPolicy : AzureBackupPolicyCmdletBase public override void ExecuteCmdlet() { - base.ExecuteCmdlet(); - ExecutionBlock(() => { + base.ExecuteCmdlet(); WriteDebug("Making client call"); - AzureBackupProtectionPolicy policyInfo = azureBackupCmdletHelper.GetAzureBackupProtectionPolicyByName(ProtectionPolicy.Name, - ProtectionPolicy.ResourceGroupName, ProtectionPolicy.ResourceName, ProtectionPolicy.Location); - + var response = AzureBackupClient.GetProtectionPolicyByName(ProtectionPolicy.Name); + var vault = new CmdletModel.AzureBackupVault(ProtectionPolicy.ResourceGroupName, ProtectionPolicy.Name, ProtectionPolicy.Location); + + var policyInfo = ProtectionPolicyHelpers.GetCmdletPolicy(vault, response); + + // TODO: Make the below function work with AzureBackupProtectionPolicy FillRemainingValuesForSetPolicyRequest(policyInfo); - var backupSchedule = azureBackupCmdletHelper.FillBackupSchedule(BackupType, policyInfo.ScheduleType, ScheduleRunTimes, + var backupSchedule = ProtectionPolicyHelpers.FillBackupSchedule(BackupType, policyInfo.ScheduleType, ScheduleRunTimes, RetentionType, RetentionDuration, policyInfo.ScheduleRunDays.ToArray()); NewName = (string.IsNullOrEmpty(NewName) ? policyInfo.Name : NewName); @@ -82,22 +87,23 @@ public override void ExecuteCmdlet() if (policyInfo != null) { - var operationId = AzureBackupClient.ProtectionPolicy.UpdateAsync(policyInfo.InstanceId, updateProtectionPolicyRequest, GetCustomRequestHeaders(), CmdletCancellationToken).Result; + // TODO: Add Async handling + // BUG: Update API in hydra doesn't return OperationResponse rather than AzureOperationResponse + AzureBackupClient.UpdateProtectionPolicy(policyInfo.InstanceId, updateProtectionPolicyRequest); } else { - var exception = new Exception("Protection Policy Not Found with Name" + ProtectionPolicy.Name); - var errorRecord = new ErrorRecord(exception, string.Empty, ErrorCategory.InvalidData, null); - WriteError(errorRecord); - return; + // TODO: Validate proper error message is delivered to user. + throw new ArgumentException(String.Format("Protection policy {0} not found", ProtectionPolicy.Name)); } WriteDebug("Protection Policy successfully updated"); - AzureBackupProtectionPolicy updatedPolicyInfo = azureBackupCmdletHelper.GetAzureBackupProtectionPolicyByName(NewName, - ProtectionPolicy.ResourceGroupName, ProtectionPolicy.ResourceName, ProtectionPolicy.Location); + var updatedPolicy = AzureBackupClient.GetProtectionPolicyByName(ProtectionPolicy.Name); + WriteDebug("Converting response"); - WriteObject(updatedPolicyInfo); + + WriteObject(ProtectionPolicyHelpers.GetCmdletPolicy(vault, updatedPolicy)); }); } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/RecoveryPoint/GetAzureBackupRecoveryPoint.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/RecoveryPoint/GetAzureBackupRecoveryPoint.cs index e75483cf1e60..e9b48b9c8ac4 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/RecoveryPoint/GetAzureBackupRecoveryPoint.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/RecoveryPoint/GetAzureBackupRecoveryPoint.cs @@ -18,6 +18,7 @@ using System.Xml; using System.Linq; using Microsoft.Azure.Management.BackupServices.Models; +using Microsoft.Azure.Commands.AzureBackup.Models; namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets { @@ -37,37 +38,32 @@ public override void ExecuteCmdlet() ExecutionBlock(() => { - WriteVerbose("Making client call"); + WriteDebug("Making client call"); - RecoveryPointListResponse recoveryPointListResponse = - AzureBackupClient.RecoveryPoint.ListAsync(GetCustomRequestHeaders(), - Item.ContainerUniqueName, - Item.Type, - Item.DataSourceId, - CmdletCancellationToken).Result; + var recoveryPointListResponse = AzureBackupClient.ListRecoveryPoints(Item.ContainerUniqueName, Item.Type, Item.DataSourceId); - WriteVerbose("Received recovery point response"); + WriteDebug("Received recovery point response"); IEnumerable recoveryPointObjects = null; if (Id != null) { RecoveryPointInfo recoveryPointObject = null; - recoveryPointObjects = recoveryPointListResponse.RecoveryPoints.Objects.Where(x => x.InstanceId.Equals(Id, System.StringComparison.InvariantCultureIgnoreCase)); + recoveryPointObjects = recoveryPointListResponse.Where(x => x.InstanceId.Equals(Id, System.StringComparison.InvariantCultureIgnoreCase)); if (recoveryPointObjects != null && recoveryPointObjects.Any()) { - WriteVerbose("Converting response"); + WriteDebug("Converting response"); recoveryPointObject = recoveryPointObjects.FirstOrDefault(); WriteAzureBackupRecoveryPoint(recoveryPointObject, Item); } else { - WriteVerbose(string.Format("{0}{1}", "No recovery point exist with Id := ", Id)); + WriteDebug(string.Format("{0}{1}", "No recovery point exist with Id := ", Id)); } } else { - WriteVerbose("Converting response"); - recoveryPointObjects = recoveryPointListResponse.RecoveryPoints.Objects.OrderByDescending(x => x.RecoveryPointTime); + WriteDebug("Converting response"); + recoveryPointObjects = recoveryPointListResponse.OrderByDescending(x => x.RecoveryPointTime); WriteAzureBackupRecoveryPoint(recoveryPointObjects, Item); } }); diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/GetAzureBackupVault.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/GetAzureBackupVault.cs new file mode 100644 index 000000000000..1faf8e17f8bd --- /dev/null +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/GetAzureBackupVault.cs @@ -0,0 +1,92 @@ +// ---------------------------------------------------------------------------------- +// +// Copyright Microsoft Corporation +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// ---------------------------------------------------------------------------------- + +using Microsoft.Azure.Commands.AzureBackup.Helpers; +using Microsoft.Azure.Management.BackupServices.Models; +using Newtonsoft.Json; +using System; +using System.Collections; +using System.Collections.Generic; +using System.Globalization; +using System.IO; +using System.Linq; +using System.Management.Automation; +using System.Net; +using System.Runtime.Serialization; +using System.Security.Cryptography.X509Certificates; +using System.Text; +using System.Threading.Tasks; +using System.Xml; + +namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets +{ + /// + /// API to get backup vaults in the subscription + /// + [Cmdlet(VerbsCommon.Get, "AzureBackupVault"), OutputType(typeof(AzureBackupVault), typeof(List))] + public class GetAzureBackupVault : AzureBackupCmdletBase + { + [Parameter(Position = 0, Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.ResourceGroupName)] + [ValidateNotNullOrEmpty] + public string ResourceGroupName { get; set; } + + [Parameter(Position = 1, Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.ResourceName)] + [ValidateNotNullOrEmpty] + public string Name { get; set; } + + public override void ExecuteCmdlet() + { + ExecutionBlock(() => + { + base.ExecuteCmdlet(); + InitializeAzureBackupCmdlet(String.Empty, String.Empty); + + if (ResourceGroupName != null && Name != null) + { + var backupVault = AzureBackupClient.GetVault(ResourceGroupName, Name); + WriteObject(VaultHelpers.GetCmdletVault(backupVault, AzureBackupClient.GetStorageTypeDetails(VaultHelpers.GetResourceGroup(backupVault.Id), backupVault.Name))); + } + else if (ResourceGroupName != null) + { + var backupVaults = AzureBackupClient.GetVaultsInResourceGroup(ResourceGroupName); + WriteObject(GetCmdletVaults(backupVaults), true); + } + else + { + var backupVaults = AzureBackupClient.GetVaults(); + + if (Name != null) + { + backupVaults = backupVaults.Where(x => x.Name.Equals(Name, StringComparison.InvariantCultureIgnoreCase)); + } + WriteObject(GetCmdletVaults(backupVaults), true); + } + }); + } + + private IEnumerable GetCmdletVaults(IEnumerable backupVaults) + { + List resultList = new List(); + if (backupVaults != null) + { + foreach (var backupVault in backupVaults) + { + resultList.Add(VaultHelpers.GetCmdletVault(backupVault, AzureBackupClient.GetStorageTypeDetails(VaultHelpers.GetResourceGroup(backupVault.Id), backupVault.Name))); + } + } + + return resultList; + } + } +} \ No newline at end of file diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/NewAzureBackupVault.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/NewAzureBackupVault.cs new file mode 100644 index 000000000000..bc522f4cfdf3 --- /dev/null +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/NewAzureBackupVault.cs @@ -0,0 +1,91 @@ +// ---------------------------------------------------------------------------------- +// +// Copyright Microsoft Corporation +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// ---------------------------------------------------------------------------------- + +using Microsoft.Azure.Commands.AzureBackup.Helpers; +using Microsoft.Azure.Commands.AzureBackup.Models; +using Microsoft.Azure.Management.BackupServices.Models; +using Newtonsoft.Json; +using System; +using System.Collections; +using System.Collections.Generic; +using System.Globalization; +using System.IO; +using System.Linq; +using System.Management.Automation; +using System.Net; +using System.Runtime.Serialization; +using System.Security.Cryptography.X509Certificates; +using System.Text; +using System.Threading.Tasks; +using System.Xml; +using CmdletModel = Microsoft.Azure.Commands.AzureBackup.Models; + +namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets +{ + /// + /// API to download the azure backup vault's credentials. + /// + [Cmdlet(VerbsCommon.New, "AzureBackupVault"), OutputType(typeof(CmdletModel.AzureBackupVault))] + public class NewAzureBackupVault : AzureBackupCmdletBase + { + [Parameter(Position = 0, Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.ResourceGroupName)] + [ValidateNotNullOrEmpty] + public string ResourceGroupName { get; set; } + + [Parameter(Position = 1, Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.ResourceName)] + [ValidateNotNullOrEmpty] + public string Name { get; set; } + + [Parameter(Position = 2, Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.Location)] + [ValidateNotNullOrEmpty] + public string Region { get; set; } + + [Parameter(Position = 3, Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.StorageType)] + public AzureBackupVaultStorageType? Storage { get; set; } + + [Parameter(Position = 4, Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.Sku)] + [ValidateSet("standard")] + public string Sku { get; set; } + + // TODO: Add support for tags + //[Alias("Tags")] + //[Parameter(Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.ResourceTags)] + //public Hashtable[] Tag { get; set; } + + private string DefaultSKU = "standard"; + + public override void ExecuteCmdlet() + { + ExecutionBlock(() => + { + base.ExecuteCmdlet(); + InitializeAzureBackupCmdlet(ResourceGroupName, Name); + + string skuParam = Sku ?? DefaultSKU; + WriteDebug(String.Format("Creating backup vault with ResourceGroupName: {0}, ResourceName: {1}", ResourceGroupName, Name)); + + var createdVault = AzureBackupClient.CreateOrUpdateAzureBackupVault(ResourceGroupName, Name, Region, skuParam); + + if (Storage.HasValue) + { + WriteDebug(String.Format("Setting storage type for the resource, Type: {0}", Storage)); + + AzureBackupClient.UpdateStorageType(Storage.ToString()); + } + + WriteObject(VaultHelpers.GetCmdletVault(createdVault, AzureBackupClient.GetStorageTypeDetails(VaultHelpers.GetResourceGroup(createdVault.Id), createdVault.Name))); + }); + } + } +} diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/RemoveAzureBackupVault.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/RemoveAzureBackupVault.cs new file mode 100644 index 000000000000..f79d44b8db04 --- /dev/null +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/RemoveAzureBackupVault.cs @@ -0,0 +1,50 @@ +// ---------------------------------------------------------------------------------- +// +// Copyright Microsoft Corporation +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// ---------------------------------------------------------------------------------- + +using Microsoft.Azure.Commands.AzureBackup.Helpers; +using Microsoft.Azure.Management.BackupServices.Models; +using Newtonsoft.Json; +using System; +using System.Collections; +using System.Collections.Generic; +using System.Globalization; +using System.IO; +using System.Linq; +using System.Management.Automation; +using System.Net; +using System.Runtime.Serialization; +using System.Security.Cryptography.X509Certificates; +using System.Text; +using System.Threading.Tasks; +using System.Xml; + +namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets +{ + /// + /// API to download the azure backup vault's credentials. + /// + [Cmdlet(VerbsCommon.Remove, "AzureBackupVault")] + public class RemoveAzureBackupVault : AzureBackupVaultCmdletBase + { + public override void ExecuteCmdlet() + { + ExecutionBlock(() => + { + base.ExecuteCmdlet(); + + AzureBackupClient.DeleteVault(vault.ResourceGroupName, vault.Name); + }); + } + } +} diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/SetAzureBackupVault.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/SetAzureBackupVault.cs new file mode 100644 index 000000000000..b3d0f735f457 --- /dev/null +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/SetAzureBackupVault.cs @@ -0,0 +1,76 @@ +// ---------------------------------------------------------------------------------- +// +// Copyright Microsoft Corporation +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// ---------------------------------------------------------------------------------- + +using Microsoft.Azure.Commands.AzureBackup.Helpers; +using Microsoft.Azure.Management.BackupServices.Models; +using Newtonsoft.Json; +using System; +using System.Collections; +using System.Collections.Generic; +using System.Globalization; +using System.IO; +using System.Linq; +using System.Management.Automation; +using System.Net; +using System.Runtime.Serialization; +using System.Security.Cryptography.X509Certificates; +using System.Text; +using System.Threading.Tasks; +using System.Xml; + +namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets +{ + /// + /// API to download the azure backup vault's credentials. + /// + [Cmdlet(VerbsCommon.Set, "AzureBackupVault"), OutputType(typeof(AzureBackupVault))] + public class SetAzureBackupVault : AzureBackupVaultCmdletBase + { + [Parameter(Position = 1, Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.StorageType)] + public AzureBackupVaultStorageType? Storage { get; set; } + + [Parameter(Position = 2, Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.Sku)] + [ValidateSet("standard")] + public string Sku { get; set; } + + // TODO: Add support for tags + //[Alias("Tags")] + //[Parameter(Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.ResourceTags)] + //public Hashtable[] Tag { get; set; } + + public override void ExecuteCmdlet() + { + base.ExecuteCmdlet(); + + ExecutionBlock(() => + { + if (Sku != null) + { + WriteDebug(String.Format("Updating Sku, Sku: {0}", Sku)); + AzureBackupClient.CreateOrUpdateAzureBackupVault(vault.ResourceGroupName, vault.Name, vault.Region, Sku); + } + + if (Storage.HasValue) + { + WriteDebug(String.Format("Setting storage type for the resource, Type: {0}", Storage)); + + AzureBackupClient.UpdateStorageType(Storage.ToString()); + } + + var backupVault = AzureBackupClient.GetVault(vault.ResourceGroupName, vault.Name); + WriteObject(VaultHelpers.GetCmdletVault(backupVault, AzureBackupClient.GetStorageTypeDetails(vault.ResourceGroupName, vault.Name))); + }); + } + } +} diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/SetAzureBackupVaultStorageType.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/SetAzureBackupVaultStorageType.cs index cfb9d90fadf4..5d49b511b95f 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/SetAzureBackupVaultStorageType.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/SetAzureBackupVaultStorageType.cs @@ -31,28 +31,17 @@ public class SetAzureBackupVaultStorageType : AzureBackupVaultCmdletBase public override void ExecuteCmdlet() { - base.ExecuteCmdlet(); - ExecutionBlock(() => { + base.ExecuteCmdlet(); + if (Type == 0) { - throw new ArgumentException("Please provide a vaild storage type."); + throw new ArgumentException("Invalid storage type."); } - WriteVerbose("Updating the storage type."); - - UpdateVaultStorageTypeRequest updateVaultStorageTypeRequest = new UpdateVaultStorageTypeRequest() - { - StorageTypeProperties = new StorageTypeProperties() - { - StorageModelType = Type.ToString(), - }, - }; - - AzureBackupClient.Vault.UpdateStorageTypeAsync(updateVaultStorageTypeRequest, GetCustomRequestHeaders(), CmdletCancellationToken).Wait(); - - WriteVerbose("Update successful."); + WriteVerbose(String.Format("Updating the storage type. Type:{0}", Type)); + AzureBackupClient.UpdateStorageType(Type.ToString()); }); } } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/VaultCredentials/GetAzureBackupVaultCredentials.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/VaultCredentials/GetAzureBackupVaultCredentials.cs new file mode 100644 index 000000000000..7911035d676e --- /dev/null +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/VaultCredentials/GetAzureBackupVaultCredentials.cs @@ -0,0 +1,209 @@ +// ---------------------------------------------------------------------------------- +// +// Copyright Microsoft Corporation +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// ---------------------------------------------------------------------------------- + +using Microsoft.Azure.Commands.AzureBackup.Library; +using Microsoft.Azure.Commands.AzureBackup.Models; +using Microsoft.Azure.Management.BackupServices.Models; +using Newtonsoft.Json; +using System; +using System.Collections.Generic; +using System.Globalization; +using System.IO; +using System.Linq; +using System.Management.Automation; +using System.Net; +using System.Runtime.Serialization; +using System.Security.Cryptography.X509Certificates; +using System.Text; +using System.Threading.Tasks; +using System.Xml; + +namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets +{ + /// + /// API to download the azure backup vault's credentials. + /// + [Cmdlet(VerbsCommon.Get, "AzureBackupVaultCredentials"), OutputType(typeof(string))] + public class GetAzureBackupVaultCredentials : AzureBackupVaultCmdletBase + { + [Parameter(Position = 2, Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.TargetLocation)] + [ValidateNotNullOrEmpty] + public string TargetLocation { get; set; } + + private const int VaultCertificateExpiryInHoursForBackup = 48; + + public override void ExecuteCmdlet() + { + ExecutionBlock(() => + { + base.ExecuteCmdlet(); + + if (!Directory.Exists(TargetLocation)) + { + throw new ArgumentException("The target location provided is not a directory. Please provide a directory."); + } + + string subscriptionId = Profile.DefaultSubscription.Id.ToString(); + string resourceType = "resourceType"; + string displayName = subscriptionId + "_" + vault.ResourceGroupName + "_" + vault.Name; + + WriteVerbose(string.Format(CultureInfo.InvariantCulture, + "Executing cmdlet with SubscriptionId = {0}, ResourceGroupName = {1}, ResourceName = {2}, TargetLocation = {3}", + subscriptionId, vault.ResourceGroupName, vault.Name, TargetLocation)); + + X509Certificate2 cert = CertUtils.CreateSelfSignedCert(CertUtils.DefaultIssuer, + CertUtils.GenerateCertFriendlyName(subscriptionId, vault.Name), + CertUtils.DefaultPassword, + DateTime.UtcNow.AddMinutes(-10), + DateTime.UtcNow.AddHours(this.GetCertificateExpiryInHours())); + + AcsNamespace acsNamespace = new AcsNamespace(); + string channelIntegrityKey = string.Empty; + try + { + // Upload cert into ID Mgmt + WriteVerbose(string.Format(CultureInfo.InvariantCulture, "RecoveryService - Going to upload the certificate")); + acsNamespace = UploadCert(cert, subscriptionId, vault.Name, resourceType, vault.ResourceGroupName); + WriteVerbose(string.Format(CultureInfo.InvariantCulture, "RecoveryService - Successfully uploaded the certificate")); + } + catch (Exception exception) + { + throw exception; + } + + // generate vault credentials + string vaultCredsFileContent = GenerateVaultCreds(cert, subscriptionId, resourceType, acsNamespace); + + // prepare for download + string fileName = string.Format("{0}_{1}.VaultCredentials", displayName, DateTime.UtcNow.ToString("yyyy-dd-M--HH-mm-ss")); + string directoryPath = Path.GetDirectoryName(TargetLocation); + if (directoryPath == null) + { + // TargetLocation is a root path + directoryPath = TargetLocation; + } + string filePath = Path.Combine(directoryPath, fileName); + WriteVerbose(string.Format("Saving Vault Credentials to file : {0}", filePath)); + + File.WriteAllBytes(filePath, Encoding.UTF8.GetBytes(vaultCredsFileContent)); + + // Output filename back to user + WriteObject(fileName); + }); + } + + /// + /// Method to return the Certificate Expiry time in hours + /// + /// + /// + private int GetCertificateExpiryInHours(string resourceType = null) + { + return VaultCertificateExpiryInHoursForBackup; + } + + /// + /// Upload certificate + /// + /// management certificate + /// subscription Id + /// resource name + /// resource type + /// resource group name + /// acs namespace of the uploaded cert + private AcsNamespace UploadCert(X509Certificate2 cert, string subscriptionId, string resourceName, string resourceType, string resourceGroupName) + { + string rawCertDataString = Convert.ToBase64String(cert.RawData); + VaultCredUploadCertRequest vaultCredUploadCertRequest = new VaultCredUploadCertRequest() + { + RawCertificateData = new RawCertificateData() + { + Certificate = rawCertDataString, + }, + }; + + var vaultCredUploadCertResponse = AzureBackupClient.UploadCertificate("IdMgmtInternalCert", vaultCredUploadCertRequest); + + return new AcsNamespace(vaultCredUploadCertResponse.ResourceCertificateAndACSDetails.GlobalAcsHostName, + vaultCredUploadCertResponse.ResourceCertificateAndACSDetails.GlobalAcsNamespace, + vaultCredUploadCertResponse.ResourceCertificateAndACSDetails.GlobalAcsRPRealm); + } + + /// + /// Generates vault creds file + /// + /// management certificate + /// subscription Id + /// resource type + /// display name + /// acs namespace + /// xml file in string format + private string GenerateVaultCreds(X509Certificate2 cert, string subscriptionId, string resourceType, AcsNamespace acsNamespace) + { + try + { + return GenerateVaultCredsForBackup(cert, subscriptionId, resourceType, acsNamespace); + } + catch (Exception exception) + { + throw exception; + } + } + + /// + /// Generates vault creds file content for backup Vault + /// + /// management certificate + /// subscription Id + /// resource type + /// display name + /// acs namespace + /// xml file in string format + private string GenerateVaultCredsForBackup(X509Certificate2 cert, string subscriptionId, string resourceType, AcsNamespace acsNamespace) + { + using (var output = new MemoryStream()) + { + using (var writer = XmlWriter.Create(output, GetXmlWriterSettings())) + { + BackupVaultCreds backupVaultCreds = new BackupVaultCreds(subscriptionId, + resourceType, + vault.Name, + CertUtils.SerializeCert(cert, X509ContentType.Pfx), + acsNamespace); + + DataContractSerializer serializer = new DataContractSerializer(typeof(BackupVaultCreds)); + serializer.WriteObject(writer, backupVaultCreds); + + WriteVerbose(string.Format(CultureInfo.InvariantCulture, "RecoveryService - Backup Vault - Successfully serialized the file content")); + } + + return Encoding.UTF8.GetString(output.ToArray()); + } + } + + /// + /// A set of XmlWriterSettings to use for the publishing profile + /// + /// The XmlWriterSettings set + private XmlWriterSettings GetXmlWriterSettings() + { + return new XmlWriterSettings + { + Encoding = new UTF8Encoding(false), + Indent = true, + NewLineOnAttributes = true + }; + } + } +} diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj index f9c6e93ec533..ce224cabfb93 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj @@ -28,7 +28,6 @@ true true MinimumRecommendedRules.ruleset - AnyCPU ..\..\..\Package\Release\ServiceManagement\Azure\StorSimple\ @@ -44,19 +43,10 @@ false - - False - Resources\BackupManagementInterface.dll - - - False - Resources\BMSCommonInterface.dll - ..\..\..\packages\Hyak.Common.1.0.2\lib\portable-net403+win+wpa81\Hyak.Common.dll - - False + ..\..\..\packages\Microsoft.Azure.Common.2.1.0\lib\net45\Microsoft.Azure.Common.dll @@ -66,9 +56,6 @@ ..\..\..\packages\Microsoft.Azure.Common.2.1.0\lib\net45\Microsoft.Azure.Common.NetFramework.dll - - ..\..\..\packages\Microsoft.Azure.Management.Resources.2.18.0-preview\lib\net40\Microsoft.Azure.ResourceManager.dll - ..\..\..\packages\Microsoft.IdentityModel.Clients.ActiveDirectory.2.14.201151115\lib\net45\Microsoft.IdentityModel.Clients.ActiveDirectory.dll @@ -89,11 +76,11 @@ False - ..\..\..\..\..\azure-sdk-for-net\src\ResourceManagement\AzureBackup\BackupServicesManagment\bin\Net45-Debug\Microsoft.WindowsAzure.Management.BackupServicesManagment.dll + Resources\Microsoft.WindowsAzure.Management.BackupServicesManagment.dll False - Resources\Microsoft.WindowsAzure.Management.Common.dll + Cmdlets\VaultCredentials\Microsoft.WindowsAzure.Management.Common.dll ..\..\..\packages\Microsoft.WindowsAzure.Management.Scheduler.6.0.0\lib\net40\Microsoft.WindowsAzure.Management.Scheduler.dll @@ -128,6 +115,13 @@ + + + + + + + @@ -136,41 +130,38 @@ - - - - - + + + - + + - - - - - - - - + + + + + - - + + + + + - - Code - + True True @@ -183,6 +174,14 @@ {5ee72c53-1720-4309-b54b-5fb79703195f} Commands.Common + + {52643bd5-6378-49bd-9f6e-dac9dd8a867b} + Commands.Compute + + + {e1f5201d-6067-430e-b303-4e367652991b} + Commands.Resources + @@ -204,6 +203,7 @@ + diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Helpers/ContainerHelpers.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Helpers/ContainerHelpers.cs new file mode 100644 index 000000000000..18438157a405 --- /dev/null +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Helpers/ContainerHelpers.cs @@ -0,0 +1,67 @@ +// ---------------------------------------------------------------------------------- +// +// Copyright Microsoft Corporation +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// ---------------------------------------------------------------------------------- + +using System; +using System.Management.Automation; +using System.Collections.Generic; +using System.Xml; +using Microsoft.WindowsAzure.Commands.Utilities.Common; +using Microsoft.Azure.Common.Authentication; +using Microsoft.Azure.Common.Authentication.Models; +using System.Threading; +using Hyak.Common; +using Microsoft.Azure.Commands.AzureBackup.Properties; +using System.Net; +using Microsoft.Azure.Management.BackupServices.Models; +using Microsoft.Azure.Commands.AzureBackup.Cmdlets; +using System.Linq; +using Microsoft.Azure.Commands.AzureBackup.Models; +using CmdletModel = Microsoft.Azure.Commands.AzureBackup.Models; +using System.Collections.Specialized; +using System.Web; + +namespace Microsoft.Azure.Commands.AzureBackup.Helpers +{ + public static class ContainerHelpers + { + public static string GetQueryFilter(ListContainerQueryParameter queryParams) + { + NameValueCollection collection = new NameValueCollection(); + if (!String.IsNullOrEmpty(queryParams.ContainerTypeField)) + { + collection.Add("ContainerType", queryParams.ContainerTypeField); + } + + if (!String.IsNullOrEmpty(queryParams.ContainerStatusField)) + { + collection.Add("ContainerStatus", queryParams.ContainerStatusField); + } + + if (!String.IsNullOrEmpty(queryParams.ContainerFriendlyNameField)) + { + collection.Add("FriendlyName", queryParams.ContainerFriendlyNameField); + } + + if (collection == null || collection.Count == 0) + { + return String.Empty; + } + + var httpValueCollection = HttpUtility.ParseQueryString(String.Empty); + httpValueCollection.Add(collection); + + return "&" + httpValueCollection.ToString(); + } + } +} diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Helpers/ProtectionPolicyHelpers.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Helpers/ProtectionPolicyHelpers.cs new file mode 100644 index 000000000000..f13d723c4b53 --- /dev/null +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Helpers/ProtectionPolicyHelpers.cs @@ -0,0 +1,175 @@ +// ---------------------------------------------------------------------------------- +// +// Copyright Microsoft Corporation +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// ---------------------------------------------------------------------------------- + +using System; +using System.Management.Automation; +using System.Collections.Generic; +using System.Xml; +using Microsoft.WindowsAzure.Commands.Utilities.Common; +using Microsoft.Azure.Common.Authentication; +using Microsoft.Azure.Common.Authentication.Models; +using System.Threading; +using Hyak.Common; +using Microsoft.Azure.Commands.AzureBackup.Properties; +using System.Net; +using Microsoft.Azure.Management.BackupServices.Models; +using Microsoft.Azure.Commands.AzureBackup.Cmdlets; +using System.Linq; +using Microsoft.Azure.Commands.AzureBackup.Models; +using CmdletModel = Microsoft.Azure.Commands.AzureBackup.Models; +using System.Collections.Specialized; +using System.Web; + +namespace Microsoft.Azure.Commands.AzureBackup.Helpers +{ + public static class ProtectionPolicyHelpers + { + public const int MinRetentionInDays = 7; + public const int MaxRetentionInDays = 30; + public const int MinRetentionInWeeks = 1; + public const int MaxRetentionInWeeks = 4; + + public static AzureBackupProtectionPolicy GetCmdletPolicy(CmdletModel.AzureBackupVault vault, ProtectionPolicyInfo sourcePolicy) + { + if (sourcePolicy == null) + { + return null; + } + + return new AzureBackupProtectionPolicy(vault, sourcePolicy); + } + + public static List GetCmdletPolicies(CmdletModel.AzureBackupVault vault, IEnumerable sourcePolicyList) + { + if (sourcePolicyList == null) + { + return null; + } + + List targetList = new List(); + + foreach (var sourcePolicy in sourcePolicyList) + { + targetList.Add(GetCmdletPolicy(vault, sourcePolicy)); + } + + return targetList; + } + + public static BackupSchedule FillBackupSchedule(string backupType, string scheduleType, DateTime scheduleStartTime, + string retentionType, int retentionDuration, string[] scheduleRunDays) + { + var backupSchedule = new BackupSchedule(); + + backupSchedule.BackupType = Enum.Parse(typeof(BackupType), backupType, true).ToString(); + backupSchedule.RetentionPolicy = FillRetentionPolicy(retentionType, retentionDuration); + + scheduleType = FillScheduleType(scheduleType, scheduleRunDays); + backupSchedule.ScheduleRun = scheduleType; + + if (string.Compare(scheduleType, ScheduleType.Weekly.ToString(), true) == 0) + { + backupSchedule.ScheduleRunDays = ParseScheduleRunDays(scheduleRunDays); + } + + DateTime scheduleRunTime = ParseScheduleRunTime(scheduleStartTime); + + backupSchedule.ScheduleRunTimes = new List { scheduleRunTime }; + + azureBackupCmdletBase.WriteDebug("Exiting GetBackupSchedule"); + return backupSchedule; + } + + private RetentionPolicy FillRetentionPolicy(string retentionType, int retentionDuration) + { + ValidateRetentionRange(retentionType, retentionDuration); + var retentionPolicy = new RetentionPolicy + { + RetentionType = (RetentionDurationType)Enum.Parse(typeof(RetentionDurationType), retentionType, true), + RetentionDuration = retentionDuration + }; + + return retentionPolicy; + } + + private void ValidateRetentionRange(string retentionType, int retentionDuration) + { + if(retentionType == RetentionDurationType.Days.ToString() && (retentionDuration < MinRetentionInDays + || retentionDuration > MaxRetentionInDays)) + { + var exception = new Exception("For Retention in days , valid values of retention duration are 7 to 30."); + var errorRecord = new ErrorRecord(exception, string.Empty, ErrorCategory.InvalidData, null); + azureBackupCmdletBase.WriteError(errorRecord); + throw exception; + } + + if (retentionType == RetentionDurationType.Weeks.ToString() && (retentionDuration < MinRetentionInWeeks + || retentionDuration > MaxRetentionInWeeks)) + { + var exception = new Exception("For Retention in weeks , valid values of retention duration are 1 to 4."); + var errorRecord = new ErrorRecord(exception, string.Empty, ErrorCategory.InvalidData, null); + azureBackupCmdletBase.WriteError(errorRecord); + throw exception; + } + + } + + private string FillScheduleType(string scheduleType, string[] scheduleRunDays) + { + if (scheduleType == ScheduleType.Daily.ToString() && scheduleRunDays != null && scheduleRunDays.Length > 0) + { + return ScheduleType.Weekly.ToString(); + } + + else + { + return Enum.Parse(typeof(ScheduleType), scheduleType, true).ToString(); + } + } + + private IList ParseScheduleRunDays(string[] scheduleRunDays) + { + if (scheduleRunDays == null || scheduleRunDays.Length <= 0) + { + var exception = new Exception("For weekly scheduletype , ScheduleRunDays should not be empty."); + var errorRecord = new ErrorRecord(exception, string.Empty, ErrorCategory.InvalidData, null); + azureBackupCmdletBase.WriteError(errorRecord); + throw exception; + } + + IList ListofWeekDays = new List(); + + foreach (var dayOfWeek in scheduleRunDays) + { + azureBackupCmdletBase.WriteDebug("dayOfWeek" + dayOfWeek.ToString()); + DayOfWeek item = (DayOfWeek)Enum.Parse(typeof(DayOfWeek), dayOfWeek, true); + azureBackupCmdletBase.WriteDebug("Item" + item.ToString()); + if (!ListofWeekDays.Contains(item)) + { + ListofWeekDays.Add(item); + } + } + + return ListofWeekDays; + } + + private DateTime ParseScheduleRunTime(DateTime scheduleStartTime) + { + scheduleStartTime = scheduleStartTime.ToUniversalTime(); + DateTime scheduleRunTime = new DateTime(scheduleStartTime.Year, scheduleStartTime.Month, + scheduleStartTime.Day, scheduleStartTime.Hour, scheduleStartTime.Minute - (scheduleStartTime.Minute % 30), 0); + return scheduleRunTime; + } + } +} diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Helpers/VaultHelpers.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Helpers/VaultHelpers.cs new file mode 100644 index 000000000000..71497100e58e --- /dev/null +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Helpers/VaultHelpers.cs @@ -0,0 +1,66 @@ +// ---------------------------------------------------------------------------------- +// +// Copyright Microsoft Corporation +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// ---------------------------------------------------------------------------------- + +using System; +using System.Management.Automation; +using System.Collections.Generic; +using System.Xml; +using Microsoft.WindowsAzure.Commands.Utilities.Common; +using Microsoft.Azure.Common.Authentication; +using Microsoft.Azure.Common.Authentication.Models; +using System.Threading; +using Hyak.Common; +using Microsoft.Azure.Commands.AzureBackup.Properties; +using System.Net; +using ClientModel = Microsoft.Azure.Management.BackupServices.Models; +using CmdletModel = Microsoft.Azure.Commands.AzureBackup.Models; +using System.Linq; + +namespace Microsoft.Azure.Commands.AzureBackup.Helpers +{ + public static class VaultHelpers + { + /// + /// Gets CmdletModel of backup vault from Client model + /// + /// + /// + /// + public static CmdletModel.AzureBackupVault GetCmdletVault(ClientModel.AzureBackupVault vault, ClientModel.StorageDetails storage) + { + var response = new CmdletModel.AzureBackupVault + { + ResourceId = vault.Id, + Name = vault.Name, + Region = vault.Location, + ResourceGroupName = GetResourceGroup(vault.Id), + Sku = vault.Properties.Sku.Name, + Storage = storage.StorageType, + }; + + return response; + } + + /// + /// Gets ResourceGroup from vault ID + /// + /// + /// + public static string GetResourceGroup(string vaultId) + { + string[] tokens = vaultId.Split(new[] { '/' }, StringSplitOptions.RemoveEmptyEntries); + return tokens[3]; + } + } +} diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Library/AzureBackupCmdletHelper.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Library/AzureBackupCmdletHelper.cs deleted file mode 100644 index afaadbf62c66..000000000000 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Library/AzureBackupCmdletHelper.cs +++ /dev/null @@ -1,196 +0,0 @@ -// ---------------------------------------------------------------------------------- -// -// Copyright Microsoft Corporation -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// http://www.apache.org/licenses/LICENSE-2.0 -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// ---------------------------------------------------------------------------------- - -using System; -using System.Management.Automation; -using System.Collections.Generic; -using System.Xml; -using Microsoft.WindowsAzure.Commands.Utilities.Common; -using Microsoft.Azure.Common.Authentication; -using Microsoft.Azure.Common.Authentication.Models; -using System.Threading; -using Hyak.Common; -using Microsoft.Azure.Commands.AzureBackup.Properties; -using System.Net; -using Microsoft.Azure.Management.BackupServices.Models; -using Microsoft.Azure.Commands.AzureBackup.Cmdlets; -using System.Linq; - -namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets -{ - public class AzureBackupCmdletHelper - { - public const int MinRetentionInDays = 7; - public const int MaxRetentionInDays = 30; - public const int MinRetentionInWeeks = 1; - public const int MaxRetentionInWeeks = 4; - public AzureBackupCmdletBase azureBackupCmdletBase {get; set;} - - public AzureBackupCmdletHelper(AzureBackupCmdletBase azureBackupCmd) - { - azureBackupCmdletBase = azureBackupCmd; - } - - public void WriteAzureBackupProtectionPolicy(string ResourceGroupName, - string ResourceName, string Location, ProtectionPolicyInfo sourcePolicy) - { - azureBackupCmdletBase.WriteObject(new AzureBackupProtectionPolicy(ResourceGroupName, ResourceName, Location, sourcePolicy)); - } - - public void WriteAzureBackupProtectionPolicy(string ResourceGroupName, - string ResourceName, string Location, IEnumerable sourcePolicyList) - { - List targetList = new List(); - - foreach (var sourcePolicy in sourcePolicyList) - { - targetList.Add(new AzureBackupProtectionPolicy(ResourceGroupName, - ResourceName, Location, sourcePolicy)); - } - - azureBackupCmdletBase.WriteObject(targetList, true); - } - - public AzureBackupProtectionPolicy GetAzureBackupProtectionPolicyByName(string policyName, string ResourceGroupName, - string ResourceName, string Location) - { - var policyListResponse = azureBackupCmdletBase.AzureBackupClient.ProtectionPolicy.ListAsync(azureBackupCmdletBase.GetCustomRequestHeaders(), azureBackupCmdletBase.CmdletCancellationToken).Result; - - azureBackupCmdletBase.WriteDebug("Got the protectionPolicy List"); - - IEnumerable policyObjects = null; - - policyObjects = policyListResponse.ProtectionPolicies.Objects.Where(x => x.Name.Equals(policyName, System.StringComparison.InvariantCultureIgnoreCase)); - - azureBackupCmdletBase.WriteDebug("Got the protectionPolicy with Name" + policyName); - - IEnumerator enumerator = policyObjects.GetEnumerator(); - enumerator.MoveNext(); - - ProtectionPolicyInfo protectionPolicyInfo = enumerator.Current; - - if (protectionPolicyInfo == null) - { - return null; - } - - return new AzureBackupProtectionPolicy(ResourceGroupName, ResourceName, Location, protectionPolicyInfo); - } - - public BackupSchedule FillBackupSchedule(string backupType, string scheduleType, DateTime scheduleStartTime, - string retentionType, int retentionDuration, string[] scheduleRunDays) - { - var backupSchedule = new BackupSchedule(); - - backupSchedule.BackupType = Enum.Parse(typeof(BackupType), backupType, true).ToString(); - backupSchedule.RetentionPolicy = FillRetentionPolicy(retentionType, retentionDuration); - - scheduleType = FillScheduleType(scheduleType, scheduleRunDays); - backupSchedule.ScheduleRun = scheduleType; - - if (string.Compare(scheduleType, ScheduleType.Weekly.ToString(), true) == 0) - { - backupSchedule.ScheduleRunDays = ParseScheduleRunDays(scheduleRunDays); - } - - DateTime scheduleRunTime = ParseScheduleRunTime(scheduleStartTime); - - backupSchedule.ScheduleRunTimes = new List { scheduleRunTime }; - - azureBackupCmdletBase.WriteDebug("Exiting GetBackupSchedule"); - return backupSchedule; - } - - private RetentionPolicy FillRetentionPolicy(string retentionType, int retentionDuration) - { - ValidateRetentionRange(retentionType, retentionDuration); - var retentionPolicy = new RetentionPolicy - { - RetentionType = (RetentionDurationType)Enum.Parse(typeof(RetentionDurationType), retentionType, true), - RetentionDuration = retentionDuration - }; - - return retentionPolicy; - } - - private void ValidateRetentionRange(string retentionType, int retentionDuration) - { - if(retentionType == RetentionDurationType.Days.ToString() && (retentionDuration < MinRetentionInDays - || retentionDuration > MaxRetentionInDays)) - { - var exception = new Exception("For Retention in days , valid values of retention duration are 7 to 30."); - var errorRecord = new ErrorRecord(exception, string.Empty, ErrorCategory.InvalidData, null); - azureBackupCmdletBase.WriteError(errorRecord); - throw exception; - } - - if (retentionType == RetentionDurationType.Weeks.ToString() && (retentionDuration < MinRetentionInWeeks - || retentionDuration > MaxRetentionInWeeks)) - { - var exception = new Exception("For Retention in weeks , valid values of retention duration are 1 to 4."); - var errorRecord = new ErrorRecord(exception, string.Empty, ErrorCategory.InvalidData, null); - azureBackupCmdletBase.WriteError(errorRecord); - throw exception; - } - - } - - private string FillScheduleType(string scheduleType, string[] scheduleRunDays) - { - if (scheduleType == ScheduleType.Daily.ToString() && scheduleRunDays != null && scheduleRunDays.Length > 0) - { - return ScheduleType.Weekly.ToString(); - } - - else - { - return Enum.Parse(typeof(ScheduleType), scheduleType, true).ToString(); - } - } - - private IList ParseScheduleRunDays(string[] scheduleRunDays) - { - if (scheduleRunDays == null || scheduleRunDays.Length <= 0) - { - var exception = new Exception("For weekly scheduletype , ScheduleRunDays should not be empty."); - var errorRecord = new ErrorRecord(exception, string.Empty, ErrorCategory.InvalidData, null); - azureBackupCmdletBase.WriteError(errorRecord); - throw exception; - } - - IList ListofWeekDays = new List(); - - foreach (var dayOfWeek in scheduleRunDays) - { - azureBackupCmdletBase.WriteDebug("dayOfWeek" + dayOfWeek.ToString()); - DayOfWeek item = (DayOfWeek)Enum.Parse(typeof(DayOfWeek), dayOfWeek, true); - azureBackupCmdletBase.WriteDebug("Item" + item.ToString()); - if (!ListofWeekDays.Contains(item)) - { - ListofWeekDays.Add(item); - } - } - - return ListofWeekDays; - } - - private DateTime ParseScheduleRunTime(DateTime scheduleStartTime) - { - scheduleStartTime = scheduleStartTime.ToUniversalTime(); - DateTime scheduleRunTime = new DateTime(scheduleStartTime.Year, scheduleStartTime.Month, - scheduleStartTime.Day, scheduleStartTime.Hour, scheduleStartTime.Minute - (scheduleStartTime.Minute % 30), 0); - return scheduleRunTime; - } - } -} diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Library/AzureBackupContainerCmdletHelper.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Library/AzureBackupContainerCmdletHelper.cs deleted file mode 100644 index 3aa85b7a9ed7..000000000000 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Library/AzureBackupContainerCmdletHelper.cs +++ /dev/null @@ -1,309 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Collections.Specialized; -using System.Globalization; -using System.Linq; -using System.Runtime.Serialization; -using System.Text; -using System.Threading.Tasks; -using System.Web; - -namespace Microsoft.Azure.Commands.AzureBackup.Library -{ - public class ServiceNamespaces - { - /// - /// Namespace used by data contracts in BMS interface - /// - public const string BMSServiceNamespace = "http://windowscloudbackup.com/BackupManagement/V2014_09"; - } - - [DataContract(Namespace = ServiceNamespaces.BMSServiceNamespace)] - public class ManagementBaseObject - { - } - - [DataContract(Namespace = ServiceNamespaces.BMSServiceNamespace)] - [KnownType(typeof(ContainerQueryObject))] - public class ManagementQueryObject : ManagementBaseObject - { - public static string DateTimeFormat = "yyyy-MM-dd hh:mm:ss tt"; - public ManagementQueryObject() - { - } - - public virtual NameValueCollection GetNameValueCollection() - { - return new NameValueCollection(); - } - - public virtual void Initialize(NameValueCollection filters) - { - ValidateCollection(filters); - } - - public virtual List GetSupportedFilters() - { - return new List(); - } - - public override string ToString() - { - return "ManagementQueryObject"; - } - - private void ValidateCollection(NameValueCollection filters) - { - List supportedFilters = GetSupportedFilters(); - - if (filters == null) - { - throw new ArgumentException("Null collection", "Filters"); - } - - if (filters.Count != filters.AllKeys.Length) - { - throw new ArgumentException("Duplicate keys", "Filters"); - } - - if (filters.Count > supportedFilters.Count) - { - string errMsg = String.Format("Unsupported filters specified, filter count: {0}", filters.Count); - throw new ArgumentException(errMsg, "Filters"); - } - - foreach (var filter in filters.AllKeys) - { - if (!supportedFilters.Contains(filter)) - { - string errMsg = String.Format("Unsupported filters specified, filter: {0}", filter); - throw new ArgumentException(errMsg, "Filters"); - } - } - } - - //Helper functions that can be used - //while convertion of different dataTypes - //Override this to handle new dataTypes if required - public static string GetString(string str) - { - return str; - } - - public static string GetString(DateTime date) - { - return date.ToUniversalTime().ToString(DateTimeFormat, CultureInfo.InvariantCulture); - } - - public static string GetString(List strList) - { - String[] strtArr = strList.ToArray(); - return String.Join(",", strtArr); - } - - //Helper funtions to get the DataType format from string - //Add new dataType conversion if required. - public static T GetValueFromString(string str) - { - if (typeof(T) == typeof(string)) - { - return (T)Convert.ChangeType(str, typeof(T)); - } - else if (typeof(T) == typeof(List)) - { - String[] strArr = str.Split(','); - List list = new List(strArr.Length); - foreach (string s in strArr) - { - list.Add(s); - } - return (T)Convert.ChangeType(list, typeof(T)); - } - else if (typeof(T) == typeof(DateTime)) - { - DateTime date = DateTime.ParseExact(str, DateTimeFormat, CultureInfo.InvariantCulture); - return (T)Convert.ChangeType(date, typeof(T)); - } - else - { - throw new NotSupportedException(); - } - } - } - - [DataContract(Namespace = ServiceNamespaces.BMSServiceNamespace)] - public enum ContainerType - { - [EnumMember] - Invalid = 0, - - [EnumMember] - Unknown, - - // used by fabric adapter to populate discovered VMs - [EnumMember] - IaasVMContainer, - - // used by fabric adapter to populate discovered services - // VMs are child containers of services they belong to - [EnumMember] - IaasVMServiceContainer - } - - [DataContract(Namespace = ServiceNamespaces.BMSServiceNamespace)] - public enum RegistrationStatus - { - [EnumMember] - Invalid = 0, - - [EnumMember] - Unknown, - - [EnumMember] - NotRegistered, - - [EnumMember] - Registered, - - [EnumMember] - Registering, - } - - [DataContract(Namespace = ServiceNamespaces.BMSServiceNamespace)] - public class ContainerQueryObject : ManagementQueryObject - { - public const string ContainerTypeField = "ContainerType"; - public const string ContainerStatusField = "ContainerStatus"; - public const string ContainerFriendlyNameField = "FriendlyName"; - - [DataMember] - public string Type { get; set; } - - [DataMember] - public string Status { get; set; } - - [DataMember] - public string FriendlyName { get; set; } - - public ContainerQueryObject() - { - } - - public ContainerQueryObject(string type, string status) - { - this.Type = type; - this.Status = status; - this.FriendlyName = string.Empty; - } - - public ContainerQueryObject(string type, string status, string name) - { - this.Type = type; - this.Status = status; - this.FriendlyName = name; - } - - public override List GetSupportedFilters() - { - var filterList = base.GetSupportedFilters(); - filterList.Add(ContainerTypeField); - filterList.Add(ContainerStatusField); - filterList.Add(ContainerFriendlyNameField); - return filterList; - } - - public override NameValueCollection GetNameValueCollection() - { - var collection = base.GetNameValueCollection(); - - if (!String.IsNullOrEmpty(Type)) - { - collection.Add(ContainerTypeField, Type); - } - - if (!String.IsNullOrEmpty(Status)) - { - collection.Add(ContainerStatusField, Status); - } - - if (!String.IsNullOrEmpty(FriendlyName)) - { - collection.Add(ContainerFriendlyNameField, FriendlyName); - } - return collection; - } - - public override void Initialize(NameValueCollection collection) - { - base.Initialize(collection); - - if (collection[ContainerTypeField] != null) - { - SetType(collection[ContainerTypeField]); - } - - if (collection[ContainerStatusField] != null) - { - SetStatus(collection[ContainerStatusField]); - } - - if (collection[ContainerFriendlyNameField] != null) - { - SetFriendlyName(collection[ContainerFriendlyNameField]); - } - } - - public override string ToString() - { - return String.Format("{0} ContainerTypeField: {1}, ContainerStatusField: {2}", base.ToString(), Type, Status); - } - - private void SetType(string type) - { - ContainerType containerType; - if (!Enum.TryParse(type, out containerType) || containerType == ContainerType.Invalid || containerType == ContainerType.Unknown) - { - throw new ArgumentException("Invalid type filter", ContainerTypeField); - } - - Type = type; - } - - private void SetStatus(string status) - { - RegistrationStatus contatinerStatus; - if (!Enum.TryParse(status, out contatinerStatus) || contatinerStatus == RegistrationStatus.Invalid || contatinerStatus == RegistrationStatus.Unknown) - { - throw new ArgumentException("Invalid status filter", ContainerStatusField); - } - - Status = status; - } - - private void SetFriendlyName(string name) - { - if (String.IsNullOrEmpty(name)) - { - throw new ArgumentException("Name is NullorEmpty", ContainerFriendlyNameField); - } - - FriendlyName = name; - } - } - - public static class BackupManagementAPIHelper - { - public static string GetQueryString(NameValueCollection collection) - { - if (collection == null || collection.Count == 0) - { - return String.Empty; - } - - var httpValueCollection = HttpUtility.ParseQueryString(String.Empty); - httpValueCollection.Add(collection); - - return "&" + httpValueCollection.ToString(); - } - } -} diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Library/CertUtils.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Library/CertUtils.cs new file mode 100644 index 000000000000..26a42dcc922d --- /dev/null +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Library/CertUtils.cs @@ -0,0 +1,131 @@ +// ---------------------------------------------------------------------------------- +// +// Copyright Microsoft Corporation +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// ---------------------------------------------------------------------------------- + +using Microsoft.WindowsAzure.Management; +using Microsoft.WindowsAzure.Management.EventSources; +using Security.Cryptography; +using Security.Cryptography.X509Certificates; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Security.Cryptography; +using System.Security.Cryptography.X509Certificates; +using System.Text; +using System.Threading.Tasks; + +namespace Microsoft.Azure.Commands.AzureBackup.Library +{ + /// + /// Certificate utility methods + /// + public class CertUtils + { + public const string MsEnhancedProv = "Microsoft Enhanced Cryptographic Provider v1.0"; + public const string DefaultIssuer = "CN=Windows Azure Tools"; + + public const string DefaultPassword = ""; + public const string OIDClientAuthValue = "1.3.6.1.5.5.7.3.2"; + public const string OIDClientAuthFriendlyName = "Client Authentication"; + public const int KeySize2048 = 2048; + + /// + /// Windows Azure Service Management API requires 2048bit RSA keys. + /// The private key needs to be exportable so we can save it to .pfx for sharing with team members. + /// + /// A 2048 bit RSA key + private static CngKey Create2048RsaKey() + { + var keyCreationParameters = new CngKeyCreationParameters + { + ExportPolicy = CngExportPolicies.AllowExport, + KeyCreationOptions = CngKeyCreationOptions.None, + KeyUsage = CngKeyUsages.AllUsages, + Provider = new CngProvider(MsEnhancedProv) + }; + + keyCreationParameters.Parameters.Add(new CngProperty("Length", BitConverter.GetBytes(KeySize2048), CngPropertyOptions.None)); + + return CngKey.Create(CngAlgorithm2.Rsa, null, keyCreationParameters); + } + + /// + /// Creates a new self-signed X509 certificate + /// + /// The certificate issuer + /// Human readable name + /// The certificate's password + /// Certificate creation date & time + /// Certificate expiry date & time + /// An X509Certificate2 + public static X509Certificate2 CreateSelfSignedCert(string issuer, string friendlyName, string password, DateTime startTime, DateTime endTime) + { + string distinguishedNameString = issuer; + var key = Create2048RsaKey(); + + var creationParams = new X509CertificateCreationParameters(new X500DistinguishedName(distinguishedNameString)) + { + TakeOwnershipOfKey = true, + StartTime = startTime, + EndTime = endTime + }; + + // adding client authentication, -eku = 1.3.6.1.5.5.7.3.2, + // This is mandatory for the upload to be successful + OidCollection oidCollection = new OidCollection(); + oidCollection.Add(new Oid(OIDClientAuthValue, OIDClientAuthFriendlyName)); + creationParams.Extensions.Add(new X509EnhancedKeyUsageExtension(oidCollection, false)); + + // Documentation of CreateSelfSignedCertificate states: + // If creationParameters have TakeOwnershipOfKey set to true, the certificate + // generated will own the key and the input CngKey will be disposed to ensure + // that the caller doesn't accidentally use it beyond its lifetime (which is + // now controlled by the certificate object). + // We don't dispose it ourselves in this case. + var cert = key.CreateSelfSignedCertificate(creationParams); + key = null; + cert.FriendlyName = friendlyName; + + // X509 certificate needs PersistKeySet flag set. + // Reload a new X509Certificate2 instance from exported bytes in order to set the PersistKeySet flag. + var bytes = cert.Export(X509ContentType.Pfx, password); + + // NOTE: PfxValidation is not done here because these are newly created certs and assumed valid. + + ICommonEventSource evtSource = null; + return X509Certificate2Helper.NewX509Certificate2(bytes, password, X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.Exportable, evtSource, doPfxValidation: false); + } + + /// + /// Returns serialized certificate - Base64 encoded based on the content type + /// + /// The certificate provided + /// Cert content type + /// The serialized cert value in string + public static string SerializeCert(X509Certificate2 cert, X509ContentType contentType) + { + return Convert.ToBase64String(cert.Export(contentType)); + } + + /// + /// Generates friendly name + /// + /// Subscription id + /// Prefix, likely resource name + /// Friendly name + public static string GenerateCertFriendlyName(string subscriptionId, string prefix = "") + { + return string.Format("{0}{1}-{2}-vaultcredentials", prefix, subscriptionId, DateTime.Now.ToString("M-d-yyyy")); + } + } +} diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupBaseObjects.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupBaseObjects.cs index d2b3cfd2bfa7..b07c7f1a8ec2 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupBaseObjects.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupBaseObjects.cs @@ -13,7 +13,8 @@ // ---------------------------------------------------------------------------------- using Microsoft.Azure.Management.BackupServices.Models; -namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets + +namespace Microsoft.Azure.Commands.AzureBackup.Models; { public class AzureBackupVaultContextObject { @@ -42,6 +43,10 @@ public AzureBackupVaultContextObject(string resourceGroupName, string resourceNa ResourceName = resourceName; Location = locationName; } + + public AzureBackupVaultContextObject(AzureBackupVault vault) : this(vault.ResourceGroupName, vault.Name, vault.Region) + { + } } /// @@ -78,8 +83,8 @@ public AzureBackupContainerContextObject(AzureBackupContainer azureBackupContain ContainerUniqueName = azureBackupContainer.ContainerUniqueName; } - public AzureBackupContainerContextObject(ContainerInfo containerInfo, string rgName, string rName, string location) - : base(rgName, rName, location) + public AzureBackupContainerContextObject(AzureBackupVault vault, ContainerInfo containerInfo) + : base(vault) { ContainerType = containerInfo.ContainerType; ContainerUniqueName = containerInfo.Name; diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupContainer.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupContainer.cs index e79b51fa276e..5db59a6d3bcc 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupContainer.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupContainer.cs @@ -19,7 +19,7 @@ using System.Text; using System.Threading.Tasks; -namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets +namespace Microsoft.Azure.Commands.AzureBackup.Models { /// /// Represents Azure Backup Container @@ -38,8 +38,8 @@ public class AzureBackupContainer : AzureBackupContainerContextObject public AzureBackupContainer() : base() { } - public AzureBackupContainer(ContainerInfo containerInfo, string rgName, string rName, string location) - : base(containerInfo, rgName, rName, location) + public AzureBackupContainer(AzureBackupVault vault, ContainerInfo containerInfo) + : base(vault, containerInfo) { HealthStatus = containerInfo.HealthStatus; RegistrationStatus = containerInfo.RegistrationStatus; diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupEnums.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupEnums.cs index 64a161eadb67..842b7c73d05e 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupEnums.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupEnums.cs @@ -19,7 +19,7 @@ using System.Text; using System.Threading.Tasks; -namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets +namespace Microsoft.Azure.Commands.AzureBackup.Models { public enum AzureBackupContainerTypeInput { @@ -46,6 +46,13 @@ public enum AzureBackupContainerType IaasVMServiceContainer } + public enum DataSourceType + { + Invalid = 0, + + VM + } + public enum AzureBackupContainerRegistrationStatus { Invalid = 0, @@ -59,7 +66,7 @@ public enum AzureBackupContainerRegistrationStatus Registering, } - public enum AzureBackupOperationStatus + internal enum AzureBackupOperationStatus { Invalid = 0, @@ -68,7 +75,7 @@ public enum AzureBackupOperationStatus Completed } - public enum AzureBackupOperationResult + internal enum AzureBackupOperationResult { Invalid = 0, diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupItem.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupItem.cs index 1bbe597749a7..8dd3912938d1 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupItem.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupItem.cs @@ -19,7 +19,7 @@ using System.Threading.Tasks; using Microsoft.Azure.Management.BackupServices.Models; -namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets +namespace Microsoft.Azure.Commands.AzureBackup.Models { /// /// Represents Azure Backup Item diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupRecoveryPoint.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupRecoveryPoint.cs index 6d7c95a0d57e..1ad78baf3177 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupRecoveryPoint.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupRecoveryPoint.cs @@ -19,7 +19,7 @@ using System.Text; using System.Threading.Tasks; -namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets +namespace Microsoft.Azure.Commands.AzureBackup.Models { public class AzureBackupRecoveryPointContextObject : AzureBackupItemContextObject { diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupVault.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupVault.cs new file mode 100644 index 000000000000..b85a8d41dd8d --- /dev/null +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupVault.cs @@ -0,0 +1,66 @@ +// ---------------------------------------------------------------------------------- +// +// Copyright Microsoft Corporation +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// ---------------------------------------------------------------------------------- + +using Microsoft.Azure.Management.BackupServices.Models; +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Microsoft.Azure.Commands.AzureBackup.Models +{ + /// + /// Represents Azure Backup vault + /// + public class AzureBackupVault + { + public string ResourceId { get; set; } + + public string Name { get; set; } + + public string ResourceGroupName { get; set; } + + public string Region { get; set; } + + // public Hashtable[] Tags { get; protected set; } + + public string Sku { get; set; } + + public string Storage { get; set; } + + public AzureBackupVault() : base() { } + + public AzureBackupVault(string resourceGroupName, string resourceName, string region) + { + ResourceGroupName = resourceGroupName; + Name = resourceName; + Region = region; + } + + internal void Validate() + { + if (String.IsNullOrEmpty(ResourceGroupName)) + { + throw new ArgumentException("AzureBackupVault.ResourceGroupName"); + } + + if (String.IsNullOrEmpty(Name)) + { + throw new ArgumentException("AzureBackupVault.Name"); + } + } + } +} diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/JobObjects.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/JobObjects.cs index 1954c2668946..9483e7727c96 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/JobObjects.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/JobObjects.cs @@ -22,7 +22,7 @@ using Microsoft.Azure.Management.BackupServices; using Mgmt = Microsoft.Azure.Management.BackupServices.Models; -namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets +namespace Microsoft.Azure.Commands.AzureBackup.Models { public class AzureBackupJob : AzureBackupVaultContextObject { @@ -48,8 +48,8 @@ public class AzureBackupJob : AzureBackupVaultContextObject public List ErrorDetails { get; set; } - public AzureBackupJob(Mgmt.Job serviceJob, string ResourceGroupName, string ResourceName, string LocationName) - : base(ResourceGroupName, ResourceName, LocationName) + public AzureBackupJob(AzureBackupVault vault, Mgmt.Job serviceJob) + : base(vault) { this.InstanceId = serviceJob.InstanceId; this.WorkloadType = serviceJob.Type; @@ -112,8 +112,8 @@ public class AzureBackupJobDetails : AzureBackupJob public List SubTasks { get; set; } - public AzureBackupJobDetails(Mgmt.JobProperties serviceJobProperties, string ResourceGroupName, string ResourceName, string LocationName) - : base(serviceJobProperties, ResourceGroupName, ResourceName, LocationName) + public AzureBackupJobDetails(AzureBackupVault vault, Mgmt.JobProperties serviceJobProperties) + : base(vault, serviceJobProperties) { if (serviceJobProperties.PropertyBag != null) this.Properties = new Dictionary(serviceJobProperties.PropertyBag); diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/ListContainerQueryParameter.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/ListContainerQueryParameter.cs index 12ab1f010592..08de6d174ffe 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/ListContainerQueryParameter.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/ListContainerQueryParameter.cs @@ -19,9 +19,9 @@ using System.Text; using System.Threading.Tasks; -namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets +namespace Microsoft.Azure.Commands.AzureBackup.Models { - public class ListContainerQueryParameter : ManagementBaseObject + internal class ListContainerQueryParameter : ManagementBaseObject { /// ///Containers information for registration diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/ProtectionPolicy.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/ProtectionPolicy.cs index cb0afa42fe91..f2402e810691 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/ProtectionPolicy.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/ProtectionPolicy.cs @@ -16,7 +16,7 @@ using System; using System.Collections.Generic; -namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets +namespace Microsoft.Azure.Commands.AzureBackup.Models { /// /// Represents ProtectionPolicy object @@ -51,8 +51,8 @@ public AzureBackupProtectionPolicy() { } - public AzureBackupProtectionPolicy(string resourceGroupName, string resourceName, string location, ProtectionPolicyInfo sourcePolicy) - : base(resourceGroupName, resourceName, location) + public AzureBackupProtectionPolicy(AzureBackupVault vault, ProtectionPolicyInfo sourcePolicy) + : base(vault) { InstanceId = sourcePolicy.InstanceId; Name = sourcePolicy.Name; diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/VaultCredentials.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/VaultCredentials.cs new file mode 100644 index 000000000000..9a2470bd80c6 --- /dev/null +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/VaultCredentials.cs @@ -0,0 +1,166 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Linq; +using System.Runtime.Serialization; +using System.Text; +using System.Threading.Tasks; + +namespace Microsoft.Azure.Commands.AzureBackup.Models +{ + /// + /// Class to define vault credentials + /// + [DataContract] + internal class VaultCreds + { + #region Properties + + /// + /// Gets or sets the key name for SubscriptionId entry + /// + [DataMember(Order = 0)] + public string SubscriptionId { get; set; } + + /// + /// Gets or sets the key name for ResourceType entry + /// + [DataMember(Order = 1)] + public string ResourceType { get; set; } + + /// + /// Gets or sets the key name for ResourceName entry + /// + [DataMember(Order = 2)] + public string ResourceName { get; set; } + + /// + /// Gets or sets the key name for ManagementCert entry + /// + [DataMember(Order = 3)] + public string ManagementCert { get; set; } + + /// + /// Gets or sets the key name for AcsNamespace entry + /// + [DataMember(Order = 4)] + public AcsNamespace AcsNamespace { get; set; } + + #endregion + + #region Constructors + + /// + /// Initializes a new instance of the VaultCreds class + /// + public VaultCreds() { } + + /// + /// Initializes a new instance of the VaultCreds class + /// + /// subscription id + /// resource type + /// resource name + /// management cert + /// acs namespace + public VaultCreds(string subscriptionId, string resourceType, string resourceName, string managementCert, AcsNamespace acsNamespace) + { + SubscriptionId = subscriptionId; + ResourceType = resourceType; + ResourceName = resourceName; + ManagementCert = managementCert; + AcsNamespace = acsNamespace; + } + + #endregion + } + + /// + /// Class to define backup vault credentials + /// + [SuppressMessage("Microsoft.StyleCop.CSharp.MaintainabilityRules", "SA1402:FileMayOnlyContainASingleClass", Justification = "Grouping classes based on entity")] + internal class BackupVaultCreds : VaultCreds + { + /// + /// Gets or sets the agent links + /// + [DataMember(Order = 0)] + public string AgentLinks { get; set; } + + #region Constructors + + /// + /// Initializes a new instance of the BackupVaultCreds class + /// + public BackupVaultCreds() + { + } + + /// + /// Initializes a new instance of the BackupVaultCreds class + /// + /// subscription Id + /// resource type + /// resource name + /// management cert + /// acs namespace + public BackupVaultCreds(string subscriptionId, string resourceType, string resourceName, string managementCert, AcsNamespace acsNamespace) + : base(subscriptionId, resourceType, resourceName, managementCert, acsNamespace) { } + + /// + /// Initializes a new instance of the BackupVaultCreds class + /// + /// subscription Id + /// resource type + /// resource name + /// management cert + /// acs namespace + /// agent links + public BackupVaultCreds(string subscriptionId, string resourceType, string resourceName, string managementCert, AcsNamespace acsNamespace, string agentLinks) + : this(subscriptionId, resourceType, resourceName, managementCert, acsNamespace) + { + AgentLinks = agentLinks; + } + + #endregion + } + + /// + /// AcsNamespace is where the certificate is uploaded into + /// + internal class AcsNamespace + { + /// + /// Gets or sets the key name for HostName entry + /// + public string HostName { get; set; } + + /// + /// Gets or sets the key name for Namespace entry + /// + public string Namespace { get; set; } + + /// + /// Gets or sets the value for ResourceProviderRealm entry + /// + public string ResourceProviderRealm { get; set; } + + /// + /// Initializes a new instance of the AcsNamespace class + /// + public AcsNamespace() { } + + /// + /// Initializes a new instance of the AcsNamespace class. + /// + /// host name + /// acs namespace + /// rp realm + public AcsNamespace(string hostName, string acsNmespace, string resourceProviderRealm) + { + this.HostName = hostName; + this.Namespace = acsNmespace; + this.ResourceProviderRealm = resourceProviderRealm; + } + } +} diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Resources/Microsoft.WindowsAzure.Management.BackupServicesManagment.dll b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Resources/Microsoft.WindowsAzure.Management.BackupServicesManagment.dll new file mode 100644 index 0000000000000000000000000000000000000000..9c961fec8199b3743505a54597bb374d20515207 GIT binary patch literal 168960 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%0A~gyz6yA*^#X(=XR*Q9dl9kCzB7T?(c(yn%jc}Oi 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

D0{yv8@ zv<=;-khFfkmUyeeO-u*@U3h1&$KYSfkf^{sWUkq?y-xN35%2Tn7nyT=c!tIb_oPw1 zaLdB>Y8#L1U_Mv+#*otYgw$|pdUCQ@;?~KCxrG#vy!(141mDEWF%gV}{j@TuV`O3O!YG~I zJw1c7KxWxDk#+`bqV5LboIPb%R8j#7zwp_* zx%w@Wd3}m5%CIMMPV#1|@W9({x~$xF@PM^ty+~MUNL`39<-pI(EKXY?+*M%6T6)nf z`Q^%>Sc;b24w%Gsh`~6zAhbY0RkBl|DHKnE2A;%=m&stbhb2|#^!8XGkyFBsDyKTK z6rW^nnc?0+1?%li=GX}LGKTXd*zj(izvSJk9ThCxj?QCBFjaO==O<4fY@43IvBKif z`N>K0oD|bEv_!{UwzX_Wh!E$dXP~I&xGwxL2_lh$#hLsmz3q`SXDYH7vW`yAVELZp zx)VSNDLGd2kOzjvb$NH`8F?Lo3Y;kDn4c>K9(&nQn#9?k6BX{C?m9J5)B*GC+}N&n z<`JV+POG{DHs-L#^iPVx`6GiL&9*p)JN>islT*n+2B}U3ERmZxUtX9~k51lTY4jg6t;^of(keD)Sd>QRI9r5RprRfFP(uqKA) zz!jBA?Nx)?Z%LUxIRs&B);jq?Iy6ILm3~u5pTUbtX(Eelvzqlru_86}93ne)gB@G?mOPiPs>s2G&+_PgD=mIjXj-bsbZ<1#e$(s zyq#8_RwuIa>J-B!jw$i*TQE)LCt#5~3i&y-EQ-Fjtj}ZUNSLaFZ5t2k->^6U&ei9MV4dhx_$ zWlFMMnc{i@i;c2w^ z=p!e}`D4X>ClWGhAi`h>bqKq^rdI=i#9)-q+XNojx=-vv6sJ!XQB9w0=cqh0Adg0u zHON}8v0ITx16oeHq2YP(HojF#?ZxrQZgu<9i>wKwB}^K#Ji(>7{Z>dgeud8o|?mh1k)9sHNx>ttpF}8a|5N| zqk-ByD@hI z>OL0c_iPab*^dB&_;@GT2v85uhydyV7%@OSK*a#m10+%a>H#9&#MI-^5NAT)-2*U6 z`mqpWLqe4~LkgJz_T<%T`bZJWYkrOH6-&m7<2g)$)A2@CSNXt zRYtZiA7xOh&%5r%4Z_)yo*V4-?)eiFxC_PU;|(5{jM*Ce_?3p^W3K@0Rj&LN)WV#8457fXDb|a!EUh3IGi2oLGWbMJ1pti88Vbl&bDb ztW#34-dJ(aNvJpClERJmR1br$VwC|qp~gUawZdqhZ5+F(YMpb@4oF;%(U!<-cY}Xl zIXIC8X((lU{MU`0b68}coWEiNbjXR#P(J(~&D4385T zyc=RYF2JEysW5YHi*e@s76Q!~&Ny=IqYczOz{uL5=PfwJS+e1VQ=E?`r?(&-nJy={ zVC~4cEJC;k;KT@HDzgapKs{0r<}~FY%sDDTn3GkE38$ z$yU#c8BDfD7;KF&px5^?qRX!{Kkb6*G}G9;by8>vF{D%1Ey~Pl`j*M`PxNlmD;NUS zdF~eKUfcx79d8^F)ER28o)@80C#SJ2QLo{O`%l{I>G{lTcE~iB$LYl)qgST57qLfE zLebLFupg%PK5d9pCjbaL6aYnSloFCo1V90&2!MjNWUG`Av=1APq(_7z4S* z7J?=Br1mQYAIyM9W@z!c-KZlySbz>V;~aO z)yt25A|5pzg^ladGZXt>38M_>XGVzk+|zdIm;{f>8i3Jbs1b}D zjhn>y6C4>6`sgqo4AM}DAg#lw{n)&u=@=W-_F$Zy2A2tpD!7H>8(NTIn$dd!_K|qM zbUu3SJuI1Q6gpJU^_<(3cT|8Hs~q$wL<-PpptPehmZL$7)eYc9zN{{M(K{i|0Wk(0 z&QF%r?-oxBTl@3VB@>&1B;E=)Kk7UT^ewVW`ifXX=`gH^fug0@C4Ggbp>!0HhSFoi zAW0At*d;xO@i2it)h)s!{h>GUr$7cE(ZJ|B;(^hBScii#rVNa(!y6d=Ml>)^RPn$V zoP^@12QdyOPyn-Zjy1qvL)&-)CWIj#G+ey5Pz#l3p)3jz`f8*3Bq-!ETE5dcpQA zZwTspkDTdx!L}#RUdSaHST6(=3$z#77z(r(Mydtcr$=lox(|c3ILGrM}Hoqeq?D`{Y`k^sCR{c6%b%pXtFUOSiGGCR_T|ROOZ#LO$=aC+!jld^SCsmS7)v)+YPqs z3WL`=jgrEBd?j6b58fNtjdvq=;ah)ptIYZm-Zh6qC3s_832&b(;+=7Myj`xS)KhWJ zt0=*8b4i(X6QC9G#=0WjMpwaG>hgFyU0JEsM{!jKbp-j-O1(OT+zM)z@y7hk`0qIK zPvCD7W!M{QZ$kgG(%vS#w{99VY+~c8jGPlFQvpx!pnn{{!TaoXqr?noOdY~E`@zji zrJkEWnKCG|X!#)WbsbXnAe9$xODLh%ypB4g@4)A2)Slpr0H4^5_U7?6KAf+SR_9P+ z8m-|;RdBAJ+ze`nS%Qp|ShpD?B~~XL(#mygx@is{Ch?IFUTk4 zzp8-tj^n@6crUhE@&o++UHo+@)zB$5)Dt_<4>f~0bg9?T8*!e;H>H-wkf3k*1Vq(7V&S#}-0=FG{LMU#T1OFlx`CCH2gH z@I=`VllpS5hi&&Rw;*So)TT*rO`R#BFRK@aaK#icQ0ujpQ8%YVGhNQQ{iro7yq1uA zT4WE6ZRfij*(Q-C(lXK&j^AhYnL0_2tf5<*lo8|H3p9oNmB9u3=J@9Y3AN@B^lMt= zH;XIcqq-7FO`yD%1m#Qo5{v0VP62Xd%g0PlQ@*`Cldgr@Mv@w;eNJSfeT%kQaNM0n z-IO9bC*xfYT4MyGoHiq|NLqVWkNT3N-FP10xqFSsN}qMq=6W5wXRlAvGUo*C2~T@A z!!GC#AeEOEGdlGId#C(-F1?XG^I-g{SJJs4X2-!N{fgE-%8~Z0Jq)$fUaLnZWJJDi zvQkiw;q;+s`ytU$J?}UPuTRSri|E>kp310u6d0!S;Ei_uLUL4(ZiY^44*Z!Y3c`mIr9|2b~LRyd2FDV*_Qoasy zHqvpAp7XQ@t7oX+%+V1BP7>jo5eR2?YP*?to?@)Pd2QkH>M>i!k8+05n#7<_rsW2B zK9N@9HSlm$+tA7%C)aJSg6|;OTSec?vNmqhDaLHtb4fJ2W?07YHcGh}1i$3UvAwN( z!3@jtoYfugt7$(tie|^swiCGcQG;4jKd&o9KXFS$kn`poVvDd%FQ=0^^u85%j|C%` zb&Ta$N=ubd#4%j6-4gy|^u040dy+%R5*gK=&^Wq^cw@CLp>hl^9)H40-}*ppjg|+s zGLeC5uSW!SwknY)QtkB!f!Y=#1B%FG7N~iCYBlEs8)eO))(pnv&&7;W{1}aK5hJT2 zs2ZPeY$fE=5*8TSX6A(v`aL6rlv&gHkuLW2!1HgX9!KntW6yg3Qm+5DIgBNkpPqTJ z(W&RDr_?RIVz4c0-^IwCc4Lt4WT|)IMJ)9gajom_KF+Pe`ue~wZ( z4gTxefm$%bnr24J7grDx2n@AEz`sfjm@loSFG!8$YU1zSpZ&U zMGSA2*es(tnN{1kv*F87wTH8>sl9FiOrDDA^&VM05tq?;(t>dp4!bDn`5qoJZ`?!j zvW5%uo%TIduQheEZ{#8C?L{J@b({~W=j_Ro4OWSvy{F3t`#0;~ilpPXY>P2aFLD=1 z&yVTr8(;S$d!G3Ab<^x2RU?jnw|&%0$seC8ez(2FXd4Tk{lC$Rr`PL7JQ;f$)j5p$ z46g!~`K9Fc1zFlFg$U*-Y{>2ya<{Ss&E!mMqjB22jmDK&f}cx-b*|IHdzLYg_%_Na zy&dhh7zb(_;2yAxEZ3X_w|Ym)twk1C|Go~+f>`YNd#z!kxB+_`#DVcZ5x>b-!p?JI zNgjUp*&Xe}4w&8@@5b)}W*Qjb&nvaU`OX!L#V6^(esI6toEPzXg!Hpq7jS2{f*sa* zd>%s|11hs@8kVlmp7FLX>eUHx_ID-dTa(yHM-PmNCVj1VWi#sd8K?&GgEb3wRN|I_-tm}bTkZfC?*O@H@C!B%w_Cp1 z*$gc@*(rZUW!jz=EbRRPtPWN_EqKjw*ZV#?5#2FaNi=65NkoBd+;u;NmKX<~fUc-+ z8xj5vwt!gM6d+PjJUuuK@g5-+7BZ;%)b|sWk<$Z5!*@l|qEfkG@T< zO_10FtUd&dxc_O)j0`_xOSkfan)XScS!KKF{rGko~kdk z2epW~!|%!ZG6xYu6EC)X9BUb_a*|bw5}(bLUO{#exVlxViKnIwqX*T_yBoZ7bQIj^ zwLb38t>=!vzLyZ))mgibXq(apbp>kk`MT-uSz$VbaEkZN0)v6del{Mg73q4n}=K*|jAa&XDBXzE!ug^zBe8kgY$4d8Pv zKRWoaksm_q<<)?c8RX?)c6rN^<+(2Wb!V41E?thgxL%9D4*YGzAJe_~8(`)jE(XDI zW<|%+OiN3yJJ;3Fu|%#KKmNhkKWO_^({C@sU~+vcJC>OOxjt7ISDB24tfgZ~d+r6G zb-5*Xs_ms!9a%}%wlmdgGLfqOIwpKWf^^ahZkmZhGsn{0q?Vw$+*&l)qHODuT%oc# zw6!*OYL#;RAk~Z-LT4|nrj8>dx#%*?1z}AG#Eb!;_^B2^QT;sN`&6#_RYIs%bJd@c z@6`$@ZqIetI%||`#nDW^NTUs}Urk^xn(L4TZLT9YST6{yt1ZeGb9>mm&8}^iY?o}6 zq=mhDHCO%EFW#9OW^$Ejty4-{kyURnueD>Tz=6D)(u8F~7zZ|obz`~&2}HtFsGiel z+jybTFI;Gmq~#3I)s`~9&D5?nqdzGk(!Y?~h{m1tb#f&UyO`TZ2v%FgFlp98qkb)u zY=mHT(3)3tD09^$+M5t}F`N3gcg3@|3{-N4q#4oB87k%sXj7z332lnBspTEnOm2$C zH_EJ0$r@$WXoK!~w9#}ts;vh7jy9TpMq!NAujvS?UoWSwwETuw;4L0r1s!fPCSTjo&uCqb{=RhkzQN;+#p8@+Gp9)q!x;Hm(_gtqF3 zMiX#lH363x?GcXlh>Z4#RhzR;ZO+=lx$0S?C#XhLjySbB%l}pLpc6Ef^b=ju#paAsMB;xpSD&yRcffOe__~wCR($lGCwUjMsKi#T~ z+qMKNj+;&#HxqGaBE@mjiQ{H#hj#Svo16$SO{it`skJRStz5RD*b3EKUIip-gF%Ia z(u@YjbAx&!X*KORLKDWL6F|mHF;e){O5{|}>Fd=d%chB1AvcJr!=k2BYz${gE9kI`8dKV)T=e4qMnXSZwW=b!#hhFGA&CRGKkmk(T!B&GF%{D!{=Ilbns&% zKZMrHs{tu9$jd>|sM<2D7muuJP}yv*E7#Su1wY%(sOoXGv!v^Zv;Sxa8{3Aj`{eGLPWz6kOR$^q)|Bs_)PF@eA6_pYZBW`Ej{%%SZeE z>R{j9UfBT~_^-L@U$#~M8?xJ~|1ygV@Z4y}-n1o~&9pwQ zS|86eHf531RvQMe83c5H*MsCB+e;V<1J+-_9#H!eu$N^spO8jt;kef*k_3rW zO<8-1HsQqA;8%5};lB|c{zO>(TbZd|z<}9$3(@;Te*wg1pz}Wwy!;&8po=Af;F|18 z({hVxH^auWFboKZZ0D+f12xR(-f9`3ngxDf^CPY=+G@)H1ri&?#A(eRVQBWdwkngW zpfp3XAoTj?G&oEtSJM*$?W<9 z$ZH#xAgOihvJ}M#t#Q`2!_I2kjk@B(=;&ymU89~xjQ*&h-Qe6dBFmod5Ui1m+P^q> zQeIP{0T~q>Mg@o3c8!CKzWQrI&}Bz{7={966Zm!kJ|uU+V4#)I4tg1CP!l{vTkVC% za8O$kFfGmi-{Jx6 z_XFwSn;CUrvC!7P;Y4G5Sg<{ug6%gJ*70EYFcs;y6oQUf>=dz_U)8w{hWZ zJmQT$R=n-y4J#V#rHJyts`gxMB)h?6GdkPw$Wo=SCqPO6@VB;P#Ff$!vE1Wo1D1=m zBgk6OWLsJTPsIjU=mm2HvxMOpCx2NSdaVcrgYDrPS*;BS01CLU1j}S?yJNDp-Dj`1 z-F8{q&gN^|b@O7-Y_zsr8lA$0ZqyKFV#1t9z*PM-XW!4Q>?(omDxT~r;~Dj%2bbMW zJb!g4`YGt=>mPM@LWFx0XI2pzRzxJB?S5r>JQeVG%H#3WcfsSmUI?LiJS9Ayig>hs zwpt~kKjlZ&I9ps8XL}~#{fx&u_xLzro@u~Lc>s>bEOV>BY}jF4M)iHr`TrSwEHu6O zbUW2agYx0$^4gZ*WLW(kCd1*3+P7G(2_6%~vzb~7XG98TL<-fa_VU%L7y$+n8o^IJ zf;F{j)tOqg>YG}%YE7+L6-%xfOQtx*eswPp2D;S*C;SUADNeN23s&|QtnAMQvOnv| z{%oU`ef5$!p6N!FZ99Uv>o_{*HtzaEJ>MGrz`*h9 z5N+V+1pjjy|BD8Hhw=FUv-Y8oeluUNntT5v9?K(&$CVJs^DGc|i$UU3lVE8=(EW?pxh*QNfa z{KWpD^wNR^_5vm2u6%wbpI=yaQfq}PsjcNltMMneFj2#Yfv$h(>H3E!8=kOUB=ppD zA^0E5w$|^#_#e*1oToh`55T6o+YiOWKGY`Gs?ELDYOSHx>a3yG>RUst)mlTXmDW&e zg%n@lx3Pv=t60M&P_#9mhTX5aO1wAFiGR$Gs|I;o800Sp$Y1u5zf8F!UaMY#-t{>d zT+^_Fj0@|=ALN@eu65T}zXyr^y^I=pa0iW-K!xx4b|S=N8MtdZTV59NT^8)CSBcm&Q>Wi;>)rzlrRh-#XEk2QjIJ2uFzK~^GkOrpWh1xUXg?8yLr0ANEI>2>1a1W$>#gp=ta>JumwzaNYZAIG*^1eEJcz?-g#u>b3~f z?Ovsc-oBM{NEJfh8}KecErM&}9Ik2Sa6>CymC)CeMf`ez_;nBQ>))M<=+_IlO$WSI zMe}!EROEW7B4*#HbA!YOm{K~iiSG7`IvdRvP$%z{bi$vo1e_3^R%Z)0cs|X+zLMk( zmvmn7M&cE31YYrm^NKgbE8Z|(k(w%A@rHQC&!D@OAYI;ceYoi5rVUVTx&Y-Sk?*z0 z-wKewJ&+#2l7>OXFH&KhWKqcy*qxNtV<&(yx{;g;feexKmswrPW(cJna~EY3pv zxj_55Hn>~H;BGm+yOrqOtw8T?Ila3jdUwm{9RU};yCvfJ0wS;kI~$KvIqj5XP~`1Cz6`^cveX&Mm*Sqj6lsoYVLD)M2f*F-fV=Ha z*>&Sz#N_dCced&V8_&~tVGDGvt#(^Rc{_EKUj?K5${XcZ)%P2owd%15eOLq@Rtet7 zsJ#y!%GBW!y~<95@|A${RRD?$Ue3`MVoOQid_QMx?dt%nuRXB7M!eeuqjK-ixVJ`<5>)rCR{UL`!edaMIakY9KH4?+8t52 zJAz_CgXrM88^CqfgX`|^Wz-KB$;&-nZl?u&S6I6nu*OMesTJop0e|0k{C)FqF=U-> z*1ea?`DnaGPILE-sNXljT@uY$Tdg&d(?)(Y8-vA#-eq`C`Fy{p629M4h*>uJ>W7(E z%#=nOPj$&|vCF~sPxE)FfQyDP`n@>^Bi;cgFuo^;7~Yecso-5JV67Raj|A9p7mSbl z!8m3^lh0s$TnFQfK^U`)GctY;C%gP)W0-7qNf#rXOJbyRL5y_H#YpEQMmlF=BsyY= zk8DXCDTp*)Nd&f@Yu2ip>>-{k1t5W0HKtC8aOi268vN>;P)b zZUD7re*i$!bXRNU0BU^NfIDVXOmpJsdMWbdZF zj2doP>$1#`D)0yIa;($gayn49F{2uIK2+hNk>Bd^3|>Swoc%j*;TI6_lM3!fZRAIf z%2M{dKlq0uEXp&b8$h}9r&)F953=gup`C{=zwuY=FTeHq_CLE*c=zA64{d8enaSTi zyytYGl2wDi9>c->)B;rDh| z4nK@l+Bq{bgx@Dp$IBD=J)+{K!VKOVfq(zI6ZKoen!m}Zj4=C%Qq_=4>YBn+kM(qx z+k?N+>si&zgT3Zo^O9a%y@@Bt#_+id&k`NN6QBF=%n^Q49-q5$&40gK`ak{`U#S=W z!&~O$9}bp?{+gtG?ZjsWt@5eK-FTLW&tAKyNs;%oVl6%^%lCMck)ON+LK;vXFP(vC zajXVULD{#E)VH)p%51^7^?$v1k_i~7jo=8kO-;{y`n!y0t=NwDb}N+Yz~2^_Yf|=2 zdA6yHl6>}(|F+=m2+5yP7uCxs&(ZKH)e^q>OqF|5EA@%Tx6oelCd3`;CwPX6Pr+?M zX(FKCN5SX%*=qPc!9&su-$KZz#qg8Qu0~Rx&uLMg@n`{fdmZH_g)2U3I)`WUIPyt6 z>xHMgWXvDR82E%O>Ew-Luy`>g?-=-hI+k9Mi++-k@2TKBZ(`{ra-obAp2(#v`P?3# k)#Y<-d@Etcee0p>Z|=VjV7K6I{Kel~7XLqI-yZ`12Yb?3#sB~S literal 0 HcmV?d00001 From 4e034c28c719526e015b07be9f48322a53269365 Mon Sep 17 00:00:00 2001 From: dragonfly91 Date: Mon, 22 Jun 2015 15:31:27 +0530 Subject: [PATCH 101/155] Fixing bug 3259069 --- .../Cmdlets/Container/GetAzureBackupContainer.cs | 7 ++++--- .../GetAzureBackupVaultCredentials.cs | 14 +++++++------- .../Vault/SetAzureBackupVaultStorageType.cs | 4 ++-- 3 files changed, 13 insertions(+), 12 deletions(-) diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/GetAzureBackupContainer.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/GetAzureBackupContainer.cs index 3e9c9fa2c9ce..f0a9dd471630 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/GetAzureBackupContainer.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/GetAzureBackupContainer.cs @@ -56,7 +56,7 @@ public override void ExecuteCmdlet() ListContainerResponse listContainerResponse = AzureBackupClient.Container.ListAsync(queryFilterString, GetCustomRequestHeaders(), CmdletCancellationToken).Result; - WriteVerbose(string.Format("# of fetched containers = {0}", listContainerResponse.Objects.Count)); + WriteDebug(string.Format("# of fetched containers = {0}", listContainerResponse.Objects.Count)); List containerInfos = listContainerResponse.Objects.ToList(); @@ -68,15 +68,16 @@ public override void ExecuteCmdlet() { return containerInfo.ParentContainerName != ContainerResourceGroupName; }); + WriteDebug(string.Format("# of containers after resource group filter = {0}", containerInfos.Count)); } - WriteVerbose(string.Format("# of containers after resource group filter = {0}", listContainerResponse.Objects.Count)); - List containers = containerInfos.ConvertAll(containerInfo => { return new AzureBackupContainer(containerInfo, containerInfo.ParentContainerName, containerInfo.FriendlyName, Location); }); + // When container resource name and container resource group name are specified, this parameter set + // identifies a container uniquely. Thus, we return just one container instead of a list. if (!string.IsNullOrEmpty(ContainerResourceName) & !string.IsNullOrEmpty(ContainerResourceGroupName)) { if (containers.Any()) diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/GetAzureBackupVaultCredentials/GetAzureBackupVaultCredentials.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/GetAzureBackupVaultCredentials/GetAzureBackupVaultCredentials.cs index 4cd996cc30b7..dd7605f44565 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/GetAzureBackupVaultCredentials/GetAzureBackupVaultCredentials.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/GetAzureBackupVaultCredentials/GetAzureBackupVaultCredentials.cs @@ -54,9 +54,9 @@ public override void ExecuteCmdlet() string resourceType = "resourceType"; string displayName = subscriptionId + "_" + ResourceGroupName + "_" + ResourceName; - WriteVerbose(string.Format(CultureInfo.InvariantCulture, - "Executing cmdlet with SubscriptionId = {0}, ResourceGroupName = {1}, ResourceName = {2}, TargetLocation = {3}", - subscriptionId, ResourceGroupName, ResourceName, TargetLocation)); + WriteDebug(string.Format(CultureInfo.InvariantCulture, + "Executing cmdlet with SubscriptionId = {0}, ResourceGroupName = {1}, ResourceName = {2}, TargetLocation = {3}", + subscriptionId, ResourceGroupName, ResourceName, TargetLocation)); X509Certificate2 cert = CertUtils.CreateSelfSignedCert(CertUtils.DefaultIssuer, CertUtils.GenerateCertFriendlyName(subscriptionId, ResourceName), @@ -69,9 +69,9 @@ public override void ExecuteCmdlet() try { // Upload cert into ID Mgmt - WriteVerbose(string.Format(CultureInfo.InvariantCulture, "RecoveryService - Going to upload the certificate")); + WriteDebug(string.Format(CultureInfo.InvariantCulture, "RecoveryService - Going to upload the certificate")); acsNamespace = UploadCert(cert, subscriptionId, ResourceName, resourceType, ResourceGroupName); - WriteVerbose(string.Format(CultureInfo.InvariantCulture, "RecoveryService - Successfully uploaded the certificate")); + WriteDebug(string.Format(CultureInfo.InvariantCulture, "RecoveryService - Successfully uploaded the certificate")); } catch (Exception exception) { @@ -90,7 +90,7 @@ public override void ExecuteCmdlet() directoryPath = TargetLocation; } string filePath = Path.Combine(directoryPath, fileName); - WriteVerbose(string.Format("Saving Vault Credentials to file : {0}", filePath)); + WriteDebug(string.Format("Saving Vault Credentials to file : {0}", filePath)); File.WriteAllBytes(filePath, Encoding.UTF8.GetBytes(vaultCredsFileContent)); @@ -187,7 +187,7 @@ private string GenerateVaultCredsForBackup(X509Certificate2 cert, string subscri DataContractSerializer serializer = new DataContractSerializer(typeof(BackupVaultCreds)); serializer.WriteObject(writer, backupVaultCreds); - WriteVerbose(string.Format(CultureInfo.InvariantCulture, "RecoveryService - Backup Vault - Successfully serialized the file content")); + WriteDebug(string.Format(CultureInfo.InvariantCulture, "RecoveryService - Backup Vault - Successfully serialized the file content")); } return Encoding.UTF8.GetString(output.ToArray()); diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/SetAzureBackupVaultStorageType.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/SetAzureBackupVaultStorageType.cs index cfb9d90fadf4..ef821c18056c 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/SetAzureBackupVaultStorageType.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/SetAzureBackupVaultStorageType.cs @@ -40,7 +40,7 @@ public override void ExecuteCmdlet() throw new ArgumentException("Please provide a vaild storage type."); } - WriteVerbose("Updating the storage type."); + WriteDebug("Updating the storage type."); UpdateVaultStorageTypeRequest updateVaultStorageTypeRequest = new UpdateVaultStorageTypeRequest() { @@ -52,7 +52,7 @@ public override void ExecuteCmdlet() AzureBackupClient.Vault.UpdateStorageTypeAsync(updateVaultStorageTypeRequest, GetCustomRequestHeaders(), CmdletCancellationToken).Wait(); - WriteVerbose("Update successful."); + WriteDebug("Update successful."); }); } } From ab44b21af39b4e727f549969e23cf8f24f2c7d6d Mon Sep 17 00:00:00 2001 From: pragrawa Date: Mon, 22 Jun 2015 17:19:43 +0530 Subject: [PATCH 102/155] Vault changes --- .../AzureBackupClientAdapter/VaultAdapter.cs | 15 +++++++-- .../AzureBackupCmdletBase.cs | 2 +- .../AzureBackupVaultCmdletBase.cs | 2 +- .../Cmdlets/BackUp/TriggerBackUp.cs | 2 +- .../SetAzureBackupProtectionPolicy.cs | 2 +- .../Cmdlets/Vault/GetAzureBackupVault.cs | 7 +++-- .../Cmdlets/Vault/NewAzureBackupVault.cs | 3 +- .../Cmdlets/Vault/SetAzureBackupVault.cs | 4 ++- .../Vault/SetAzureBackupVaultStorageType.cs | 1 + .../Commands.AzureBackup.csproj | 8 ++--- .../Helpers/ContainerHelpers.cs | 4 +-- .../Helpers/ProtectionPolicyHelpers.cs | 31 +++++++++---------- .../Helpers/VaultHelpers.cs | 8 ++--- .../Models/AzureBackupBaseObjects.cs | 6 ++-- .../Models/AzureBackupContainer.cs | 2 +- ...reBackupVault.cs => AzurePSBackupVault.cs} | 6 ++-- .../Commands.AzureBackup/Models/JobObjects.cs | 4 +-- .../Models/ProtectionPolicy.cs | 2 +- 18 files changed, 58 insertions(+), 51 deletions(-) rename src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/{AzureBackupVault.cs => AzurePSBackupVault.cs} (91%) diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupClientAdapter/VaultAdapter.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupClientAdapter/VaultAdapter.cs index 9af4acc39f07..b9e1ccb75354 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupClientAdapter/VaultAdapter.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupClientAdapter/VaultAdapter.cs @@ -78,10 +78,19 @@ public void UpdateStorageType(string storageType) /// Gets storage type details of the specified resource ///

/// - public StorageDetails GetStorageTypeDetails(string resourceGroupName, string vaultName) + public string GetStorageTypeDetails(string resourceGroupName, string vaultName) { - var response = AzureBackupClient.Vault.GetResourceStorageConfigAsync(resourceGroupName, vaultName, GetCustomRequestHeaders(), CmdletCancellationToken).Result; - return (response != null) ? response.StorageDetails : null; + string storageType = String.Empty; + try + { + var response = AzureBackupClient.Vault.GetResourceStorageConfigAsync(resourceGroupName, vaultName, GetCustomRequestHeaders(), CmdletCancellationToken).Result; + storageType = (response != null) ? response.StorageDetails.StorageType : null; + } + catch(Exception) + { + } + + return storageType; } /// diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupCmdletBase.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupCmdletBase.cs index 29f2f02a0d04..0ca9747d3182 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupCmdletBase.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupCmdletBase.cs @@ -67,7 +67,7 @@ protected void InitializeAzureBackupCmdlet(string rgName, string rName) /// Initializes required client adapters /// /// - protected void InitializeAzureBackupCmdlet(CmdletModel.AzureBackupVault vault) + protected void InitializeAzureBackupCmdlet(CmdletModel.AzurePSBackupVault vault) { InitializeAzureBackupCmdlet(vault.ResourceGroupName, vault.Name); } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupVaultCmdletBase.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupVaultCmdletBase.cs index 16ee0fad41e9..581d1b8b5aec 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupVaultCmdletBase.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupVaultCmdletBase.cs @@ -31,7 +31,7 @@ public abstract class AzureBackupVaultCmdletBase : AzureBackupCmdletBase { [Parameter(Position = 0, Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.Vault, ValueFromPipeline = true)] [ValidateNotNullOrEmpty] - public AzureBackupVault vault { get; set; } + public AzurePSBackupVault vault { get; set; } public override void ExecuteCmdlet() { diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/BackUp/TriggerBackUp.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/BackUp/TriggerBackUp.cs index d5a41254fde7..f909f5b7c646 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/BackUp/TriggerBackUp.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/BackUp/TriggerBackUp.cs @@ -45,7 +45,7 @@ public override void ExecuteCmdlet() WriteDebug("Triggered backup. Converting response"); - var operationStatus = GetOperationStatus(operationId); + var operationStatus = TrackOperation(operationId); this.WriteObject(operationStatus.JobList.FirstOrDefault()); }); } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/SetAzureBackupProtectionPolicy.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/SetAzureBackupProtectionPolicy.cs index 19c3c8dbedde..1f462b977c56 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/SetAzureBackupProtectionPolicy.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/SetAzureBackupProtectionPolicy.cs @@ -70,7 +70,7 @@ public override void ExecuteCmdlet() WriteDebug("Making client call"); var response = AzureBackupClient.GetProtectionPolicyByName(ProtectionPolicy.Name); - var vault = new CmdletModel.AzureBackupVault(ProtectionPolicy.ResourceGroupName, ProtectionPolicy.Name, ProtectionPolicy.Location); + var vault = new CmdletModel.AzurePSBackupVault(ProtectionPolicy.ResourceGroupName, ProtectionPolicy.Name, ProtectionPolicy.Location); var policyInfo = ProtectionPolicyHelpers.GetCmdletPolicy(vault, response); diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/GetAzureBackupVault.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/GetAzureBackupVault.cs index 1faf8e17f8bd..59cc803aecf3 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/GetAzureBackupVault.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/GetAzureBackupVault.cs @@ -13,6 +13,7 @@ // ---------------------------------------------------------------------------------- using Microsoft.Azure.Commands.AzureBackup.Helpers; +using Microsoft.Azure.Commands.AzureBackup.Models; using Microsoft.Azure.Management.BackupServices.Models; using Newtonsoft.Json; using System; @@ -34,7 +35,7 @@ namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets /// /// API to get backup vaults in the subscription /// - [Cmdlet(VerbsCommon.Get, "AzureBackupVault"), OutputType(typeof(AzureBackupVault), typeof(List))] + [Cmdlet(VerbsCommon.Get, "AzureBackupVault"), OutputType(typeof(AzurePSBackupVault), typeof(List))] public class GetAzureBackupVault : AzureBackupCmdletBase { [Parameter(Position = 0, Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.ResourceGroupName)] @@ -75,9 +76,9 @@ public override void ExecuteCmdlet() }); } - private IEnumerable GetCmdletVaults(IEnumerable backupVaults) + private IEnumerable GetCmdletVaults(IEnumerable backupVaults) { - List resultList = new List(); + List resultList = new List(); if (backupVaults != null) { foreach (var backupVault in backupVaults) diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/NewAzureBackupVault.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/NewAzureBackupVault.cs index bc522f4cfdf3..de97d9dd4807 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/NewAzureBackupVault.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/NewAzureBackupVault.cs @@ -29,14 +29,13 @@ using System.Text; using System.Threading.Tasks; using System.Xml; -using CmdletModel = Microsoft.Azure.Commands.AzureBackup.Models; namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets { /// /// API to download the azure backup vault's credentials. /// - [Cmdlet(VerbsCommon.New, "AzureBackupVault"), OutputType(typeof(CmdletModel.AzureBackupVault))] + [Cmdlet(VerbsCommon.New, "AzureBackupVault"), OutputType(typeof(AzurePSBackupVault))] public class NewAzureBackupVault : AzureBackupCmdletBase { [Parameter(Position = 0, Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.ResourceGroupName)] diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/SetAzureBackupVault.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/SetAzureBackupVault.cs index b3d0f735f457..50565137cf40 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/SetAzureBackupVault.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/SetAzureBackupVault.cs @@ -13,6 +13,7 @@ // ---------------------------------------------------------------------------------- using Microsoft.Azure.Commands.AzureBackup.Helpers; +using Microsoft.Azure.Commands.AzureBackup.Models; using Microsoft.Azure.Management.BackupServices.Models; using Newtonsoft.Json; using System; @@ -28,13 +29,14 @@ using System.Text; using System.Threading.Tasks; using System.Xml; +using CmdletModel = Microsoft.Azure.Commands.AzureBackup.Models; namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets { /// /// API to download the azure backup vault's credentials. /// - [Cmdlet(VerbsCommon.Set, "AzureBackupVault"), OutputType(typeof(AzureBackupVault))] + [Cmdlet(VerbsCommon.Set, "AzureBackupVault"), OutputType(typeof(CmdletModel.AzurePSBackupVault))] public class SetAzureBackupVault : AzureBackupVaultCmdletBase { [Parameter(Position = 1, Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.StorageType)] diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/SetAzureBackupVaultStorageType.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/SetAzureBackupVaultStorageType.cs index 5d49b511b95f..c0f8da6fac4c 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/SetAzureBackupVaultStorageType.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/SetAzureBackupVaultStorageType.cs @@ -12,6 +12,7 @@ // limitations under the License. // ---------------------------------------------------------------------------------- +using Microsoft.Azure.Commands.AzureBackup.Models; using Microsoft.Azure.Management.BackupServices.Models; using System; using System.Collections.Generic; diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj index ce224cabfb93..8dd309de2a93 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj @@ -76,7 +76,7 @@ False - Resources\Microsoft.WindowsAzure.Management.BackupServicesManagment.dll + ..\..\..\..\..\..\Git4\dummy\azure-sdk-for-net\src\ResourceManagement\AzureBackup\BackupServicesManagment\bin\Net45-Debug\Microsoft.WindowsAzure.Management.BackupServicesManagment.dll False @@ -157,7 +157,7 @@ - + @@ -178,10 +178,6 @@ {52643bd5-6378-49bd-9f6e-dac9dd8a867b} Commands.Compute - - {e1f5201d-6067-430e-b303-4e367652991b} - Commands.Resources - diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Helpers/ContainerHelpers.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Helpers/ContainerHelpers.cs index 18438157a405..a898af793140 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Helpers/ContainerHelpers.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Helpers/ContainerHelpers.cs @@ -33,9 +33,9 @@ namespace Microsoft.Azure.Commands.AzureBackup.Helpers { - public static class ContainerHelpers + internal class ContainerHelpers { - public static string GetQueryFilter(ListContainerQueryParameter queryParams) + internal static string GetQueryFilter(ListContainerQueryParameter queryParams) { NameValueCollection collection = new NameValueCollection(); if (!String.IsNullOrEmpty(queryParams.ContainerTypeField)) diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Helpers/ProtectionPolicyHelpers.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Helpers/ProtectionPolicyHelpers.cs index f13d723c4b53..fada83a542ae 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Helpers/ProtectionPolicyHelpers.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Helpers/ProtectionPolicyHelpers.cs @@ -40,7 +40,7 @@ public static class ProtectionPolicyHelpers public const int MinRetentionInWeeks = 1; public const int MaxRetentionInWeeks = 4; - public static AzureBackupProtectionPolicy GetCmdletPolicy(CmdletModel.AzureBackupVault vault, ProtectionPolicyInfo sourcePolicy) + public static AzureBackupProtectionPolicy GetCmdletPolicy(CmdletModel.AzurePSBackupVault vault, ProtectionPolicyInfo sourcePolicy) { if (sourcePolicy == null) { @@ -50,7 +50,7 @@ public static AzureBackupProtectionPolicy GetCmdletPolicy(CmdletModel.AzureBacku return new AzureBackupProtectionPolicy(vault, sourcePolicy); } - public static List GetCmdletPolicies(CmdletModel.AzureBackupVault vault, IEnumerable sourcePolicyList) + public static List GetCmdletPolicies(CmdletModel.AzurePSBackupVault vault, IEnumerable sourcePolicyList) { if (sourcePolicyList == null) { @@ -87,11 +87,10 @@ public static BackupSchedule FillBackupSchedule(string backupType, string schedu backupSchedule.ScheduleRunTimes = new List { scheduleRunTime }; - azureBackupCmdletBase.WriteDebug("Exiting GetBackupSchedule"); return backupSchedule; } - private RetentionPolicy FillRetentionPolicy(string retentionType, int retentionDuration) + private static RetentionPolicy FillRetentionPolicy(string retentionType, int retentionDuration) { ValidateRetentionRange(retentionType, retentionDuration); var retentionPolicy = new RetentionPolicy @@ -103,14 +102,14 @@ private RetentionPolicy FillRetentionPolicy(string retentionType, int retentionD return retentionPolicy; } - private void ValidateRetentionRange(string retentionType, int retentionDuration) + private static void ValidateRetentionRange(string retentionType, int retentionDuration) { if(retentionType == RetentionDurationType.Days.ToString() && (retentionDuration < MinRetentionInDays || retentionDuration > MaxRetentionInDays)) { var exception = new Exception("For Retention in days , valid values of retention duration are 7 to 30."); - var errorRecord = new ErrorRecord(exception, string.Empty, ErrorCategory.InvalidData, null); - azureBackupCmdletBase.WriteError(errorRecord); + //var errorRecord = new ErrorRecord(exception, string.Empty, ErrorCategory.InvalidData, null); + //azureBackupCmdletBase.WriteError(errorRecord); throw exception; } @@ -118,14 +117,14 @@ private void ValidateRetentionRange(string retentionType, int retentionDuration) || retentionDuration > MaxRetentionInWeeks)) { var exception = new Exception("For Retention in weeks , valid values of retention duration are 1 to 4."); - var errorRecord = new ErrorRecord(exception, string.Empty, ErrorCategory.InvalidData, null); - azureBackupCmdletBase.WriteError(errorRecord); + //var errorRecord = new ErrorRecord(exception, string.Empty, ErrorCategory.InvalidData, null); + //azureBackupCmdletBase.WriteError(errorRecord); throw exception; } } - private string FillScheduleType(string scheduleType, string[] scheduleRunDays) + private static string FillScheduleType(string scheduleType, string[] scheduleRunDays) { if (scheduleType == ScheduleType.Daily.ToString() && scheduleRunDays != null && scheduleRunDays.Length > 0) { @@ -138,13 +137,13 @@ private string FillScheduleType(string scheduleType, string[] scheduleRunDays) } } - private IList ParseScheduleRunDays(string[] scheduleRunDays) + private static IList ParseScheduleRunDays(string[] scheduleRunDays) { if (scheduleRunDays == null || scheduleRunDays.Length <= 0) { var exception = new Exception("For weekly scheduletype , ScheduleRunDays should not be empty."); - var errorRecord = new ErrorRecord(exception, string.Empty, ErrorCategory.InvalidData, null); - azureBackupCmdletBase.WriteError(errorRecord); + //var errorRecord = new ErrorRecord(exception, string.Empty, ErrorCategory.InvalidData, null); + //azureBackupCmdletBase.WriteError(errorRecord); throw exception; } @@ -152,9 +151,9 @@ private IList ParseScheduleRunDays(string[] scheduleRunDays) foreach (var dayOfWeek in scheduleRunDays) { - azureBackupCmdletBase.WriteDebug("dayOfWeek" + dayOfWeek.ToString()); + //azureBackupCmdletBase.WriteDebug("dayOfWeek" + dayOfWeek.ToString()); DayOfWeek item = (DayOfWeek)Enum.Parse(typeof(DayOfWeek), dayOfWeek, true); - azureBackupCmdletBase.WriteDebug("Item" + item.ToString()); + //azureBackupCmdletBase.WriteDebug("Item" + item.ToString()); if (!ListofWeekDays.Contains(item)) { ListofWeekDays.Add(item); @@ -164,7 +163,7 @@ private IList ParseScheduleRunDays(string[] scheduleRunDays) return ListofWeekDays; } - private DateTime ParseScheduleRunTime(DateTime scheduleStartTime) + private static DateTime ParseScheduleRunTime(DateTime scheduleStartTime) { scheduleStartTime = scheduleStartTime.ToUniversalTime(); DateTime scheduleRunTime = new DateTime(scheduleStartTime.Year, scheduleStartTime.Month, diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Helpers/VaultHelpers.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Helpers/VaultHelpers.cs index 71497100e58e..19cb436a0f0b 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Helpers/VaultHelpers.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Helpers/VaultHelpers.cs @@ -37,16 +37,16 @@ public static class VaultHelpers /// /// /// - public static CmdletModel.AzureBackupVault GetCmdletVault(ClientModel.AzureBackupVault vault, ClientModel.StorageDetails storage) + public static CmdletModel.AzurePSBackupVault GetCmdletVault(ClientModel.AzureBackupVault vault, string storageType) { - var response = new CmdletModel.AzureBackupVault + var response = new CmdletModel.AzurePSBackupVault { ResourceId = vault.Id, Name = vault.Name, Region = vault.Location, ResourceGroupName = GetResourceGroup(vault.Id), - Sku = vault.Properties.Sku.Name, - Storage = storage.StorageType, + Sku = (vault.Properties != null) ? vault.Properties.Sku.Name : null, + Storage = storageType, }; return response; diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupBaseObjects.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupBaseObjects.cs index b07c7f1a8ec2..cf9c6d378f61 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupBaseObjects.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupBaseObjects.cs @@ -14,7 +14,7 @@ using Microsoft.Azure.Management.BackupServices.Models; -namespace Microsoft.Azure.Commands.AzureBackup.Models; +namespace Microsoft.Azure.Commands.AzureBackup.Models { public class AzureBackupVaultContextObject { @@ -44,7 +44,7 @@ public AzureBackupVaultContextObject(string resourceGroupName, string resourceNa Location = locationName; } - public AzureBackupVaultContextObject(AzureBackupVault vault) : this(vault.ResourceGroupName, vault.Name, vault.Region) + public AzureBackupVaultContextObject(AzurePSBackupVault vault) : this(vault.ResourceGroupName, vault.Name, vault.Region) { } } @@ -83,7 +83,7 @@ public AzureBackupContainerContextObject(AzureBackupContainer azureBackupContain ContainerUniqueName = azureBackupContainer.ContainerUniqueName; } - public AzureBackupContainerContextObject(AzureBackupVault vault, ContainerInfo containerInfo) + public AzureBackupContainerContextObject(AzurePSBackupVault vault, ContainerInfo containerInfo) : base(vault) { ContainerType = containerInfo.ContainerType; diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupContainer.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupContainer.cs index 5db59a6d3bcc..3dc451f0f81c 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupContainer.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupContainer.cs @@ -38,7 +38,7 @@ public class AzureBackupContainer : AzureBackupContainerContextObject public AzureBackupContainer() : base() { } - public AzureBackupContainer(AzureBackupVault vault, ContainerInfo containerInfo) + public AzureBackupContainer(AzurePSBackupVault vault, ContainerInfo containerInfo) : base(vault, containerInfo) { HealthStatus = containerInfo.HealthStatus; diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupVault.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzurePSBackupVault.cs similarity index 91% rename from src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupVault.cs rename to src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzurePSBackupVault.cs index b85a8d41dd8d..4df37e0e4e25 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupVault.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzurePSBackupVault.cs @@ -25,7 +25,7 @@ namespace Microsoft.Azure.Commands.AzureBackup.Models /// /// Represents Azure Backup vault /// - public class AzureBackupVault + public class AzurePSBackupVault { public string ResourceId { get; set; } @@ -41,9 +41,9 @@ public class AzureBackupVault public string Storage { get; set; } - public AzureBackupVault() : base() { } + public AzurePSBackupVault() : base() { } - public AzureBackupVault(string resourceGroupName, string resourceName, string region) + public AzurePSBackupVault(string resourceGroupName, string resourceName, string region) { ResourceGroupName = resourceGroupName; Name = resourceName; diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/JobObjects.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/JobObjects.cs index 9483e7727c96..2ee495336ae0 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/JobObjects.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/JobObjects.cs @@ -48,7 +48,7 @@ public class AzureBackupJob : AzureBackupVaultContextObject public List ErrorDetails { get; set; } - public AzureBackupJob(AzureBackupVault vault, Mgmt.Job serviceJob) + public AzureBackupJob(AzurePSBackupVault vault, Mgmt.Job serviceJob) : base(vault) { this.InstanceId = serviceJob.InstanceId; @@ -112,7 +112,7 @@ public class AzureBackupJobDetails : AzureBackupJob public List SubTasks { get; set; } - public AzureBackupJobDetails(AzureBackupVault vault, Mgmt.JobProperties serviceJobProperties) + public AzureBackupJobDetails(AzurePSBackupVault vault, Mgmt.JobProperties serviceJobProperties) : base(vault, serviceJobProperties) { if (serviceJobProperties.PropertyBag != null) diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/ProtectionPolicy.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/ProtectionPolicy.cs index f2402e810691..3553ccd653b2 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/ProtectionPolicy.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/ProtectionPolicy.cs @@ -51,7 +51,7 @@ public AzureBackupProtectionPolicy() { } - public AzureBackupProtectionPolicy(AzureBackupVault vault, ProtectionPolicyInfo sourcePolicy) + public AzureBackupProtectionPolicy(AzurePSBackupVault vault, ProtectionPolicyInfo sourcePolicy) : base(vault) { InstanceId = sourcePolicy.InstanceId; From eabf08234face5791e3ea1101f1791c5a3988832 Mon Sep 17 00:00:00 2001 From: pragrawa Date: Mon, 22 Jun 2015 17:31:40 +0530 Subject: [PATCH 103/155] merge issues --- .../Cmdlets/Container/GetAzureBackupContainer.cs | 7 ------- .../Vault/SetAzureBackupVaultStorageType.cs | 16 ---------------- 2 files changed, 23 deletions(-) diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/GetAzureBackupContainer.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/GetAzureBackupContainer.cs index 56391c6de468..647ba84a00c4 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/GetAzureBackupContainer.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/GetAzureBackupContainer.cs @@ -57,11 +57,7 @@ public override void ExecuteCmdlet() queryFilterString = ConstructQueryFilterString(); var containerList = AzureBackupClient.ListContainers(queryFilterString); -<<<<<<< HEAD WriteDebug(string.Format("Fetched {0} containers", containerList.Count())); -======= - WriteDebug(string.Format("# of fetched containers = {0}", listContainerResponse.Objects.Count)); ->>>>>>> dev List containerInfos = containerList.ToList(); @@ -76,13 +72,10 @@ public override void ExecuteCmdlet() WriteDebug(string.Format("# of containers after resource group filter = {0}", containerInfos.Count)); } -<<<<<<< HEAD WriteDebug(string.Format("Count of containers after resource group filter = {0}", containerInfos.Count)); // TODO: Container friendly name is not captures in Container response // BUG: Friendly name was previously assigned to ResourceName (vault name) -======= ->>>>>>> dev List containers = containerInfos.ConvertAll(containerInfo => { return new AzureBackupContainer(vault, containerInfo); diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/SetAzureBackupVaultStorageType.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/SetAzureBackupVaultStorageType.cs index bc2667688c5c..c0f8da6fac4c 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/SetAzureBackupVaultStorageType.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/SetAzureBackupVaultStorageType.cs @@ -41,24 +41,8 @@ public override void ExecuteCmdlet() throw new ArgumentException("Invalid storage type."); } -<<<<<<< HEAD WriteVerbose(String.Format("Updating the storage type. Type:{0}", Type)); AzureBackupClient.UpdateStorageType(Type.ToString()); -======= - WriteDebug("Updating the storage type."); - - UpdateVaultStorageTypeRequest updateVaultStorageTypeRequest = new UpdateVaultStorageTypeRequest() - { - StorageTypeProperties = new StorageTypeProperties() - { - StorageModelType = Type.ToString(), - }, - }; - - AzureBackupClient.Vault.UpdateStorageTypeAsync(updateVaultStorageTypeRequest, GetCustomRequestHeaders(), CmdletCancellationToken).Wait(); - - WriteDebug("Update successful."); ->>>>>>> dev }); } } From 1a8ceadfbeade60c50f757050a6a8fee629b0215 Mon Sep 17 00:00:00 2001 From: mkherani Date: Mon, 22 Jun 2015 17:39:03 +0530 Subject: [PATCH 104/155] Added some error handling --- .../Cmdlets/Container/RegisterAzureBackupContainer.cs | 11 ++++++----- .../Properties/Resources.Designer.cs | 11 ++++++++++- .../Commands.AzureBackup/Properties/Resources.resx | 3 +++ 3 files changed, 19 insertions(+), 6 deletions(-) diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/RegisterAzureBackupContainer.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/RegisterAzureBackupContainer.cs index 8e05f25313a9..70dcdd40aff9 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/RegisterAzureBackupContainer.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/RegisterAzureBackupContainer.cs @@ -23,6 +23,7 @@ using Microsoft.Azure.Management.BackupServices.Models; using MBS = Microsoft.Azure.Management.BackupServices; using Microsoft.WindowsAzure.Commands.ServiceManagement.Model; +using Microsoft.Azure.Commands.AzureBackup.Properties; namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets { @@ -35,15 +36,15 @@ public class RegisterAzureBackupContainer : AzureBackupVaultCmdletBase internal const string V1VMParameterSet = "V1VM"; internal const string V2VMParameterSet = "V2VM"; - [Parameter(Mandatory = false, ValueFromPipelineByPropertyName = true, ParameterSetName = V1VMParameterSet, HelpMessage = AzureBackupCmdletHelpMessage.VirtualMachine)] - [Parameter(Mandatory = false, ValueFromPipelineByPropertyName = true, ParameterSetName = V2VMParameterSet, HelpMessage = AzureBackupCmdletHelpMessage.VirtualMachine)] + [Parameter(Mandatory = true, ValueFromPipelineByPropertyName = true, ParameterSetName = V1VMParameterSet, HelpMessage = AzureBackupCmdletHelpMessage.VirtualMachine)] + [Parameter(Mandatory = true, 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 string VMResourceGroupName { get; set; } //TODO: public override void ExecuteCmdlet() @@ -91,8 +92,8 @@ public override void ExecuteCmdlet() { //Container is not discovered. Throw exception 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 + + WriteError(new ErrorRecord(new Exception(Resources.AzureVMNotFound), string.Empty, ErrorCategory.InvalidArgument, null)); } } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Properties/Resources.Designer.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Properties/Resources.Designer.cs index e6615b26f189..58372d895579 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Properties/Resources.Designer.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Properties/Resources.Designer.cs @@ -1,7 +1,7 @@ //------------------------------------------------------------------------------ // // This code was generated by a tool. -// Runtime Version:4.0.30319.34209 +// Runtime Version:4.0.30319.18449 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. @@ -60,6 +60,15 @@ internal Resources() { } } + /// + /// Looks up a localized string similar to The specified Azure Virtual Machine Not Found.. + /// + internal static string AzureVMNotFound { + get { + return ResourceManager.GetString("AzureVMNotFound", resourceCulture); + } + } + /// /// Looks up a localized string similar to The specified resource does not exist.. /// diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Properties/Resources.resx b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Properties/Resources.resx index 11366ab53caa..73ab213136b1 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Properties/Resources.resx +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Properties/Resources.resx @@ -117,6 +117,9 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + The specified Azure Virtual Machine Not Found. + The specified resource does not exist. From 4b95e068204125773da2ef7cfd7f145377fe2896 Mon Sep 17 00:00:00 2001 From: pragrawa Date: Mon, 22 Jun 2015 23:10:32 +0530 Subject: [PATCH 105/155] Policy changes --- .../NewAzureBackupProtectionPolicy.cs | 2 +- .../SetAzureBackupProtectionPolicy.cs | 2 +- .../Helpers/ProtectionPolicyHelpers.cs | 19 +++++++------------ 3 files changed, 9 insertions(+), 14 deletions(-) diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/NewAzureBackupProtectionPolicy.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/NewAzureBackupProtectionPolicy.cs index 924c5b181ce8..e9c01c03d859 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/NewAzureBackupProtectionPolicy.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/NewAzureBackupProtectionPolicy.cs @@ -55,7 +55,7 @@ public class NewAzureBackupProtectionPolicy : AzureBackupVaultCmdletBase public DateTime ScheduleRunTimes { get; set; } [Parameter(Position = 9, Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.RetentionType, ValueFromPipelineByPropertyName = true)] - [ValidateSet("Days", IgnoreCase = true)] + [ValidateSet("Days", "Weeks", IgnoreCase = true)] public string RetentionType { get; set; } [Parameter(Position = 10, Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.RententionDuration, ValueFromPipelineByPropertyName = true)] diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/SetAzureBackupProtectionPolicy.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/SetAzureBackupProtectionPolicy.cs index 1f462b977c56..168ffa53b166 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/SetAzureBackupProtectionPolicy.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/SetAzureBackupProtectionPolicy.cs @@ -52,7 +52,7 @@ public class SetAzureBackupProtectionPolicy : AzureBackupPolicyCmdletBase public DateTime ScheduleRunTimes { get; set; } [Parameter(Position = 6, Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.RetentionType)] - [ValidateSet("Days", IgnoreCase = true)] + [ValidateSet("Days", "Weeks", IgnoreCase = true)] public string RetentionType { get; set; } [Parameter(Position = 7, Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.RententionDuration)] diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Helpers/ProtectionPolicyHelpers.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Helpers/ProtectionPolicyHelpers.cs index fada83a542ae..6430c26ed5be 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Helpers/ProtectionPolicyHelpers.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Helpers/ProtectionPolicyHelpers.cs @@ -107,18 +107,14 @@ private static void ValidateRetentionRange(string retentionType, int retentionDu if(retentionType == RetentionDurationType.Days.ToString() && (retentionDuration < MinRetentionInDays || retentionDuration > MaxRetentionInDays)) { - var exception = new Exception("For Retention in days , valid values of retention duration are 7 to 30."); - //var errorRecord = new ErrorRecord(exception, string.Empty, ErrorCategory.InvalidData, null); - //azureBackupCmdletBase.WriteError(errorRecord); + var exception = new ArgumentException("For Retention in days , valid values of retention duration are 7 to 30."); throw exception; } if (retentionType == RetentionDurationType.Weeks.ToString() && (retentionDuration < MinRetentionInWeeks || retentionDuration > MaxRetentionInWeeks)) { - var exception = new Exception("For Retention in weeks , valid values of retention duration are 1 to 4."); - //var errorRecord = new ErrorRecord(exception, string.Empty, ErrorCategory.InvalidData, null); - //azureBackupCmdletBase.WriteError(errorRecord); + var exception = new ArgumentException("For Retention in weeks , valid values of retention duration are 1 to 4."); throw exception; } @@ -141,9 +137,7 @@ private static IList ParseScheduleRunDays(string[] scheduleRunDays) { if (scheduleRunDays == null || scheduleRunDays.Length <= 0) { - var exception = new Exception("For weekly scheduletype , ScheduleRunDays should not be empty."); - //var errorRecord = new ErrorRecord(exception, string.Empty, ErrorCategory.InvalidData, null); - //azureBackupCmdletBase.WriteError(errorRecord); + var exception = new ArgumentException("For weekly scheduletype , ScheduleRunDays should not be empty."); throw exception; } @@ -151,9 +145,7 @@ private static IList ParseScheduleRunDays(string[] scheduleRunDays) foreach (var dayOfWeek in scheduleRunDays) { - //azureBackupCmdletBase.WriteDebug("dayOfWeek" + dayOfWeek.ToString()); DayOfWeek item = (DayOfWeek)Enum.Parse(typeof(DayOfWeek), dayOfWeek, true); - //azureBackupCmdletBase.WriteDebug("Item" + item.ToString()); if (!ListofWeekDays.Contains(item)) { ListofWeekDays.Add(item); @@ -165,7 +157,10 @@ private static IList ParseScheduleRunDays(string[] scheduleRunDays) private static DateTime ParseScheduleRunTime(DateTime scheduleStartTime) { - scheduleStartTime = scheduleStartTime.ToUniversalTime(); + if (scheduleStartTime.Kind == DateTimeKind.Local) + { + scheduleStartTime = scheduleStartTime.ToUniversalTime(); + } DateTime scheduleRunTime = new DateTime(scheduleStartTime.Year, scheduleStartTime.Month, scheduleStartTime.Day, scheduleStartTime.Hour, scheduleStartTime.Minute - (scheduleStartTime.Minute % 30), 0); return scheduleRunTime; From 546456c68832f0671cc377f7c9c82573752e7235 Mon Sep 17 00:00:00 2001 From: AditTulasi Date: Tue, 23 Jun 2015 10:34:47 +0530 Subject: [PATCH 106/155] Changing class name temporarily to fix a build break --- .../Cmdlets/Container/RegisterAzureBackupContainer.cs | 3 ++- .../Commands.AzureBackup/Commands.AzureBackup.csproj | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/RegisterAzureBackupContainer.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/RegisterAzureBackupContainer.cs index 8e05f25313a9..3f72dd0f9e2d 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/RegisterAzureBackupContainer.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/RegisterAzureBackupContainer.cs @@ -23,6 +23,7 @@ using Microsoft.Azure.Management.BackupServices.Models; using MBS = Microsoft.Azure.Management.BackupServices; using Microsoft.WindowsAzure.Commands.ServiceManagement.Model; +using Microsoft.Azure.Management.BackupServices; namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets { @@ -134,7 +135,7 @@ private void RefreshContainer() private bool WaitForDiscoveryToCOmplete(string operationId, out bool isDiscoverySuccessful) { bool isRetryNeeded = false; - AzureBackupOperationStatusResponse status = new AzureBackupOperationStatusResponse() + OperationResultResponse status = new OperationResultResponse() { OperationStatus = AzureBackupOperationStatus.InProgress.ToString() }; diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj index f9c6e93ec533..8dbec80164bb 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj @@ -89,7 +89,7 @@ False - ..\..\..\..\..\azure-sdk-for-net\src\ResourceManagement\AzureBackup\BackupServicesManagment\bin\Net45-Debug\Microsoft.WindowsAzure.Management.BackupServicesManagment.dll + ..\..\..\..\..\azure-sdk-for-net\src\ResourceManagement\AzureBackup\BackupServicesManagment\bin\Net45-Release\Microsoft.WindowsAzure.Management.BackupServicesManagment.dll False From 9bdec7744e4dbad9b92493a33b2965d69248d24a Mon Sep 17 00:00:00 2001 From: dragonfly91 Date: Tue, 23 Jun 2015 14:56:27 +0530 Subject: [PATCH 107/155] Updating vault cred and get container tests post piyushka's changes --- .../AzureBackupContainerTests.ps1 | 12 ++++++---- .../ScenarioTests/AzureBackupVaultTests.ps1 | 24 +++++++++++-------- .../Container/GetAzureBackupContainer.cs | 4 +--- .../Models/AzureBackupBaseObjects.cs | 2 +- 4 files changed, 23 insertions(+), 19 deletions(-) diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupContainerTests.ps1 b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupContainerTests.ps1 index a7a1bb39118d..85f4e81087c8 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupContainerTests.ps1 +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupContainerTests.ps1 @@ -14,9 +14,9 @@ $ResourceGroupName = "backuprg" $ResourceName = "backuprn" -$Location = "SouthEast Asia" -$ContainerResourceGroupName = "dev01Testing" -$ContainerResourceName = "dev01Testing" +$Location = "westus" +$ContainerResourceGroupName = "powershellbvt" +$ContainerResourceName = "powershellbvt" <# .SYNOPSIS @@ -24,13 +24,15 @@ Tests to test list containers #> function Test-GetAzureBackupContainerWithoutFilterReturnsNonZeroContainers { - $containers = Get-AzureBackupContainer -ResourceGroupName $ResourceGroupName -ResourceName $ResourceName -Location $Location + $vault = Get-AzureBackupVault -Name $ResourceName; + $containers = Get-AzureBackupContainer -vault $vault; Assert-NotNull $containers 'Container list should not be null'; } function Test-GetAzureBackupContainerWithUniqueFilterReturnsOneContainer { - $container = Get-AzureBackupContainer -ResourceGroupName $ResourceGroupName -ResourceName $ResourceName -Location $Location -ContainerResourceGroupName $ContainerResourceGroupName -ContainerResourceName $ContainerResourceName + $vault = Get-AzureBackupVault -Name $ResourceName; + $container = Get-AzureBackupContainer -vault $vault -ContainerResourceGroupName $ContainerResourceGroupName -ContainerResourceName $ContainerResourceName Assert-NotNull $container 'Container should not be null'; Assert-AreEqual $container.ResourceName $ContainerResourceName -CaseSensitive 'Returned container resource name (a.k.a friendly name) does not match the test VM resource name'; Assert-AreEqual $container.ResourceGroupName $ContainerResourceGroupName -CaseSensitive 'Returned container resource group name (a.k.a parent friendly name) does not match the test VM resource group name'; diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupVaultTests.ps1 b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupVaultTests.ps1 index 42fc08c4f601..23e9ddd65d99 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupVaultTests.ps1 +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupVaultTests.ps1 @@ -14,12 +14,13 @@ $ResourceGroupName = "backuprg" $ResourceName = "backuprn" -$Location = "SouthEast Asia" +$Location = "westus" $CertTargetLocation = (Get-Item -Path ".\" -Verbose).FullName; function Test-GetAzureBackupVaultCredentialsReturnsFileNameAndDownloadsCert { - $fileName = Get-AzureBackupVaultCredentials -ResourceGroupName $ResourceGroupName -ResourceName $ResourceName -Location $Location -TargetLocation $CertTargetLocation + $vault = Get-AzureBackupVault -Name $ResourceName; + $fileName = Get-AzureBackupVaultCredentials -vault $vault -TargetLocation $CertTargetLocation Assert-NotNull $fileName 'File name should not be null'; $certFileFullPath = [io.path]::combine($CertTargetLocation, $fileName); Assert-True {{ Test-Path $certFileFullPath }} @@ -27,22 +28,25 @@ function Test-GetAzureBackupVaultCredentialsReturnsFileNameAndDownloadsCert function Test-SetAzureBackupVaultStorageTypeWithFreshResourceDoesNotThrowException { - # TODO: Create a new resource and use it for these calls. At the end, delete it. + $freshVault = New-AzureBackupVault -ResourceGroupName $ResourceGroupName -Name "storagetestrn" -Region $Location; + + Set-AzureBackupVaultStorageType $freshVault -Type GeoRedundant - Set-AzureBackupVaultStorageType -ResourceGroupName $ResourceGroupName -ResourceName $ResourceName -Location $Location -Type GeoRedundant + Set-AzureBackupVaultStorageType $freshVault -Type LocallyRedundant - Set-AzureBackupVaultStorageType -ResourceGroupName $ResourceGroupName -ResourceName $ResourceName -Location $Location -Type LocallyRedundant + Set-AzureBackupVaultStorageType $freshVault -Type GeoRedundant - Set-AzureBackupVaultStorageType -ResourceGroupName $ResourceGroupName -ResourceName $ResourceName -Location $Location -Type GeoRedundant + Set-AzureBackupVaultStorageType $freshVault -Type LocallyRedundant - Set-AzureBackupVaultStorageType -ResourceGroupName $ResourceGroupName -ResourceName $ResourceName -Location $Location -Type LocallyRedundant + Remove-AzureBackupVault -vault $freshVault } function Test-SetAzureBackupVaultStorageTypeWithLockedResourceThrowsException { - # One of them is bound to fail + # TODO: Check for exception based on current storage type - obtained by vault properties + $vault = Get-AzureBackupVault -Name $ResourceName; - Assert-Throws { Set-AzureBackupVaultStorageType -ResourceGroupName $ResourceGroupName -ResourceName $ResourceName -Location $Location -Type GeoRedundant } + Assert-Throws { Set-AzureBackupVaultStorageType $vault -Type GeoRedundant } - Assert-Throws { Set-AzureBackupVaultStorageType -ResourceGroupName $ResourceGroupName -ResourceName $ResourceName -Location $Location -Type LocallyRedundant } + Assert-Throws { Set-AzureBackupVaultStorageType $vault -Type LocallyRedundant } } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/GetAzureBackupContainer.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/GetAzureBackupContainer.cs index 647ba84a00c4..a9b4d4df84d2 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/GetAzureBackupContainer.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/GetAzureBackupContainer.cs @@ -69,11 +69,9 @@ public override void ExecuteCmdlet() { return containerInfo.ParentContainerName != ContainerResourceGroupName; }); - WriteDebug(string.Format("# of containers after resource group filter = {0}", containerInfos.Count)); + WriteDebug(string.Format("Count of containers after resource group filter = {0}", containerInfos.Count)); } - WriteDebug(string.Format("Count of containers after resource group filter = {0}", containerInfos.Count)); - // TODO: Container friendly name is not captures in Container response // BUG: Friendly name was previously assigned to ResourceName (vault name) List containers = containerInfos.ConvertAll(containerInfo => diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupBaseObjects.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupBaseObjects.cs index cf9c6d378f61..da73ba9d4781 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupBaseObjects.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupBaseObjects.cs @@ -84,7 +84,7 @@ public AzureBackupContainerContextObject(AzureBackupContainer azureBackupContain } public AzureBackupContainerContextObject(AzurePSBackupVault vault, ContainerInfo containerInfo) - : base(vault) + : base(containerInfo.ParentContainerFriendlyName, containerInfo.FriendlyName, vault.Region) { ContainerType = containerInfo.ContainerType; ContainerUniqueName = containerInfo.Name; From 912e847d5c9ae16de3bb43dfe2f3d3fe3053b26d Mon Sep 17 00:00:00 2001 From: Swati Madhukar Date: Tue, 23 Jun 2015 19:31:38 +0530 Subject: [PATCH 108/155] Fix for Joblists to jobs for operationResponseResult --- .../Cmdlets/BackUp/TriggerBackUp.cs | 2 +- .../Container/RegisterAzureBackupContainer.cs | 2 +- .../UnregisterAzureBackupContainer.cs | 2 +- .../Item/Disable-AzureBackupProtection .cs | 2 +- .../Item/Enable-AzureBackupProtection .cs | 2 +- .../Commands.AzureBackup.csproj | 2 +- ...ure.Management.BackupServicesManagment.dll | Bin 168960 -> 168960 bytes 7 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/BackUp/TriggerBackUp.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/BackUp/TriggerBackUp.cs index f909f5b7c646..c9812e912f7d 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/BackUp/TriggerBackUp.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/BackUp/TriggerBackUp.cs @@ -46,7 +46,7 @@ public override void ExecuteCmdlet() WriteDebug("Triggered backup. Converting response"); var operationStatus = TrackOperation(operationId); - this.WriteObject(operationStatus.JobList.FirstOrDefault()); + this.WriteObject(operationStatus.Jobs.FirstOrDefault()); }); } } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/RegisterAzureBackupContainer.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/RegisterAzureBackupContainer.cs index 155bf8185510..5cb877e7b876 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/RegisterAzureBackupContainer.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/RegisterAzureBackupContainer.cs @@ -106,7 +106,7 @@ public override void ExecuteCmdlet() var operationId = AzureBackupClient.RegisterContainer(registrationRequest); var operationStatus = GetOperationStatus(operationId); - WriteObject(operationStatus.JobList.FirstOrDefault()); + WriteObject(operationStatus.Jobs.FirstOrDefault()); }); } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/UnregisterAzureBackupContainer.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/UnregisterAzureBackupContainer.cs index e27eb3316b68..2c33013be3ca 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/UnregisterAzureBackupContainer.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/UnregisterAzureBackupContainer.cs @@ -46,7 +46,7 @@ public override void ExecuteCmdlet() UnregisterContainerRequestInput unregRequest = new UnregisterContainerRequestInput(containerUniqueName, AzureBackupContainerType.IaasVMContainer.ToString()); var operationId = AzureBackupClient.UnRegisterContainer(unregRequest); - var jobId = GetOperationStatus(operationId).JobList.FirstOrDefault(); + var jobId = GetOperationStatus(operationId).Jobs.FirstOrDefault(); WriteObject(jobId); }); } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Item/Disable-AzureBackupProtection .cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Item/Disable-AzureBackupProtection .cs index 9917034e6024..9c46c8455c91 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Item/Disable-AzureBackupProtection .cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Item/Disable-AzureBackupProtection .cs @@ -63,7 +63,7 @@ public override void ExecuteCmdlet() WriteVerbose("Received disable azure backup protection response"); var operationStatus = GetOperationStatus(operationId); - this.WriteObject(operationStatus.JobList.FirstOrDefault()); + this.WriteObject(operationStatus.Jobs.FirstOrDefault()); }); } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Item/Enable-AzureBackupProtection .cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Item/Enable-AzureBackupProtection .cs index 2b5620f814e3..f6eac52aae15 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Item/Enable-AzureBackupProtection .cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Item/Enable-AzureBackupProtection .cs @@ -72,7 +72,7 @@ public override void ExecuteCmdlet() WriteDebug("Received enable azure backup protection response"); var operationStatus = GetOperationStatus(operationId); - this.WriteObject(operationStatus.JobList.FirstOrDefault()); + this.WriteObject(operationStatus.Jobs.FirstOrDefault()); }); } } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj index 8dd309de2a93..b201846d786e 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj @@ -76,7 +76,7 @@ False - ..\..\..\..\..\..\Git4\dummy\azure-sdk-for-net\src\ResourceManagement\AzureBackup\BackupServicesManagment\bin\Net45-Debug\Microsoft.WindowsAzure.Management.BackupServicesManagment.dll + Resources\Microsoft.WindowsAzure.Management.BackupServicesManagment.dll False diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Resources/Microsoft.WindowsAzure.Management.BackupServicesManagment.dll b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Resources/Microsoft.WindowsAzure.Management.BackupServicesManagment.dll index 9c961fec8199b3743505a54597bb374d20515207..263f7f97f3ce5a727cd0a052be259e82e764ef74 100644 GIT binary patch delta 14447 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 X6P+Qq$bai(X`wUhHhBg*EdBlu>$%0x delta 14472 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 From 83b2d8e2583b1134f08f0141860d819059ef43b8 Mon Sep 17 00:00:00 2001 From: mkherani Date: Wed, 24 Jun 2015 06:11:16 +0530 Subject: [PATCH 109/155] Added correct exception and fix minor issues --- .../AzureBackupCmdletHelpMessage.cs | 5 ++++ .../Container/RegisterAzureBackupContainer.cs | 30 ++++++++++--------- .../UnregisterAzureBackupContainer.cs | 2 +- 3 files changed, 22 insertions(+), 15 deletions(-) diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupCmdletHelpMessage.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupCmdletHelpMessage.cs index e78bcb22b7be..16b2fe4bdd37 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupCmdletHelpMessage.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupCmdletHelpMessage.cs @@ -74,5 +74,10 @@ internal static class AzureBackupCmdletHelpMessage public const string RententionDuration = "Duration of retention for the recovery point in units specified by RetentionType."; public const string PolicyNewName = "Policy new name"; public const string AzureBackupPolicy = "Azure Backup protection policy"; + public const string VMName = "Azure VM name to be register"; + public const string ServiceName = "Cloud service name of Azure VM to be register"; + public const string RGName = "Resource Group name of Azure VM to be register"; + public const string AzureBackupContainerToUnregister = "Azure Backup Container tobe unregister."; + } } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/RegisterAzureBackupContainer.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/RegisterAzureBackupContainer.cs index 2aa5287f57b2..fed8c8f3817e 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/RegisterAzureBackupContainer.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/RegisterAzureBackupContainer.cs @@ -39,15 +39,15 @@ public class RegisterAzureBackupContainer : AzureBackupVaultCmdletBase internal const string V1VMParameterSet = "V1VM"; internal const string V2VMParameterSet = "V2VM"; - [Parameter(Mandatory = true, ValueFromPipelineByPropertyName = true, ParameterSetName = V1VMParameterSet, HelpMessage = AzureBackupCmdletHelpMessage.VirtualMachine)] - [Parameter(Mandatory = true, ValueFromPipelineByPropertyName = true, ParameterSetName = V2VMParameterSet, HelpMessage = AzureBackupCmdletHelpMessage.VirtualMachine)] + [Parameter(Mandatory = true, ValueFromPipelineByPropertyName = true, ParameterSetName = V1VMParameterSet, HelpMessage = AzureBackupCmdletHelpMessage.VMName)] + [Parameter(Mandatory = true, ValueFromPipelineByPropertyName = true, ParameterSetName = V2VMParameterSet, HelpMessage = AzureBackupCmdletHelpMessage.VMName)] public string Name { get; set; } - [Parameter(Mandatory = false, ValueFromPipelineByPropertyName = true, ParameterSetName = V1VMParameterSet, HelpMessage = AzureBackupCmdletHelpMessage.VirtualMachine)] + [Parameter(Mandatory = true, ValueFromPipelineByPropertyName = true, ParameterSetName = V1VMParameterSet, HelpMessage = AzureBackupCmdletHelpMessage.ServiceName)] public string ServiceName { get; set; } - [Parameter(Mandatory = false, ValueFromPipelineByPropertyName = true, ParameterSetName = V2VMParameterSet, HelpMessage = AzureBackupCmdletHelpMessage.VirtualMachine)] - public string VMResourceGroupName { get; set; } //TODO: + [Parameter(Mandatory = true, ValueFromPipelineByPropertyName = true, ParameterSetName = V2VMParameterSet, HelpMessage = AzureBackupCmdletHelpMessage.RGName)] + public string ResourceGroupName { get; set; } public override void ExecuteCmdlet() @@ -70,7 +70,7 @@ public override void ExecuteCmdlet() else if(this.ParameterSetName == V2VMParameterSet) { vmName = Name; - rgName = VMResourceGroupName; + rgName = ResourceGroupName; WriteDebug(String.Format("Registering ARM-V2 VM, VMName: {0}, ResourceGroupName: {1}", vmName, rgName)); ServiceOrRG = "ResourceGroupName"; } @@ -94,7 +94,7 @@ public override void ExecuteCmdlet() { //Container is not discovered. Throw exception 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); WriteError(new ErrorRecord(new Exception(Resources.AzureVMNotFound), string.Empty, ErrorCategory.InvalidArgument, null)); } } @@ -113,35 +113,37 @@ public override void ExecuteCmdlet() private void RefreshContainer() { - bool isRetyNeeded = true; + bool isRetryNeeded = true; int retryCount = 1; bool isDiscoverySuccessful = false; - while (isRetyNeeded && retryCount <= 3) + string errorMessage = string.Empty; + while (isRetryNeeded && retryCount <= 3) { var operationId = AzureBackupClient.RefreshContainers(); //Now wait for the operation to Complete - isRetyNeeded = WaitForDiscoveryToCOmplete(operationId, out isDiscoverySuccessful); + isRetryNeeded = WaitForDiscoveryToComplete(operationId, out isDiscoverySuccessful, out errorMessage); retryCount++; } if (!isDiscoverySuccessful) { - //Discovery failed - throw new Exception(); //TODO: + WriteError(new ErrorRecord(new Exception(errorMessage), string.Empty, ErrorCategory.InvalidArgument, null)); } } - private bool WaitForDiscoveryToCOmplete(Guid operationId, out bool isDiscoverySuccessful) + private bool WaitForDiscoveryToComplete(Guid operationId, out bool isDiscoverySuccessful, out string errorMessage) { bool isRetryNeeded = false; - var status = TrackOperation(operationId); + var status = TrackOperation(operationId); + errorMessage = String.Empty; isDiscoverySuccessful = true; //If operation fails check if retry is needed or not if (status.OperationResult != AzureBackupOperationResult.Succeeded.ToString()) { isDiscoverySuccessful = false; + errorMessage = status.Message; WriteDebug(String.Format("Discovery operation failed with ErrorCode: {0}", status.ErrorCode)); if ((status.ErrorCode == AzureBackupOperationErrorCode.DiscoveryInProgress.ToString() || (status.ErrorCode == AzureBackupOperationErrorCode.BMSUserErrorObjectLocked.ToString()))) diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/UnregisterAzureBackupContainer.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/UnregisterAzureBackupContainer.cs index e27eb3316b68..1769c1be992c 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/UnregisterAzureBackupContainer.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/UnregisterAzureBackupContainer.cs @@ -32,7 +32,7 @@ namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets [Cmdlet(VerbsLifecycle.Unregister, "AzureBackupContainer"), OutputType(typeof(string))] public class UnregisterAzureBackupContainer : AzureBackupVaultCmdletBase { - [Parameter(Position = 2, Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.VirtualMachine, ValueFromPipeline = true)] + [Parameter(Position = 1, Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.AzureBackupContainerToUnregister, ValueFromPipeline = true)] [ValidateNotNullOrEmpty] public AzureBackupContainer AzureBackupContainer { get; set; } From 0f5eae4539363675b183111940b42745d48e3ad6 Mon Sep 17 00:00:00 2001 From: mkherani Date: Thu, 25 Jun 2015 17:28:51 +0530 Subject: [PATCH 110/155] Error handling --- .../Cmdlets/Container/RegisterAzureBackupContainer.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/RegisterAzureBackupContainer.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/RegisterAzureBackupContainer.cs index d143cfc8e3e1..c5f0aaaa3839 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/RegisterAzureBackupContainer.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/RegisterAzureBackupContainer.cs @@ -95,7 +95,7 @@ public override void ExecuteCmdlet() //Container is not discovered. Throw exception 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); - WriteError(new ErrorRecord(new Exception(Resources.AzureVMNotFound), string.Empty, ErrorCategory.InvalidArgument, null)); + ThrowTerminatingError(new ErrorRecord(new Exception(Resources.AzureVMNotFound), string.Empty, ErrorCategory.InvalidArgument, null)); } } @@ -128,7 +128,7 @@ private void RefreshContainer() if (!isDiscoverySuccessful) { - WriteError(new ErrorRecord(new Exception(errorMessage), string.Empty, ErrorCategory.InvalidArgument, null)); + ThrowTerminatingError(new ErrorRecord(new Exception(errorMessage), string.Empty, ErrorCategory.InvalidArgument, null)); } } From ed9987600fa3ba33bca87d10db6358c04a6e6928 Mon Sep 17 00:00:00 2001 From: pragrawa Date: Fri, 26 Jun 2015 01:46:41 +0530 Subject: [PATCH 111/155] UpdatePolicy Asysc changes --- .../AzureBackupClientAdapter/PolicyAdapter.cs | 5 ++-- .../SetAzureBackupProtectionPolicy.cs | 24 +++++++++++-------- 2 files changed, 17 insertions(+), 12 deletions(-) diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupClientAdapter/PolicyAdapter.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupClientAdapter/PolicyAdapter.cs index 360aec16bac3..4db1e2ba2cc7 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupClientAdapter/PolicyAdapter.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupClientAdapter/PolicyAdapter.cs @@ -78,9 +78,10 @@ public void DeleteProtectionPolicy(string policyId) ///
/// /// - public void UpdateProtectionPolicy(string policyId, UpdateProtectionPolicyRequest request) + public Guid UpdateProtectionPolicy(string policyId, UpdateProtectionPolicyRequest request) { - AzureBackupClient.ProtectionPolicy.UpdateAsync(policyId, request, GetCustomRequestHeaders(), CmdletCancellationToken).Wait(); + var response = AzureBackupClient.ProtectionPolicy.UpdateAsync(policyId, request, GetCustomRequestHeaders(), CmdletCancellationToken).Result; + return response.OperationId; } } } \ No newline at end of file diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/SetAzureBackupProtectionPolicy.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/SetAzureBackupProtectionPolicy.cs index 168ffa53b166..9e0ef14f9583 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/SetAzureBackupProtectionPolicy.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/SetAzureBackupProtectionPolicy.cs @@ -89,22 +89,26 @@ public override void ExecuteCmdlet() { // TODO: Add Async handling // BUG: Update API in hydra doesn't return OperationResponse rather than AzureOperationResponse - AzureBackupClient.UpdateProtectionPolicy(policyInfo.InstanceId, updateProtectionPolicyRequest); + var operationId = AzureBackupClient.UpdateProtectionPolicy(policyInfo.InstanceId, updateProtectionPolicyRequest); + + if(operationId != Guid.Empty) + { + var operationStatus = GetOperationStatus(operationId); + WriteDebug("Protection Policy successfully updated and created job(s) to re-configure protection on associated items"); + WriteObject(operationStatus.JobList); + } + + else + { + WriteDebug("Protection Policy successfully updated"); + } + } else { // TODO: Validate proper error message is delivered to user. throw new ArgumentException(String.Format("Protection policy {0} not found", ProtectionPolicy.Name)); } - - WriteDebug("Protection Policy successfully updated"); - - var updatedPolicy = AzureBackupClient.GetProtectionPolicyByName(ProtectionPolicy.Name); - - WriteDebug("Converting response"); - - WriteObject(ProtectionPolicyHelpers.GetCmdletPolicy(vault, updatedPolicy)); - }); } From 4d9ece9aa148e1b121872fc1b4443eac839e4d52 Mon Sep 17 00:00:00 2001 From: pragrawa Date: Fri, 26 Jun 2015 17:33:42 +0530 Subject: [PATCH 112/155] PolicyChanges --- .../Cmdlets/ProtectionPolicy/SetAzureBackupProtectionPolicy.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/SetAzureBackupProtectionPolicy.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/SetAzureBackupProtectionPolicy.cs index 9e0ef14f9583..5b33b7f0d435 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/SetAzureBackupProtectionPolicy.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/SetAzureBackupProtectionPolicy.cs @@ -95,7 +95,7 @@ public override void ExecuteCmdlet() { var operationStatus = GetOperationStatus(operationId); WriteDebug("Protection Policy successfully updated and created job(s) to re-configure protection on associated items"); - WriteObject(operationStatus.JobList); + WriteObject(operationStatus.Jobs); } else From 6da388829a197e50274d94563f30b185c51f42ab Mon Sep 17 00:00:00 2001 From: pragrawa Date: Fri, 26 Jun 2015 18:09:29 +0530 Subject: [PATCH 113/155] Updating AzureSDK dll --- ...ure.Management.BackupServicesManagment.dll | Bin 168960 -> 169472 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Resources/Microsoft.WindowsAzure.Management.BackupServicesManagment.dll b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Resources/Microsoft.WindowsAzure.Management.BackupServicesManagment.dll index 263f7f97f3ce5a727cd0a052be259e82e764ef74..0a1d9b1afe0990e260de903fc5f0b798c32f04ce 100644 GIT binary patch delta 37805 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 From ab79ba14c3691fc97355fddee4d55c81e1631cf9 Mon Sep 17 00:00:00 2001 From: dragonfly91 Date: Fri, 26 Jun 2015 23:25:22 +0530 Subject: [PATCH 114/155] Fixing bug bash bugs --- .../ScenarioTests/AzureBackupVaultTests.ps1 | 6 +++++- .../Models/VaultCredentials.cs | 5 +++++ ...ure.Management.BackupServicesManagment.dll | Bin 168960 -> 169472 bytes 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupVaultTests.ps1 b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupVaultTests.ps1 index 23e9ddd65d99..6f1305432288 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupVaultTests.ps1 +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupVaultTests.ps1 @@ -28,7 +28,11 @@ function Test-GetAzureBackupVaultCredentialsReturnsFileNameAndDownloadsCert function Test-SetAzureBackupVaultStorageTypeWithFreshResourceDoesNotThrowException { - $freshVault = New-AzureBackupVault -ResourceGroupName $ResourceGroupName -Name "storagetestrn" -Region $Location; + $freshVaultName = "storagetestrn2"; + + Assert-Throws { New-AzureBackupVault -ResourceGroupName $ResourceGroupName -Name $freshVaultName -Region $Location }; + + $freshVault = Get-AzureBackupVault -Name $freshVaultName; Set-AzureBackupVaultStorageType $freshVault -Type GeoRedundant diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/VaultCredentials.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/VaultCredentials.cs index 9a2470bd80c6..7c5eb0885b62 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/VaultCredentials.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/VaultCredentials.cs @@ -79,6 +79,7 @@ public VaultCreds(string subscriptionId, string resourceType, string resourceNam /// Class to define backup vault credentials ///
[SuppressMessage("Microsoft.StyleCop.CSharp.MaintainabilityRules", "SA1402:FileMayOnlyContainASingleClass", Justification = "Grouping classes based on entity")] + [DataContract] internal class BackupVaultCreds : VaultCreds { /// @@ -128,21 +129,25 @@ public BackupVaultCreds(string subscriptionId, string resourceType, string resou /// /// AcsNamespace is where the certificate is uploaded into /// + [DataContract] internal class AcsNamespace { /// /// Gets or sets the key name for HostName entry /// + [DataMember(Order = 0)] public string HostName { get; set; } /// /// Gets or sets the key name for Namespace entry /// + [DataMember(Order = 1)] public string Namespace { get; set; } /// /// Gets or sets the value for ResourceProviderRealm entry /// + [DataMember(Order = 2)] public string ResourceProviderRealm { get; set; } /// diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Resources/Microsoft.WindowsAzure.Management.BackupServicesManagment.dll b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Resources/Microsoft.WindowsAzure.Management.BackupServicesManagment.dll index 9c961fec8199b3743505a54597bb374d20515207..c723b1bf805e4dde937de5ae0b1146e5a60b268e 100644 GIT binary patch delta 41988 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 UmA_e}R=eGPo%}|uDUbaB00^zxvj6}9 delta 41257 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

HvswH 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 Date: Sat, 27 Jun 2015 01:01:04 +0530 Subject: [PATCH 115/155] Fixing Set-StorageType Test --- .../ScenarioTests/AzureBackupVaultTests.ps1 | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupVaultTests.ps1 b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupVaultTests.ps1 index 6f1305432288..c93cd719a8bc 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupVaultTests.ps1 +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupVaultTests.ps1 @@ -28,7 +28,7 @@ function Test-GetAzureBackupVaultCredentialsReturnsFileNameAndDownloadsCert function Test-SetAzureBackupVaultStorageTypeWithFreshResourceDoesNotThrowException { - $freshVaultName = "storagetestrn2"; + $freshVaultName = "storagetestrn"; Assert-Throws { New-AzureBackupVault -ResourceGroupName $ResourceGroupName -Name $freshVaultName -Region $Location }; @@ -47,7 +47,6 @@ function Test-SetAzureBackupVaultStorageTypeWithFreshResourceDoesNotThrowExcepti function Test-SetAzureBackupVaultStorageTypeWithLockedResourceThrowsException { - # TODO: Check for exception based on current storage type - obtained by vault properties $vault = Get-AzureBackupVault -Name $ResourceName; Assert-Throws { Set-AzureBackupVaultStorageType $vault -Type GeoRedundant } From 0eed2020ff525be3bd850e5487cf7123a4c34925 Mon Sep 17 00:00:00 2001 From: pikumarmsft Date: Mon, 29 Jun 2015 11:00:25 +0530 Subject: [PATCH 116/155] Changing joblist to jobs in operationStatus. --- .../Commands.AzureBackup/Cmdlets/BackUp/TriggerBackUp.cs | 2 +- .../Cmdlets/Container/RegisterAzureBackupContainer.cs | 2 +- .../Cmdlets/Container/UnregisterAzureBackupContainer.cs | 2 +- .../Cmdlets/Item/Disable-AzureBackupProtection .cs | 2 +- .../Cmdlets/Item/Enable-AzureBackupProtection .cs | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/BackUp/TriggerBackUp.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/BackUp/TriggerBackUp.cs index f909f5b7c646..c9812e912f7d 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/BackUp/TriggerBackUp.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/BackUp/TriggerBackUp.cs @@ -46,7 +46,7 @@ public override void ExecuteCmdlet() WriteDebug("Triggered backup. Converting response"); var operationStatus = TrackOperation(operationId); - this.WriteObject(operationStatus.JobList.FirstOrDefault()); + this.WriteObject(operationStatus.Jobs.FirstOrDefault()); }); } } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/RegisterAzureBackupContainer.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/RegisterAzureBackupContainer.cs index 155bf8185510..5cb877e7b876 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/RegisterAzureBackupContainer.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/RegisterAzureBackupContainer.cs @@ -106,7 +106,7 @@ public override void ExecuteCmdlet() var operationId = AzureBackupClient.RegisterContainer(registrationRequest); var operationStatus = GetOperationStatus(operationId); - WriteObject(operationStatus.JobList.FirstOrDefault()); + WriteObject(operationStatus.Jobs.FirstOrDefault()); }); } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/UnregisterAzureBackupContainer.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/UnregisterAzureBackupContainer.cs index e27eb3316b68..2c33013be3ca 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/UnregisterAzureBackupContainer.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/UnregisterAzureBackupContainer.cs @@ -46,7 +46,7 @@ public override void ExecuteCmdlet() UnregisterContainerRequestInput unregRequest = new UnregisterContainerRequestInput(containerUniqueName, AzureBackupContainerType.IaasVMContainer.ToString()); var operationId = AzureBackupClient.UnRegisterContainer(unregRequest); - var jobId = GetOperationStatus(operationId).JobList.FirstOrDefault(); + var jobId = GetOperationStatus(operationId).Jobs.FirstOrDefault(); WriteObject(jobId); }); } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Item/Disable-AzureBackupProtection .cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Item/Disable-AzureBackupProtection .cs index 9917034e6024..9c46c8455c91 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Item/Disable-AzureBackupProtection .cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Item/Disable-AzureBackupProtection .cs @@ -63,7 +63,7 @@ public override void ExecuteCmdlet() WriteVerbose("Received disable azure backup protection response"); var operationStatus = GetOperationStatus(operationId); - this.WriteObject(operationStatus.JobList.FirstOrDefault()); + this.WriteObject(operationStatus.Jobs.FirstOrDefault()); }); } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Item/Enable-AzureBackupProtection .cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Item/Enable-AzureBackupProtection .cs index 2b5620f814e3..f6eac52aae15 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Item/Enable-AzureBackupProtection .cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Item/Enable-AzureBackupProtection .cs @@ -72,7 +72,7 @@ public override void ExecuteCmdlet() WriteDebug("Received enable azure backup protection response"); var operationStatus = GetOperationStatus(operationId); - this.WriteObject(operationStatus.JobList.FirstOrDefault()); + this.WriteObject(operationStatus.Jobs.FirstOrDefault()); }); } } From 63aee2467bcc29db80146c788e572a9d3f28d90c Mon Sep 17 00:00:00 2001 From: dragonfly91 Date: Mon, 29 Jun 2015 14:38:44 +0530 Subject: [PATCH 117/155] Revert "Merge pull request #59 from MabOneSdk/anudeeb" This reverts commit 474e80f12df02b9b7f948677571ed7d71bff22ab, reversing changes made to 4b450e4bb03ac6fce59a40fc885e657b79d1af49. --- .../ScenarioTests/AzureBackupVaultTests.ps1 | 7 ++--- .../Container/RegisterAzureBackupContainer.cs | 31 ++++++++++--------- .../UnregisterAzureBackupContainer.cs | 2 +- .../Models/VaultCredentials.cs | 5 --- 4 files changed, 20 insertions(+), 25 deletions(-) diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupVaultTests.ps1 b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupVaultTests.ps1 index c93cd719a8bc..23e9ddd65d99 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupVaultTests.ps1 +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupVaultTests.ps1 @@ -28,11 +28,7 @@ function Test-GetAzureBackupVaultCredentialsReturnsFileNameAndDownloadsCert function Test-SetAzureBackupVaultStorageTypeWithFreshResourceDoesNotThrowException { - $freshVaultName = "storagetestrn"; - - Assert-Throws { New-AzureBackupVault -ResourceGroupName $ResourceGroupName -Name $freshVaultName -Region $Location }; - - $freshVault = Get-AzureBackupVault -Name $freshVaultName; + $freshVault = New-AzureBackupVault -ResourceGroupName $ResourceGroupName -Name "storagetestrn" -Region $Location; Set-AzureBackupVaultStorageType $freshVault -Type GeoRedundant @@ -47,6 +43,7 @@ function Test-SetAzureBackupVaultStorageTypeWithFreshResourceDoesNotThrowExcepti function Test-SetAzureBackupVaultStorageTypeWithLockedResourceThrowsException { + # TODO: Check for exception based on current storage type - obtained by vault properties $vault = Get-AzureBackupVault -Name $ResourceName; Assert-Throws { Set-AzureBackupVaultStorageType $vault -Type GeoRedundant } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/RegisterAzureBackupContainer.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/RegisterAzureBackupContainer.cs index 5cb877e7b876..c5f0aaaa3839 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/RegisterAzureBackupContainer.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/RegisterAzureBackupContainer.cs @@ -23,6 +23,7 @@ using Microsoft.Azure.Management.BackupServices.Models; using MBS = Microsoft.Azure.Management.BackupServices; using Microsoft.WindowsAzure.Commands.ServiceManagement.Model; +using Microsoft.Azure.Commands.AzureBackup.Properties; using Microsoft.Azure.Commands.AzureBackup.Models; using Microsoft.Azure.Commands.AzureBackup.Helpers; using Microsoft.Azure.Management.BackupServices; @@ -38,15 +39,15 @@ public class RegisterAzureBackupContainer : AzureBackupVaultCmdletBase internal const string V1VMParameterSet = "V1VM"; internal const string V2VMParameterSet = "V2VM"; - [Parameter(Mandatory = false, ValueFromPipelineByPropertyName = true, ParameterSetName = V1VMParameterSet, HelpMessage = AzureBackupCmdletHelpMessage.VirtualMachine)] - [Parameter(Mandatory = false, ValueFromPipelineByPropertyName = true, ParameterSetName = V2VMParameterSet, HelpMessage = AzureBackupCmdletHelpMessage.VirtualMachine)] + [Parameter(Mandatory = true, ValueFromPipelineByPropertyName = true, ParameterSetName = V1VMParameterSet, HelpMessage = AzureBackupCmdletHelpMessage.VMName)] + [Parameter(Mandatory = true, ValueFromPipelineByPropertyName = true, ParameterSetName = V2VMParameterSet, HelpMessage = AzureBackupCmdletHelpMessage.VMName)] public string Name { get; set; } - [Parameter(Mandatory = false, ValueFromPipelineByPropertyName = true, ParameterSetName = V1VMParameterSet, HelpMessage = AzureBackupCmdletHelpMessage.VirtualMachine)] + [Parameter(Mandatory = true, ValueFromPipelineByPropertyName = true, ParameterSetName = V1VMParameterSet, HelpMessage = AzureBackupCmdletHelpMessage.ServiceName)] public string ServiceName { get; set; } - [Parameter(Mandatory = false, ValueFromPipelineByPropertyName = true, ParameterSetName = V2VMParameterSet, HelpMessage = AzureBackupCmdletHelpMessage.VirtualMachine)] - public string VMResourceGroupName { get; set; } + [Parameter(Mandatory = true, ValueFromPipelineByPropertyName = true, ParameterSetName = V2VMParameterSet, HelpMessage = AzureBackupCmdletHelpMessage.RGName)] + public string ResourceGroupName { get; set; } public override void ExecuteCmdlet() @@ -69,7 +70,7 @@ public override void ExecuteCmdlet() else if(this.ParameterSetName == V2VMParameterSet) { vmName = Name; - rgName = VMResourceGroupName; + rgName = ResourceGroupName; WriteDebug(String.Format("Registering ARM-V2 VM, VMName: {0}, ResourceGroupName: {1}", vmName, rgName)); ServiceOrRG = "ResourceGroupName"; } @@ -94,7 +95,7 @@ public override void ExecuteCmdlet() //Container is not discovered. Throw exception 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 + ThrowTerminatingError(new ErrorRecord(new Exception(Resources.AzureVMNotFound), string.Empty, ErrorCategory.InvalidArgument, null)); } } @@ -112,35 +113,37 @@ public override void ExecuteCmdlet() private void RefreshContainer() { - bool isRetyNeeded = true; + bool isRetryNeeded = true; int retryCount = 1; bool isDiscoverySuccessful = false; - while (isRetyNeeded && retryCount <= 3) + string errorMessage = string.Empty; + while (isRetryNeeded && retryCount <= 3) { var operationId = AzureBackupClient.RefreshContainers(); //Now wait for the operation to Complete - isRetyNeeded = WaitForDiscoveryToCOmplete(operationId, out isDiscoverySuccessful); + isRetryNeeded = WaitForDiscoveryToComplete(operationId, out isDiscoverySuccessful, out errorMessage); retryCount++; } if (!isDiscoverySuccessful) { - //Discovery failed - throw new Exception(); //TODO: + ThrowTerminatingError(new ErrorRecord(new Exception(errorMessage), string.Empty, ErrorCategory.InvalidArgument, null)); } } - private bool WaitForDiscoveryToCOmplete(Guid operationId, out bool isDiscoverySuccessful) + private bool WaitForDiscoveryToComplete(Guid operationId, out bool isDiscoverySuccessful, out string errorMessage) { bool isRetryNeeded = false; - var status = TrackOperation(operationId); + var status = TrackOperation(operationId); + errorMessage = String.Empty; isDiscoverySuccessful = true; //If operation fails check if retry is needed or not if (status.OperationResult != AzureBackupOperationResult.Succeeded.ToString()) { isDiscoverySuccessful = false; + errorMessage = status.Message; WriteDebug(String.Format("Discovery operation failed with ErrorCode: {0}", status.ErrorCode)); if ((status.ErrorCode == AzureBackupOperationErrorCode.DiscoveryInProgress.ToString() || (status.ErrorCode == AzureBackupOperationErrorCode.BMSUserErrorObjectLocked.ToString()))) diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/UnregisterAzureBackupContainer.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/UnregisterAzureBackupContainer.cs index 2c33013be3ca..b540d5142574 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/UnregisterAzureBackupContainer.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/UnregisterAzureBackupContainer.cs @@ -32,7 +32,7 @@ namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets [Cmdlet(VerbsLifecycle.Unregister, "AzureBackupContainer"), OutputType(typeof(string))] public class UnregisterAzureBackupContainer : AzureBackupVaultCmdletBase { - [Parameter(Position = 2, Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.VirtualMachine, ValueFromPipeline = true)] + [Parameter(Position = 1, Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.AzureBackupContainerToUnregister, ValueFromPipeline = true)] [ValidateNotNullOrEmpty] public AzureBackupContainer AzureBackupContainer { get; set; } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/VaultCredentials.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/VaultCredentials.cs index 7c5eb0885b62..9a2470bd80c6 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/VaultCredentials.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/VaultCredentials.cs @@ -79,7 +79,6 @@ public VaultCreds(string subscriptionId, string resourceType, string resourceNam /// Class to define backup vault credentials ///

[SuppressMessage("Microsoft.StyleCop.CSharp.MaintainabilityRules", "SA1402:FileMayOnlyContainASingleClass", Justification = "Grouping classes based on entity")] - [DataContract] internal class BackupVaultCreds : VaultCreds { /// @@ -129,25 +128,21 @@ public BackupVaultCreds(string subscriptionId, string resourceType, string resou /// /// AcsNamespace is where the certificate is uploaded into /// - [DataContract] internal class AcsNamespace { /// /// Gets or sets the key name for HostName entry /// - [DataMember(Order = 0)] public string HostName { get; set; } /// /// Gets or sets the key name for Namespace entry /// - [DataMember(Order = 1)] public string Namespace { get; set; } /// /// Gets or sets the value for ResourceProviderRealm entry /// - [DataMember(Order = 2)] public string ResourceProviderRealm { get; set; } /// From 2abc63f04085e4e7dfb4c5f7790c682d192597ba Mon Sep 17 00:00:00 2001 From: dragonfly91 Date: Mon, 29 Jun 2015 14:51:51 +0530 Subject: [PATCH 118/155] Redoing my changes after the last revert --- .../ScenarioTests/AzureBackupVaultTests.ps1 | 7 +++++-- .../Commands.AzureBackup/Models/VaultCredentials.cs | 6 ++++++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupVaultTests.ps1 b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupVaultTests.ps1 index 23e9ddd65d99..c93cd719a8bc 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupVaultTests.ps1 +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupVaultTests.ps1 @@ -28,7 +28,11 @@ function Test-GetAzureBackupVaultCredentialsReturnsFileNameAndDownloadsCert function Test-SetAzureBackupVaultStorageTypeWithFreshResourceDoesNotThrowException { - $freshVault = New-AzureBackupVault -ResourceGroupName $ResourceGroupName -Name "storagetestrn" -Region $Location; + $freshVaultName = "storagetestrn"; + + Assert-Throws { New-AzureBackupVault -ResourceGroupName $ResourceGroupName -Name $freshVaultName -Region $Location }; + + $freshVault = Get-AzureBackupVault -Name $freshVaultName; Set-AzureBackupVaultStorageType $freshVault -Type GeoRedundant @@ -43,7 +47,6 @@ function Test-SetAzureBackupVaultStorageTypeWithFreshResourceDoesNotThrowExcepti function Test-SetAzureBackupVaultStorageTypeWithLockedResourceThrowsException { - # TODO: Check for exception based on current storage type - obtained by vault properties $vault = Get-AzureBackupVault -Name $ResourceName; Assert-Throws { Set-AzureBackupVaultStorageType $vault -Type GeoRedundant } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/VaultCredentials.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/VaultCredentials.cs index 9a2470bd80c6..ae07362bc243 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/VaultCredentials.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/VaultCredentials.cs @@ -79,6 +79,7 @@ public VaultCreds(string subscriptionId, string resourceType, string resourceNam /// Class to define backup vault credentials /// [SuppressMessage("Microsoft.StyleCop.CSharp.MaintainabilityRules", "SA1402:FileMayOnlyContainASingleClass", Justification = "Grouping classes based on entity")] + [DataContract] internal class BackupVaultCreds : VaultCreds { /// @@ -128,26 +129,31 @@ public BackupVaultCreds(string subscriptionId, string resourceType, string resou /// /// AcsNamespace is where the certificate is uploaded into /// + [DataContract] internal class AcsNamespace { /// /// Gets or sets the key name for HostName entry /// + [DataMember(Order = 0)] public string HostName { get; set; } /// /// Gets or sets the key name for Namespace entry /// + [DataMember(Order = 1)] public string Namespace { get; set; } /// /// Gets or sets the value for ResourceProviderRealm entry /// + [DataMember(Order = 2)] public string ResourceProviderRealm { get; set; } /// /// Initializes a new instance of the AcsNamespace class /// + [DataMember(Order = 3)] public AcsNamespace() { } /// From 9d06d56e4002470e208809ff86fa71ed3ced4975 Mon Sep 17 00:00:00 2001 From: pikumarmsft Date: Mon, 29 Jun 2015 20:18:23 +0530 Subject: [PATCH 119/155] Changing BackupServicesManagement.dll --- .../Item/Disable-AzureBackupProtection .cs | 2 +- ...ure.Management.BackupServicesManagment.dll | Bin 169472 -> 152576 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Item/Disable-AzureBackupProtection .cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Item/Disable-AzureBackupProtection .cs index 9c46c8455c91..663a72ef7806 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Item/Disable-AzureBackupProtection .cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Item/Disable-AzureBackupProtection .cs @@ -61,7 +61,7 @@ public override void ExecuteCmdlet() WriteDebug("RemoveProtectionOption is = " + input.RemoveProtectionOption); var operationId = AzureBackupClient.DisableProtection(Item.ContainerUniqueName, Item.Type, Item.DataSourceId, input); - WriteVerbose("Received disable azure backup protection response"); + WriteDebug("Received disable azure backup protection response"); var operationStatus = GetOperationStatus(operationId); this.WriteObject(operationStatus.Jobs.FirstOrDefault()); }); diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Resources/Microsoft.WindowsAzure.Management.BackupServicesManagment.dll b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Resources/Microsoft.WindowsAzure.Management.BackupServicesManagment.dll index 0a1d9b1afe0990e260de903fc5f0b798c32f04ce..3d16ad367de06d36c1539691f208cdf4931229f4 100644 GIT binary patch literal 152576 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 literal 169472 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 uMhed(Q Date: Tue, 30 Jun 2015 01:47:41 +0530 Subject: [PATCH 120/155] 1. Added ManagedResourceGroupName and ManagedResourceName to represent the RG and R names of the resources (VMs for ex) managed by Azure Backup. 2. Made some fixes in Vault Creds cmdlet to make it work with partner teams. 3. Updated all tests to work with the $vault and code refactoring changes introduced by PiyushKa. --- .../AzureBackupContainerTests.ps1 | 18 +++++++------ .../AzureBackupItemTestCases.ps1 | 8 +++--- .../ScenarioTests/AzureBackupJobTests.ps1 | 12 +++++---- .../ScenarioTests/AzureBackupPolicyTests.ps1 | 13 ++++++---- .../ScenarioTests/BackupItemTests.ps1 | 2 +- .../ScenarioTests/RecoveryPointTests.ps1 | 2 +- .../AzureBackupCmdletHelpMessage.cs | 4 +-- .../Container/GetAzureBackupContainer.cs | 18 ++++++------- .../GetAzureBackupVaultCredentials.cs | 26 +++++++++++++------ .../Models/AzureBackupContainer.cs | 12 +++++++++ .../Models/VaultCredentials.cs | 1 - 11 files changed, 72 insertions(+), 44 deletions(-) diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupContainerTests.ps1 b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupContainerTests.ps1 index 85f4e81087c8..6ab498cf334e 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupContainerTests.ps1 +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupContainerTests.ps1 @@ -15,8 +15,8 @@ $ResourceGroupName = "backuprg" $ResourceName = "backuprn" $Location = "westus" -$ContainerResourceGroupName = "powershellbvt" -$ContainerResourceName = "powershellbvt" +$ManagedResourceGroupName = "powershellbvt" +$ManagedResourceName = "powershellbvt" <# .SYNOPSIS @@ -32,10 +32,10 @@ function Test-GetAzureBackupContainerWithoutFilterReturnsNonZeroContainers function Test-GetAzureBackupContainerWithUniqueFilterReturnsOneContainer { $vault = Get-AzureBackupVault -Name $ResourceName; - $container = Get-AzureBackupContainer -vault $vault -ContainerResourceGroupName $ContainerResourceGroupName -ContainerResourceName $ContainerResourceName + $container = Get-AzureBackupContainer -vault $vault -ManagedResourceGroupName $ManagedResourceGroupName -ManagedResourceName $ManagedResourceName Assert-NotNull $container 'Container should not be null'; - Assert-AreEqual $container.ResourceName $ContainerResourceName -CaseSensitive 'Returned container resource name (a.k.a friendly name) does not match the test VM resource name'; - Assert-AreEqual $container.ResourceGroupName $ContainerResourceGroupName -CaseSensitive 'Returned container resource group name (a.k.a parent friendly name) does not match the test VM resource group name'; + Assert-AreEqual $container.ManagedResourceName $ManagedResourceName -CaseSensitive 'Returned container resource name (a.k.a friendly name) does not match the test VM resource name'; + Assert-AreEqual $container.ManagedResourceGroupName $ManagedResourceGroupName -CaseSensitive 'Returned container resource group name (a.k.a parent friendly name) does not match the test VM resource group name'; } <# @@ -44,15 +44,17 @@ Tests to register the container #> function Test-RegisterAzureBackupContainer { - $jobId = Register-AzureBackupContainer -ResourceGroupName $ResourceGroupName -ResourceName $ResourceName -location $Location -Name $ContainerResourceName -ServiceName $ContainerResourceGroupName + $vault = Get-AzureBackupVault -Name $ResourceName; + $jobId = Register-AzureBackupContainer -vault $vault -Name $ManagedResourceName -ServiceName $ManagedResourceGroupName Assert-NotNull $jobId 'JobID should not be null'; } function Test-UnregisterAzureBackupContainer { - $container = Get-AzureBackupContainer -ResourceGroupName $ResourceGroupName -ResourceName $ResourceName -location $Location -ContainerResourceName $ContainerResourceName -ContainerResourceGroupName $ContainerResourceGroupName - $jobId = Unregister-AzureBackupContainer -ResourceGroupName $ResourceGroupName -ResourceName $ResourceName -location $Location -AzureBackupContainer $container + $vault = Get-AzureBackupVault -Name $ResourceName; + $container = Get-AzureBackupContainer -vault $vault -ManagedResourceName $ManagedResourceName -ManagedResourceGroupName $ManagedResourceGroupName + $jobId = Unregister-AzureBackupContainer -vault $vault -AzureBackupContainer $container Assert-NotNull $jobId 'JobID should not be null'; } \ No newline at end of file diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupItemTestCases.ps1 b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupItemTestCases.ps1 index 5d9947c473a4..e34ba7283915 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupItemTestCases.ps1 +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupItemTestCases.ps1 @@ -12,7 +12,7 @@ $POName = "iaasvmcontainer;dev01testing;dev01testing" function Test-GetAzureBackupItemTests { - $azureBackUpContainer = New-Object Microsoft.Azure.Commands.AzureBackup.Cmdlets.AzureBackupContainer + $azureBackUpContainer = New-Object Microsoft.Azure.Commands.AzureBackup.Models.AzureBackupContainer $azureBackUpContainer.ResourceGroupName = $ResourceGroupName $azureBackUpContainer.ResourceName = $ResourceName $azureBackUpContainer.Location = $Location @@ -37,7 +37,7 @@ function Test-GetAzureBackupItemTests function Test-EnableAzureBackupProtection { - $policy = New-Object Microsoft.Azure.Commands.AzureBackup.Cmdlets.AzureBackupProtectionPolicy + $policy = New-Object Microsoft.Azure.Commands.AzureBackup.Models.AzureBackupProtectionPolicy $policy.InstanceId = $PolicyId $policy.Name = $PolicyName $policy.ResourceGroupName = $ResourceGroupName @@ -47,7 +47,7 @@ function Test-EnableAzureBackupProtection $policy.RetentionType = "1" $policy.ScheduleRunTimes = "2015-06-13T20:30:00" - $azureBackUpItem = New-Object Microsoft.Azure.Commands.AzureBackup.Cmdlets.AzureBackupItem + $azureBackUpItem = New-Object Microsoft.Azure.Commands.AzureBackup.Models.AzureBackupItem $azureBackUpItem.ResourceGroupName = $ResourceGroupName $azureBackUpItem.ResourceName = $ResourceName $azureBackUpItem.Location = $Location @@ -62,7 +62,7 @@ function Test-EnableAzureBackupProtection function Test-DisableAzureBackupProtection { - $azureBackUpItem = New-Object Microsoft.Azure.Commands.AzureBackup.Cmdlets.AzureBackupItem + $azureBackUpItem = New-Object Microsoft.Azure.Commands.AzureBackup.Models.AzureBackupItem $azureBackUpItem.ResourceGroupName = $ResourceGroupName $azureBackUpItem.ResourceName = $ResourceName $azureBackUpItem.Location = $Location diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupJobTests.ps1 b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupJobTests.ps1 index 6354c4b15af8..fb9e841545a7 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupJobTests.ps1 +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupJobTests.ps1 @@ -12,9 +12,10 @@ $POName = "iaasvmcontainer;dev01testing;dev01testing" function Test-GetAzureBackupJob { + $vault = Get-AzureBackupVault -Name $ResourceName; $OneMonthBack = Get-Date; $OneMonthBack = $OneMonthBack.AddDays(-30); - $jobs = Get-AzureBackupJob -ResourceGroupName $ResourceGroupName -ResourceName $ResourceName -Location $Location -From $OneMonthBack -Debug + $jobs = Get-AzureBackupJob -Vault $vault -From $OneMonthBack Assert-NotNull $jobs 'Jobs list should not be null' foreach($job in $jobs) { @@ -25,7 +26,7 @@ function Test-GetAzureBackupJob Assert-NotNull $jobs.Status 'Status should not be null'; Assert-NotNull $jobs.Operation 'Operation should not be null'; - $jobDetails = Get-AzureBackupJobDetails -ResourceGroupName $ResourceGroupName -ResourceName $ResourceName -Location $Location -Job $job + $jobDetails = Get-AzureBackupJobDetails -Job $job Assert-NotNull $jobDetails.InstanceId 'JobID should not be null'; Assert-NotNull $jobDetails.StartTime 'StartTime should not be null'; Assert-NotNull $jobDetails.WorkloadType 'WorkloadType should not be null'; @@ -40,13 +41,14 @@ function Test-GetAzureBackupJob function Test-StopAzureBackupJob { + $vault = Get-AzureBackupVault -Name $ResourceName; $OneMonthBack = Get-Date; $OneMonthBack = $OneMonthBack.AddDays(-30); #TODO #Call trigger backup and get an inprogress job - $jobsList = Get-AzureBackupJob -ResourceGroupName $ResourceGroupName -ResourceName $ResourceName -Location $Location -From $OneMonthBack #-Operation 'Backup' -Status 'InProgress' + $jobsList = Get-AzureBackupJob -Vault $vault -From $OneMonthBack #-Operation 'Backup' -Status 'InProgress' - Stop-AzureBackupJob -ResourceGroupName $ResourceGroupName -ResourceName $ResourceName -Location $Location -Job $jobsList[0]; - $jobDetails = Get-AzureBackupJobDetails -ResourceGroupName $ResourceGroupName -ResourceName $ResourceName -Location $Location -Job $jobsList[0]; + Stop-AzureBackupJob -Job $jobsList[0]; + $jobDetails = Get-AzureBackupJobDetails -Job $jobsList[0]; #Assert-AreEqual 'Cancelling' $jobDetails.Status } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupPolicyTests.ps1 b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupPolicyTests.ps1 index af8176ea820a..e336515c096f 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupPolicyTests.ps1 +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupPolicyTests.ps1 @@ -33,7 +33,8 @@ Tests creating new resource group and a simple resource. #> function Test-GetAzureBackupProtectionPolicyTests { - $protectionPolicies = Get-AzureBackupProtectionPolicy -ResourceGroupName $ResourceGroupName -ResourceName $ResourceName -Location $Location + $vault = Get-AzureBackupVault -Name $ResourceName; + $protectionPolicies = Get-AzureBackupProtectionPolicy -vault $vault Assert-NotNull $protectionPolicies 'Protection Policies should not be null' foreach($protectionPolicy in $protectionPolicies) { @@ -51,7 +52,8 @@ function Test-GetAzureBackupProtectionPolicyTests function Test-GetAzureBackupProtectionPolicyByNameTests { - $protectionPolicy = Get-AzureBackupProtectionPolicy -ResourceGroupName $ResourceGroupName -ResourceName $ResourceName -Location $Location -Name $PolicyName + $vault = Get-AzureBackupVault -Name $ResourceName; + $protectionPolicy = Get-AzureBackupProtectionPolicy -vault $vault -Name $PolicyName Assert-NotNull $protectionPolicy.InstanceId 'InstanceId should not be null' Assert-NotNull $protectionPolicy.Name 'Name should not be null' @@ -67,7 +69,8 @@ function Test-GetAzureBackupProtectionPolicyByNameTests function Test-NewAzureBackupProtectionPolicyTests { - $protectionPolicy = New-AzureBackupProtectionPolicy -Name $PolicyName -WorkloadType $WorkloadType -BackupType $BackupType -Daily -RetentionType $RetentionType -RetentionDuration $RetentionDuration -ScheduleRunTimes $ScheduleRunTimes -ResourceGroupName $ResourceGroupName -ResourceName $ResourceName -Location $Location + $vault = Get-AzureBackupVault -Name $ResourceName; + $protectionPolicy = New-AzureBackupProtectionPolicy -vault $vault -Name $PolicyName -WorkloadType $WorkloadType -BackupType $BackupType -Daily -RetentionType $RetentionType -RetentionDuration $RetentionDuration -ScheduleRunTimes $ScheduleRunTimes Assert-NotNull $protectionPolicy.InstanceId 'InstanceId should not be null' Assert-NotNull $protectionPolicy.Name 'Name should not be null' @@ -82,7 +85,7 @@ function Test-NewAzureBackupProtectionPolicyTests function Test-SetAzureBackupProtectionPolicyTests { - $policy = New-Object Microsoft.Azure.Commands.AzureBackup.Cmdlets.AzureBackupProtectionPolicy + $policy = New-Object Microsoft.Azure.Commands.AzureBackup.Models.AzureBackupProtectionPolicy $policy.InstanceId = $PolicyId $policy.Name = $PolicyName $policy.ResourceGroupName = $ResourceGroupName @@ -110,7 +113,7 @@ function Test-SetAzureBackupProtectionPolicyTests function Test-RemoveAzureBackupProtectionPolicyTests { $policyNewName = "policy09_new" - $policy = New-Object Microsoft.Azure.Commands.AzureBackup.Cmdlets.AzureBackupProtectionPolicy + $policy = New-Object Microsoft.Azure.Commands.AzureBackup.Models.AzureBackupProtectionPolicy $policy.InstanceId = $PolicyId $policy.Name = $policyNewName $policy.ResourceGroupName = $ResourceGroupName diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/BackupItemTests.ps1 b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/BackupItemTests.ps1 index 232bb45212c3..8ae666eb3075 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/BackupItemTests.ps1 +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/BackupItemTests.ps1 @@ -12,7 +12,7 @@ $POName = "iaasvmcontainer;dev01testing;dev01testing" function Test-BackUpAzureBackUpItem { - $azureBackUpItem = New-Object Microsoft.Azure.Commands.AzureBackup.Cmdlets.AzureBackupItem + $azureBackUpItem = New-Object Microsoft.Azure.Commands.AzureBackup.Models.AzureBackupItem $azureBackUpItem.ResourceGroupName = $ResourceGroupName $azureBackUpItem.ResourceName = $ResourceName $azureBackUpItem.Location = $Location diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/RecoveryPointTests.ps1 b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/RecoveryPointTests.ps1 index 57de7431c989..9ba98ab4fed6 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/RecoveryPointTests.ps1 +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/RecoveryPointTests.ps1 @@ -12,7 +12,7 @@ $POName = "iaasvmcontainer;dev01testing;dev01testing" function Test-GetAzureRecoveryPoint { - $azureBackUpItem = New-Object Microsoft.Azure.Commands.AzureBackup.Cmdlets.AzureBackupItem + $azureBackUpItem = New-Object Microsoft.Azure.Commands.AzureBackup.Models.AzureBackupItem $azureBackUpItem.ResourceGroupName = $ResourceGroupName $azureBackUpItem.ResourceName = $ResourceGroupName $azureBackUpItem.Location = $Location diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupCmdletHelpMessage.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupCmdletHelpMessage.cs index 16b2fe4bdd37..bb2050b1fdd7 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupCmdletHelpMessage.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupCmdletHelpMessage.cs @@ -24,7 +24,7 @@ internal static class AzureBackupCmdletHelpMessage public const string Sku = "The SKU of the backup vault instance."; public const string ResourceTags = "A hash table which represents resource tags."; public const string TargetLocation = "The directory where the credentials file will be saved. This must be an absolute path."; - public const string ContainerResourceName = "The container resource name aka friendly name."; + public const string ManagedResourceName = "The resource name of the resource being managed by the Azure Backup service (ex: resource name of the VM)."; public const string ContainerId = "The container ID."; public const string ContainerRegistrationStatus = "The container registration status."; public const string ContainerType = "The container type."; @@ -52,7 +52,7 @@ internal static class AzureBackupCmdletHelpMessage public const string WaitJobFilterTimeoutHelpMessage = "Maximum number of seconds for which cmdlet should wait before job(s) complete running."; public const string VirtualMachine = "Virtual Machine."; - public const string ContainerResourceGroupName = "The container resource group name."; + public const string ManagedResourceGroupName = "The resource group name of the resource being managed by the Azure Backup service (ex: resource group name of the VM)."; public const string ProtectionStatus = "Protection Status of the azure backup item."; public const string AzureBackUpItem = "Azure BackUp Item."; public const string RecoveryPointId = "Recovery Point Id."; diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/GetAzureBackupContainer.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/GetAzureBackupContainer.cs index a9b4d4df84d2..13a30180d730 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/GetAzureBackupContainer.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/GetAzureBackupContainer.cs @@ -31,13 +31,13 @@ namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets [Cmdlet(VerbsCommon.Get, "AzureBackupContainer"), OutputType(typeof(AzureBackupContainer), typeof(List))] public class GetAzureBackupContainer : AzureBackupVaultCmdletBase { - [Parameter(Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.ContainerResourceGroupName)] + [Parameter(Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.ManagedResourceGroupName)] [ValidateNotNullOrEmpty] - public string ContainerResourceGroupName { get; set; } + public string ManagedResourceGroupName { get; set; } - [Parameter(Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.ContainerResourceName)] + [Parameter(Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.ManagedResourceName)] [ValidateNotNullOrEmpty] - public string ContainerResourceName { get; set; } + public string ManagedResourceName { get; set; } [Parameter(Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.ContainerRegistrationStatus)] [ValidateNotNullOrEmpty] @@ -63,11 +63,11 @@ public override void ExecuteCmdlet() // When resource group name is specified, remove all containers whose resource group name // doesn't match the given resource group name - if (!string.IsNullOrEmpty(ContainerResourceGroupName)) + if (!string.IsNullOrEmpty(ManagedResourceGroupName)) { containerInfos.RemoveAll(containerInfo => { - return containerInfo.ParentContainerName != ContainerResourceGroupName; + return containerInfo.ParentContainerName != ManagedResourceGroupName; }); WriteDebug(string.Format("Count of containers after resource group filter = {0}", containerInfos.Count)); } @@ -81,7 +81,7 @@ public override void ExecuteCmdlet() // When container resource name and container resource group name are specified, this parameter set // identifies a container uniquely. Thus, we return just one container instead of a list. - if (!string.IsNullOrEmpty(ContainerResourceName) & !string.IsNullOrEmpty(ContainerResourceGroupName)) + if (!string.IsNullOrEmpty(ManagedResourceName) & !string.IsNullOrEmpty(ManagedResourceGroupName)) { if (containers.Any()) { @@ -120,9 +120,9 @@ private string ConstructQueryFilterString() break; } - if (!string.IsNullOrEmpty(ContainerResourceName)) + if (!string.IsNullOrEmpty(ManagedResourceName)) { - containerQueryObject.ContainerFriendlyNameField = ContainerResourceName; + containerQueryObject.ContainerFriendlyNameField = ManagedResourceName; } return ContainerHelpers.GetQueryFilter(containerQueryObject); diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/VaultCredentials/GetAzureBackupVaultCredentials.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/VaultCredentials/GetAzureBackupVaultCredentials.cs index 7911035d676e..8f73cc9b3390 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/VaultCredentials/GetAzureBackupVaultCredentials.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/VaultCredentials/GetAzureBackupVaultCredentials.cs @@ -55,10 +55,10 @@ public override void ExecuteCmdlet() } string subscriptionId = Profile.DefaultSubscription.Id.ToString(); - string resourceType = "resourceType"; + string resourceType = "BackupVault"; string displayName = subscriptionId + "_" + vault.ResourceGroupName + "_" + vault.Name; - WriteVerbose(string.Format(CultureInfo.InvariantCulture, + WriteDebug(string.Format(CultureInfo.InvariantCulture, "Executing cmdlet with SubscriptionId = {0}, ResourceGroupName = {1}, ResourceName = {2}, TargetLocation = {3}", subscriptionId, vault.ResourceGroupName, vault.Name, TargetLocation)); @@ -73,9 +73,9 @@ public override void ExecuteCmdlet() try { // Upload cert into ID Mgmt - WriteVerbose(string.Format(CultureInfo.InvariantCulture, "RecoveryService - Going to upload the certificate")); + WriteDebug(string.Format(CultureInfo.InvariantCulture, "RecoveryService - Going to upload the certificate")); acsNamespace = UploadCert(cert, subscriptionId, vault.Name, resourceType, vault.ResourceGroupName); - WriteVerbose(string.Format(CultureInfo.InvariantCulture, "RecoveryService - Successfully uploaded the certificate")); + WriteDebug(string.Format(CultureInfo.InvariantCulture, "RecoveryService - Successfully uploaded the certificate")); } catch (Exception exception) { @@ -84,6 +84,8 @@ public override void ExecuteCmdlet() // generate vault credentials string vaultCredsFileContent = GenerateVaultCreds(cert, subscriptionId, resourceType, acsNamespace); + vaultCredsFileContent = vaultCredsFileContent.Replace("Microsoft.Azure.Commands.AzureBackup.Models", + "Microsoft.Azure.Portal.RecoveryServices.Models.Common"); // prepare for download string fileName = string.Format("{0}_{1}.VaultCredentials", displayName, DateTime.UtcNow.ToString("yyyy-dd-M--HH-mm-ss")); @@ -94,7 +96,7 @@ public override void ExecuteCmdlet() directoryPath = TargetLocation; } string filePath = Path.Combine(directoryPath, fileName); - WriteVerbose(string.Format("Saving Vault Credentials to file : {0}", filePath)); + WriteDebug(string.Format("Saving Vault Credentials to file : {0}", filePath)); File.WriteAllBytes(filePath, Encoding.UTF8.GetBytes(vaultCredsFileContent)); @@ -180,18 +182,26 @@ private string GenerateVaultCredsForBackup(X509Certificate2 cert, string subscri resourceType, vault.Name, CertUtils.SerializeCert(cert, X509ContentType.Pfx), - acsNamespace); - + acsNamespace, + GetAgentLinks()); DataContractSerializer serializer = new DataContractSerializer(typeof(BackupVaultCreds)); serializer.WriteObject(writer, backupVaultCreds); - WriteVerbose(string.Format(CultureInfo.InvariantCulture, "RecoveryService - Backup Vault - Successfully serialized the file content")); + WriteDebug(string.Format(CultureInfo.InvariantCulture, "RecoveryService - Backup Vault - Successfully serialized the file content")); } return Encoding.UTF8.GetString(output.ToArray()); } } + private static string GetAgentLinks() + { + return "WABUpdateKBLink,http://go.microsoft.com/fwlink/p/?LinkId=229525;" + + "StorageQuotaPurchaseLink,http://go.microsoft.com/fwlink/?LinkId=205490;" + + "WebPortalLink,http://go.microsoft.com/fwlink/?LinkId=252913;" + + "WABprivacyStatement,http://go.microsoft.com/fwlink/?LinkId=221308"; + } + /// /// A set of XmlWriterSettings to use for the publishing profile /// diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupContainer.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupContainer.cs index 3dc451f0f81c..1aa5cb29615c 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupContainer.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupContainer.cs @@ -26,6 +26,16 @@ namespace Microsoft.Azure.Commands.AzureBackup.Models /// public class AzureBackupContainer : AzureBackupContainerContextObject { + /// + /// Resource group name of the resource (ex: resource group name of the VM) being managed by Azure Backup service. + /// + public string ManagedResourceGroupName { get; set; } + + /// + /// Resource name of the resource (ex: resource name of the VM) being managed by the Azure Backup service. + /// + public string ManagedResourceName { get; set; } + /// /// Status of health of the Azure Backup container /// @@ -41,6 +51,8 @@ public AzureBackupContainer() : base() { } public AzureBackupContainer(AzurePSBackupVault vault, ContainerInfo containerInfo) : base(vault, containerInfo) { + ManagedResourceGroupName = containerInfo.ParentContainerFriendlyName; + ManagedResourceName = containerInfo.FriendlyName; HealthStatus = containerInfo.HealthStatus; RegistrationStatus = containerInfo.RegistrationStatus; } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/VaultCredentials.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/VaultCredentials.cs index ae07362bc243..7c5eb0885b62 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/VaultCredentials.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/VaultCredentials.cs @@ -153,7 +153,6 @@ internal class AcsNamespace /// /// Initializes a new instance of the AcsNamespace class /// - [DataMember(Order = 3)] public AcsNamespace() { } /// From d0dd54995ddf5fd66a8cb61231f50c3ef20774a9 Mon Sep 17 00:00:00 2001 From: AditTulasi Date: Tue, 30 Jun 2015 08:45:06 +0530 Subject: [PATCH 121/155] Returning job object instead of job id --- .../AzureBackupCmdletBase.cs | 12 ++++ .../Cmdlets/BackUp/TriggerBackUp.cs | 2 +- .../Container/RegisterAzureBackupContainer.cs | 2 +- .../UnregisterAzureBackupContainer.cs | 3 +- .../Item/Disable-AzureBackupProtection .cs | 2 +- .../Item/Enable-AzureBackupProtection .cs | 2 +- .../Cmdlets/Jobs/GetAzureBackupJob.cs | 2 +- .../Cmdlets/Jobs/WaitAzureBackupJob.cs | 59 ++++--------------- .../Commands.AzureBackup/Models/JobObjects.cs | 2 +- 9 files changed, 31 insertions(+), 55 deletions(-) diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupCmdletBase.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupCmdletBase.cs index 0ca9747d3182..a6bcd6b9ea93 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupCmdletBase.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupCmdletBase.cs @@ -178,6 +178,18 @@ internal OperationResultResponse TrackOperation(Guid operationId, int checkFrequ return response; } + + internal IList GetCreatedJobs(AzurePSBackupVault vault, IList jobIds) + { + IList jobs = new List(); + + foreach(string jobId in jobIds) + { + jobs.Add(new AzureBackupJob(vault, AzureBackupClient.GetJobDetails(jobId).Job)); + } + + return jobs; + } } } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/BackUp/TriggerBackUp.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/BackUp/TriggerBackUp.cs index c9812e912f7d..6d22f9eea9e4 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/BackUp/TriggerBackUp.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/BackUp/TriggerBackUp.cs @@ -46,7 +46,7 @@ public override void ExecuteCmdlet() WriteDebug("Triggered backup. Converting response"); var operationStatus = TrackOperation(operationId); - this.WriteObject(operationStatus.Jobs.FirstOrDefault()); + WriteObject(GetCreatedJobs(new Models.AzurePSBackupVault(Item.ResourceGroupName, Item.ResourceName, Item.Location), operationStatus.Jobs)); }); } } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/RegisterAzureBackupContainer.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/RegisterAzureBackupContainer.cs index 5cb877e7b876..6907c1a76fa3 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/RegisterAzureBackupContainer.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/RegisterAzureBackupContainer.cs @@ -106,7 +106,7 @@ public override void ExecuteCmdlet() var operationId = AzureBackupClient.RegisterContainer(registrationRequest); var operationStatus = GetOperationStatus(operationId); - WriteObject(operationStatus.Jobs.FirstOrDefault()); + WriteObject(GetCreatedJobs(vault, operationStatus.Jobs).FirstOrDefault()); }); } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/UnregisterAzureBackupContainer.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/UnregisterAzureBackupContainer.cs index 2c33013be3ca..219cd8c82741 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/UnregisterAzureBackupContainer.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/UnregisterAzureBackupContainer.cs @@ -46,8 +46,7 @@ public override void ExecuteCmdlet() UnregisterContainerRequestInput unregRequest = new UnregisterContainerRequestInput(containerUniqueName, AzureBackupContainerType.IaasVMContainer.ToString()); var operationId = AzureBackupClient.UnRegisterContainer(unregRequest); - var jobId = GetOperationStatus(operationId).Jobs.FirstOrDefault(); - WriteObject(jobId); + WriteObject(GetCreatedJobs(vault, GetOperationStatus(operationId).Jobs).FirstOrDefault()); }); } } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Item/Disable-AzureBackupProtection .cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Item/Disable-AzureBackupProtection .cs index 9c46c8455c91..489ad0f09749 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Item/Disable-AzureBackupProtection .cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Item/Disable-AzureBackupProtection .cs @@ -63,7 +63,7 @@ public override void ExecuteCmdlet() WriteVerbose("Received disable azure backup protection response"); var operationStatus = GetOperationStatus(operationId); - this.WriteObject(operationStatus.Jobs.FirstOrDefault()); + this.WriteObject(GetCreatedJobs(new Models.AzurePSBackupVault(Item.ResourceGroupName, Item.ResourceName, Item.Location), operationStatus.Jobs).FirstOrDefault()); }); } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Item/Enable-AzureBackupProtection .cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Item/Enable-AzureBackupProtection .cs index f6eac52aae15..8ab6eaeca410 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Item/Enable-AzureBackupProtection .cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Item/Enable-AzureBackupProtection .cs @@ -72,7 +72,7 @@ public override void ExecuteCmdlet() WriteDebug("Received enable azure backup protection response"); var operationStatus = GetOperationStatus(operationId); - this.WriteObject(operationStatus.Jobs.FirstOrDefault()); + this.WriteObject(GetCreatedJobs(new Models.AzurePSBackupVault(Item.ResourceGroupName, Item.ResourceName, Item.Location), operationStatus.Jobs).FirstOrDefault()); }); } } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Jobs/GetAzureBackupJob.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Jobs/GetAzureBackupJob.cs index 6c477b8d4bb4..39d3b949853c 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Jobs/GetAzureBackupJob.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Jobs/GetAzureBackupJob.cs @@ -30,7 +30,7 @@ namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets [Cmdlet(VerbsCommon.Get, "AzureBackupJob", DefaultParameterSetName = "FiltersSet"), OutputType(typeof(List), typeof(Mgmt.Job))] public class GetAzureBackupJob : AzureBackupCmdletBase { - [Parameter(Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.Vault, ParameterSetName = "FiltersSet")] + [Parameter(Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.Vault, ParameterSetName = "FiltersSet", ValueFromPipeline = true)] [ValidateNotNull] public AzurePSBackupVault Vault { get; set; } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Jobs/WaitAzureBackupJob.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Jobs/WaitAzureBackupJob.cs index 52fcfeddab4a..08e76e2d2687 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Jobs/WaitAzureBackupJob.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Jobs/WaitAzureBackupJob.cs @@ -22,18 +22,10 @@ namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets { - [Cmdlet("Wait", "AzureBackupJob", DefaultParameterSetName = "IdFiltersSet"), OutputType(typeof(Mgmt.Job))] - public class WaitAzureBackupJob : AzureBackupVaultCmdletBase + [Cmdlet("Wait", "AzureBackupJob"), OutputType(typeof(Mgmt.Job))] + public class WaitAzureBackupJob : AzureBackupCmdletBase { - [Parameter(Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.Vault, ParameterSetName = "IdFiltersSet")] - [ValidateNotNull] - public AzurePSBackupVault Vault { get; set; } - - [Parameter(Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.WaitJobFilterJobIdHelpMessage, ValueFromPipeline = true, ParameterSetName = "IdFiltersSet")] - [ValidateNotNull] - public object JobID { get; set; } - - [Parameter(Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.WaitJobFilterJobHelpMessage, ValueFromPipeline = true, ParameterSetName = "JobFiltersSet")] + [Parameter(Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.WaitJobFilterJobHelpMessage, ValueFromPipeline = true)] [ValidateNotNullOrEmpty] public object Job { get; set; } @@ -44,16 +36,13 @@ public class WaitAzureBackupJob : AzureBackupVaultCmdletBase public override void ExecuteCmdlet() { List specifiedJobs = new List(); + AzurePSBackupVault Vault = null; if (Job != null) { - WriteDebug("Job is PowershellObject: " + (Job is PSObject)); - WriteDebug("Job type: " + Job.GetType()); - if ((Job is PSObject) && (((PSObject)Job).ImmediateBaseObject is List)) { - WriteDebug("Type of input paramter is List"); - foreach (AzureBackupJob jobToWait in ((Job as PSObject).ImmediateBaseObject as List)) + foreach (AzureBackupJob jobToWait in (((PSObject)Job).ImmediateBaseObject as List)) { Vault = new AzurePSBackupVault(jobToWait.ResourceGroupName, jobToWait.ResourceName, jobToWait.Location); specifiedJobs.Add(jobToWait.InstanceId); @@ -79,42 +68,18 @@ public override void ExecuteCmdlet() Vault = new AzurePSBackupVault((Job as AzureBackupJob).ResourceGroupName, (Job as AzureBackupJob).ResourceName, (Job as AzureBackupJob).Location); specifiedJobs.Add((Job as AzureBackupJob).InstanceId); } - } - - if(JobID != null) - { - WriteDebug("Type of immediate base object: " + ((PSObject)JobID).ImmediateBaseObject.GetType().ToString()); - if ((JobID is PSObject) && (((PSObject)JobID).ImmediateBaseObject is List)) - { - foreach (string idOfJobToWait in ((JobID as PSObject).ImmediateBaseObject as List)) - { - WriteDebug("Type of JobID filter is List."); - specifiedJobs.Add(idOfJobToWait); - } - } - else if (JobID is List) - { - foreach (string idOfJobToWait in (JobID as List)) - { - WriteDebug("Type of JobID filter is List."); - specifiedJobs.Add(idOfJobToWait); - } - } - else if ((JobID is PSObject) && (((PSObject)JobID).ImmediateBaseObject is string)) + else if ((Job is PSObject) && (((PSObject)Job).ImmediateBaseObject is AzureBackupJobDetails)) { - WriteDebug("Type of JobID filter is string."); - specifiedJobs.Add((JobID as PSObject).ImmediateBaseObject as string); + AzureBackupJob azureJob = ((Job as PSObject).ImmediateBaseObject as AzureBackupJobDetails); + Vault = new AzurePSBackupVault(azureJob.ResourceGroupName, azureJob.ResourceName, azureJob.Location); + specifiedJobs.Add(azureJob.InstanceId); } - else if (JobID is string) + else if (Job is AzureBackupJobDetails) { - WriteDebug("Type of JobID filter is string."); - specifiedJobs.Add(JobID as string); + Vault = new AzurePSBackupVault((Job as AzureBackupJobDetails).ResourceGroupName, (Job as AzureBackupJobDetails).ResourceName, (Job as AzureBackupJobDetails).Location); + specifiedJobs.Add((Job as AzureBackupJobDetails).InstanceId); } } - else - { - WriteDebug("JobID is null"); - } WriteDebug("Number of jobs to wait on: " + specifiedJobs.Count); diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/JobObjects.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/JobObjects.cs index 2ee495336ae0..993447cacf5b 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/JobObjects.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/JobObjects.cs @@ -53,7 +53,7 @@ public AzureBackupJob(AzurePSBackupVault vault, Mgmt.Job serviceJob) { this.InstanceId = serviceJob.InstanceId; this.WorkloadType = serviceJob.Type; - this.WorkloadName = serviceJob.Name; + this.WorkloadName = serviceJob.EntityFriendlyName; this.Operation = serviceJob.Operation; this.Status = serviceJob.Status; this.Duration = serviceJob.Duration; From 744bc6030bfe1ba08f8cb3101a941c2b8420b81a Mon Sep 17 00:00:00 2001 From: AditTulasi Date: Tue, 30 Jun 2015 10:08:40 +0530 Subject: [PATCH 122/155] Merging with dev branch and changing test cases --- .../AzureBackupContainerTests.ps1 | 4 ++-- .../ScenarioTests/AzureBackupJobTests.ps1 | 22 +++++++++++++------ .../AzureBackupVaultCmdletBase.cs | 9 ++++---- .../Cmdlets/BackUp/TriggerBackUp.cs | 2 +- .../Container/GetAzureBackupContainer.cs | 2 +- .../Container/RegisterAzureBackupContainer.cs | 2 +- .../UnregisterAzureBackupContainer.cs | 2 +- .../GetAzureBackupProtectionPolicy.cs | 4 ++-- .../NewAzureBackupProtectionPolicy.cs | 2 +- .../Cmdlets/Vault/RemoveAzureBackupVault.cs | 2 +- .../Cmdlets/Vault/SetAzureBackupVault.cs | 6 ++--- .../GetAzureBackupVaultCredentials.cs | 10 ++++----- 12 files changed, 37 insertions(+), 30 deletions(-) diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupContainerTests.ps1 b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupContainerTests.ps1 index 6ab498cf334e..33f834e7420e 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupContainerTests.ps1 +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupContainerTests.ps1 @@ -47,7 +47,7 @@ function Test-RegisterAzureBackupContainer $vault = Get-AzureBackupVault -Name $ResourceName; $jobId = Register-AzureBackupContainer -vault $vault -Name $ManagedResourceName -ServiceName $ManagedResourceGroupName - Assert-NotNull $jobId 'JobID should not be null'; + Assert-NotNull $jobId 'Job should not be null'; } function Test-UnregisterAzureBackupContainer @@ -56,5 +56,5 @@ function Test-UnregisterAzureBackupContainer $container = Get-AzureBackupContainer -vault $vault -ManagedResourceName $ManagedResourceName -ManagedResourceGroupName $ManagedResourceGroupName $jobId = Unregister-AzureBackupContainer -vault $vault -AzureBackupContainer $container - Assert-NotNull $jobId 'JobID should not be null'; + Assert-NotNull $jobId 'Job should not be null'; } \ No newline at end of file diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupJobTests.ps1 b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupJobTests.ps1 index fb9e841545a7..d63ea8fc45d8 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupJobTests.ps1 +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupJobTests.ps1 @@ -41,14 +41,22 @@ function Test-GetAzureBackupJob function Test-StopAzureBackupJob { - $vault = Get-AzureBackupVault -Name $ResourceName; $OneMonthBack = Get-Date; $OneMonthBack = $OneMonthBack.AddDays(-30); - #TODO - #Call trigger backup and get an inprogress job - $jobsList = Get-AzureBackupJob -Vault $vault -From $OneMonthBack #-Operation 'Backup' -Status 'InProgress' - Stop-AzureBackupJob -Job $jobsList[0]; - $jobDetails = Get-AzureBackupJobDetails -Job $jobsList[0]; - #Assert-AreEqual 'Cancelling' $jobDetails.Status + $azureBackUpItem = New-Object Microsoft.Azure.Commands.AzureBackup.Models.AzureBackupItem + $azureBackUpItem.ResourceGroupName = $ResourceGroupName + $azureBackUpItem.ResourceName = $ResourceName + $azureBackUpItem.Location = $Location + $azureBackUpItem.ContainerUniqueName = $ContainerName + $azureBackUpItem.ContainerType = $ContainerType + $azureBackUpItem.DataSourceId = $DataSourceId + $azureBackUpItem.Type = $DataSourceType + + $job = Backup-AzureBackupItem -Item $azureBackUpItem + + Stop-AzureBackupJob -Job $job; + Wait-AzureBackupJob -Job $job; + $jobDetails = Get-AzureBackupJobDetails -Job $job; + Assert-AreEqual 'Cancelled' $jobDetails.Status } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupVaultCmdletBase.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupVaultCmdletBase.cs index 581d1b8b5aec..c383b02fdc2b 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupVaultCmdletBase.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupVaultCmdletBase.cs @@ -31,15 +31,14 @@ public abstract class AzureBackupVaultCmdletBase : AzureBackupCmdletBase { [Parameter(Position = 0, Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.Vault, ValueFromPipeline = true)] [ValidateNotNullOrEmpty] - public AzurePSBackupVault vault { get; set; } + public AzurePSBackupVault Vault { get; set; } public override void ExecuteCmdlet() { base.ExecuteCmdlet(); - vault.Validate(); + Vault.Validate(); - InitializeAzureBackupCmdlet(vault); + InitializeAzureBackupCmdlet(Vault); } } -} - +} \ No newline at end of file diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/BackUp/TriggerBackUp.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/BackUp/TriggerBackUp.cs index 6d22f9eea9e4..6f567814cc6d 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/BackUp/TriggerBackUp.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/BackUp/TriggerBackUp.cs @@ -46,7 +46,7 @@ public override void ExecuteCmdlet() WriteDebug("Triggered backup. Converting response"); var operationStatus = TrackOperation(operationId); - WriteObject(GetCreatedJobs(new Models.AzurePSBackupVault(Item.ResourceGroupName, Item.ResourceName, Item.Location), operationStatus.Jobs)); + WriteObject(GetCreatedJobs(new Models.AzurePSBackupVault(Item.ResourceGroupName, Item.ResourceName, Item.Location), operationStatus.Jobs).FirstOrDefault()); }); } } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/GetAzureBackupContainer.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/GetAzureBackupContainer.cs index 13a30180d730..c7d6bddb8400 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/GetAzureBackupContainer.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/GetAzureBackupContainer.cs @@ -76,7 +76,7 @@ public override void ExecuteCmdlet() // BUG: Friendly name was previously assigned to ResourceName (vault name) List containers = containerInfos.ConvertAll(containerInfo => { - return new AzureBackupContainer(vault, containerInfo); + return new AzureBackupContainer(Vault, containerInfo); }); // When container resource name and container resource group name are specified, this parameter set diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/RegisterAzureBackupContainer.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/RegisterAzureBackupContainer.cs index 4909cddc352f..b4edbe2df201 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/RegisterAzureBackupContainer.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/RegisterAzureBackupContainer.cs @@ -107,7 +107,7 @@ public override void ExecuteCmdlet() var operationId = AzureBackupClient.RegisterContainer(registrationRequest); var operationStatus = GetOperationStatus(operationId); - WriteObject(GetCreatedJobs(vault, operationStatus.Jobs).FirstOrDefault()); + WriteObject(GetCreatedJobs(Vault, operationStatus.Jobs).FirstOrDefault()); }); } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/UnregisterAzureBackupContainer.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/UnregisterAzureBackupContainer.cs index 85a12b513f6b..b3ee567b2e5e 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/UnregisterAzureBackupContainer.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/UnregisterAzureBackupContainer.cs @@ -46,7 +46,7 @@ public override void ExecuteCmdlet() UnregisterContainerRequestInput unregRequest = new UnregisterContainerRequestInput(containerUniqueName, AzureBackupContainerType.IaasVMContainer.ToString()); var operationId = AzureBackupClient.UnRegisterContainer(unregRequest); - WriteObject(GetCreatedJobs(vault, GetOperationStatus(operationId).Jobs).FirstOrDefault()); + WriteObject(GetCreatedJobs(Vault, GetOperationStatus(operationId).Jobs).FirstOrDefault()); }); } } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/GetAzureBackupProtectionPolicy.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/GetAzureBackupProtectionPolicy.cs index 931504977024..94822c26fee1 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/GetAzureBackupProtectionPolicy.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/GetAzureBackupProtectionPolicy.cs @@ -42,12 +42,12 @@ public override void ExecuteCmdlet() if (Name != null) { var policyInfo = AzureBackupClient.GetProtectionPolicyByName(Name); - WriteObject(ProtectionPolicyHelpers.GetCmdletPolicy(vault, policyInfo)); + WriteObject(ProtectionPolicyHelpers.GetCmdletPolicy(Vault, policyInfo)); } else { var policyObjects = AzureBackupClient.ListProtectionPolicies(); - WriteObject(ProtectionPolicyHelpers.GetCmdletPolicies(vault, policyObjects)); + WriteObject(ProtectionPolicyHelpers.GetCmdletPolicies(Vault, policyObjects)); } }); } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/NewAzureBackupProtectionPolicy.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/NewAzureBackupProtectionPolicy.cs index e9c01c03d859..9df08fd14854 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/NewAzureBackupProtectionPolicy.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/NewAzureBackupProtectionPolicy.cs @@ -88,7 +88,7 @@ public override void ExecuteCmdlet() WriteDebug("Protection policy created successfully"); var policyInfo = AzureBackupClient.GetProtectionPolicyByName(Name); - WriteObject(ProtectionPolicyHelpers.GetCmdletPolicy(vault, policyInfo)); + WriteObject(ProtectionPolicyHelpers.GetCmdletPolicy(Vault, policyInfo)); }); } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/RemoveAzureBackupVault.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/RemoveAzureBackupVault.cs index f79d44b8db04..11f3b19ed347 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/RemoveAzureBackupVault.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/RemoveAzureBackupVault.cs @@ -43,7 +43,7 @@ public override void ExecuteCmdlet() { base.ExecuteCmdlet(); - AzureBackupClient.DeleteVault(vault.ResourceGroupName, vault.Name); + AzureBackupClient.DeleteVault(Vault.ResourceGroupName, Vault.Name); }); } } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/SetAzureBackupVault.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/SetAzureBackupVault.cs index 50565137cf40..a325fcceb084 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/SetAzureBackupVault.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/SetAzureBackupVault.cs @@ -60,7 +60,7 @@ public override void ExecuteCmdlet() if (Sku != null) { WriteDebug(String.Format("Updating Sku, Sku: {0}", Sku)); - AzureBackupClient.CreateOrUpdateAzureBackupVault(vault.ResourceGroupName, vault.Name, vault.Region, Sku); + AzureBackupClient.CreateOrUpdateAzureBackupVault(Vault.ResourceGroupName, Vault.Name, Vault.Region, Sku); } if (Storage.HasValue) @@ -70,8 +70,8 @@ public override void ExecuteCmdlet() AzureBackupClient.UpdateStorageType(Storage.ToString()); } - var backupVault = AzureBackupClient.GetVault(vault.ResourceGroupName, vault.Name); - WriteObject(VaultHelpers.GetCmdletVault(backupVault, AzureBackupClient.GetStorageTypeDetails(vault.ResourceGroupName, vault.Name))); + var backupVault = AzureBackupClient.GetVault(Vault.ResourceGroupName, Vault.Name); + WriteObject(VaultHelpers.GetCmdletVault(backupVault, AzureBackupClient.GetStorageTypeDetails(Vault.ResourceGroupName, Vault.Name))); }); } } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/VaultCredentials/GetAzureBackupVaultCredentials.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/VaultCredentials/GetAzureBackupVaultCredentials.cs index 8f73cc9b3390..a62341720469 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/VaultCredentials/GetAzureBackupVaultCredentials.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/VaultCredentials/GetAzureBackupVaultCredentials.cs @@ -56,14 +56,14 @@ public override void ExecuteCmdlet() string subscriptionId = Profile.DefaultSubscription.Id.ToString(); string resourceType = "BackupVault"; - string displayName = subscriptionId + "_" + vault.ResourceGroupName + "_" + vault.Name; + string displayName = subscriptionId + "_" + Vault.ResourceGroupName + "_" + Vault.Name; WriteDebug(string.Format(CultureInfo.InvariantCulture, "Executing cmdlet with SubscriptionId = {0}, ResourceGroupName = {1}, ResourceName = {2}, TargetLocation = {3}", - subscriptionId, vault.ResourceGroupName, vault.Name, TargetLocation)); + subscriptionId, Vault.ResourceGroupName, Vault.Name, TargetLocation)); X509Certificate2 cert = CertUtils.CreateSelfSignedCert(CertUtils.DefaultIssuer, - CertUtils.GenerateCertFriendlyName(subscriptionId, vault.Name), + CertUtils.GenerateCertFriendlyName(subscriptionId, Vault.Name), CertUtils.DefaultPassword, DateTime.UtcNow.AddMinutes(-10), DateTime.UtcNow.AddHours(this.GetCertificateExpiryInHours())); @@ -74,7 +74,7 @@ public override void ExecuteCmdlet() { // Upload cert into ID Mgmt WriteDebug(string.Format(CultureInfo.InvariantCulture, "RecoveryService - Going to upload the certificate")); - acsNamespace = UploadCert(cert, subscriptionId, vault.Name, resourceType, vault.ResourceGroupName); + acsNamespace = UploadCert(cert, subscriptionId, Vault.Name, resourceType, Vault.ResourceGroupName); WriteDebug(string.Format(CultureInfo.InvariantCulture, "RecoveryService - Successfully uploaded the certificate")); } catch (Exception exception) @@ -180,7 +180,7 @@ private string GenerateVaultCredsForBackup(X509Certificate2 cert, string subscri { BackupVaultCreds backupVaultCreds = new BackupVaultCreds(subscriptionId, resourceType, - vault.Name, + Vault.Name, CertUtils.SerializeCert(cert, X509ContentType.Pfx), acsNamespace, GetAgentLinks()); From 1e5befd6c84aa276cdd9ca6ecab85e0aee1911d7 Mon Sep 17 00:00:00 2001 From: AditTulasi Date: Tue, 30 Jun 2015 13:09:11 +0530 Subject: [PATCH 123/155] Fixing few bugs --- .../Cmdlets/Jobs/GetAzureBackupJob.cs | 10 +++++++++- .../Cmdlets/Jobs/StopAzureBackukpJob.cs | 2 +- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Jobs/GetAzureBackupJob.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Jobs/GetAzureBackupJob.cs index 39d3b949853c..3198076ed658 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Jobs/GetAzureBackupJob.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Jobs/GetAzureBackupJob.cs @@ -145,7 +145,15 @@ public override void ExecuteCmdlet() } WriteDebug("Successfully retrieved all jobs. Number of jobs retrieved: " + retrievedJobs.Count()); - WriteObject(retrievedJobs); + + if (retrievedJobs.Count > 1) + { + WriteObject(retrievedJobs); + } + else + { + WriteObject(retrievedJobs.First()); + } }); } } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Jobs/StopAzureBackukpJob.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Jobs/StopAzureBackukpJob.cs index 9679f4d95b21..11deb9fe87a4 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Jobs/StopAzureBackukpJob.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Jobs/StopAzureBackukpJob.cs @@ -38,7 +38,7 @@ public class StopAzureBackupJob : AzureBackupCmdletBase [ValidateNotNullOrEmpty] public string JobID { get; set; } - [Parameter(Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.StopJobFilterJobHelpMessage, ParameterSetName = "JobFiltersSet")] + [Parameter(Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.StopJobFilterJobHelpMessage, ParameterSetName = "JobFiltersSet", ValueFromPipeline = true)] [ValidateNotNull] public AzureBackupJob Job { get; set; } From fe05351022999729114501f2bca2e2e8ceab45ed Mon Sep 17 00:00:00 2001 From: pikumarmsft Date: Tue, 30 Jun 2015 13:12:30 +0530 Subject: [PATCH 124/155] Fixing bugs 3395827 and 3376044 --- .../Cmdlets/Item/Disable-AzureBackupProtection .cs | 4 ++-- .../Cmdlets/Item/GetAzureBackupItem.cs | 9 ++++++++- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Item/Disable-AzureBackupProtection .cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Item/Disable-AzureBackupProtection .cs index c40d783ea870..7025084e97a2 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Item/Disable-AzureBackupProtection .cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Item/Disable-AzureBackupProtection .cs @@ -54,8 +54,8 @@ public override void ExecuteCmdlet() RemoveProtectionRequestInput input = new RemoveProtectionRequestInput() { RemoveProtectionOption = this.DeleteBackupData ? RemoveProtectionOptions.DeleteBackupData.ToString() : RemoveProtectionOptions.RetainBackupData.ToString(), - Reason = this.Reason, - Comments = this.Comments, + Reason = this.Reason != null ? this.Reason : String.Empty, + Comments = this.Comments != null ? this.Comments : String.Empty, }; WriteDebug("RemoveProtectionOption is = " + input.RemoveProtectionOption); diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Item/GetAzureBackupItem.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Item/GetAzureBackupItem.cs index 178592fd743e..8c964328bf15 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Item/GetAzureBackupItem.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Item/GetAzureBackupItem.cs @@ -107,7 +107,14 @@ public void WriteAzureBackupItem(List sourceDataSourceList, List } } - this.WriteObject(targetList, true); + if (targetList.Count() == 1) + { + this.WriteObject(targetList.First(), true); + } + else + { + this.WriteObject(targetList, true); + } } } From 9c8a23d21baa4dfbe04558ed2985f00a674fb95a Mon Sep 17 00:00:00 2001 From: AditTulasi Date: Tue, 30 Jun 2015 13:20:26 +0530 Subject: [PATCH 125/155] Fixing few more bugs in jobs --- .../Cmdlets/Jobs/GetAzureBackupJob.cs | 6 +++--- .../Cmdlets/Jobs/WaitAzureBackupJob.cs | 15 +++++++++++++++ 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Jobs/GetAzureBackupJob.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Jobs/GetAzureBackupJob.cs index 3198076ed658..edabda56a508 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Jobs/GetAzureBackupJob.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Jobs/GetAzureBackupJob.cs @@ -146,13 +146,13 @@ public override void ExecuteCmdlet() WriteDebug("Successfully retrieved all jobs. Number of jobs retrieved: " + retrievedJobs.Count()); - if (retrievedJobs.Count > 1) + if (retrievedJobs.Count == 1) { - WriteObject(retrievedJobs); + WriteObject(retrievedJobs.First()); } else { - WriteObject(retrievedJobs.First()); + WriteObject(retrievedJobs); } }); } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Jobs/WaitAzureBackupJob.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Jobs/WaitAzureBackupJob.cs index 08e76e2d2687..ac1f24099490 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Jobs/WaitAzureBackupJob.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Jobs/WaitAzureBackupJob.cs @@ -134,6 +134,21 @@ public override void ExecuteCmdlet() System.Threading.Thread.Sleep(30 * 1000); } + + IList finalJobs = new List(); + foreach(string jobId in specifiedJobs) + { + finalJobs.Add(new AzureBackupJob(Vault, AzureBackupClient.GetJobDetails(jobId).Job)); + } + + if (finalJobs.Count == 1) + { + WriteObject(finalJobs.First()); + } + else + { + WriteObject(finalJobs); + } }); } } From 19d081f6b58f6310ff08583dc4e0def393b1221d Mon Sep 17 00:00:00 2001 From: dragonfly91 Date: Thu, 2 Jul 2015 01:55:40 +0530 Subject: [PATCH 126/155] Keeping only the Vault cmdlets + their dependencies and deleting the rest of the cmdlets. --- .../Commands.AzureBackup.Test.csproj | 44 +- .../AzureBackupContainerTests.cs | 46 - .../AzureBackupContainerTests.ps1 | 60 - .../ScenarioTests/AzureBackupItemTestCases.cs | 40 - .../AzureBackupItemTestCases.ps1 | 75 - .../ScenarioTests/AzureBackupJobTests.cs | 35 - .../ScenarioTests/AzureBackupJobTests.ps1 | 62 - .../ScenarioTests/AzureBackupPolicyTests.cs | 54 - .../ScenarioTests/AzureBackupPolicyTests.ps1 | 128 - .../ScenarioTests/AzureBackupVaultTests.cs | 2 +- .../ScenarioTests/AzureBackupVaultTests.ps1 | 2 +- .../ScenarioTests/BackupItemTests.cs | 28 - .../ScenarioTests/BackupItemTests.ps1 | 24 - .../ScenarioTests/RecoveryPointTests.cs | 28 - .../ScenarioTests/RecoveryPointTests.ps1 | 33 - .../GetAzureBackupContainerTests.json | 72 - .../RegisterAzureBackupContainerTest.json | 142 - .../UnregisterAzureBackupContainerTest.json | 139 - .../DisableAzureBackupProtectionTest.json | 75 - .../EnableAzureBackupProtectionTest.json | 75 - .../ListAzureBackupItemTests.json | 130 - .../GetAzureBackupJobTests.json | 5192 ----------------- .../ListProtectionPolicyByNameTests.json | 72 - .../ListProtectionPolicyTests.json | 72 - .../NewProtectionPolicyTests.json | 142 - .../RemoveProtectionPolicyTests.json | 72 - .../ListProtectionPolicyTests.json | 72 - .../GetAzureBackupVaultCredentialsTests.json | 135 +- .../BackUpAzureBackUpItem.json | 69 - .../GetRecoveryPointTests.json | 69 - .../ContainerAdapter.cs | 78 - .../AzureBackupClientAdapter/ItemAdapter.cs | 107 - .../AzureBackupClientAdapter/JobAdapter.cs | 53 - .../OperationStatusAdapter.cs | 39 - .../AzureBackupClientAdapter/PolicyAdapter.cs | 87 - .../AzureBackupCmdletBase.cs | 96 +- .../AzureBackupCmdletHelpMessage.cs | 100 +- .../AzureBackupContainerCmdletBase.cs | 45 - .../AzureBackupDSCmdletBase.cs | 46 - .../AzureBackupItemCmdletBase.cs | 44 - .../AzureBackupPolicyCmdletBase.cs | 49 - .../Cmdlets/BackUp/TriggerBackUp.cs | 53 - .../Container/GetAzureBackupContainer.cs | 131 - .../Container/RegisterAzureBackupContainer.cs | 194 - .../UnregisterAzureBackupContainer.cs | 53 - .../Item/Disable-AzureBackupProtection .cs | 79 - .../Item/Enable-AzureBackupProtection .cs | 79 - .../Cmdlets/Item/GetAzureBackupItem.cs | 121 - .../Cmdlets/Jobs/AzureBackupJobHelper.cs | 88 - .../Cmdlets/Jobs/GetAzureBackupJob.cs | 161 - .../Cmdlets/Jobs/GetAzureBackupJobDetails.cs | 68 - .../Cmdlets/Jobs/StopAzureBackukpJob.cs | 76 - .../Cmdlets/Jobs/WaitAzureBackupJob.cs | 155 - .../GetAzureBackupProtectionPolicy.cs | 56 - .../NewAzureBackupProtectionPolicy.cs | 110 - .../RemoveAzureBackupProtectionPolicy.cs | 53 - .../SetAzureBackupProtectionPolicy.cs | 154 - .../GetAzureBackupRecoveryPoint.cs | 90 - .../AcsNamespace.cs | 61 - .../CertUtils.cs | 131 - .../Constants.cs | 27 - .../GetAzureBackupVaultCredentials.cs | 211 - .../VaultCredentials.cs | 127 - .../Commands.AzureBackup.csproj | 62 +- .../Helpers/ContainerHelpers.cs | 67 - .../Helpers/ProtectionPolicyHelpers.cs | 169 - .../Models/AzureBackupBaseObjects.cs | 160 +- .../Models/AzureBackupContainer.cs | 60 - .../Models/AzureBackupEnums.cs | 152 +- .../Models/AzureBackupItem.cs | 82 - .../Models/AzureBackupRecoveryPoint.cs | 70 - .../Commands.AzureBackup/Models/JobObjects.cs | 148 - .../Models/ListContainerQueryParameter.cs | 41 - .../Models/ProtectionPolicy.cs | 89 - .../RegisterContainer/RegisterContainer.cs | 66 - ...re.Management.BackupServicesManagement.dll | Bin 0 -> 56832 bytes ...ure.Management.BackupServicesManagment.dll | Bin 152576 -> 0 bytes 77 files changed, 394 insertions(+), 10983 deletions(-) delete mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupContainerTests.cs delete mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupContainerTests.ps1 delete mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupItemTestCases.cs delete mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupItemTestCases.ps1 delete mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupJobTests.cs delete mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupJobTests.ps1 delete mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupPolicyTests.cs delete mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupPolicyTests.ps1 delete mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/BackupItemTests.cs delete mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/BackupItemTests.ps1 delete mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/RecoveryPointTests.cs delete mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/RecoveryPointTests.ps1 delete mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupContainerTests/GetAzureBackupContainerTests.json delete mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupContainerTests/RegisterAzureBackupContainerTest.json delete mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupContainerTests/UnregisterAzureBackupContainerTest.json delete mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupItemTestCases/DisableAzureBackupProtectionTest.json delete mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupItemTestCases/EnableAzureBackupProtectionTest.json delete mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupItemTestCases/ListAzureBackupItemTests.json delete mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupJobTests/GetAzureBackupJobTests.json delete mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupPolicyTests/ListProtectionPolicyByNameTests.json delete mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupPolicyTests/ListProtectionPolicyTests.json delete mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupPolicyTests/NewProtectionPolicyTests.json delete mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupPolicyTests/RemoveProtectionPolicyTests.json delete mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupTests/ListProtectionPolicyTests.json delete mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.BackupItemTests/BackUpAzureBackUpItem.json delete mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.RecoveryPointTests/GetRecoveryPointTests.json delete mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupClientAdapter/ContainerAdapter.cs delete mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupClientAdapter/ItemAdapter.cs delete mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupClientAdapter/JobAdapter.cs delete mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupClientAdapter/OperationStatusAdapter.cs delete mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupClientAdapter/PolicyAdapter.cs delete mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupContainerCmdletBase.cs delete mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupDSCmdletBase.cs delete mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupItemCmdletBase.cs delete mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupPolicyCmdletBase.cs delete mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/BackUp/TriggerBackUp.cs delete mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/GetAzureBackupContainer.cs delete mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/RegisterAzureBackupContainer.cs delete mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/UnregisterAzureBackupContainer.cs delete mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Item/Disable-AzureBackupProtection .cs delete mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Item/Enable-AzureBackupProtection .cs delete mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Item/GetAzureBackupItem.cs delete mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Jobs/AzureBackupJobHelper.cs delete mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Jobs/GetAzureBackupJob.cs delete mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Jobs/GetAzureBackupJobDetails.cs delete mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Jobs/StopAzureBackukpJob.cs delete mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Jobs/WaitAzureBackupJob.cs delete mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/GetAzureBackupProtectionPolicy.cs delete mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/NewAzureBackupProtectionPolicy.cs delete mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/RemoveAzureBackupProtectionPolicy.cs delete mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/SetAzureBackupProtectionPolicy.cs delete mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/RecoveryPoint/GetAzureBackupRecoveryPoint.cs delete mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/GetAzureBackupVaultCredentials/AcsNamespace.cs delete mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/GetAzureBackupVaultCredentials/CertUtils.cs delete mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/GetAzureBackupVaultCredentials/Constants.cs delete mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/GetAzureBackupVaultCredentials/GetAzureBackupVaultCredentials.cs delete mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/GetAzureBackupVaultCredentials/VaultCredentials.cs delete mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup/Helpers/ContainerHelpers.cs delete mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup/Helpers/ProtectionPolicyHelpers.cs delete mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupContainer.cs delete mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupItem.cs delete mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupRecoveryPoint.cs delete mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/JobObjects.cs delete mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/ListContainerQueryParameter.cs delete mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/ProtectionPolicy.cs delete mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/RegisterContainer/RegisterContainer.cs create mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup/Resources/Microsoft.Azure.Management.BackupServicesManagement.dll delete mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup/Resources/Microsoft.WindowsAzure.Management.BackupServicesManagment.dll diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/Commands.AzureBackup.Test.csproj b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/Commands.AzureBackup.Test.csproj index 3a84478da8a9..d45f634e838d 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/Commands.AzureBackup.Test.csproj +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/Commands.AzureBackup.Test.csproj @@ -120,20 +120,14 @@ - - - - - - - + {38a6741c-77a3-42a8-a846-83373be57c7f} - BackupServicesManagment + BackupServicesManagement {5ee72c53-1720-4309-b54b-5fb79703195f} @@ -158,44 +152,10 @@ Designer - - Always - - - Always - - - Always - - - Always - Always - - Always - - - Always - - - - - - - - - - - - - - PreserveNewest - - - diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupContainerTests.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupContainerTests.cs deleted file mode 100644 index 6289e8cd69bf..000000000000 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupContainerTests.cs +++ /dev/null @@ -1,46 +0,0 @@ -// ---------------------------------------------------------------------------------- -// -// Copyright Microsoft Corporation -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// http://www.apache.org/licenses/LICENSE-2.0 -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// ---------------------------------------------------------------------------------- - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Xunit; - -namespace Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests -{ - public class AzureBackupContainerTests : AzureBackupTestsBase - { - [Fact] - public void GetAzureBackupContainerTests() - { - this.RunPowerShellTest("Test-GetAzureBackupContainerWithoutFilterReturnsNonZeroContainers"); - - this.RunPowerShellTest("Test-GetAzureBackupContainerWithUniqueFilterReturnsOneContainer"); - } - - [Fact] - public void RegisterAzureBackupContainerTest() - { - this.RunPowerShellTest("Test-RegisterAzureBackupContainer"); - } - - [Fact] - public void UnregisterAzureBackupContainerTest() - { - this.RunPowerShellTest("Test-UnregisterAzureBackupContainer"); - } - } -} diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupContainerTests.ps1 b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupContainerTests.ps1 deleted file mode 100644 index 33f834e7420e..000000000000 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupContainerTests.ps1 +++ /dev/null @@ -1,60 +0,0 @@ -# ---------------------------------------------------------------------------------- -# -# Copyright Microsoft Corporation -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# http://www.apache.org/licenses/LICENSE-2.0 -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# ---------------------------------------------------------------------------------- - -$ResourceGroupName = "backuprg" -$ResourceName = "backuprn" -$Location = "westus" -$ManagedResourceGroupName = "powershellbvt" -$ManagedResourceName = "powershellbvt" - -<# -.SYNOPSIS -Tests to test list containers -#> -function Test-GetAzureBackupContainerWithoutFilterReturnsNonZeroContainers -{ - $vault = Get-AzureBackupVault -Name $ResourceName; - $containers = Get-AzureBackupContainer -vault $vault; - Assert-NotNull $containers 'Container list should not be null'; -} - -function Test-GetAzureBackupContainerWithUniqueFilterReturnsOneContainer -{ - $vault = Get-AzureBackupVault -Name $ResourceName; - $container = Get-AzureBackupContainer -vault $vault -ManagedResourceGroupName $ManagedResourceGroupName -ManagedResourceName $ManagedResourceName - Assert-NotNull $container 'Container should not be null'; - Assert-AreEqual $container.ManagedResourceName $ManagedResourceName -CaseSensitive 'Returned container resource name (a.k.a friendly name) does not match the test VM resource name'; - Assert-AreEqual $container.ManagedResourceGroupName $ManagedResourceGroupName -CaseSensitive 'Returned container resource group name (a.k.a parent friendly name) does not match the test VM resource group name'; -} - -<# -.SYNOPSIS -Tests to register the container -#> -function Test-RegisterAzureBackupContainer -{ - $vault = Get-AzureBackupVault -Name $ResourceName; - $jobId = Register-AzureBackupContainer -vault $vault -Name $ManagedResourceName -ServiceName $ManagedResourceGroupName - - Assert-NotNull $jobId 'Job should not be null'; -} - -function Test-UnregisterAzureBackupContainer -{ - $vault = Get-AzureBackupVault -Name $ResourceName; - $container = Get-AzureBackupContainer -vault $vault -ManagedResourceName $ManagedResourceName -ManagedResourceGroupName $ManagedResourceGroupName - $jobId = Unregister-AzureBackupContainer -vault $vault -AzureBackupContainer $container - - Assert-NotNull $jobId 'Job should not be null'; -} \ No newline at end of file diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupItemTestCases.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupItemTestCases.cs deleted file mode 100644 index a1b7755e3f49..000000000000 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupItemTestCases.cs +++ /dev/null @@ -1,40 +0,0 @@ -// ---------------------------------------------------------------------------------- -// -// Copyright Microsoft Corporation -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// http://www.apache.org/licenses/LICENSE-2.0 -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// ---------------------------------------------------------------------------------- - -using Microsoft.WindowsAzure.Commands.ScenarioTest; -using Xunit; - -namespace Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests -{ - public class AzureBackupItemTestCases : AzureBackupTestsBase - { - [Fact] - public void ListAzureBackupItemTests() - { - this.RunPowerShellTest("Test-GetAzureBackupItemTests"); - } - - [Fact] - public void EnableAzureBackupProtectionTest() - { - this.RunPowerShellTest("Test-EnableAzureBackupProtection"); - } - - [Fact] - public void DisableAzureBackupProtectionTest() - { - this.RunPowerShellTest("Test-DisableAzureBackupProtection"); - } - } -} diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupItemTestCases.ps1 b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupItemTestCases.ps1 deleted file mode 100644 index e34ba7283915..000000000000 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupItemTestCases.ps1 +++ /dev/null @@ -1,75 +0,0 @@ -$ResourceGroupName = "backuprg" -$ResourceName = "backuprn" -$ContainerName = "iaasvmcontainer;dev01testing;dev01testing" -$ContainerType = "IaasVMContainer" -$DataSourceType = "VM" -$DataSourceId = "17593283453810" -$Location = "SouthEast Asia" -$PolicyName = "Policy9"; -$PolicyId = "c87bbada-6e1b-4db2-b76c-9062d28959a4"; -$POName = "iaasvmcontainer;dev01testing;dev01testing" - - -function Test-GetAzureBackupItemTests -{ - $azureBackUpContainer = New-Object Microsoft.Azure.Commands.AzureBackup.Models.AzureBackupContainer - $azureBackUpContainer.ResourceGroupName = $ResourceGroupName - $azureBackUpContainer.ResourceName = $ResourceName - $azureBackUpContainer.Location = $Location - $azureBackUpContainer.ContainerUniqueName = $ContainerName - $azureBackUpContainer.ContainerType = $ContainerType - $item = Get-AzureBackupItem -Container $azureBackUpContainer - if (!($item -eq $null)) - { - foreach($backupitem in $item) - { - Assert-NotNull $backupitem.ProtectionStatus 'ProtectionStatus should not be null' - Assert-NotNull $backupitem.Name 'Name should not be null' - Assert-NotNull $backupitem.Type 'Type should not be null' - Assert-NotNull $backupitem.ContainerType 'ContainerType should not be null' - Assert-NotNull $backupitem.ContainerUniqueName 'ContainerUniqueName should not be null' - Assert-NotNull $backupitem.ResourceGroupName 'ResourceGroupName should not be null' - Assert-NotNull $backupitem.ResourceName 'ResourceName should not be null' - Assert-NotNull $backupitem.Location 'Location should not be null' - } - } -} - -function Test-EnableAzureBackupProtection -{ - $policy = New-Object Microsoft.Azure.Commands.AzureBackup.Models.AzureBackupProtectionPolicy - $policy.InstanceId = $PolicyId - $policy.Name = $PolicyName - $policy.ResourceGroupName = $ResourceGroupName - $policy.ResourceName = $ResourceName - $policy.Location = $Location - $policy.WorkloadType = "VM" - $policy.RetentionType = "1" - $policy.ScheduleRunTimes = "2015-06-13T20:30:00" - - $azureBackUpItem = New-Object Microsoft.Azure.Commands.AzureBackup.Models.AzureBackupItem - $azureBackUpItem.ResourceGroupName = $ResourceGroupName - $azureBackUpItem.ResourceName = $ResourceName - $azureBackUpItem.Location = $Location - $azureBackUpItem.ContainerUniqueName = $ContainerName - $azureBackUpItem.ContainerType = $ContainerType - $azureBackUpItem.DataSourceId = $DataSourceId - $azureBackUpItem.Type = $DataSourceType - $azureBackUpItem.Name = $POName - $jobId = Enable-AzureBackupProtection -Item $azureBackUpItem -Policy $policy - -} - -function Test-DisableAzureBackupProtection -{ - $azureBackUpItem = New-Object Microsoft.Azure.Commands.AzureBackup.Models.AzureBackupItem - $azureBackUpItem.ResourceGroupName = $ResourceGroupName - $azureBackUpItem.ResourceName = $ResourceName - $azureBackUpItem.Location = $Location - $azureBackUpItem.ContainerUniqueName = $ContainerName - $azureBackUpItem.ContainerType = $ContainerType - $azureBackUpItem.DataSourceId = $DataSourceId - $azureBackUpItem.Type = $DataSourceType - $azureBackUpItem.Name = $POName - $jobId1 = Disable-AzureBackupProtection -Item $azureBackUpItem -} diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupJobTests.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupJobTests.cs deleted file mode 100644 index 6a5cad692eae..000000000000 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupJobTests.cs +++ /dev/null @@ -1,35 +0,0 @@ -// ---------------------------------------------------------------------------------- -// -// Copyright Microsoft Corporation -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// http://www.apache.org/licenses/LICENSE-2.0 -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// ---------------------------------------------------------------------------------- - -using Microsoft.WindowsAzure.Commands.ScenarioTest; -using Xunit; - -namespace Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests -{ - public class AzureBackupJobTests : AzureBackupTestsBase - { - - [Fact] - public void GetAzureBackupJobTests() - { - this.RunPowerShellTest("Test-GetAzureBackupJob"); - } - - [Fact] - public void StopAzureBackupJobTests() - { - this.RunPowerShellTest("Test-StopAzureBackupJob"); - } - } -} diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupJobTests.ps1 b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupJobTests.ps1 deleted file mode 100644 index d63ea8fc45d8..000000000000 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupJobTests.ps1 +++ /dev/null @@ -1,62 +0,0 @@ -$ResourceGroupName = "backuprg" -$ResourceName = "backuprn" -$ContainerName = "iaasvmcontainer;dev01testing;dev01testing" -$ContainerType = "IaasVMContainer" -$DataSourceType = "VM" -$DataSourceId = "17593283453810" -$Location = "SouthEast Asia" -$PolicyName = "Policy9"; -$PolicyId = "c87bbada-6e1b-4db2-b76c-9062d28959a4"; -$POName = "iaasvmcontainer;dev01testing;dev01testing" - - -function Test-GetAzureBackupJob -{ - $vault = Get-AzureBackupVault -Name $ResourceName; - $OneMonthBack = Get-Date; - $OneMonthBack = $OneMonthBack.AddDays(-30); - $jobs = Get-AzureBackupJob -Vault $vault -From $OneMonthBack - Assert-NotNull $jobs 'Jobs list should not be null' - foreach($job in $jobs) - { - Assert-NotNull $jobs.InstanceId 'JobID should not be null'; - Assert-NotNull $jobs.StartTime 'StartTime should not be null'; - Assert-NotNull $jobs.WorkloadType 'WorkloadType should not be null'; - Assert-NotNull $jobs.WorkloadName 'WorkloadName should not be null'; - Assert-NotNull $jobs.Status 'Status should not be null'; - Assert-NotNull $jobs.Operation 'Operation should not be null'; - - $jobDetails = Get-AzureBackupJobDetails -Job $job - Assert-NotNull $jobDetails.InstanceId 'JobID should not be null'; - Assert-NotNull $jobDetails.StartTime 'StartTime should not be null'; - Assert-NotNull $jobDetails.WorkloadType 'WorkloadType should not be null'; - Assert-NotNull $jobDetails.WorkloadName 'WorkloadName should not be null'; - Assert-NotNull $jobDetails.Status 'Status should not be null'; - Assert-NotNull $jobDetails.Operation 'Operation should not be null'; - Assert-NotNull $jobDetails.Properties 'Properties in job details cannot be null'; - Assert-NotNull $jobDetails.SubTasks 'SubTasks in job details cannot be null'; - } -} - - -function Test-StopAzureBackupJob -{ - $OneMonthBack = Get-Date; - $OneMonthBack = $OneMonthBack.AddDays(-30); - - $azureBackUpItem = New-Object Microsoft.Azure.Commands.AzureBackup.Models.AzureBackupItem - $azureBackUpItem.ResourceGroupName = $ResourceGroupName - $azureBackUpItem.ResourceName = $ResourceName - $azureBackUpItem.Location = $Location - $azureBackUpItem.ContainerUniqueName = $ContainerName - $azureBackUpItem.ContainerType = $ContainerType - $azureBackUpItem.DataSourceId = $DataSourceId - $azureBackUpItem.Type = $DataSourceType - - $job = Backup-AzureBackupItem -Item $azureBackUpItem - - Stop-AzureBackupJob -Job $job; - Wait-AzureBackupJob -Job $job; - $jobDetails = Get-AzureBackupJobDetails -Job $job; - Assert-AreEqual 'Cancelled' $jobDetails.Status -} diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupPolicyTests.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupPolicyTests.cs deleted file mode 100644 index 2b4b4c8b683a..000000000000 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupPolicyTests.cs +++ /dev/null @@ -1,54 +0,0 @@ -// ---------------------------------------------------------------------------------- -// -// Copyright Microsoft Corporation -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// http://www.apache.org/licenses/LICENSE-2.0 -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// ---------------------------------------------------------------------------------- - -using Microsoft.WindowsAzure.Commands.ScenarioTest; -using Xunit; - -namespace Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests -{ - public class AzureBackupPolicyTests : AzureBackupTestsBase - { - [Fact] - public void ListProtectionPolicyTests() - { - this.RunPowerShellTest("Test-GetAzureBackupProtectionPolicyTests"); - } - - [Fact] - public void NewProtectionPolicyTests() - { - this.RunPowerShellTest("Test-NewAzureBackupProtectionPolicyTests"); - } - - [Fact] - public void ListProtectionPolicyByNameTests() - { - this.RunPowerShellTest("Test-GetAzureBackupProtectionPolicyByNameTests"); - } - - [Fact] - public void SetProtectionPolicyTests() - { - this.RunPowerShellTest("Test-SetAzureBackupProtectionPolicyTests"); - } - - [Fact] - public void RemoveProtectionPolicyTests() - { - this.RunPowerShellTest("Test-RemoveAzureBackupProtectionPolicyTests"); - } - - - } -} diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupPolicyTests.ps1 b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupPolicyTests.ps1 deleted file mode 100644 index e336515c096f..000000000000 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupPolicyTests.ps1 +++ /dev/null @@ -1,128 +0,0 @@ -# ---------------------------------------------------------------------------------- -# -# Copyright Microsoft Corporation -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# http://www.apache.org/licenses/LICENSE-2.0 -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# ---------------------------------------------------------------------------------- - -$ResourceGroupName = "backuprg" -$ResourceName = "backuprn" -$DataSourceType = "VM" -$Location = "SouthEast Asia" -$PolicyName = "Policy10"; -$PolicyId = "c87bbada-6e1b-4db2-b76c-9062d28959a4"; -$POName = "iaasvmcontainer;dev01testing;dev01testing" -$WorkloadType = "VM" -$RetentionType = "Days" -$ScheduleRunTimes = "2015-06-13T20:30:00" -$ScheduleRunDays = "Monday" -$RetentionDuration = 30 -$BackupType = "Full" -$ScheduleType = "Daily" - -<# -.SYNOPSIS -Tests creating new resource group and a simple resource. -#> -function Test-GetAzureBackupProtectionPolicyTests -{ - $vault = Get-AzureBackupVault -Name $ResourceName; - $protectionPolicies = Get-AzureBackupProtectionPolicy -vault $vault - Assert-NotNull $protectionPolicies 'Protection Policies should not be null' - foreach($protectionPolicy in $protectionPolicies) - { - Assert-NotNull $protectionPolicy.InstanceId 'InstanceId should not be null' - Assert-NotNull $protectionPolicy.Name 'Name should not be null' - Assert-NotNull $protectionPolicy.WorkloadType 'WorkloadType should not be null' - Assert-NotNull $protectionPolicy.BackupType 'BackupType should not be null' - Assert-NotNull $protectionPolicy.ScheduleRunTimes 'ScheduleRunTimes should not be null' - Assert-NotNull $protectionPolicy.RetentionDuration 'RetentionDuration should not be null' - Assert-NotNull $protectionPolicy.ResourceGroupName 'ResourceGroupName should not be null' - Assert-NotNull $protectionPolicy.ResourceName 'ResourceName should not be null' - Assert-NotNull $protectionPolicy.Location 'Location should not be null' - } -} - -function Test-GetAzureBackupProtectionPolicyByNameTests -{ - $vault = Get-AzureBackupVault -Name $ResourceName; - $protectionPolicy = Get-AzureBackupProtectionPolicy -vault $vault -Name $PolicyName - - Assert-NotNull $protectionPolicy.InstanceId 'InstanceId should not be null' - Assert-NotNull $protectionPolicy.Name 'Name should not be null' - Assert-NotNull $protectionPolicy.WorkloadType 'WorkloadType should not be null' - Assert-NotNull $protectionPolicy.BackupType 'BackupType should not be null' - Assert-NotNull $protectionPolicy.ScheduleRunTimes 'ScheduleRunTimes should not be null' - Assert-NotNull $protectionPolicy.RetentionDuration 'RetentionDuration should not be null' - Assert-NotNull $protectionPolicy.ResourceGroupName 'ResourceGroupName should not be null' - Assert-NotNull $protectionPolicy.ResourceName 'ResourceName should not be null' - Assert-NotNull $protectionPolicy.Location 'Location should not be null' - -} - -function Test-NewAzureBackupProtectionPolicyTests -{ - $vault = Get-AzureBackupVault -Name $ResourceName; - $protectionPolicy = New-AzureBackupProtectionPolicy -vault $vault -Name $PolicyName -WorkloadType $WorkloadType -BackupType $BackupType -Daily -RetentionType $RetentionType -RetentionDuration $RetentionDuration -ScheduleRunTimes $ScheduleRunTimes - - Assert-NotNull $protectionPolicy.InstanceId 'InstanceId should not be null' - Assert-NotNull $protectionPolicy.Name 'Name should not be null' - Assert-NotNull $protectionPolicy.WorkloadType 'WorkloadType should not be null' - Assert-NotNull $protectionPolicy.BackupType 'BackupType should not be null' - Assert-NotNull $protectionPolicy.ScheduleRunTimes 'ScheduleRunTimes should not be null' - Assert-NotNull $protectionPolicy.RetentionDuration 'RetentionDuration should not be null' - Assert-NotNull $protectionPolicy.ResourceGroupName 'ResourceGroupName should not be null' - Assert-NotNull $protectionPolicy.ResourceName 'ResourceName should not be null' - Assert-NotNull $protectionPolicy.Location 'Location should not be null' -} - -function Test-SetAzureBackupProtectionPolicyTests -{ - $policy = New-Object Microsoft.Azure.Commands.AzureBackup.Models.AzureBackupProtectionPolicy - $policy.InstanceId = $PolicyId - $policy.Name = $PolicyName - $policy.ResourceGroupName = $ResourceGroupName - $policy.ResourceName = $ResourceName - $policy.Location = $Location - $policy.WorkloadType = $WorkloadType - $policy.RetentionType = $RetentionType - $policy.ScheduleRunTimes = $ScheduleRunTimes - $policy.ScheduleType = $ScheduleType - $policyNewName = "policy09_new" - - $protectionPolicy = Set-AzureBackupProtectionPolicy -ProtectionPolicy $policy -NewName $policyNewName - - Assert-NotNull $protectionPolicy.InstanceId 'InstanceId should not be null' - Assert-NotNull $protectionPolicy.Name 'Name should not be null' - Assert-NotNull $protectionPolicy.WorkloadType 'WorkloadType should not be null' - Assert-NotNull $protectionPolicy.BackupType 'BackupType should not be null' - Assert-NotNull $protectionPolicy.ScheduleRunTimes 'ScheduleRunTimes should not be null' - Assert-NotNull $protectionPolicy.RetentionDuration 'RetentionDuration should not be null' - Assert-NotNull $protectionPolicy.ResourceGroupName 'ResourceGroupName should not be null' - Assert-NotNull $protectionPolicy.ResourceName 'ResourceName should not be null' - Assert-NotNull $protectionPolicy.Location 'Location should not be null' -} - -function Test-RemoveAzureBackupProtectionPolicyTests -{ - $policyNewName = "policy09_new" - $policy = New-Object Microsoft.Azure.Commands.AzureBackup.Models.AzureBackupProtectionPolicy - $policy.InstanceId = $PolicyId - $policy.Name = $policyNewName - $policy.ResourceGroupName = $ResourceGroupName - $policy.ResourceName = $ResourceName - $policy.Location = $Location - $policy.WorkloadType = $WorkloadType - $policy.RetentionType = $RetentionType - $policy.ScheduleRunTimes = $ScheduleRunTimes - $policy.ScheduleType = $ScheduleType - - Remove-AzureBackupProtectionPolicy -ProtectionPolicy $policy -} diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupVaultTests.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupVaultTests.cs index b947043300e2..4b8e75ab16da 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupVaultTests.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupVaultTests.cs @@ -32,7 +32,7 @@ public void GetAzureBackupVaultCredentialsTests() [Fact] public void SetAzureBackupVaultStorageTypeTests() { - this.RunPowerShellTest("Test-SetAzureBackupVaultStorageTypeWithFreshResourceDoesNotThrowException"); + //this.RunPowerShellTest("Test-SetAzureBackupVaultStorageTypeWithFreshResourceDoesNotThrowException"); this.RunPowerShellTest("Test-SetAzureBackupVaultStorageTypeWithLockedResourceThrowsException"); } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupVaultTests.ps1 b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupVaultTests.ps1 index c93cd719a8bc..6a890c0ab233 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupVaultTests.ps1 +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupVaultTests.ps1 @@ -30,7 +30,7 @@ function Test-SetAzureBackupVaultStorageTypeWithFreshResourceDoesNotThrowExcepti { $freshVaultName = "storagetestrn"; - Assert-Throws { New-AzureBackupVault -ResourceGroupName $ResourceGroupName -Name $freshVaultName -Region $Location }; + New-AzureBackupVault -ResourceGroupName $ResourceGroupName -Name $freshVaultName -Region $Location $freshVault = Get-AzureBackupVault -Name $freshVaultName; diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/BackupItemTests.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/BackupItemTests.cs deleted file mode 100644 index 50a9dc7a95da..000000000000 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/BackupItemTests.cs +++ /dev/null @@ -1,28 +0,0 @@ -// ---------------------------------------------------------------------------------- -// -// Copyright Microsoft Corporation -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// http://www.apache.org/licenses/LICENSE-2.0 -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// ---------------------------------------------------------------------------------- - -using Microsoft.WindowsAzure.Commands.ScenarioTest; -using Xunit; - -namespace Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests -{ - public class BackupItemTests : AzureBackupTestsBase - { - [Fact] - public void BackUpAzureBackUpItem() - { - this.RunPowerShellTest("Test-BackUpAzureBackUpItem"); - } - } -} diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/BackupItemTests.ps1 b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/BackupItemTests.ps1 deleted file mode 100644 index 8ae666eb3075..000000000000 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/BackupItemTests.ps1 +++ /dev/null @@ -1,24 +0,0 @@ -$ResourceGroupName = "backuprg" -$ResourceName = "backuprn" -$ContainerName = "iaasvmcontainer;dev01testing;dev01testing" -$ContainerType = "IaasVMContainer" -$DataSourceType = "VM" -$DataSourceId = "17593283453810" -$Location = "SouthEast Asia" -$PolicyName = "Policy9"; -$PolicyId = "c87bbada-6e1b-4db2-b76c-9062d28959a4"; -$POName = "iaasvmcontainer;dev01testing;dev01testing" - - -function Test-BackUpAzureBackUpItem -{ - $azureBackUpItem = New-Object Microsoft.Azure.Commands.AzureBackup.Models.AzureBackupItem - $azureBackUpItem.ResourceGroupName = $ResourceGroupName - $azureBackUpItem.ResourceName = $ResourceName - $azureBackUpItem.Location = $Location - $azureBackUpItem.ContainerUniqueName = $ContainerName - $azureBackUpItem.ContainerType = $ContainerType - $azureBackUpItem.DataSourceId = $DataSourceId - $azureBackUpItem.Type = $DataSourceType - $jobId = Backup-AzureBackupItem -Item $azureBackUpItem -} diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/RecoveryPointTests.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/RecoveryPointTests.cs deleted file mode 100644 index 9622c170cc15..000000000000 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/RecoveryPointTests.cs +++ /dev/null @@ -1,28 +0,0 @@ -// ---------------------------------------------------------------------------------- -// -// Copyright Microsoft Corporation -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// http://www.apache.org/licenses/LICENSE-2.0 -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// ---------------------------------------------------------------------------------- - -using Microsoft.WindowsAzure.Commands.ScenarioTest; -using Xunit; - -namespace Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests -{ - public class RecoveryPointTests : AzureBackupTestsBase - { - [Fact] - public void GetRecoveryPointTests() - { - this.RunPowerShellTest("Test-GetAzureRecoveryPoint"); - } - } -} diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/RecoveryPointTests.ps1 b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/RecoveryPointTests.ps1 deleted file mode 100644 index 9ba98ab4fed6..000000000000 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/RecoveryPointTests.ps1 +++ /dev/null @@ -1,33 +0,0 @@ -$ResourceGroupName = "backuprg" -$ResourceName = "backuprn" -$ContainerName = "iaasvmcontainer;dev01testing;dev01testing" -$ContainerType = "IaasVMContainer" -$DataSourceType = "VM" -$DataSourceId = "17593283453810" -$Location = "SouthEast Asia" -$PolicyName = "Policy9"; -$PolicyId = "c87bbada-6e1b-4db2-b76c-9062d28959a4"; -$POName = "iaasvmcontainer;dev01testing;dev01testing" - - -function Test-GetAzureRecoveryPoint -{ - $azureBackUpItem = New-Object Microsoft.Azure.Commands.AzureBackup.Models.AzureBackupItem - $azureBackUpItem.ResourceGroupName = $ResourceGroupName - $azureBackUpItem.ResourceName = $ResourceGroupName - $azureBackUpItem.Location = $Location - $azureBackUpItem.ContainerUniqueName = $ContainerName - $azureBackUpItem.ContainerType = $ContainerType - $azureBackUpItem.DataSourceId = $DataSourceId - $azureBackUpItem.Type = $DataSourceType - $recoveryPoints = Get-AzureBackupRecoveryPoint -Item $azureBackUpItem - if (!($recoveryPoints -eq $null)) - { - foreach($recoveryPoint in $recoveryPoints) - { - Assert-NotNull $recoveryPoint.RecoveryPointTime 'RecoveryPointTime should not be null' - Assert-NotNull $recoveryPoint.RecoveryPointType 'RecoveryPointType should not be null' - Assert-NotNull $recoveryPoint.RecoveryPointId 'RecoveryPointId should not be null' - } - } -} \ No newline at end of file diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupContainerTests/GetAzureBackupContainerTests.json b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupContainerTests/GetAzureBackupContainerTests.json deleted file mode 100644 index 5ac9d61bc7c5..000000000000 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupContainerTests/GetAzureBackupContainerTests.json +++ /dev/null @@ -1,72 +0,0 @@ -{ - "Entries": [ - { - "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/containers?api-version=2014-09-01&dummy=%26FriendlyName%3Ddev01Testing", - "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vY29udGFpbmVycz9hcGktdmVyc2lvbj0yMDE0LTA5LTAxJmR1bW15PSUyNkZyaWVuZGx5TmFtZSUzRGRldjAxVGVzdGluZw==", - "RequestMethod": "GET", - "RequestBody": "", - "RequestHeaders": { - "Accept-Language": [ - "en-us" - ], - "x-ms-version": [ - "2013-03-01" - ], - "User-Agent": [ - "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" - ] - }, - "ResponseBody": "{\r\n \"Objects\": [\r\n {\r\n \"FriendlyName\": \"dev01Testing\",\r\n \"SubscriptionId\": \"f5303a0b-fae4-4cdb-b44d-0e4c032dde26\",\r\n \"ContainerType\": \"IaasVMContainer\",\r\n \"ParentContainerName\": \"dev01Testing\",\r\n \"ParentContainerFriendlyName\": \"dev01Testing\",\r\n \"RegistrationStatus\": \"Registered\",\r\n \"HealthStatus\": \"Healthy\",\r\n \"PropertyBag\": null,\r\n \"InstanceId\": null,\r\n \"Name\": \"iaasvmcontainer;dev01testing;dev01testing\",\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"FriendlyName\": \"dev01Testing\",\r\n \"SubscriptionId\": \"f5303a0b-fae4-4cdb-b44d-0e4c032dde26\",\r\n \"ContainerType\": \"IaasVMServiceContainer\",\r\n \"ParentContainerName\": null,\r\n \"ParentContainerFriendlyName\": null,\r\n \"RegistrationStatus\": \"NotRegistered\",\r\n \"HealthStatus\": \"Healthy\",\r\n \"PropertyBag\": \"\",\r\n \"InstanceId\": null,\r\n \"Name\": \"dev01testing\",\r\n \"OperationInProgress\": false\r\n }\r\n ],\r\n \"ResultCount\": 2,\r\n \"Skiptoken\": null\r\n}", - "ResponseHeaders": { - "Content-Length": [ - "763" - ], - "Content-Type": [ - "application/json" - ], - "Expires": [ - "-1" - ], - "Pragma": [ - "no-cache" - ], - "x-ms-request-id": [ - "ce4dfbf6-9708-49f2-9532-0dbc9e912bf7" - ], - "x-ms-client-request-id": [ - "0482c73c-7196-49f8-96a0-3dcd0ccdaa90", - "0482c73c-7196-49f8-96a0-3dcd0ccdaa90" - ], - "Strict-Transport-Security": [ - "max-age=31536000; includeSubDomains" - ], - "x-ms-ratelimit-remaining-subscription-reads": [ - "14997" - ], - "x-ms-correlation-request-id": [ - "ce4dfbf6-9708-49f2-9532-0dbc9e912bf7" - ], - "x-ms-routing-request-id": [ - "CENTRALUS:20150617T170930Z:ce4dfbf6-9708-49f2-9532-0dbc9e912bf7" - ], - "Cache-Control": [ - "no-cache" - ], - "Date": [ - "Wed, 17 Jun 2015 17:09:30 GMT" - ], - "Server": [ - "Microsoft-IIS/8.0" - ], - "X-Powered-By": [ - "ASP.NET" - ] - }, - "StatusCode": 200 - } - ], - "Names": {}, - "Variables": { - "SubscriptionId": "f5303a0b-fae4-4cdb-b44d-0e4c032dde26" - } -} \ No newline at end of file diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupContainerTests/RegisterAzureBackupContainerTest.json b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupContainerTests/RegisterAzureBackupContainerTest.json deleted file mode 100644 index 17c12738a42f..000000000000 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupContainerTests/RegisterAzureBackupContainerTest.json +++ /dev/null @@ -1,142 +0,0 @@ -{ - "Entries": [ - { - "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/containers?api-version=2014-09-01&dummy=%26ContainerType%3DIaasVMContainer%26FriendlyName%3Ddev01Testing", - "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vY29udGFpbmVycz9hcGktdmVyc2lvbj0yMDE0LTA5LTAxJmR1bW15PSUyNkNvbnRhaW5lclR5cGUlM0RJYWFzVk1Db250YWluZXIlMjZGcmllbmRseU5hbWUlM0RkZXYwMVRlc3Rpbmc=", - "RequestMethod": "GET", - "RequestBody": "", - "RequestHeaders": { - "Accept-Language": [ - "en-us" - ], - "x-ms-version": [ - "2013-03-01" - ], - "User-Agent": [ - "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" - ] - }, - "ResponseBody": "{\r\n \"Objects\": [\r\n {\r\n \"FriendlyName\": \"dev01Testing\",\r\n \"SubscriptionId\": \"f5303a0b-fae4-4cdb-b44d-0e4c032dde26\",\r\n \"ContainerType\": \"IaasVMContainer\",\r\n \"ParentContainerName\": \"dev01Testing\",\r\n \"ParentContainerFriendlyName\": \"dev01Testing\",\r\n \"RegistrationStatus\": \"Registered\",\r\n \"HealthStatus\": \"Healthy\",\r\n \"PropertyBag\": null,\r\n \"InstanceId\": null,\r\n \"Name\": \"iaasvmcontainer;dev01testing;dev01testing\",\r\n \"OperationInProgress\": false\r\n }\r\n ],\r\n \"ResultCount\": 1,\r\n \"Skiptoken\": null\r\n}", - "ResponseHeaders": { - "Content-Length": [ - "425" - ], - "Content-Type": [ - "application/json" - ], - "Expires": [ - "-1" - ], - "Pragma": [ - "no-cache" - ], - "x-ms-request-id": [ - "440a2de2-c516-4b57-87ee-74839064470b" - ], - "x-ms-client-request-id": [ - "cdc53ea3-207a-4d07-b535-32e8e48f5b14", - "cdc53ea3-207a-4d07-b535-32e8e48f5b14" - ], - "Strict-Transport-Security": [ - "max-age=31536000; includeSubDomains" - ], - "x-ms-ratelimit-remaining-subscription-reads": [ - "14992" - ], - "x-ms-correlation-request-id": [ - "440a2de2-c516-4b57-87ee-74839064470b" - ], - "x-ms-routing-request-id": [ - "CENTRALUS:20150617T172637Z:440a2de2-c516-4b57-87ee-74839064470b" - ], - "Cache-Control": [ - "no-cache" - ], - "Date": [ - "Wed, 17 Jun 2015 17:26:37 GMT" - ], - "Server": [ - "Microsoft-IIS/8.0" - ], - "X-Powered-By": [ - "ASP.NET" - ] - }, - "StatusCode": 200 - }, - { - "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/containers/register?api-version=2014-09-01", - "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vY29udGFpbmVycy9yZWdpc3Rlcj9hcGktdmVyc2lvbj0yMDE0LTA5LTAx", - "RequestMethod": "POST", - "RequestBody": "{\r\n \"ContainerUniqueNameList\": [\r\n \"iaasvmcontainer;dev01testing;dev01testing\"\r\n ],\r\n \"ContainerType\": \"IaasVMContainer\"\r\n}", - "RequestHeaders": { - "Content-Type": [ - "application/json" - ], - "Content-Length": [ - "129" - ], - "Accept-Language": [ - "en-us" - ], - "x-ms-version": [ - "2013-03-01" - ], - "User-Agent": [ - "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" - ] - }, - "ResponseBody": "\"4a6fddd3-bdfc-482e-b7db-446cf9d729bc\"", - "ResponseHeaders": { - "Content-Length": [ - "38" - ], - "Content-Type": [ - "application/json" - ], - "Expires": [ - "-1" - ], - "Pragma": [ - "no-cache" - ], - "x-ms-request-id": [ - "e6efbb84-1593-4db6-b064-31838096cc99" - ], - "x-ms-client-request-id": [ - "d208a9ee-2876-4dc5-98e9-ed753b5a9014", - "d208a9ee-2876-4dc5-98e9-ed753b5a9014" - ], - "Strict-Transport-Security": [ - "max-age=31536000; includeSubDomains" - ], - "x-ms-ratelimit-remaining-subscription-writes": [ - "1194" - ], - "x-ms-correlation-request-id": [ - "e6efbb84-1593-4db6-b064-31838096cc99" - ], - "x-ms-routing-request-id": [ - "CENTRALUS:20150617T172639Z:e6efbb84-1593-4db6-b064-31838096cc99" - ], - "Cache-Control": [ - "no-cache" - ], - "Date": [ - "Wed, 17 Jun 2015 17:26:39 GMT" - ], - "Server": [ - "Microsoft-IIS/8.0" - ], - "X-Powered-By": [ - "ASP.NET" - ] - }, - "StatusCode": 202 - } - ], - "Names": {}, - "Variables": { - "SubscriptionId": "f5303a0b-fae4-4cdb-b44d-0e4c032dde26" - } -} \ No newline at end of file diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupContainerTests/UnregisterAzureBackupContainerTest.json b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupContainerTests/UnregisterAzureBackupContainerTest.json deleted file mode 100644 index fb251975358b..000000000000 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupContainerTests/UnregisterAzureBackupContainerTest.json +++ /dev/null @@ -1,139 +0,0 @@ -{ - "Entries": [ - { - "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/containers?api-version=2014-09-01&dummy=%26FriendlyName%3Ddev01Testing", - "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vY29udGFpbmVycz9hcGktdmVyc2lvbj0yMDE0LTA5LTAxJmR1bW15PSUyNkZyaWVuZGx5TmFtZSUzRGRldjAxVGVzdGluZw==", - "RequestMethod": "GET", - "RequestBody": "", - "RequestHeaders": { - "Accept-Language": [ - "en-us" - ], - "x-ms-version": [ - "2013-03-01" - ], - "User-Agent": [ - "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" - ] - }, - "ResponseBody": "{\r\n \"Objects\": [\r\n {\r\n \"FriendlyName\": \"dev01Testing\",\r\n \"SubscriptionId\": \"f5303a0b-fae4-4cdb-b44d-0e4c032dde26\",\r\n \"ContainerType\": \"IaasVMContainer\",\r\n \"ParentContainerName\": \"dev01Testing\",\r\n \"ParentContainerFriendlyName\": \"dev01Testing\",\r\n \"RegistrationStatus\": \"Registering\",\r\n \"HealthStatus\": \"Healthy\",\r\n \"PropertyBag\": null,\r\n \"InstanceId\": null,\r\n \"Name\": \"iaasvmcontainer;dev01testing;dev01testing\",\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"FriendlyName\": \"dev01Testing\",\r\n \"SubscriptionId\": \"f5303a0b-fae4-4cdb-b44d-0e4c032dde26\",\r\n \"ContainerType\": \"IaasVMServiceContainer\",\r\n \"ParentContainerName\": null,\r\n \"ParentContainerFriendlyName\": null,\r\n \"RegistrationStatus\": \"NotRegistered\",\r\n \"HealthStatus\": \"Healthy\",\r\n \"PropertyBag\": \"\",\r\n \"InstanceId\": null,\r\n \"Name\": \"dev01testing\",\r\n \"OperationInProgress\": false\r\n }\r\n ],\r\n \"ResultCount\": 2,\r\n \"Skiptoken\": null\r\n}", - "ResponseHeaders": { - "Content-Length": [ - "764" - ], - "Content-Type": [ - "application/json" - ], - "Expires": [ - "-1" - ], - "Pragma": [ - "no-cache" - ], - "x-ms-request-id": [ - "de369fec-4df6-4813-8ddb-24bceddba94e" - ], - "x-ms-client-request-id": [ - "341c6fb9-6b4c-4773-8450-32cf85173c91", - "341c6fb9-6b4c-4773-8450-32cf85173c91" - ], - "Strict-Transport-Security": [ - "max-age=31536000; includeSubDomains" - ], - "x-ms-ratelimit-remaining-subscription-reads": [ - "14991" - ], - "x-ms-correlation-request-id": [ - "de369fec-4df6-4813-8ddb-24bceddba94e" - ], - "x-ms-routing-request-id": [ - "CENTRALUS:20150617T172721Z:de369fec-4df6-4813-8ddb-24bceddba94e" - ], - "Cache-Control": [ - "no-cache" - ], - "Date": [ - "Wed, 17 Jun 2015 17:27:21 GMT" - ], - "Server": [ - "Microsoft-IIS/8.0" - ], - "X-Powered-By": [ - "ASP.NET" - ] - }, - "StatusCode": 200 - }, - { - "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/containers?api-version=2014-09-01", - "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vY29udGFpbmVycz9hcGktdmVyc2lvbj0yMDE0LTA5LTAx", - "RequestMethod": "DELETE", - "RequestBody": "{\r\n \"ContainerUniqueName\": \"iaasvmcontainer;dev01testing;dev01testing\",\r\n \"ContainerType\": \"IaasVMContainer\"\r\n}", - "RequestHeaders": { - "Content-Type": [ - "application/json" - ], - "Content-Length": [ - "113" - ], - "Accept-Language": [ - "en-us" - ], - "User-Agent": [ - "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" - ] - }, - "ResponseBody": "\"8386018b-db83-4f50-b496-a4e4e1ad1824\"", - "ResponseHeaders": { - "Content-Length": [ - "38" - ], - "Content-Type": [ - "application/json" - ], - "Expires": [ - "-1" - ], - "Pragma": [ - "no-cache" - ], - "x-ms-request-id": [ - "9756b21f-b792-4b7a-b2ae-825c6625302c" - ], - "x-ms-client-request-id": [ - "75d2fb2f-daf1-4c97-865f-2a2f6230ee34", - "75d2fb2f-daf1-4c97-865f-2a2f6230ee34" - ], - "Strict-Transport-Security": [ - "max-age=31536000; includeSubDomains" - ], - "x-ms-ratelimit-remaining-subscription-writes": [ - "1193" - ], - "x-ms-correlation-request-id": [ - "9756b21f-b792-4b7a-b2ae-825c6625302c" - ], - "x-ms-routing-request-id": [ - "CENTRALUS:20150617T172722Z:9756b21f-b792-4b7a-b2ae-825c6625302c" - ], - "Cache-Control": [ - "no-cache" - ], - "Date": [ - "Wed, 17 Jun 2015 17:27:22 GMT" - ], - "Server": [ - "Microsoft-IIS/8.0" - ], - "X-Powered-By": [ - "ASP.NET" - ] - }, - "StatusCode": 202 - } - ], - "Names": {}, - "Variables": { - "SubscriptionId": "f5303a0b-fae4-4cdb-b44d-0e4c032dde26" - } -} \ No newline at end of file diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupItemTestCases/DisableAzureBackupProtectionTest.json b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupItemTestCases/DisableAzureBackupProtectionTest.json deleted file mode 100644 index fa1488e89e58..000000000000 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupItemTestCases/DisableAzureBackupProtectionTest.json +++ /dev/null @@ -1,75 +0,0 @@ -{ - "Entries": [ - { - "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/containers/iaasvmcontainer%3Bdev01testing%3Bdev01testing/datasources/VM/17593283453810/unprotect?api-version=2014-09-01", - "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vY29udGFpbmVycy9pYWFzdm1jb250YWluZXIlM0JkZXYwMXRlc3RpbmclM0JkZXYwMXRlc3RpbmcvZGF0YXNvdXJjZXMvVk0vMTc1OTMyODM0NTM4MTAvdW5wcm90ZWN0P2FwaS12ZXJzaW9uPTIwMTQtMDktMDE=", - "RequestMethod": "POST", - "RequestBody": "{\r\n \"RemoveProtectionOption\": \"RetainBackupData\"\r\n}", - "RequestHeaders": { - "Content-Type": [ - "application/json" - ], - "Content-Length": [ - "52" - ], - "Accept-Language": [ - "en-us" - ], - "User-Agent": [ - "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" - ] - }, - "ResponseBody": "\"06575eda-d275-4b55-8fd8-85b2cd9b11cc\"", - "ResponseHeaders": { - "Content-Length": [ - "38" - ], - "Content-Type": [ - "application/json" - ], - "Expires": [ - "-1" - ], - "Pragma": [ - "no-cache" - ], - "x-ms-request-id": [ - "252852dc-4d4b-4b7f-b9c4-75501c686cfc" - ], - "x-ms-client-request-id": [ - "e5a5bf75-c719-4d49-9ad9-25801095373a", - "e5a5bf75-c719-4d49-9ad9-25801095373a" - ], - "Strict-Transport-Security": [ - "max-age=31536000; includeSubDomains" - ], - "x-ms-ratelimit-remaining-subscription-writes": [ - "1197" - ], - "x-ms-correlation-request-id": [ - "252852dc-4d4b-4b7f-b9c4-75501c686cfc" - ], - "x-ms-routing-request-id": [ - "CENTRALUS:20150617T093517Z:252852dc-4d4b-4b7f-b9c4-75501c686cfc" - ], - "Cache-Control": [ - "no-cache" - ], - "Date": [ - "Wed, 17 Jun 2015 09:35:17 GMT" - ], - "Server": [ - "Microsoft-IIS/8.0" - ], - "X-Powered-By": [ - "ASP.NET" - ] - }, - "StatusCode": 202 - } - ], - "Names": {}, - "Variables": { - "SubscriptionId": "f5303a0b-fae4-4cdb-b44d-0e4c032dde26" - } -} \ No newline at end of file diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupItemTestCases/EnableAzureBackupProtectionTest.json b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupItemTestCases/EnableAzureBackupProtectionTest.json deleted file mode 100644 index da472af3f145..000000000000 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupItemTestCases/EnableAzureBackupProtectionTest.json +++ /dev/null @@ -1,75 +0,0 @@ -{ - "Entries": [ - { - "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/protectableobjects/protect?api-version=2014-09-01", - "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vcHJvdGVjdGFibGVvYmplY3RzL3Byb3RlY3Q/YXBpLXZlcnNpb249MjAxNC0wOS0wMQ==", - "RequestMethod": "POST", - "RequestBody": "{\r\n \"ProtectableObjects\": [\r\n \"iaasvmcontainer;dev01testing;dev01testing\"\r\n ],\r\n \"ProtectableObjectType\": \"VM\",\r\n \"PolicyId\": \"c87bbada-6e1b-4db2-b76c-9062d28959a4\"\r\n}", - "RequestHeaders": { - "Content-Type": [ - "application/json" - ], - "Content-Length": [ - "174" - ], - "Accept-Language": [ - "en-us" - ], - "User-Agent": [ - "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" - ] - }, - "ResponseBody": "\"736dee4d-3b5f-46b6-84a5-f3d1293af225\"", - "ResponseHeaders": { - "Content-Length": [ - "38" - ], - "Content-Type": [ - "application/json" - ], - "Expires": [ - "-1" - ], - "Pragma": [ - "no-cache" - ], - "x-ms-request-id": [ - "5c9542ef-4e72-47bb-85ac-d987fdce8a2a" - ], - "x-ms-client-request-id": [ - "0e68c2bf-de3a-4a7f-993d-be2881fd4d6a", - "0e68c2bf-de3a-4a7f-993d-be2881fd4d6a" - ], - "Strict-Transport-Security": [ - "max-age=31536000; includeSubDomains" - ], - "x-ms-ratelimit-remaining-subscription-writes": [ - "1195" - ], - "x-ms-correlation-request-id": [ - "5c9542ef-4e72-47bb-85ac-d987fdce8a2a" - ], - "x-ms-routing-request-id": [ - "CENTRALUS:20150617T093549Z:5c9542ef-4e72-47bb-85ac-d987fdce8a2a" - ], - "Cache-Control": [ - "no-cache" - ], - "Date": [ - "Wed, 17 Jun 2015 09:35:49 GMT" - ], - "Server": [ - "Microsoft-IIS/8.0" - ], - "X-Powered-By": [ - "ASP.NET" - ] - }, - "StatusCode": 202 - } - ], - "Names": {}, - "Variables": { - "SubscriptionId": "f5303a0b-fae4-4cdb-b44d-0e4c032dde26" - } -} \ No newline at end of file diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupItemTestCases/ListAzureBackupItemTests.json b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupItemTestCases/ListAzureBackupItemTests.json deleted file mode 100644 index a576dd778569..000000000000 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupItemTestCases/ListAzureBackupItemTests.json +++ /dev/null @@ -1,130 +0,0 @@ -{ - "Entries": [ - { - "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/datasources?api-version=2014-09-01", - "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vZGF0YXNvdXJjZXM/YXBpLXZlcnNpb249MjAxNC0wOS0wMQ==", - "RequestMethod": "GET", - "RequestBody": "", - "RequestHeaders": { - "Accept-Language": [ - "en-us" - ], - "User-Agent": [ - "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" - ] - }, - "ResponseBody": "{\r\n \"Objects\": [\r\n {\r\n \"FriendlyName\": \"dev01Testing\",\r\n \"ContainerName\": \"iaasvmcontainer;dev01testing;dev01testing\",\r\n \"ContainerType\": \"IaasVMContainer\",\r\n \"Type\": \"VM\",\r\n \"Status\": \"Protected\",\r\n \"ProtectionStatus\": \"Protected\",\r\n \"ProtectableObjectName\": \"iaasvmcontainer;dev01testing;dev01testing\",\r\n \"ProtectionPolicyName\": \"Policy9\",\r\n \"ProtectionPolicyId\": \"c87bbada-6e1b-4db2-b76c-9062d28959a4\",\r\n \"PolicyInconsistent\": false,\r\n \"RecoveryPointsCount\": 16,\r\n \"LastRecoveryPoint\": \"2015-06-17T08:38:51.5793413Z\",\r\n \"LastBackupTime\": \"2015-06-17T08:56:25.240997Z\",\r\n \"LastBackupStatus\": \"Failed\",\r\n \"LastBackupJobId\": \"f73cd5c5-c3cc-4180-8548-fed9da22f6a5\",\r\n \"InstanceId\": \"17593283453810\",\r\n \"Name\": \"iaasvmcontainer;dev01testing;dev01testing\",\r\n \"OperationInProgress\": false\r\n }\r\n ],\r\n \"ResultCount\": 1,\r\n \"Skiptoken\": null\r\n}", - "ResponseHeaders": { - "Content-Length": [ - "741" - ], - "Content-Type": [ - "application/json" - ], - "Expires": [ - "-1" - ], - "Pragma": [ - "no-cache" - ], - "x-ms-request-id": [ - "faa94cd4-5b23-4d3a-9477-fcf7e0a5e258" - ], - "x-ms-client-request-id": [ - "b198f997-b4a0-4bde-8b77-3dc088df6057", - "b198f997-b4a0-4bde-8b77-3dc088df6057" - ], - "Strict-Transport-Security": [ - "max-age=31536000; includeSubDomains" - ], - "x-ms-ratelimit-remaining-subscription-reads": [ - "14997" - ], - "x-ms-correlation-request-id": [ - "faa94cd4-5b23-4d3a-9477-fcf7e0a5e258" - ], - "x-ms-routing-request-id": [ - "CENTRALUS:20150617T093618Z:faa94cd4-5b23-4d3a-9477-fcf7e0a5e258" - ], - "Cache-Control": [ - "no-cache" - ], - "Date": [ - "Wed, 17 Jun 2015 09:36:17 GMT" - ], - "Server": [ - "Microsoft-IIS/8.0" - ], - "X-Powered-By": [ - "ASP.NET" - ] - }, - "StatusCode": 200 - }, - { - "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/protectableobjects?api-version=2014-09-01", - "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vcHJvdGVjdGFibGVvYmplY3RzP2FwaS12ZXJzaW9uPTIwMTQtMDktMDE=", - "RequestMethod": "GET", - "RequestBody": "", - "RequestHeaders": { - "Accept-Language": [ - "en-us" - ], - "User-Agent": [ - "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" - ] - }, - "ResponseBody": "{\r\n \"Objects\": [\r\n {\r\n \"FriendlyName\": \"dev01Testing\",\r\n \"Type\": \"VM\",\r\n \"ProtectionStatus\": \"Protected\",\r\n \"ContainerName\": \"iaasvmcontainer;dev01testing;dev01testing\",\r\n \"ContainerFriendlyName\": \"dev01Testing\",\r\n \"ContainerType\": \"IaasVMContainer\",\r\n \"ParentContainerName\": \"dev01Testing\",\r\n \"ParentContainerFriendlyName\": \"dev01Testing\",\r\n \"ParentContainerType\": \"IaasVMServiceContainer\",\r\n \"InstanceId\": \"iaasvmcontainer;dev01testing;dev01testing\",\r\n \"Name\": \"iaasvmcontainer;dev01testing;dev01testing\",\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"FriendlyName\": \"mkheranivmps05\",\r\n \"Type\": \"VM\",\r\n \"ProtectionStatus\": \"NotProtected\",\r\n \"ContainerName\": \"iaasvmcontainer;mkheranivmps02;mkheranivmps05\",\r\n \"ContainerFriendlyName\": \"mkheranivmps05\",\r\n \"ContainerType\": \"IaasVMContainer\",\r\n \"ParentContainerName\": \"mkheranivmps02\",\r\n \"ParentContainerFriendlyName\": \"mkheranivmps02\",\r\n \"ParentContainerType\": \"IaasVMServiceContainer\",\r\n \"InstanceId\": \"iaasvmcontainer;mkheranivmps02;mkheranivmps05\",\r\n \"Name\": \"iaasvmcontainer;mkheranivmps02;mkheranivmps05\",\r\n \"OperationInProgress\": false\r\n }\r\n ],\r\n \"ResultCount\": 2,\r\n \"Skiptoken\": null\r\n}", - "ResponseHeaders": { - "Content-Length": [ - "1015" - ], - "Content-Type": [ - "application/json" - ], - "Expires": [ - "-1" - ], - "Pragma": [ - "no-cache" - ], - "x-ms-request-id": [ - "16f276d6-ba21-4818-93e4-5f143393a1e8" - ], - "x-ms-client-request-id": [ - "2735b858-a7b6-4b89-be71-e1c3d29ce60a", - "2735b858-a7b6-4b89-be71-e1c3d29ce60a" - ], - "Strict-Transport-Security": [ - "max-age=31536000; includeSubDomains" - ], - "x-ms-ratelimit-remaining-subscription-reads": [ - "14996" - ], - "x-ms-correlation-request-id": [ - "16f276d6-ba21-4818-93e4-5f143393a1e8" - ], - "x-ms-routing-request-id": [ - "CENTRALUS:20150617T093619Z:16f276d6-ba21-4818-93e4-5f143393a1e8" - ], - "Cache-Control": [ - "no-cache" - ], - "Date": [ - "Wed, 17 Jun 2015 09:36:19 GMT" - ], - "Server": [ - "Microsoft-IIS/8.0" - ], - "X-Powered-By": [ - "ASP.NET" - ] - }, - "StatusCode": 200 - } - ], - "Names": {}, - "Variables": { - "SubscriptionId": "f5303a0b-fae4-4cdb-b44d-0e4c032dde26" - } -} \ No newline at end of file diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupJobTests/GetAzureBackupJobTests.json b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupJobTests/GetAzureBackupJobTests.json deleted file mode 100644 index c376f37e7049..000000000000 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupJobTests/GetAzureBackupJobTests.json +++ /dev/null @@ -1,5192 +0,0 @@ -{ - "Entries": [ - { - "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/jobs?api-version=2014-09-01&StartTime=2015-05-18%2009:36:46%20AM&EndTime=2015-06-17%2009:36:46%20AM", - "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vam9icz9hcGktdmVyc2lvbj0yMDE0LTA5LTAxJlN0YXJ0VGltZT0yMDE1LTA1LTE4JTIwMDklM0EzNiUzQTQ2JTIwQU0mRW5kVGltZT0yMDE1LTA2LTE3JTIwMDklM0EzNiUzQTQ2JTIwQU0=", - "RequestMethod": "GET", - "RequestBody": "", - "RequestHeaders": { - "Accept-Language": [ - "en-us" - ], - "x-ms-client-request-id": [ - "647e3a06-31a7-40ae-9fcf-97f5b845160c-2015-06-17 09:36:46Z-PS" - ], - "User-Agent": [ - "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" - ] - }, - "ResponseBody": "{\r\n \"Objects\": [\r\n {\r\n \"Type\": \"VM\",\r\n \"Operation\": \"ConfigureBackup\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-17T09:35:50.5716696Z\",\r\n \"EndTimestamp\": \"2015-06-17T09:35:54.5348762Z\",\r\n \"Duration\": \"00:00:03.9632066\",\r\n \"EntityFriendlyName\": \"dev01Testing\",\r\n \"ActionsInfo\": null,\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"aec23e57-d892-4971-8fd3-e256c6ac38f7\",\r\n \"Name\": \"aec23e57-d892-4971-8fd3-e256c6ac38f7\",\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Unprotect\",\r\n \"Status\": \"Failed\",\r\n \"StartTimestamp\": \"2015-06-17T09:35:19.160471Z\",\r\n \"EndTimestamp\": \"2015-06-17T09:35:29.248401Z\",\r\n \"Duration\": \"00:00:10.0879300\",\r\n \"EntityFriendlyName\": \"dev01Testing\",\r\n \"ActionsInfo\": null,\r\n \"ErrorDetails\": [\r\n {\r\n \"ErrorCode\": 1073871825,\r\n \"ErrorTitle\": \"\",\r\n \"ErrorString\": \"Microsoft Azure Backup encountered an internal error.\",\r\n \"Recommendations\": [\r\n \"Wait for a few minutes and then try the operation again. If the issue persists, contact Microsoft Support.\"\r\n ]\r\n }\r\n ],\r\n \"InstanceId\": \"52c31c49-3306-44b4-b241-582a40cefea2\",\r\n \"Name\": \"52c31c49-3306-44b4-b241-582a40cefea2\",\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Backup\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-17T09:22:51.8965435Z\",\r\n \"EndTimestamp\": \"2015-06-17T09:36:27.9348765Z\",\r\n \"Duration\": \"00:13:36.0383330\",\r\n \"EntityFriendlyName\": \"dev01testing\",\r\n \"ActionsInfo\": [\r\n 1\r\n ],\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"88e10323-8006-4a32-8e0d-cf0b732a86eb\",\r\n \"Name\": \"job_dev01testing_88e10323-8006-4a32-8e0d-cf0b732a86eb\",\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"Type\": \"VM\",\r\n \"Operation\": \"ConfigureBackup\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-17T09:17:59.9107529Z\",\r\n \"EndTimestamp\": \"2015-06-17T09:18:46.9007387Z\",\r\n \"Duration\": \"00:00:46.9899858\",\r\n \"EntityFriendlyName\": \"dev01Testing\",\r\n \"ActionsInfo\": null,\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"c02aa8c0-1531-4ddc-bec5-95f9a976a9fe\",\r\n \"Name\": \"c02aa8c0-1531-4ddc-bec5-95f9a976a9fe\",\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Unprotect\",\r\n \"Status\": \"Failed\",\r\n \"StartTimestamp\": \"2015-06-17T08:56:58.5151697Z\",\r\n \"EndTimestamp\": \"2015-06-17T08:56:59.7880222Z\",\r\n \"Duration\": \"00:00:01.2728525\",\r\n \"EntityFriendlyName\": \"dev01Testing\",\r\n \"ActionsInfo\": null,\r\n \"ErrorDetails\": [\r\n {\r\n \"ErrorCode\": 1073871825,\r\n \"ErrorTitle\": \"\",\r\n \"ErrorString\": \"Microsoft Azure Backup encountered an internal error.\",\r\n \"Recommendations\": [\r\n \"Wait for a few minutes and then try the operation again. If the issue persists, contact Microsoft Support.\"\r\n ]\r\n }\r\n ],\r\n \"InstanceId\": \"aed099b5-462c-4ddc-a787-574777a6bc12\",\r\n \"Name\": \"aed099b5-462c-4ddc-a787-574777a6bc12\",\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Backup\",\r\n \"Status\": \"Failed\",\r\n \"StartTimestamp\": \"2015-06-17T08:56:25.240997Z\",\r\n \"EndTimestamp\": \"2015-06-17T09:12:58.5161312Z\",\r\n \"Duration\": \"00:16:33.2751342\",\r\n \"EntityFriendlyName\": \"dev01testing\",\r\n \"ActionsInfo\": [\r\n 1\r\n ],\r\n \"ErrorDetails\": [\r\n {\r\n \"ErrorCode\": 400002,\r\n \"ErrorTitle\": \"\",\r\n \"ErrorString\": \"Backup failed with an internal error.\",\r\n \"Recommendations\": [\r\n \"Please retry the operation in a few minutes. If the problem persists, contact Microsoft Support.\"\r\n ]\r\n }\r\n ],\r\n \"InstanceId\": \"f73cd5c5-c3cc-4180-8548-fed9da22f6a5\",\r\n \"Name\": \"job_dev01testing_f73cd5c5-c3cc-4180-8548-fed9da22f6a5\",\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"Type\": \"VM\",\r\n \"Operation\": \"ConfigureBackup\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-17T08:54:36.5468042Z\",\r\n \"EndTimestamp\": \"2015-06-17T08:54:40.8360653Z\",\r\n \"Duration\": \"00:00:04.2892611\",\r\n \"EntityFriendlyName\": \"dev01Testing\",\r\n \"ActionsInfo\": null,\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"aab47eda-4828-4f2e-9ffd-a59ae47d7177\",\r\n \"Name\": \"aab47eda-4828-4f2e-9ffd-a59ae47d7177\",\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Backup\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-17T08:37:13.9649748Z\",\r\n \"EndTimestamp\": \"2015-06-17T08:51:37.3848021Z\",\r\n \"Duration\": \"00:14:23.4198273\",\r\n \"EntityFriendlyName\": \"dev01testing\",\r\n \"ActionsInfo\": [\r\n 1\r\n ],\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"b4c03815-5512-4c7e-8187-fcacbb443b2a\",\r\n \"Name\": \"job_dev01testing_b4c03815-5512-4c7e-8187-fcacbb443b2a\",\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Unprotect\",\r\n \"Status\": \"Failed\",\r\n \"StartTimestamp\": \"2015-06-17T08:36:40.4491429Z\",\r\n \"EndTimestamp\": \"2015-06-17T08:36:43.1031499Z\",\r\n \"Duration\": \"00:00:02.6540070\",\r\n \"EntityFriendlyName\": \"dev01Testing\",\r\n \"ActionsInfo\": null,\r\n \"ErrorDetails\": [\r\n {\r\n \"ErrorCode\": 1073871825,\r\n \"ErrorTitle\": \"\",\r\n \"ErrorString\": \"Microsoft Azure Backup encountered an internal error.\",\r\n \"Recommendations\": [\r\n \"Wait for a few minutes and then try the operation again. If the issue persists, contact Microsoft Support.\"\r\n ]\r\n }\r\n ],\r\n \"InstanceId\": \"412c6d03-c431-4e09-94ac-5fa3ce0da2c6\",\r\n \"Name\": \"412c6d03-c431-4e09-94ac-5fa3ce0da2c6\",\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"Type\": \"VM\",\r\n \"Operation\": \"ConfigureBackup\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-17T08:36:00.1563528Z\",\r\n \"EndTimestamp\": \"2015-06-17T08:36:03.7676077Z\",\r\n \"Duration\": \"00:00:03.6112549\",\r\n \"EntityFriendlyName\": \"dev01Testing\",\r\n \"ActionsInfo\": null,\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"a38e5978-1505-434d-a8af-197a14a1ae60\",\r\n \"Name\": \"a38e5978-1505-434d-a8af-197a14a1ae60\",\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Backup\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-17T08:21:27.5643161Z\",\r\n \"EndTimestamp\": \"2015-06-17T08:34:04.2089391Z\",\r\n \"Duration\": \"00:12:36.6446230\",\r\n \"EntityFriendlyName\": \"dev01testing\",\r\n \"ActionsInfo\": [\r\n 1\r\n ],\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"b6f2cb27-2615-4eb7-be58-e21cba98475c\",\r\n \"Name\": \"job_dev01testing_b6f2cb27-2615-4eb7-be58-e21cba98475c\",\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"Type\": \"VM\",\r\n \"Operation\": \"ConfigureBackup\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-17T08:17:39.6510158Z\",\r\n \"EndTimestamp\": \"2015-06-17T08:17:41.0746491Z\",\r\n \"Duration\": \"00:00:01.4236333\",\r\n \"EntityFriendlyName\": \"dev01Testing\",\r\n \"ActionsInfo\": null,\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"0ca96519-d7c7-48ee-ac03-645b20717982\",\r\n \"Name\": \"0ca96519-d7c7-48ee-ac03-645b20717982\",\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Unprotect\",\r\n \"Status\": \"Failed\",\r\n \"StartTimestamp\": \"2015-06-17T08:17:18.0709625Z\",\r\n \"EndTimestamp\": \"2015-06-17T08:17:19.5124912Z\",\r\n \"Duration\": \"00:00:01.4415287\",\r\n \"EntityFriendlyName\": \"dev01Testing\",\r\n \"ActionsInfo\": null,\r\n \"ErrorDetails\": [\r\n {\r\n \"ErrorCode\": 1073871825,\r\n \"ErrorTitle\": \"\",\r\n \"ErrorString\": \"Microsoft Azure Backup encountered an internal error.\",\r\n \"Recommendations\": [\r\n \"Wait for a few minutes and then try the operation again. If the issue persists, contact Microsoft Support.\"\r\n ]\r\n }\r\n ],\r\n \"InstanceId\": \"6f19f32d-e02b-4183-a9fd-36ad0691ba3e\",\r\n \"Name\": \"6f19f32d-e02b-4183-a9fd-36ad0691ba3e\",\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"Type\": \"VM\",\r\n \"Operation\": \"ConfigureBackup\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-17T08:16:56.440266Z\",\r\n \"EndTimestamp\": \"2015-06-17T08:17:00.1534989Z\",\r\n \"Duration\": \"00:00:03.7132329\",\r\n \"EntityFriendlyName\": \"dev01Testing\",\r\n \"ActionsInfo\": null,\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"b412156e-4a8b-41a0-87d1-5a552f46e36e\",\r\n \"Name\": \"b412156e-4a8b-41a0-87d1-5a552f46e36e\",\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"Type\": \"VM\",\r\n \"Operation\": \"ConfigureBackup\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-17T07:31:40.6730368Z\",\r\n \"EndTimestamp\": \"2015-06-17T07:31:42.8347267Z\",\r\n \"Duration\": \"00:00:02.1616899\",\r\n \"EntityFriendlyName\": \"dev01Testing\",\r\n \"ActionsInfo\": null,\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"033b47f8-66c9-465f-a193-21ee0f21b90e\",\r\n \"Name\": \"033b47f8-66c9-465f-a193-21ee0f21b90e\",\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Unprotect\",\r\n \"Status\": \"Failed\",\r\n \"StartTimestamp\": \"2015-06-17T07:31:19.1455656Z\",\r\n \"EndTimestamp\": \"2015-06-17T07:31:21.5225441Z\",\r\n \"Duration\": \"00:00:02.3769785\",\r\n \"EntityFriendlyName\": \"dev01Testing\",\r\n \"ActionsInfo\": null,\r\n \"ErrorDetails\": [\r\n {\r\n \"ErrorCode\": 1073871825,\r\n \"ErrorTitle\": \"\",\r\n \"ErrorString\": \"Microsoft Azure Backup encountered an internal error.\",\r\n \"Recommendations\": [\r\n \"Wait for a few minutes and then try the operation again. If the issue persists, contact Microsoft Support.\"\r\n ]\r\n }\r\n ],\r\n \"InstanceId\": \"39fd255f-937d-4ad4-97ec-643462e3173b\",\r\n \"Name\": \"39fd255f-937d-4ad4-97ec-643462e3173b\",\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"Type\": \"VM\",\r\n \"Operation\": \"ConfigureBackup\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-17T07:30:57.2702223Z\",\r\n \"EndTimestamp\": \"2015-06-17T07:31:02.2771569Z\",\r\n \"Duration\": \"00:00:05.0069346\",\r\n \"EntityFriendlyName\": \"dev01Testing\",\r\n \"ActionsInfo\": null,\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"fc86e9e5-b676-40e0-a4b5-61816a30ebb3\",\r\n \"Name\": \"fc86e9e5-b676-40e0-a4b5-61816a30ebb3\",\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Backup\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-16T19:30:55.8988097Z\",\r\n \"EndTimestamp\": \"2015-06-16T19:45:24.8671161Z\",\r\n \"Duration\": \"00:14:28.9683064\",\r\n \"EntityFriendlyName\": \"dev01testing\",\r\n \"ActionsInfo\": null,\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"cfed4d3d-ce92-4d4a-b834-6343b781a55e\",\r\n \"Name\": \"job_dev01testing_cfed4d3d-ce92-4d4a-b834-6343b781a55e\",\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"Type\": \"VM\",\r\n \"Operation\": \"UnRegister\",\r\n \"Status\": \"Failed\",\r\n \"StartTimestamp\": \"2015-06-16T13:49:03.8618717Z\",\r\n \"EndTimestamp\": \"2015-06-16T13:49:04.4078483Z\",\r\n \"Duration\": \"00:00:00.5459766\",\r\n \"EntityFriendlyName\": \"dev01Testing\",\r\n \"ActionsInfo\": null,\r\n \"ErrorDetails\": [\r\n {\r\n \"ErrorCode\": 134607754,\r\n \"ErrorTitle\": \"\",\r\n \"ErrorString\": \"Another operation is in progress on the selected item.\",\r\n \"Recommendations\": [\r\n \"If there is a current, in-progress operation, please retry after it has finished.\"\r\n ]\r\n }\r\n ],\r\n \"InstanceId\": \"a61303a4-5f52-4716-bb76-2715b6e91d0c\",\r\n \"Name\": \"iaasvmcontainer;dev01testing;dev01testing\",\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Register\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-16T13:48:25.3211336Z\",\r\n \"EndTimestamp\": \"2015-06-16T13:49:42.0251501Z\",\r\n \"Duration\": \"00:01:16.7040165\",\r\n \"EntityFriendlyName\": \"dev01Testing\",\r\n \"ActionsInfo\": null,\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"3683def8-bf7e-427d-995a-16622e67ad30\",\r\n \"Name\": \"iaasvmcontainer;dev01testing;dev01testing\",\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"Type\": \"VM\",\r\n \"Operation\": \"ConfigureBackup\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-16T10:55:27.5671369Z\",\r\n \"EndTimestamp\": \"2015-06-16T10:55:31.3950698Z\",\r\n \"Duration\": \"00:00:03.8279329\",\r\n \"EntityFriendlyName\": \"dev01Testing\",\r\n \"ActionsInfo\": null,\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"468d1bb0-6aad-4fd1-a4af-e89a13e29b5d\",\r\n \"Name\": \"468d1bb0-6aad-4fd1-a4af-e89a13e29b5d\",\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"Type\": \"VM\",\r\n \"Operation\": \"ConfigureBackup\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-16T10:13:04.4652467Z\",\r\n \"EndTimestamp\": \"2015-06-16T10:13:07.7148831Z\",\r\n \"Duration\": \"00:00:03.2496364\",\r\n \"EntityFriendlyName\": \"dev01Testing\",\r\n \"ActionsInfo\": null,\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"76814dac-9493-4908-b66b-814614fe79ab\",\r\n \"Name\": \"76814dac-9493-4908-b66b-814614fe79ab\",\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"Type\": \"VM\",\r\n \"Operation\": \"ConfigureBackup\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-16T08:33:10.2998041Z\",\r\n \"EndTimestamp\": \"2015-06-16T08:33:12.5167364Z\",\r\n \"Duration\": \"00:00:02.2169323\",\r\n \"EntityFriendlyName\": \"dev01Testing\",\r\n \"ActionsInfo\": null,\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"b0c81102-27a2-424e-909c-3ffc3e581b5d\",\r\n \"Name\": \"b0c81102-27a2-424e-909c-3ffc3e581b5d\",\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Unprotect\",\r\n \"Status\": \"Failed\",\r\n \"StartTimestamp\": \"2015-06-16T08:32:48.6873719Z\",\r\n \"EndTimestamp\": \"2015-06-16T08:32:50.7129506Z\",\r\n \"Duration\": \"00:00:02.0255787\",\r\n \"EntityFriendlyName\": \"dev01Testing\",\r\n \"ActionsInfo\": null,\r\n \"ErrorDetails\": [\r\n {\r\n \"ErrorCode\": 1073871825,\r\n \"ErrorTitle\": \"\",\r\n \"ErrorString\": \"Microsoft Azure Backup encountered an internal error.\",\r\n \"Recommendations\": [\r\n \"Wait for a few minutes and then try the operation again. If the issue persists, contact Microsoft Support.\"\r\n ]\r\n }\r\n ],\r\n \"InstanceId\": \"3bfe56a3-1c53-497a-bef1-5b960d090994\",\r\n \"Name\": \"3bfe56a3-1c53-497a-bef1-5b960d090994\",\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"Type\": \"VM\",\r\n \"Operation\": \"ConfigureBackup\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-16T08:32:26.6301914Z\",\r\n \"EndTimestamp\": \"2015-06-16T08:32:29.339627Z\",\r\n \"Duration\": \"00:00:02.7094356\",\r\n \"EntityFriendlyName\": \"dev01Testing\",\r\n \"ActionsInfo\": null,\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"b0f58a95-bd96-4b50-a1d8-47d585b54995\",\r\n \"Name\": \"b0f58a95-bd96-4b50-a1d8-47d585b54995\",\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"Type\": \"VM\",\r\n \"Operation\": \"ConfigureBackup\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-16T08:27:38.2970023Z\",\r\n \"EndTimestamp\": \"2015-06-16T08:27:40.2464079Z\",\r\n \"Duration\": \"00:00:01.9494056\",\r\n \"EntityFriendlyName\": \"dev01Testing\",\r\n \"ActionsInfo\": null,\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"71617c2a-e348-4268-9077-5e4273db38c5\",\r\n \"Name\": \"71617c2a-e348-4268-9077-5e4273db38c5\",\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Unprotect\",\r\n \"Status\": \"Failed\",\r\n \"StartTimestamp\": \"2015-06-16T08:27:16.5876939Z\",\r\n \"EndTimestamp\": \"2015-06-16T08:27:19.0011557Z\",\r\n \"Duration\": \"00:00:02.4134618\",\r\n \"EntityFriendlyName\": \"dev01Testing\",\r\n \"ActionsInfo\": null,\r\n \"ErrorDetails\": [\r\n {\r\n \"ErrorCode\": 1073871825,\r\n \"ErrorTitle\": \"\",\r\n \"ErrorString\": \"Microsoft Azure Backup encountered an internal error.\",\r\n \"Recommendations\": [\r\n \"Wait for a few minutes and then try the operation again. If the issue persists, contact Microsoft Support.\"\r\n ]\r\n }\r\n ],\r\n \"InstanceId\": \"b32c86bd-e101-434a-8692-c66fa5e29061\",\r\n \"Name\": \"b32c86bd-e101-434a-8692-c66fa5e29061\",\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"Type\": \"VM\",\r\n \"Operation\": \"ConfigureBackup\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-16T08:26:54.494304Z\",\r\n \"EndTimestamp\": \"2015-06-16T08:26:57.4105598Z\",\r\n \"Duration\": \"00:00:02.9162558\",\r\n \"EntityFriendlyName\": \"dev01Testing\",\r\n \"ActionsInfo\": null,\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"e605039d-3937-42e7-bf7a-ca192d630250\",\r\n \"Name\": \"e605039d-3937-42e7-bf7a-ca192d630250\",\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"Type\": \"VM\",\r\n \"Operation\": \"ConfigureBackup\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-16T08:18:25.2594536Z\",\r\n \"EndTimestamp\": \"2015-06-16T08:18:28.6399787Z\",\r\n \"Duration\": \"00:00:03.3805251\",\r\n \"EntityFriendlyName\": \"dev01Testing\",\r\n \"ActionsInfo\": null,\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"463fbae9-2bcc-46af-8e2e-8487883ca673\",\r\n \"Name\": \"463fbae9-2bcc-46af-8e2e-8487883ca673\",\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Unprotect\",\r\n \"Status\": \"Failed\",\r\n \"StartTimestamp\": \"2015-06-16T08:18:03.5880068Z\",\r\n \"EndTimestamp\": \"2015-06-16T08:18:05.8881248Z\",\r\n \"Duration\": \"00:00:02.3001180\",\r\n \"EntityFriendlyName\": \"dev01Testing\",\r\n \"ActionsInfo\": null,\r\n \"ErrorDetails\": [\r\n {\r\n \"ErrorCode\": 1073871825,\r\n \"ErrorTitle\": \"\",\r\n \"ErrorString\": \"Microsoft Azure Backup encountered an internal error.\",\r\n \"Recommendations\": [\r\n \"Wait for a few minutes and then try the operation again. If the issue persists, contact Microsoft Support.\"\r\n ]\r\n }\r\n ],\r\n \"InstanceId\": \"4e971b74-5842-4bbe-a766-d8d9fb1da9e4\",\r\n \"Name\": \"4e971b74-5842-4bbe-a766-d8d9fb1da9e4\",\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"Type\": \"VM\",\r\n \"Operation\": \"ConfigureBackup\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-16T08:17:41.6186629Z\",\r\n \"EndTimestamp\": \"2015-06-16T08:17:52.5720242Z\",\r\n \"Duration\": \"00:00:10.9533613\",\r\n \"EntityFriendlyName\": \"dev01Testing\",\r\n \"ActionsInfo\": null,\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"56e7bc5c-8857-4ee2-8a7d-7ec78071c23f\",\r\n \"Name\": \"56e7bc5c-8857-4ee2-8a7d-7ec78071c23f\",\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Unprotect\",\r\n \"Status\": \"Failed\",\r\n \"StartTimestamp\": \"2015-06-16T06:31:21.0804773Z\",\r\n \"EndTimestamp\": \"2015-06-16T06:31:22.9163182Z\",\r\n \"Duration\": \"00:00:01.8358409\",\r\n \"EntityFriendlyName\": \"dev01Testing\",\r\n \"ActionsInfo\": null,\r\n \"ErrorDetails\": [\r\n {\r\n \"ErrorCode\": 1073871825,\r\n \"ErrorTitle\": \"\",\r\n \"ErrorString\": \"Microsoft Azure Backup encountered an internal error.\",\r\n \"Recommendations\": [\r\n \"Wait for a few minutes and then try the operation again. If the issue persists, contact Microsoft Support.\"\r\n ]\r\n }\r\n ],\r\n \"InstanceId\": \"b7ee843b-1fd1-4a2f-bdf9-eee6b4821fc1\",\r\n \"Name\": \"b7ee843b-1fd1-4a2f-bdf9-eee6b4821fc1\",\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"Type\": \"VM\",\r\n \"Operation\": \"ConfigureBackup\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-16T06:30:58.9651061Z\",\r\n \"EndTimestamp\": \"2015-06-16T06:31:03.5761814Z\",\r\n \"Duration\": \"00:00:04.6110753\",\r\n \"EntityFriendlyName\": \"dev01Testing\",\r\n \"ActionsInfo\": null,\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"7321f849-253a-496d-8a50-027f7e024a48\",\r\n \"Name\": \"7321f849-253a-496d-8a50-027f7e024a48\",\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"Type\": \"VM\",\r\n \"Operation\": \"ConfigureBackup\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-16T06:09:33.354948Z\",\r\n \"EndTimestamp\": \"2015-06-16T06:09:35.4256827Z\",\r\n \"Duration\": \"00:00:02.0707347\",\r\n \"EntityFriendlyName\": \"dev01Testing\",\r\n \"ActionsInfo\": null,\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"1d98c568-c8e1-4341-991d-0829d33c5fb7\",\r\n \"Name\": \"1d98c568-c8e1-4341-991d-0829d33c5fb7\",\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"Type\": \"VM\",\r\n \"Operation\": \"ConfigureBackup\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-16T06:09:06.5941766Z\",\r\n \"EndTimestamp\": \"2015-06-16T06:09:09.108794Z\",\r\n \"Duration\": \"00:00:02.5146174\",\r\n \"EntityFriendlyName\": \"dev01Testing\",\r\n \"ActionsInfo\": null,\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"46c87d04-bb63-47e6-9830-c4172ead903f\",\r\n \"Name\": \"46c87d04-bb63-47e6-9830-c4172ead903f\",\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Unprotect\",\r\n \"Status\": \"Failed\",\r\n \"StartTimestamp\": \"2015-06-16T06:08:44.9026099Z\",\r\n \"EndTimestamp\": \"2015-06-16T06:08:47.6574861Z\",\r\n \"Duration\": \"00:00:02.7548762\",\r\n \"EntityFriendlyName\": \"dev01Testing\",\r\n \"ActionsInfo\": null,\r\n \"ErrorDetails\": [\r\n {\r\n \"ErrorCode\": 1073871825,\r\n \"ErrorTitle\": \"\",\r\n \"ErrorString\": \"Microsoft Azure Backup encountered an internal error.\",\r\n \"Recommendations\": [\r\n \"Wait for a few minutes and then try the operation again. If the issue persists, contact Microsoft Support.\"\r\n ]\r\n }\r\n ],\r\n \"InstanceId\": \"8f01a660-0908-48c1-9b8b-9594cbc8fd01\",\r\n \"Name\": \"8f01a660-0908-48c1-9b8b-9594cbc8fd01\",\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"Type\": \"VM\",\r\n \"Operation\": \"ConfigureBackup\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-16T06:08:22.3327404Z\",\r\n \"EndTimestamp\": \"2015-06-16T06:08:31.6070217Z\",\r\n \"Duration\": \"00:00:09.2742813\",\r\n \"EntityFriendlyName\": \"dev01Testing\",\r\n \"ActionsInfo\": null,\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"2cb3ab5e-8dc5-44c0-80d8-f58789392b5e\",\r\n \"Name\": \"2cb3ab5e-8dc5-44c0-80d8-f58789392b5e\",\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Backup\",\r\n \"Status\": \"Cancelled\",\r\n \"StartTimestamp\": \"2015-06-16T04:19:02.5947672Z\",\r\n \"EndTimestamp\": \"2015-06-16T04:22:59.807138Z\",\r\n \"Duration\": \"00:03:57.2123708\",\r\n \"EntityFriendlyName\": \"dev01testing\",\r\n \"ActionsInfo\": [\r\n 1\r\n ],\r\n \"ErrorDetails\": [\r\n {\r\n \"ErrorCode\": 400057,\r\n \"ErrorTitle\": \"\",\r\n \"ErrorString\": \"Job is successfully cancelled.\",\r\n \"Recommendations\": []\r\n }\r\n ],\r\n \"InstanceId\": \"bcc46976-4cde-4c48-b19a-baa001e9aea0\",\r\n \"Name\": \"job_dev01testing_bcc46976-4cde-4c48-b19a-baa001e9aea0\",\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Backup\",\r\n \"Status\": \"Cancelled\",\r\n \"StartTimestamp\": \"2015-06-16T04:12:02.6093859Z\",\r\n \"EndTimestamp\": \"2015-06-16T04:15:54.3942965Z\",\r\n \"Duration\": \"00:03:51.7849106\",\r\n \"EntityFriendlyName\": \"dev01testing\",\r\n \"ActionsInfo\": [\r\n 1\r\n ],\r\n \"ErrorDetails\": [\r\n {\r\n \"ErrorCode\": 400057,\r\n \"ErrorTitle\": \"\",\r\n \"ErrorString\": \"Job is successfully cancelled.\",\r\n \"Recommendations\": []\r\n }\r\n ],\r\n \"InstanceId\": \"0243f826-e7ea-44e0-b1c6-c3f772f43686\",\r\n \"Name\": \"job_dev01testing_0243f826-e7ea-44e0-b1c6-c3f772f43686\",\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"Type\": \"VM\",\r\n \"Operation\": \"ConfigureBackup\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-15T18:38:32.3981994Z\",\r\n \"EndTimestamp\": \"2015-06-15T18:38:34.1605724Z\",\r\n \"Duration\": \"00:00:01.7623730\",\r\n \"EntityFriendlyName\": \"dev01Testing\",\r\n \"ActionsInfo\": null,\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"e3e53a20-f4b5-40f8-a926-adf72c6689a3\",\r\n \"Name\": \"e3e53a20-f4b5-40f8-a926-adf72c6689a3\",\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Unprotect\",\r\n \"Status\": \"Failed\",\r\n \"StartTimestamp\": \"2015-06-15T18:38:10.9046253Z\",\r\n \"EndTimestamp\": \"2015-06-15T18:38:12.702791Z\",\r\n \"Duration\": \"00:00:01.7981657\",\r\n \"EntityFriendlyName\": \"dev01Testing\",\r\n \"ActionsInfo\": null,\r\n \"ErrorDetails\": [\r\n {\r\n \"ErrorCode\": 1073871825,\r\n \"ErrorTitle\": \"\",\r\n \"ErrorString\": \"Microsoft Azure Backup encountered an internal error.\",\r\n \"Recommendations\": [\r\n \"Wait for a few minutes and then try the operation again. If the issue persists, contact Microsoft Support.\"\r\n ]\r\n }\r\n ],\r\n \"InstanceId\": \"70c5ac47-80c3-4cc9-840f-0c8a40894051\",\r\n \"Name\": \"70c5ac47-80c3-4cc9-840f-0c8a40894051\",\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"Type\": \"VM\",\r\n \"Operation\": \"ConfigureBackup\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-15T18:37:49.0128974Z\",\r\n \"EndTimestamp\": \"2015-06-15T18:37:51.8484281Z\",\r\n \"Duration\": \"00:00:02.8355307\",\r\n \"EntityFriendlyName\": \"dev01Testing\",\r\n \"ActionsInfo\": null,\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"0853b887-b6df-49b5-9e75-e298144a80cf\",\r\n \"Name\": \"0853b887-b6df-49b5-9e75-e298144a80cf\",\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Backup\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-15T17:36:11.0872567Z\",\r\n \"EndTimestamp\": \"2015-06-15T17:50:18.6830491Z\",\r\n \"Duration\": \"00:14:07.5957924\",\r\n \"EntityFriendlyName\": \"dev01testing\",\r\n \"ActionsInfo\": [\r\n 1\r\n ],\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"67fcb53e-9fd3-4c7b-8359-5b8b59d65f0d\",\r\n \"Name\": \"job_dev01testing_67fcb53e-9fd3-4c7b-8359-5b8b59d65f0d\",\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"Type\": \"VM\",\r\n \"Operation\": \"ConfigureBackup\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-15T17:35:43.8148581Z\",\r\n \"EndTimestamp\": \"2015-06-15T17:35:46.4798787Z\",\r\n \"Duration\": \"00:00:02.6650206\",\r\n \"EntityFriendlyName\": \"dev01Testing\",\r\n \"ActionsInfo\": null,\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"7d0ce796-9565-4b2d-8be0-efc5f674ad89\",\r\n \"Name\": \"7d0ce796-9565-4b2d-8be0-efc5f674ad89\",\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Unprotect\",\r\n \"Status\": \"Failed\",\r\n \"StartTimestamp\": \"2015-06-15T17:35:34.4565621Z\",\r\n \"EndTimestamp\": \"2015-06-15T17:35:37.3287093Z\",\r\n \"Duration\": \"00:00:02.8721472\",\r\n \"EntityFriendlyName\": \"dev01Testing\",\r\n \"ActionsInfo\": null,\r\n \"ErrorDetails\": [\r\n {\r\n \"ErrorCode\": 1073871825,\r\n \"ErrorTitle\": \"\",\r\n \"ErrorString\": \"Microsoft Azure Backup encountered an internal error.\",\r\n \"Recommendations\": [\r\n \"Wait for a few minutes and then try the operation again. If the issue persists, contact Microsoft Support.\"\r\n ]\r\n }\r\n ],\r\n \"InstanceId\": \"cf28195f-8fb9-4ad6-b6b7-bb7446847113\",\r\n \"Name\": \"cf28195f-8fb9-4ad6-b6b7-bb7446847113\",\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"Type\": \"VM\",\r\n \"Operation\": \"ConfigureBackup\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-15T14:45:59.2312666Z\",\r\n \"EndTimestamp\": \"2015-06-15T14:46:01.2914477Z\",\r\n \"Duration\": \"00:00:02.0601811\",\r\n \"EntityFriendlyName\": \"dev01Testing\",\r\n \"ActionsInfo\": null,\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"051dc4a7-5029-475a-9253-c3a0b5bfc3fc\",\r\n \"Name\": \"051dc4a7-5029-475a-9253-c3a0b5bfc3fc\",\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Unprotect\",\r\n \"Status\": \"Failed\",\r\n \"StartTimestamp\": \"2015-06-15T14:45:36.8979669Z\",\r\n \"EndTimestamp\": \"2015-06-15T14:45:38.3452314Z\",\r\n \"Duration\": \"00:00:01.4472645\",\r\n \"EntityFriendlyName\": \"dev01Testing\",\r\n \"ActionsInfo\": null,\r\n \"ErrorDetails\": [\r\n {\r\n \"ErrorCode\": 1073871825,\r\n \"ErrorTitle\": \"\",\r\n \"ErrorString\": \"Microsoft Azure Backup encountered an internal error.\",\r\n \"Recommendations\": [\r\n \"Wait for a few minutes and then try the operation again. If the issue persists, contact Microsoft Support.\"\r\n ]\r\n }\r\n ],\r\n \"InstanceId\": \"d477023c-9f74-4666-a163-33de31b49878\",\r\n \"Name\": \"d477023c-9f74-4666-a163-33de31b49878\",\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"Type\": \"VM\",\r\n \"Operation\": \"ConfigureBackup\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-15T14:45:15.3831506Z\",\r\n \"EndTimestamp\": \"2015-06-15T14:45:17.5388117Z\",\r\n \"Duration\": \"00:00:02.1556611\",\r\n \"EntityFriendlyName\": \"dev01Testing\",\r\n \"ActionsInfo\": null,\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"edaa3bcd-1353-4122-993b-ca26fbdd3dc0\",\r\n \"Name\": \"edaa3bcd-1353-4122-993b-ca26fbdd3dc0\",\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"Type\": \"VM\",\r\n \"Operation\": \"ConfigureBackup\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-15T14:44:38.2105575Z\",\r\n \"EndTimestamp\": \"2015-06-15T14:44:40.7833338Z\",\r\n \"Duration\": \"00:00:02.5727763\",\r\n \"EntityFriendlyName\": \"dev01Testing\",\r\n \"ActionsInfo\": null,\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"38847dcc-4aeb-4305-9e4c-e854a81c36d8\",\r\n \"Name\": \"38847dcc-4aeb-4305-9e4c-e854a81c36d8\",\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"Type\": \"VM\",\r\n \"Operation\": \"ConfigureBackup\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-15T14:41:30.3616716Z\",\r\n \"EndTimestamp\": \"2015-06-15T14:41:33.1512668Z\",\r\n \"Duration\": \"00:00:02.7895952\",\r\n \"EntityFriendlyName\": \"dev01Testing\",\r\n \"ActionsInfo\": null,\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"7c6f3d8f-a03c-453b-8fc6-96d4a6858f12\",\r\n \"Name\": \"7c6f3d8f-a03c-453b-8fc6-96d4a6858f12\",\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Register\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-15T14:31:26.1920785Z\",\r\n \"EndTimestamp\": \"2015-06-15T14:36:59.7193043Z\",\r\n \"Duration\": \"00:05:33.5272258\",\r\n \"EntityFriendlyName\": \"mkheranivmps05\",\r\n \"ActionsInfo\": null,\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"f2fd996a-0303-48a3-a979-3c6130b32594\",\r\n \"Name\": \"iaasvmcontainer;mkheranivmps02;mkheranivmps05\",\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Unprotect\",\r\n \"Status\": \"Failed\",\r\n \"StartTimestamp\": \"2015-06-15T13:55:41.1268867Z\",\r\n \"EndTimestamp\": \"2015-06-15T13:55:43.4663585Z\",\r\n \"Duration\": \"00:00:02.3394718\",\r\n \"EntityFriendlyName\": \"dev01Testing\",\r\n \"ActionsInfo\": null,\r\n \"ErrorDetails\": [\r\n {\r\n \"ErrorCode\": 1073871825,\r\n \"ErrorTitle\": \"\",\r\n \"ErrorString\": \"Microsoft Azure Backup encountered an internal error.\",\r\n \"Recommendations\": [\r\n \"Wait for a few minutes and then try the operation again. If the issue persists, contact Microsoft Support.\"\r\n ]\r\n }\r\n ],\r\n \"InstanceId\": \"dece8182-8d97-434e-80d5-96e7755bae81\",\r\n \"Name\": \"dece8182-8d97-434e-80d5-96e7755bae81\",\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"Type\": \"VM\",\r\n \"Operation\": \"UnRegister\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-15T12:59:31.0707896Z\",\r\n \"EndTimestamp\": \"2015-06-15T13:01:58.1942989Z\",\r\n \"Duration\": \"00:02:27.1235093\",\r\n \"EntityFriendlyName\": \"mkheranivmps02\",\r\n \"ActionsInfo\": null,\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"cb7c1675-2661-493c-b842-3360313333cb\",\r\n \"Name\": \"iaasvmcontainer;mkheranivmps02;mkheranivmps02\",\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Register\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-15T12:51:32.6298143Z\",\r\n \"EndTimestamp\": \"2015-06-15T12:56:27.0482935Z\",\r\n \"Duration\": \"00:04:54.4184792\",\r\n \"EntityFriendlyName\": \"mkheranivmps02\",\r\n \"ActionsInfo\": null,\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"ba1b3a65-8004-4e31-9e2a-f77f4e16543e\",\r\n \"Name\": \"iaasvmcontainer;mkheranivmps02;mkheranivmps02\",\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Backup\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-15T11:11:03.142968Z\",\r\n \"EndTimestamp\": \"2015-06-15T11:27:18.028978Z\",\r\n \"Duration\": \"00:16:14.8860100\",\r\n \"EntityFriendlyName\": \"dev01testing\",\r\n \"ActionsInfo\": [\r\n 1\r\n ],\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"3198b8b5-6a1b-492e-b550-a3ebd57b6fad\",\r\n \"Name\": \"job_dev01testing_3198b8b5-6a1b-492e-b550-a3ebd57b6fad\",\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Backup\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-14T20:30:06.6397949Z\",\r\n \"EndTimestamp\": \"2015-06-14T20:43:58.7446302Z\",\r\n \"Duration\": \"00:13:52.1048353\",\r\n \"EntityFriendlyName\": \"dev01testing\",\r\n \"ActionsInfo\": [\r\n 1\r\n ],\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"888a659f-04b1-4625-903f-776084d4ab0b\",\r\n \"Name\": \"job_dev01testing_888a659f-04b1-4625-903f-776084d4ab0b\",\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Backup\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-13T20:31:00.1780039Z\",\r\n \"EndTimestamp\": \"2015-06-13T20:45:23.4848097Z\",\r\n \"Duration\": \"00:14:23.3068058\",\r\n \"EntityFriendlyName\": \"dev01testing\",\r\n \"ActionsInfo\": [\r\n 1\r\n ],\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"3fae8ec8-b35b-4c75-976f-bdfcc66875c6\",\r\n \"Name\": \"job_dev01testing_3fae8ec8-b35b-4c75-976f-bdfcc66875c6\",\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Backup\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-13T14:42:37.7185258Z\",\r\n \"EndTimestamp\": \"2015-06-13T14:57:39.8014518Z\",\r\n \"Duration\": \"00:15:02.0829260\",\r\n \"EntityFriendlyName\": \"dev01testing\",\r\n \"ActionsInfo\": [\r\n 1\r\n ],\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"53b29c0a-88c8-446e-9e58-01dcdf2f315a\",\r\n \"Name\": \"job_dev01testing_53b29c0a-88c8-446e-9e58-01dcdf2f315a\",\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"Type\": \"VM\",\r\n \"Operation\": \"ConfigureBackup\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-13T11:01:10.0627574Z\",\r\n \"EndTimestamp\": \"2015-06-13T11:01:14.2893205Z\",\r\n \"Duration\": \"00:00:04.2265631\",\r\n \"EntityFriendlyName\": \"dev01Testing\",\r\n \"ActionsInfo\": null,\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"d504ecd6-aecc-4c62-85b5-8585e8d7d373\",\r\n \"Name\": \"d504ecd6-aecc-4c62-85b5-8585e8d7d373\",\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Unprotect\",\r\n \"Status\": \"Failed\",\r\n \"StartTimestamp\": \"2015-06-13T10:58:48.9035774Z\",\r\n \"EndTimestamp\": \"2015-06-13T10:58:51.5388817Z\",\r\n \"Duration\": \"00:00:02.6353043\",\r\n \"EntityFriendlyName\": \"dev01Testing\",\r\n \"ActionsInfo\": null,\r\n \"ErrorDetails\": [\r\n {\r\n \"ErrorCode\": 1073871825,\r\n \"ErrorTitle\": \"\",\r\n \"ErrorString\": \"Microsoft Azure Backup encountered an internal error.\",\r\n \"Recommendations\": [\r\n \"Wait for a few minutes and then try the operation again. If the issue persists, contact Microsoft Support.\"\r\n ]\r\n }\r\n ],\r\n \"InstanceId\": \"03a7662a-45be-493e-8fea-7ec5bad31f68\",\r\n \"Name\": \"03a7662a-45be-493e-8fea-7ec5bad31f68\",\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Backup\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-12T15:30:13.51768Z\",\r\n \"EndTimestamp\": \"2015-06-12T15:44:32.329239Z\",\r\n \"Duration\": \"00:14:18.8115590\",\r\n \"EntityFriendlyName\": \"dev01testing\",\r\n \"ActionsInfo\": [\r\n 1\r\n ],\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"4c932581-f408-4b41-80c1-c29fc15a8d71\",\r\n \"Name\": \"job_dev01testing_4c932581-f408-4b41-80c1-c29fc15a8d71\",\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Backup\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-12T14:57:10.3094061Z\",\r\n \"EndTimestamp\": \"2015-06-12T15:11:24.5753982Z\",\r\n \"Duration\": \"00:14:14.2659921\",\r\n \"EntityFriendlyName\": \"dev01testing\",\r\n \"ActionsInfo\": [\r\n 1\r\n ],\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"b453f9f7-deea-456e-956a-a0ecbfb2465a\",\r\n \"Name\": \"job_dev01testing_b453f9f7-deea-456e-956a-a0ecbfb2465a\",\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Backup\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-12T14:35:25.0178152Z\",\r\n \"EndTimestamp\": \"2015-06-12T14:51:06.0851166Z\",\r\n \"Duration\": \"00:15:41.0673014\",\r\n \"EntityFriendlyName\": \"dev01testing\",\r\n \"ActionsInfo\": [\r\n 1\r\n ],\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"6123eb41-22cc-4f14-b3b7-ae1caf4281ce\",\r\n \"Name\": \"job_dev01testing_6123eb41-22cc-4f14-b3b7-ae1caf4281ce\",\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Backup\",\r\n \"Status\": \"Failed\",\r\n \"StartTimestamp\": \"2015-06-12T06:25:30.8517368Z\",\r\n \"EndTimestamp\": \"2015-06-12T06:25:32.1713123Z\",\r\n \"Duration\": \"00:00:01.3195755\",\r\n \"EntityFriendlyName\": \"dev01testing\",\r\n \"ActionsInfo\": [\r\n 1\r\n ],\r\n \"ErrorDetails\": [\r\n {\r\n \"ErrorCode\": 400001,\r\n \"ErrorTitle\": \"\",\r\n \"ErrorString\": \"Command execution failed.\",\r\n \"Recommendations\": [\r\n \"Another operation is currently in progress on this item. Please wait until the previous operation is completed, and then retry.\"\r\n ]\r\n }\r\n ],\r\n \"InstanceId\": \"11152897-e262-4eef-9c34-ba621caece73\",\r\n \"Name\": \"job_dev01testing_11152897-e262-4eef-9c34-ba621caece73\",\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Backup\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-12T06:23:00.6818602Z\",\r\n \"EndTimestamp\": \"2015-06-12T06:35:58.1602094Z\",\r\n \"Duration\": \"00:12:57.4783492\",\r\n \"EntityFriendlyName\": \"dev01testing\",\r\n \"ActionsInfo\": [\r\n 1\r\n ],\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"4bf3889d-d689-45ab-aea6-61693bbe4c71\",\r\n \"Name\": \"job_dev01testing_4bf3889d-d689-45ab-aea6-61693bbe4c71\",\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Backup\",\r\n \"Status\": \"Failed\",\r\n \"StartTimestamp\": \"2015-06-12T06:18:48.8101046Z\",\r\n \"EndTimestamp\": \"2015-06-12T06:18:49.974187Z\",\r\n \"Duration\": \"00:00:01.1640824\",\r\n \"EntityFriendlyName\": \"dev01testing\",\r\n \"ActionsInfo\": [\r\n 1\r\n ],\r\n \"ErrorDetails\": [\r\n {\r\n \"ErrorCode\": 400001,\r\n \"ErrorTitle\": \"\",\r\n \"ErrorString\": \"Command execution failed.\",\r\n \"Recommendations\": [\r\n \"Another operation is currently in progress on this item. Please wait until the previous operation is completed, and then retry.\"\r\n ]\r\n }\r\n ],\r\n \"InstanceId\": \"8ec18e26-1b63-4a20-a8c8-c23eb0d54e18\",\r\n \"Name\": \"job_dev01testing_8ec18e26-1b63-4a20-a8c8-c23eb0d54e18\",\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"Type\": \"VM\",\r\n \"Operation\": \"ConfigureBackup\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-12T06:17:57.3610501Z\",\r\n \"EndTimestamp\": \"2015-06-12T06:18:00.4221104Z\",\r\n \"Duration\": \"00:00:03.0610603\",\r\n \"EntityFriendlyName\": \"dev01Testing\",\r\n \"ActionsInfo\": null,\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"5cbd05f3-2461-44eb-a09d-69276e96406a\",\r\n \"Name\": \"5cbd05f3-2461-44eb-a09d-69276e96406a\",\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Backup\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-12T06:04:16.0408261Z\",\r\n \"EndTimestamp\": \"2015-06-12T06:20:47.6056381Z\",\r\n \"Duration\": \"00:16:31.5648120\",\r\n \"EntityFriendlyName\": \"dev01testing\",\r\n \"ActionsInfo\": [\r\n 1\r\n ],\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"6d7f50ad-47de-4ac6-986c-7a1d3dddb04e\",\r\n \"Name\": \"job_dev01testing_6d7f50ad-47de-4ac6-986c-7a1d3dddb04e\",\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Unprotect\",\r\n \"Status\": \"Failed\",\r\n \"StartTimestamp\": \"2015-06-12T06:00:56.3011566Z\",\r\n \"EndTimestamp\": \"2015-06-12T06:00:59.2507661Z\",\r\n \"Duration\": \"00:00:02.9496095\",\r\n \"EntityFriendlyName\": \"dev01Testing\",\r\n \"ActionsInfo\": null,\r\n \"ErrorDetails\": [\r\n {\r\n \"ErrorCode\": 1073871825,\r\n \"ErrorTitle\": \"\",\r\n \"ErrorString\": \"Microsoft Azure Backup encountered an internal error.\",\r\n \"Recommendations\": [\r\n \"Wait for a few minutes and then try the operation again. If the issue persists, contact Microsoft Support.\"\r\n ]\r\n }\r\n ],\r\n \"InstanceId\": \"8895837a-24f9-4f8e-bdfd-b4fe9cb34b18\",\r\n \"Name\": \"8895837a-24f9-4f8e-bdfd-b4fe9cb34b18\",\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Backup\",\r\n \"Status\": \"Failed\",\r\n \"StartTimestamp\": \"2015-06-12T05:55:13.8165598Z\",\r\n \"EndTimestamp\": \"2015-06-12T05:55:14.4292176Z\",\r\n \"Duration\": \"00:00:00.6126578\",\r\n \"EntityFriendlyName\": \"dev01testing\",\r\n \"ActionsInfo\": [\r\n 1\r\n ],\r\n \"ErrorDetails\": [\r\n {\r\n \"ErrorCode\": 400001,\r\n \"ErrorTitle\": \"\",\r\n \"ErrorString\": \"Command execution failed.\",\r\n \"Recommendations\": [\r\n \"Another operation is currently in progress on this item. Please wait until the previous operation is completed, and then retry.\"\r\n ]\r\n }\r\n ],\r\n \"InstanceId\": \"ff7a8b35-2e59-4ae1-b651-1964ac2b8b2e\",\r\n \"Name\": \"job_dev01testing_ff7a8b35-2e59-4ae1-b651-1964ac2b8b2e\",\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Backup\",\r\n \"Status\": \"Failed\",\r\n \"StartTimestamp\": \"2015-06-12T05:52:27.5199152Z\",\r\n \"EndTimestamp\": \"2015-06-12T05:52:27.8532247Z\",\r\n \"Duration\": \"00:00:00.3333095\",\r\n \"EntityFriendlyName\": \"dev01testing\",\r\n \"ActionsInfo\": [\r\n 1\r\n ],\r\n \"ErrorDetails\": [\r\n {\r\n \"ErrorCode\": 400001,\r\n \"ErrorTitle\": \"\",\r\n \"ErrorString\": \"Command execution failed.\",\r\n \"Recommendations\": [\r\n \"Another operation is currently in progress on this item. Please wait until the previous operation is completed, and then retry.\"\r\n ]\r\n }\r\n ],\r\n \"InstanceId\": \"c018eb3b-0ac8-4ce7-818f-317f9497c39d\",\r\n \"Name\": \"job_dev01testing_c018eb3b-0ac8-4ce7-818f-317f9497c39d\",\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Backup\",\r\n \"Status\": \"Failed\",\r\n \"StartTimestamp\": \"2015-06-12T05:49:41.2528257Z\",\r\n \"EndTimestamp\": \"2015-06-12T05:49:42.0260934Z\",\r\n \"Duration\": \"00:00:00.7732677\",\r\n \"EntityFriendlyName\": \"dev01testing\",\r\n \"ActionsInfo\": [\r\n 1\r\n ],\r\n \"ErrorDetails\": [\r\n {\r\n \"ErrorCode\": 400001,\r\n \"ErrorTitle\": \"\",\r\n \"ErrorString\": \"Command execution failed.\",\r\n \"Recommendations\": [\r\n \"Another operation is currently in progress on this item. Please wait until the previous operation is completed, and then retry.\"\r\n ]\r\n }\r\n ],\r\n \"InstanceId\": \"9dcf0b48-c568-466f-8349-972489591bd0\",\r\n \"Name\": \"job_dev01testing_9dcf0b48-c568-466f-8349-972489591bd0\",\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Backup\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-12T05:48:05.5977628Z\",\r\n \"EndTimestamp\": \"2015-06-12T06:03:53.0005467Z\",\r\n \"Duration\": \"00:15:47.4027839\",\r\n \"EntityFriendlyName\": \"dev01testing\",\r\n \"ActionsInfo\": [\r\n 1\r\n ],\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"f971ef4c-15b0-40e2-baf2-8fafa209ff4f\",\r\n \"Name\": \"job_dev01testing_f971ef4c-15b0-40e2-baf2-8fafa209ff4f\",\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Backup\",\r\n \"Status\": \"Failed\",\r\n \"StartTimestamp\": \"2015-06-12T05:33:10.1328152Z\",\r\n \"EndTimestamp\": \"2015-06-12T05:33:10.3967166Z\",\r\n \"Duration\": \"00:00:00.2639014\",\r\n \"EntityFriendlyName\": \"dev01testing\",\r\n \"ActionsInfo\": [\r\n 1\r\n ],\r\n \"ErrorDetails\": [\r\n {\r\n \"ErrorCode\": 400001,\r\n \"ErrorTitle\": \"\",\r\n \"ErrorString\": \"Command execution failed.\",\r\n \"Recommendations\": [\r\n \"Another operation is currently in progress on this item. Please wait until the previous operation is completed, and then retry.\"\r\n ]\r\n }\r\n ],\r\n \"InstanceId\": \"d3138b4d-abc3-4ff1-924d-55f6d2b8f56b\",\r\n \"Name\": \"job_dev01testing_d3138b4d-abc3-4ff1-924d-55f6d2b8f56b\",\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Backup\",\r\n \"Status\": \"Cancelled\",\r\n \"StartTimestamp\": \"2015-06-12T05:31:10.6490225Z\",\r\n \"EndTimestamp\": \"2015-06-12T05:45:19.308969Z\",\r\n \"Duration\": \"00:14:08.6599465\",\r\n \"EntityFriendlyName\": \"dev01testing\",\r\n \"ActionsInfo\": [\r\n 1\r\n ],\r\n \"ErrorDetails\": [\r\n {\r\n \"ErrorCode\": 400057,\r\n \"ErrorTitle\": \"\",\r\n \"ErrorString\": \"Job is successfully cancelled.\",\r\n \"Recommendations\": []\r\n }\r\n ],\r\n \"InstanceId\": \"f0171b4a-9c09-4771-bf94-3590a65c27ce\",\r\n \"Name\": \"job_dev01testing_f0171b4a-9c09-4771-bf94-3590a65c27ce\",\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Backup\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-11T14:39:31.0489015Z\",\r\n \"EndTimestamp\": \"2015-06-11T14:56:15.3054685Z\",\r\n \"Duration\": \"00:16:44.2565670\",\r\n \"EntityFriendlyName\": \"dev01testing\",\r\n \"ActionsInfo\": [\r\n 1\r\n ],\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"a30d2af5-22a6-480e-83bc-fc5c1698c021\",\r\n \"Name\": \"job_dev01testing_a30d2af5-22a6-480e-83bc-fc5c1698c021\",\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Backup\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-11T10:50:40.341267Z\",\r\n \"EndTimestamp\": \"2015-06-11T11:19:16.627226Z\",\r\n \"Duration\": \"00:28:36.2859590\",\r\n \"EntityFriendlyName\": \"dev01testing\",\r\n \"ActionsInfo\": [\r\n 1\r\n ],\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"f53d089a-0dc7-44a4-8062-61c3c126c3c4\",\r\n \"Name\": \"job_dev01testing_f53d089a-0dc7-44a4-8062-61c3c126c3c4\",\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"Type\": \"VM\",\r\n \"Operation\": \"ConfigureBackup\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-11T10:39:07.2611805Z\",\r\n \"EndTimestamp\": \"2015-06-11T10:39:12.0730178Z\",\r\n \"Duration\": \"00:00:04.8118373\",\r\n \"EntityFriendlyName\": \"dev01Testing\",\r\n \"ActionsInfo\": null,\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"e06bdcf6-fe89-4957-9663-b16b74114c56\",\r\n \"Name\": \"e06bdcf6-fe89-4957-9663-b16b74114c56\",\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Register\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-11T10:14:34.0042559Z\",\r\n \"EndTimestamp\": \"2015-06-11T10:15:49.014085Z\",\r\n \"Duration\": \"00:01:15.0098291\",\r\n \"EntityFriendlyName\": \"dev01Testing\",\r\n \"ActionsInfo\": null,\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"d72c6b83-0247-4d19-96f6-cf499f5146e2\",\r\n \"Name\": \"iaasvmcontainer;dev01testing;dev01testing\",\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Register\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-11T09:57:23.6745962Z\",\r\n \"EndTimestamp\": \"2015-06-11T10:02:09.5201069Z\",\r\n \"Duration\": \"00:04:45.8455107\",\r\n \"EntityFriendlyName\": \"dev01Testing\",\r\n \"ActionsInfo\": null,\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"546ed062-5cd5-49c6-b453-b4446b878e19\",\r\n \"Name\": \"iaasvmcontainer;dev01testing;dev01testing\",\r\n \"OperationInProgress\": false\r\n }\r\n ],\r\n \"ResultCount\": 80,\r\n \"Skiptoken\": \"-1\"\r\n}", - "ResponseHeaders": { - "Content-Length": [ - "37130" - ], - "Content-Type": [ - "application/json" - ], - "Expires": [ - "-1" - ], - "Pragma": [ - "no-cache" - ], - "x-ms-request-id": [ - "b2119a1d-0b1e-46a9-8693-09e2ee12732a" - ], - "x-ms-client-request-id": [ - "647e3a06-31a7-40ae-9fcf-97f5b845160c-2015-06-17 09:36:46Z-PS", - "647e3a06-31a7-40ae-9fcf-97f5b845160c-2015-06-17 09:36:46Z-PS" - ], - "Strict-Transport-Security": [ - "max-age=31536000; includeSubDomains" - ], - "x-ms-ratelimit-remaining-subscription-reads": [ - "14918" - ], - "x-ms-correlation-request-id": [ - "b2119a1d-0b1e-46a9-8693-09e2ee12732a" - ], - "x-ms-routing-request-id": [ - "CENTRALUS:20150617T093650Z:b2119a1d-0b1e-46a9-8693-09e2ee12732a" - ], - "Cache-Control": [ - "no-cache" - ], - "Date": [ - "Wed, 17 Jun 2015 09:36:49 GMT" - ], - "Server": [ - "Microsoft-IIS/8.0" - ], - "X-Powered-By": [ - "ASP.NET" - ] - }, - "StatusCode": 200 - }, - { - "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/jobs/aec23e57-d892-4971-8fd3-e256c6ac38f7/jobdetails?api-version=2014-09-01", - "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vam9icy9hZWMyM2U1Ny1kODkyLTQ5NzEtOGZkMy1lMjU2YzZhYzM4Zjcvam9iZGV0YWlscz9hcGktdmVyc2lvbj0yMDE0LTA5LTAx", - "RequestMethod": "GET", - "RequestBody": "", - "RequestHeaders": { - "Accept-Language": [ - "en-us" - ], - "x-ms-client-request-id": [ - "84e64125-168f-4f0f-b2fa-7c8919ea9df7-2015-06-17 09:36:51Z-PS" - ], - "User-Agent": [ - "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" - ] - }, - "ResponseBody": "{\r\n \"TasksList\": [],\r\n \"PropertyBag\": {\r\n \"VM Name\": \"dev01Testing\",\r\n \"Policy Name\": \"Policy9\"\r\n },\r\n \"ProgressPercentage\": null,\r\n \"DynamicErrorMessage\": null,\r\n \"Type\": \"VM\",\r\n \"Operation\": \"ConfigureBackup\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-17T09:35:50.5716696Z\",\r\n \"EndTimestamp\": \"2015-06-17T09:35:54.5348762Z\",\r\n \"Duration\": \"00:00:03.9632066\",\r\n \"EntityFriendlyName\": \"dev01Testing\",\r\n \"ActionsInfo\": null,\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"aec23e57-d892-4971-8fd3-e256c6ac38f7\",\r\n \"Name\": \"aec23e57-d892-4971-8fd3-e256c6ac38f7\",\r\n \"OperationInProgress\": false\r\n}", - "ResponseHeaders": { - "Content-Length": [ - "522" - ], - "Content-Type": [ - "application/json" - ], - "Expires": [ - "-1" - ], - "Pragma": [ - "no-cache" - ], - "x-ms-request-id": [ - "7c25fdea-d3c0-410f-899a-74d6502ada1b" - ], - "x-ms-client-request-id": [ - "84e64125-168f-4f0f-b2fa-7c8919ea9df7-2015-06-17 09:36:51Z-PS", - "84e64125-168f-4f0f-b2fa-7c8919ea9df7-2015-06-17 09:36:51Z-PS" - ], - "Strict-Transport-Security": [ - "max-age=31536000; includeSubDomains" - ], - "x-ms-ratelimit-remaining-subscription-reads": [ - "14917" - ], - "x-ms-correlation-request-id": [ - "7c25fdea-d3c0-410f-899a-74d6502ada1b" - ], - "x-ms-routing-request-id": [ - "CENTRALUS:20150617T093651Z:7c25fdea-d3c0-410f-899a-74d6502ada1b" - ], - "Cache-Control": [ - "no-cache" - ], - "Date": [ - "Wed, 17 Jun 2015 09:36:51 GMT" - ], - "Server": [ - "Microsoft-IIS/8.0" - ], - "X-Powered-By": [ - "ASP.NET" - ] - }, - "StatusCode": 200 - }, - { - "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/jobs/52c31c49-3306-44b4-b241-582a40cefea2/jobdetails?api-version=2014-09-01", - "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vam9icy81MmMzMWM0OS0zMzA2LTQ0YjQtYjI0MS01ODJhNDBjZWZlYTIvam9iZGV0YWlscz9hcGktdmVyc2lvbj0yMDE0LTA5LTAx", - "RequestMethod": "GET", - "RequestBody": "", - "RequestHeaders": { - "Accept-Language": [ - "en-us" - ], - "x-ms-client-request-id": [ - "1d0acc63-5b4f-480a-917f-69580a054619-2015-06-17 09:36:52Z-PS" - ], - "User-Agent": [ - "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" - ] - }, - "ResponseBody": "{\r\n \"TasksList\": [],\r\n \"PropertyBag\": {\r\n \"VM Name\": \"dev01Testing\",\r\n \"Delete Backup Data\": \"False\"\r\n },\r\n \"ProgressPercentage\": null,\r\n \"DynamicErrorMessage\": null,\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Unprotect\",\r\n \"Status\": \"Failed\",\r\n \"StartTimestamp\": \"2015-06-17T09:35:19.160471Z\",\r\n \"EndTimestamp\": \"2015-06-17T09:35:29.248401Z\",\r\n \"Duration\": \"00:00:10.0879300\",\r\n \"EntityFriendlyName\": \"dev01Testing\",\r\n \"ActionsInfo\": null,\r\n \"ErrorDetails\": [\r\n {\r\n \"ErrorCode\": 1073871825,\r\n \"ErrorTitle\": \"\",\r\n \"ErrorString\": \"Microsoft Azure Backup encountered an internal error.\",\r\n \"Recommendations\": [\r\n \"Wait for a few minutes and then try the operation again. If the issue persists, contact Microsoft Support.\"\r\n ]\r\n }\r\n ],\r\n \"InstanceId\": \"52c31c49-3306-44b4-b241-582a40cefea2\",\r\n \"Name\": \"52c31c49-3306-44b4-b241-582a40cefea2\",\r\n \"OperationInProgress\": false\r\n}", - "ResponseHeaders": { - "Content-Length": [ - "753" - ], - "Content-Type": [ - "application/json" - ], - "Expires": [ - "-1" - ], - "Pragma": [ - "no-cache" - ], - "x-ms-request-id": [ - "b65ef5a4-2480-4188-b4c9-9e0e6cf17efa" - ], - "x-ms-client-request-id": [ - "1d0acc63-5b4f-480a-917f-69580a054619-2015-06-17 09:36:52Z-PS", - "1d0acc63-5b4f-480a-917f-69580a054619-2015-06-17 09:36:52Z-PS" - ], - "Strict-Transport-Security": [ - "max-age=31536000; includeSubDomains" - ], - "x-ms-ratelimit-remaining-subscription-reads": [ - "14916" - ], - "x-ms-correlation-request-id": [ - "b65ef5a4-2480-4188-b4c9-9e0e6cf17efa" - ], - "x-ms-routing-request-id": [ - "CENTRALUS:20150617T093652Z:b65ef5a4-2480-4188-b4c9-9e0e6cf17efa" - ], - "Cache-Control": [ - "no-cache" - ], - "Date": [ - "Wed, 17 Jun 2015 09:36:52 GMT" - ], - "Server": [ - "Microsoft-IIS/8.0" - ], - "X-Powered-By": [ - "ASP.NET" - ] - }, - "StatusCode": 200 - }, - { - "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/jobs/88e10323-8006-4a32-8e0d-cf0b732a86eb/jobdetails?api-version=2014-09-01", - "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vam9icy84OGUxMDMyMy04MDA2LTRhMzItOGUwZC1jZjBiNzMyYTg2ZWIvam9iZGV0YWlscz9hcGktdmVyc2lvbj0yMDE0LTA5LTAx", - "RequestMethod": "GET", - "RequestBody": "", - "RequestHeaders": { - "Accept-Language": [ - "en-us" - ], - "x-ms-client-request-id": [ - "24a79500-37ee-4017-af02-489264a3f130-2015-06-17 09:36:53Z-PS" - ], - "User-Agent": [ - "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" - ] - }, - "ResponseBody": "{\r\n \"TasksList\": [\r\n {\r\n \"TaskId\": \"Take Snapshot\",\r\n \"StartTime\": null,\r\n \"EndTime\": null,\r\n \"Duration\": \"00:00:00\",\r\n \"Status\": \"Completed\",\r\n \"ProgressPercentage\": null,\r\n \"InstanceId\": null,\r\n \"Name\": null,\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"TaskId\": \"Transfer data to Backup vault\",\r\n \"StartTime\": null,\r\n \"EndTime\": null,\r\n \"Duration\": \"00:00:00\",\r\n \"Status\": \"Completed\",\r\n \"ProgressPercentage\": null,\r\n \"InstanceId\": null,\r\n \"Name\": null,\r\n \"OperationInProgress\": false\r\n }\r\n ],\r\n \"PropertyBag\": {\r\n \"VM Name\": \"dev01testing\",\r\n \"Backup Size\": \"10 MB\"\r\n },\r\n \"ProgressPercentage\": null,\r\n \"DynamicErrorMessage\": \"The following set of VSS writers failed during snapshot - \",\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Backup\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-17T09:22:51.8965435Z\",\r\n \"EndTimestamp\": \"2015-06-17T09:36:27.9348765Z\",\r\n \"Duration\": \"00:13:36.0383330\",\r\n \"EntityFriendlyName\": \"dev01testing\",\r\n \"ActionsInfo\": [\r\n 1\r\n ],\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"88e10323-8006-4a32-8e0d-cf0b732a86eb\",\r\n \"Name\": \"job_dev01testing_88e10323-8006-4a32-8e0d-cf0b732a86eb\",\r\n \"OperationInProgress\": false\r\n}", - "ResponseHeaders": { - "Content-Length": [ - "970" - ], - "Content-Type": [ - "application/json" - ], - "Expires": [ - "-1" - ], - "Pragma": [ - "no-cache" - ], - "x-ms-request-id": [ - "3314e659-1ed9-4d59-9ef7-2ddeed11166e" - ], - "x-ms-client-request-id": [ - "24a79500-37ee-4017-af02-489264a3f130-2015-06-17 09:36:53Z-PS", - "24a79500-37ee-4017-af02-489264a3f130-2015-06-17 09:36:53Z-PS" - ], - "Strict-Transport-Security": [ - "max-age=31536000; includeSubDomains" - ], - "x-ms-ratelimit-remaining-subscription-reads": [ - "14915" - ], - "x-ms-correlation-request-id": [ - "3314e659-1ed9-4d59-9ef7-2ddeed11166e" - ], - "x-ms-routing-request-id": [ - "CENTRALUS:20150617T093653Z:3314e659-1ed9-4d59-9ef7-2ddeed11166e" - ], - "Cache-Control": [ - "no-cache" - ], - "Date": [ - "Wed, 17 Jun 2015 09:36:52 GMT" - ], - "Server": [ - "Microsoft-IIS/8.0" - ], - "X-Powered-By": [ - "ASP.NET" - ] - }, - "StatusCode": 200 - }, - { - "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/jobs/c02aa8c0-1531-4ddc-bec5-95f9a976a9fe/jobdetails?api-version=2014-09-01", - "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vam9icy9jMDJhYThjMC0xNTMxLTRkZGMtYmVjNS05NWY5YTk3NmE5ZmUvam9iZGV0YWlscz9hcGktdmVyc2lvbj0yMDE0LTA5LTAx", - "RequestMethod": "GET", - "RequestBody": "", - "RequestHeaders": { - "Accept-Language": [ - "en-us" - ], - "x-ms-client-request-id": [ - "b32e1db1-ea4c-482e-94c6-462b91ef5733-2015-06-17 09:36:54Z-PS" - ], - "User-Agent": [ - "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" - ] - }, - "ResponseBody": "{\r\n \"TasksList\": [],\r\n \"PropertyBag\": {\r\n \"VM Name\": \"dev01Testing\",\r\n \"Policy Name\": \"Policy9\"\r\n },\r\n \"ProgressPercentage\": null,\r\n \"DynamicErrorMessage\": null,\r\n \"Type\": \"VM\",\r\n \"Operation\": \"ConfigureBackup\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-17T09:17:59.9107529Z\",\r\n \"EndTimestamp\": \"2015-06-17T09:18:46.9007387Z\",\r\n \"Duration\": \"00:00:46.9899858\",\r\n \"EntityFriendlyName\": \"dev01Testing\",\r\n \"ActionsInfo\": null,\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"c02aa8c0-1531-4ddc-bec5-95f9a976a9fe\",\r\n \"Name\": \"c02aa8c0-1531-4ddc-bec5-95f9a976a9fe\",\r\n \"OperationInProgress\": false\r\n}", - "ResponseHeaders": { - "Content-Length": [ - "522" - ], - "Content-Type": [ - "application/json" - ], - "Expires": [ - "-1" - ], - "Pragma": [ - "no-cache" - ], - "x-ms-request-id": [ - "d898f84f-8024-40e7-bfe7-f5bbdd5ed4fc" - ], - "x-ms-client-request-id": [ - "b32e1db1-ea4c-482e-94c6-462b91ef5733-2015-06-17 09:36:54Z-PS", - "b32e1db1-ea4c-482e-94c6-462b91ef5733-2015-06-17 09:36:54Z-PS" - ], - "Strict-Transport-Security": [ - "max-age=31536000; includeSubDomains" - ], - "x-ms-ratelimit-remaining-subscription-reads": [ - "14914" - ], - "x-ms-correlation-request-id": [ - "d898f84f-8024-40e7-bfe7-f5bbdd5ed4fc" - ], - "x-ms-routing-request-id": [ - "CENTRALUS:20150617T093654Z:d898f84f-8024-40e7-bfe7-f5bbdd5ed4fc" - ], - "Cache-Control": [ - "no-cache" - ], - "Date": [ - "Wed, 17 Jun 2015 09:36:53 GMT" - ], - "Server": [ - "Microsoft-IIS/8.0" - ], - "X-Powered-By": [ - "ASP.NET" - ] - }, - "StatusCode": 200 - }, - { - "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/jobs/aed099b5-462c-4ddc-a787-574777a6bc12/jobdetails?api-version=2014-09-01", - "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vam9icy9hZWQwOTliNS00NjJjLTRkZGMtYTc4Ny01NzQ3NzdhNmJjMTIvam9iZGV0YWlscz9hcGktdmVyc2lvbj0yMDE0LTA5LTAx", - "RequestMethod": "GET", - "RequestBody": "", - "RequestHeaders": { - "Accept-Language": [ - "en-us" - ], - "x-ms-client-request-id": [ - "01510907-c361-4d9e-89a7-a7264a0d59c0-2015-06-17 09:36:54Z-PS" - ], - "User-Agent": [ - "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" - ] - }, - "ResponseBody": "{\r\n \"TasksList\": [],\r\n \"PropertyBag\": {\r\n \"VM Name\": \"dev01Testing\",\r\n \"Delete Backup Data\": \"False\"\r\n },\r\n \"ProgressPercentage\": null,\r\n \"DynamicErrorMessage\": null,\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Unprotect\",\r\n \"Status\": \"Failed\",\r\n \"StartTimestamp\": \"2015-06-17T08:56:58.5151697Z\",\r\n \"EndTimestamp\": \"2015-06-17T08:56:59.7880222Z\",\r\n \"Duration\": \"00:00:01.2728525\",\r\n \"EntityFriendlyName\": \"dev01Testing\",\r\n \"ActionsInfo\": null,\r\n \"ErrorDetails\": [\r\n {\r\n \"ErrorCode\": 1073871825,\r\n \"ErrorTitle\": \"\",\r\n \"ErrorString\": \"Microsoft Azure Backup encountered an internal error.\",\r\n \"Recommendations\": [\r\n \"Wait for a few minutes and then try the operation again. If the issue persists, contact Microsoft Support.\"\r\n ]\r\n }\r\n ],\r\n \"InstanceId\": \"aed099b5-462c-4ddc-a787-574777a6bc12\",\r\n \"Name\": \"aed099b5-462c-4ddc-a787-574777a6bc12\",\r\n \"OperationInProgress\": false\r\n}", - "ResponseHeaders": { - "Content-Length": [ - "755" - ], - "Content-Type": [ - "application/json" - ], - "Expires": [ - "-1" - ], - "Pragma": [ - "no-cache" - ], - "x-ms-request-id": [ - "a0d631bb-3292-4388-ad33-d5fb4e1ac9ff" - ], - "x-ms-client-request-id": [ - "01510907-c361-4d9e-89a7-a7264a0d59c0-2015-06-17 09:36:54Z-PS", - "01510907-c361-4d9e-89a7-a7264a0d59c0-2015-06-17 09:36:54Z-PS" - ], - "Strict-Transport-Security": [ - "max-age=31536000; includeSubDomains" - ], - "x-ms-ratelimit-remaining-subscription-reads": [ - "14913" - ], - "x-ms-correlation-request-id": [ - "a0d631bb-3292-4388-ad33-d5fb4e1ac9ff" - ], - "x-ms-routing-request-id": [ - "CENTRALUS:20150617T093655Z:a0d631bb-3292-4388-ad33-d5fb4e1ac9ff" - ], - "Cache-Control": [ - "no-cache" - ], - "Date": [ - "Wed, 17 Jun 2015 09:36:54 GMT" - ], - "Server": [ - "Microsoft-IIS/8.0" - ], - "X-Powered-By": [ - "ASP.NET" - ] - }, - "StatusCode": 200 - }, - { - "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/jobs/f73cd5c5-c3cc-4180-8548-fed9da22f6a5/jobdetails?api-version=2014-09-01", - "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vam9icy9mNzNjZDVjNS1jM2NjLTQxODAtODU0OC1mZWQ5ZGEyMmY2YTUvam9iZGV0YWlscz9hcGktdmVyc2lvbj0yMDE0LTA5LTAx", - "RequestMethod": "GET", - "RequestBody": "", - "RequestHeaders": { - "Accept-Language": [ - "en-us" - ], - "x-ms-client-request-id": [ - "1d963d79-f04c-4c35-955d-d6b8e49b9081-2015-06-17 09:36:55Z-PS" - ], - "User-Agent": [ - "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" - ] - }, - "ResponseBody": "{\r\n \"TasksList\": [\r\n {\r\n \"TaskId\": \"Take Snapshot\",\r\n \"StartTime\": null,\r\n \"EndTime\": null,\r\n \"Duration\": \"00:00:00\",\r\n \"Status\": \"Completed\",\r\n \"ProgressPercentage\": null,\r\n \"InstanceId\": null,\r\n \"Name\": null,\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"TaskId\": \"Transfer data to Backup vault\",\r\n \"StartTime\": null,\r\n \"EndTime\": null,\r\n \"Duration\": \"00:00:00\",\r\n \"Status\": \"Failed\",\r\n \"ProgressPercentage\": null,\r\n \"InstanceId\": null,\r\n \"Name\": null,\r\n \"OperationInProgress\": false\r\n }\r\n ],\r\n \"PropertyBag\": {\r\n \"VM Name\": \"dev01testing\",\r\n \"Backup Size\": \"0 MB\"\r\n },\r\n \"ProgressPercentage\": null,\r\n \"DynamicErrorMessage\": \"The following set of VSS writers failed during snapshot - \",\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Backup\",\r\n \"Status\": \"Failed\",\r\n \"StartTimestamp\": \"2015-06-17T08:56:25.240997Z\",\r\n \"EndTimestamp\": \"2015-06-17T09:12:58.5161312Z\",\r\n \"Duration\": \"00:16:33.2751342\",\r\n \"EntityFriendlyName\": \"dev01testing\",\r\n \"ActionsInfo\": [\r\n 1\r\n ],\r\n \"ErrorDetails\": [\r\n {\r\n \"ErrorCode\": 400002,\r\n \"ErrorTitle\": \"\",\r\n \"ErrorString\": \"Backup failed with an internal error.\",\r\n \"Recommendations\": [\r\n \"Please retry the operation in a few minutes. If the problem persists, contact Microsoft Support.\"\r\n ]\r\n }\r\n ],\r\n \"InstanceId\": \"f73cd5c5-c3cc-4180-8548-fed9da22f6a5\",\r\n \"Name\": \"job_dev01testing_f73cd5c5-c3cc-4180-8548-fed9da22f6a5\",\r\n \"OperationInProgress\": false\r\n}", - "ResponseHeaders": { - "Content-Length": [ - "1169" - ], - "Content-Type": [ - "application/json" - ], - "Expires": [ - "-1" - ], - "Pragma": [ - "no-cache" - ], - "x-ms-request-id": [ - "c4c4303c-3add-498e-a0d1-f021ad5db63e" - ], - "x-ms-client-request-id": [ - "1d963d79-f04c-4c35-955d-d6b8e49b9081-2015-06-17 09:36:55Z-PS", - "1d963d79-f04c-4c35-955d-d6b8e49b9081-2015-06-17 09:36:55Z-PS" - ], - "Strict-Transport-Security": [ - "max-age=31536000; includeSubDomains" - ], - "x-ms-ratelimit-remaining-subscription-reads": [ - "14912" - ], - "x-ms-correlation-request-id": [ - "c4c4303c-3add-498e-a0d1-f021ad5db63e" - ], - "x-ms-routing-request-id": [ - "CENTRALUS:20150617T093656Z:c4c4303c-3add-498e-a0d1-f021ad5db63e" - ], - "Cache-Control": [ - "no-cache" - ], - "Date": [ - "Wed, 17 Jun 2015 09:36:56 GMT" - ], - "Server": [ - "Microsoft-IIS/8.0" - ], - "X-Powered-By": [ - "ASP.NET" - ] - }, - "StatusCode": 200 - }, - { - "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/jobs/aab47eda-4828-4f2e-9ffd-a59ae47d7177/jobdetails?api-version=2014-09-01", - "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vam9icy9hYWI0N2VkYS00ODI4LTRmMmUtOWZmZC1hNTlhZTQ3ZDcxNzcvam9iZGV0YWlscz9hcGktdmVyc2lvbj0yMDE0LTA5LTAx", - "RequestMethod": "GET", - "RequestBody": "", - "RequestHeaders": { - "Accept-Language": [ - "en-us" - ], - "x-ms-client-request-id": [ - "cebceae1-e8a8-4019-a6b6-8ad0f94d5d86-2015-06-17 09:36:56Z-PS" - ], - "User-Agent": [ - "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" - ] - }, - "ResponseBody": "{\r\n \"TasksList\": [],\r\n \"PropertyBag\": {\r\n \"VM Name\": \"dev01Testing\",\r\n \"Policy Name\": \"Policy9\"\r\n },\r\n \"ProgressPercentage\": null,\r\n \"DynamicErrorMessage\": null,\r\n \"Type\": \"VM\",\r\n \"Operation\": \"ConfigureBackup\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-17T08:54:36.5468042Z\",\r\n \"EndTimestamp\": \"2015-06-17T08:54:40.8360653Z\",\r\n \"Duration\": \"00:00:04.2892611\",\r\n \"EntityFriendlyName\": \"dev01Testing\",\r\n \"ActionsInfo\": null,\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"aab47eda-4828-4f2e-9ffd-a59ae47d7177\",\r\n \"Name\": \"aab47eda-4828-4f2e-9ffd-a59ae47d7177\",\r\n \"OperationInProgress\": false\r\n}", - "ResponseHeaders": { - "Content-Length": [ - "522" - ], - "Content-Type": [ - "application/json" - ], - "Expires": [ - "-1" - ], - "Pragma": [ - "no-cache" - ], - "x-ms-request-id": [ - "035e5f10-a31f-4048-9659-bb8ffcf47fee" - ], - "x-ms-client-request-id": [ - "cebceae1-e8a8-4019-a6b6-8ad0f94d5d86-2015-06-17 09:36:56Z-PS", - "cebceae1-e8a8-4019-a6b6-8ad0f94d5d86-2015-06-17 09:36:56Z-PS" - ], - "Strict-Transport-Security": [ - "max-age=31536000; includeSubDomains" - ], - "x-ms-ratelimit-remaining-subscription-reads": [ - "14911" - ], - "x-ms-correlation-request-id": [ - "035e5f10-a31f-4048-9659-bb8ffcf47fee" - ], - "x-ms-routing-request-id": [ - "CENTRALUS:20150617T093657Z:035e5f10-a31f-4048-9659-bb8ffcf47fee" - ], - "Cache-Control": [ - "no-cache" - ], - "Date": [ - "Wed, 17 Jun 2015 09:36:57 GMT" - ], - "Server": [ - "Microsoft-IIS/8.0" - ], - "X-Powered-By": [ - "ASP.NET" - ] - }, - "StatusCode": 200 - }, - { - "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/jobs/b4c03815-5512-4c7e-8187-fcacbb443b2a/jobdetails?api-version=2014-09-01", - "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vam9icy9iNGMwMzgxNS01NTEyLTRjN2UtODE4Ny1mY2FjYmI0NDNiMmEvam9iZGV0YWlscz9hcGktdmVyc2lvbj0yMDE0LTA5LTAx", - "RequestMethod": "GET", - "RequestBody": "", - "RequestHeaders": { - "Accept-Language": [ - "en-us" - ], - "x-ms-client-request-id": [ - "2bc85d89-52eb-4fce-83d6-dd451d1f3e62-2015-06-17 09:36:57Z-PS" - ], - "User-Agent": [ - "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" - ] - }, - "ResponseBody": "{\r\n \"TasksList\": [\r\n {\r\n \"TaskId\": \"Take Snapshot\",\r\n \"StartTime\": null,\r\n \"EndTime\": null,\r\n \"Duration\": \"00:00:00\",\r\n \"Status\": \"Completed\",\r\n \"ProgressPercentage\": null,\r\n \"InstanceId\": null,\r\n \"Name\": null,\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"TaskId\": \"Transfer data to Backup vault\",\r\n \"StartTime\": null,\r\n \"EndTime\": null,\r\n \"Duration\": \"00:00:00\",\r\n \"Status\": \"Completed\",\r\n \"ProgressPercentage\": null,\r\n \"InstanceId\": null,\r\n \"Name\": null,\r\n \"OperationInProgress\": false\r\n }\r\n ],\r\n \"PropertyBag\": {\r\n \"VM Name\": \"dev01testing\",\r\n \"Backup Size\": \"6 MB\"\r\n },\r\n \"ProgressPercentage\": null,\r\n \"DynamicErrorMessage\": \"The following set of VSS writers failed during snapshot - \",\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Backup\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-17T08:37:13.9649748Z\",\r\n \"EndTimestamp\": \"2015-06-17T08:51:37.3848021Z\",\r\n \"Duration\": \"00:14:23.4198273\",\r\n \"EntityFriendlyName\": \"dev01testing\",\r\n \"ActionsInfo\": [\r\n 1\r\n ],\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"b4c03815-5512-4c7e-8187-fcacbb443b2a\",\r\n \"Name\": \"job_dev01testing_b4c03815-5512-4c7e-8187-fcacbb443b2a\",\r\n \"OperationInProgress\": false\r\n}", - "ResponseHeaders": { - "Content-Length": [ - "969" - ], - "Content-Type": [ - "application/json" - ], - "Expires": [ - "-1" - ], - "Pragma": [ - "no-cache" - ], - "x-ms-request-id": [ - "16c374e9-5d8a-4906-ac16-e87ddbf6f0c7" - ], - "x-ms-client-request-id": [ - "2bc85d89-52eb-4fce-83d6-dd451d1f3e62-2015-06-17 09:36:57Z-PS", - "2bc85d89-52eb-4fce-83d6-dd451d1f3e62-2015-06-17 09:36:57Z-PS" - ], - "Strict-Transport-Security": [ - "max-age=31536000; includeSubDomains" - ], - "x-ms-ratelimit-remaining-subscription-reads": [ - "14910" - ], - "x-ms-correlation-request-id": [ - "16c374e9-5d8a-4906-ac16-e87ddbf6f0c7" - ], - "x-ms-routing-request-id": [ - "CENTRALUS:20150617T093658Z:16c374e9-5d8a-4906-ac16-e87ddbf6f0c7" - ], - "Cache-Control": [ - "no-cache" - ], - "Date": [ - "Wed, 17 Jun 2015 09:36:57 GMT" - ], - "Server": [ - "Microsoft-IIS/8.0" - ], - "X-Powered-By": [ - "ASP.NET" - ] - }, - "StatusCode": 200 - }, - { - "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/jobs/412c6d03-c431-4e09-94ac-5fa3ce0da2c6/jobdetails?api-version=2014-09-01", - "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vam9icy80MTJjNmQwMy1jNDMxLTRlMDktOTRhYy01ZmEzY2UwZGEyYzYvam9iZGV0YWlscz9hcGktdmVyc2lvbj0yMDE0LTA5LTAx", - "RequestMethod": "GET", - "RequestBody": "", - "RequestHeaders": { - "Accept-Language": [ - "en-us" - ], - "x-ms-client-request-id": [ - "c3ca23fc-a17e-4a69-bdd9-c2d37e69b3a5-2015-06-17 09:36:58Z-PS" - ], - "User-Agent": [ - "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" - ] - }, - "ResponseBody": "{\r\n \"TasksList\": [],\r\n \"PropertyBag\": {\r\n \"VM Name\": \"dev01Testing\",\r\n \"Delete Backup Data\": \"False\"\r\n },\r\n \"ProgressPercentage\": null,\r\n \"DynamicErrorMessage\": null,\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Unprotect\",\r\n \"Status\": \"Failed\",\r\n \"StartTimestamp\": \"2015-06-17T08:36:40.4491429Z\",\r\n \"EndTimestamp\": \"2015-06-17T08:36:43.1031499Z\",\r\n \"Duration\": \"00:00:02.6540070\",\r\n \"EntityFriendlyName\": \"dev01Testing\",\r\n \"ActionsInfo\": null,\r\n \"ErrorDetails\": [\r\n {\r\n \"ErrorCode\": 1073871825,\r\n \"ErrorTitle\": \"\",\r\n \"ErrorString\": \"Microsoft Azure Backup encountered an internal error.\",\r\n \"Recommendations\": [\r\n \"Wait for a few minutes and then try the operation again. If the issue persists, contact Microsoft Support.\"\r\n ]\r\n }\r\n ],\r\n \"InstanceId\": \"412c6d03-c431-4e09-94ac-5fa3ce0da2c6\",\r\n \"Name\": \"412c6d03-c431-4e09-94ac-5fa3ce0da2c6\",\r\n \"OperationInProgress\": false\r\n}", - "ResponseHeaders": { - "Content-Length": [ - "755" - ], - "Content-Type": [ - "application/json" - ], - "Expires": [ - "-1" - ], - "Pragma": [ - "no-cache" - ], - "x-ms-request-id": [ - "e385f9ed-2dec-4e00-a30f-dec43cf2a82c" - ], - "x-ms-client-request-id": [ - "c3ca23fc-a17e-4a69-bdd9-c2d37e69b3a5-2015-06-17 09:36:58Z-PS", - "c3ca23fc-a17e-4a69-bdd9-c2d37e69b3a5-2015-06-17 09:36:58Z-PS" - ], - "Strict-Transport-Security": [ - "max-age=31536000; includeSubDomains" - ], - "x-ms-ratelimit-remaining-subscription-reads": [ - "14909" - ], - "x-ms-correlation-request-id": [ - "e385f9ed-2dec-4e00-a30f-dec43cf2a82c" - ], - "x-ms-routing-request-id": [ - "CENTRALUS:20150617T093658Z:e385f9ed-2dec-4e00-a30f-dec43cf2a82c" - ], - "Cache-Control": [ - "no-cache" - ], - "Date": [ - "Wed, 17 Jun 2015 09:36:58 GMT" - ], - "Server": [ - "Microsoft-IIS/8.0" - ], - "X-Powered-By": [ - "ASP.NET" - ] - }, - "StatusCode": 200 - }, - { - "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/jobs/a38e5978-1505-434d-a8af-197a14a1ae60/jobdetails?api-version=2014-09-01", - "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vam9icy9hMzhlNTk3OC0xNTA1LTQzNGQtYThhZi0xOTdhMTRhMWFlNjAvam9iZGV0YWlscz9hcGktdmVyc2lvbj0yMDE0LTA5LTAx", - "RequestMethod": "GET", - "RequestBody": "", - "RequestHeaders": { - "Accept-Language": [ - "en-us" - ], - "x-ms-client-request-id": [ - "5a55ec07-cd41-4460-b0df-43867d9c18be-2015-06-17 09:36:59Z-PS" - ], - "User-Agent": [ - "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" - ] - }, - "ResponseBody": "{\r\n \"TasksList\": [],\r\n \"PropertyBag\": {\r\n \"VM Name\": \"dev01Testing\",\r\n \"Policy Name\": \"Policy9\"\r\n },\r\n \"ProgressPercentage\": null,\r\n \"DynamicErrorMessage\": null,\r\n \"Type\": \"VM\",\r\n \"Operation\": \"ConfigureBackup\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-17T08:36:00.1563528Z\",\r\n \"EndTimestamp\": \"2015-06-17T08:36:03.7676077Z\",\r\n \"Duration\": \"00:00:03.6112549\",\r\n \"EntityFriendlyName\": \"dev01Testing\",\r\n \"ActionsInfo\": null,\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"a38e5978-1505-434d-a8af-197a14a1ae60\",\r\n \"Name\": \"a38e5978-1505-434d-a8af-197a14a1ae60\",\r\n \"OperationInProgress\": false\r\n}", - "ResponseHeaders": { - "Content-Length": [ - "522" - ], - "Content-Type": [ - "application/json" - ], - "Expires": [ - "-1" - ], - "Pragma": [ - "no-cache" - ], - "x-ms-request-id": [ - "7c57e75f-ce49-458b-96ad-f785446be733" - ], - "x-ms-client-request-id": [ - "5a55ec07-cd41-4460-b0df-43867d9c18be-2015-06-17 09:36:59Z-PS", - "5a55ec07-cd41-4460-b0df-43867d9c18be-2015-06-17 09:36:59Z-PS" - ], - "Strict-Transport-Security": [ - "max-age=31536000; includeSubDomains" - ], - "x-ms-ratelimit-remaining-subscription-reads": [ - "14908" - ], - "x-ms-correlation-request-id": [ - "7c57e75f-ce49-458b-96ad-f785446be733" - ], - "x-ms-routing-request-id": [ - "CENTRALUS:20150617T093659Z:7c57e75f-ce49-458b-96ad-f785446be733" - ], - "Cache-Control": [ - "no-cache" - ], - "Date": [ - "Wed, 17 Jun 2015 09:36:59 GMT" - ], - "Server": [ - "Microsoft-IIS/8.0" - ], - "X-Powered-By": [ - "ASP.NET" - ] - }, - "StatusCode": 200 - }, - { - "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/jobs/b6f2cb27-2615-4eb7-be58-e21cba98475c/jobdetails?api-version=2014-09-01", - "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vam9icy9iNmYyY2IyNy0yNjE1LTRlYjctYmU1OC1lMjFjYmE5ODQ3NWMvam9iZGV0YWlscz9hcGktdmVyc2lvbj0yMDE0LTA5LTAx", - "RequestMethod": "GET", - "RequestBody": "", - "RequestHeaders": { - "Accept-Language": [ - "en-us" - ], - "x-ms-client-request-id": [ - "93a66f0b-fb54-4028-a862-476fc3daa1e5-2015-06-17 09:36:59Z-PS" - ], - "User-Agent": [ - "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" - ] - }, - "ResponseBody": "{\r\n \"TasksList\": [\r\n {\r\n \"TaskId\": \"Take Snapshot\",\r\n \"StartTime\": null,\r\n \"EndTime\": null,\r\n \"Duration\": \"00:00:00\",\r\n \"Status\": \"Completed\",\r\n \"ProgressPercentage\": null,\r\n \"InstanceId\": null,\r\n \"Name\": null,\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"TaskId\": \"Transfer data to Backup vault\",\r\n \"StartTime\": null,\r\n \"EndTime\": null,\r\n \"Duration\": \"00:00:00\",\r\n \"Status\": \"Completed\",\r\n \"ProgressPercentage\": null,\r\n \"InstanceId\": null,\r\n \"Name\": null,\r\n \"OperationInProgress\": false\r\n }\r\n ],\r\n \"PropertyBag\": {\r\n \"VM Name\": \"dev01testing\",\r\n \"Backup Size\": \"71 MB\"\r\n },\r\n \"ProgressPercentage\": null,\r\n \"DynamicErrorMessage\": \"The following set of VSS writers failed during snapshot - \",\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Backup\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-17T08:21:27.5643161Z\",\r\n \"EndTimestamp\": \"2015-06-17T08:34:04.2089391Z\",\r\n \"Duration\": \"00:12:36.6446230\",\r\n \"EntityFriendlyName\": \"dev01testing\",\r\n \"ActionsInfo\": [\r\n 1\r\n ],\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"b6f2cb27-2615-4eb7-be58-e21cba98475c\",\r\n \"Name\": \"job_dev01testing_b6f2cb27-2615-4eb7-be58-e21cba98475c\",\r\n \"OperationInProgress\": false\r\n}", - "ResponseHeaders": { - "Content-Length": [ - "970" - ], - "Content-Type": [ - "application/json" - ], - "Expires": [ - "-1" - ], - "Pragma": [ - "no-cache" - ], - "x-ms-request-id": [ - "fd0b2311-dae8-42c2-83df-0373f131bb16" - ], - "x-ms-client-request-id": [ - "93a66f0b-fb54-4028-a862-476fc3daa1e5-2015-06-17 09:36:59Z-PS", - "93a66f0b-fb54-4028-a862-476fc3daa1e5-2015-06-17 09:36:59Z-PS" - ], - "Strict-Transport-Security": [ - "max-age=31536000; includeSubDomains" - ], - "x-ms-ratelimit-remaining-subscription-reads": [ - "14907" - ], - "x-ms-correlation-request-id": [ - "fd0b2311-dae8-42c2-83df-0373f131bb16" - ], - "x-ms-routing-request-id": [ - "CENTRALUS:20150617T093700Z:fd0b2311-dae8-42c2-83df-0373f131bb16" - ], - "Cache-Control": [ - "no-cache" - ], - "Date": [ - "Wed, 17 Jun 2015 09:36:59 GMT" - ], - "Server": [ - "Microsoft-IIS/8.0" - ], - "X-Powered-By": [ - "ASP.NET" - ] - }, - "StatusCode": 200 - }, - { - "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/jobs/0ca96519-d7c7-48ee-ac03-645b20717982/jobdetails?api-version=2014-09-01", - "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vam9icy8wY2E5NjUxOS1kN2M3LTQ4ZWUtYWMwMy02NDViMjA3MTc5ODIvam9iZGV0YWlscz9hcGktdmVyc2lvbj0yMDE0LTA5LTAx", - "RequestMethod": "GET", - "RequestBody": "", - "RequestHeaders": { - "Accept-Language": [ - "en-us" - ], - "x-ms-client-request-id": [ - "ad539597-8159-4dcb-833f-4c3a402edc3a-2015-06-17 09:37:00Z-PS" - ], - "User-Agent": [ - "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" - ] - }, - "ResponseBody": "{\r\n \"TasksList\": [],\r\n \"PropertyBag\": {\r\n \"VM Name\": \"dev01Testing\",\r\n \"Policy Name\": \"Policy9\"\r\n },\r\n \"ProgressPercentage\": null,\r\n \"DynamicErrorMessage\": null,\r\n \"Type\": \"VM\",\r\n \"Operation\": \"ConfigureBackup\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-17T08:17:39.6510158Z\",\r\n \"EndTimestamp\": \"2015-06-17T08:17:41.0746491Z\",\r\n \"Duration\": \"00:00:01.4236333\",\r\n \"EntityFriendlyName\": \"dev01Testing\",\r\n \"ActionsInfo\": null,\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"0ca96519-d7c7-48ee-ac03-645b20717982\",\r\n \"Name\": \"0ca96519-d7c7-48ee-ac03-645b20717982\",\r\n \"OperationInProgress\": false\r\n}", - "ResponseHeaders": { - "Content-Length": [ - "522" - ], - "Content-Type": [ - "application/json" - ], - "Expires": [ - "-1" - ], - "Pragma": [ - "no-cache" - ], - "x-ms-request-id": [ - "fd92ebc8-08ae-4596-b16f-92ea961b6777" - ], - "x-ms-client-request-id": [ - "ad539597-8159-4dcb-833f-4c3a402edc3a-2015-06-17 09:37:00Z-PS", - "ad539597-8159-4dcb-833f-4c3a402edc3a-2015-06-17 09:37:00Z-PS" - ], - "Strict-Transport-Security": [ - "max-age=31536000; includeSubDomains" - ], - "x-ms-ratelimit-remaining-subscription-reads": [ - "14906" - ], - "x-ms-correlation-request-id": [ - "fd92ebc8-08ae-4596-b16f-92ea961b6777" - ], - "x-ms-routing-request-id": [ - "CENTRALUS:20150617T093701Z:fd92ebc8-08ae-4596-b16f-92ea961b6777" - ], - "Cache-Control": [ - "no-cache" - ], - "Date": [ - "Wed, 17 Jun 2015 09:37:00 GMT" - ], - "Server": [ - "Microsoft-IIS/8.0" - ], - "X-Powered-By": [ - "ASP.NET" - ] - }, - "StatusCode": 200 - }, - { - "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/jobs/6f19f32d-e02b-4183-a9fd-36ad0691ba3e/jobdetails?api-version=2014-09-01", - "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vam9icy82ZjE5ZjMyZC1lMDJiLTQxODMtYTlmZC0zNmFkMDY5MWJhM2Uvam9iZGV0YWlscz9hcGktdmVyc2lvbj0yMDE0LTA5LTAx", - "RequestMethod": "GET", - "RequestBody": "", - "RequestHeaders": { - "Accept-Language": [ - "en-us" - ], - "x-ms-client-request-id": [ - "3d0efdf4-3461-4c8d-aed0-e53395a5af68-2015-06-17 09:37:01Z-PS" - ], - "User-Agent": [ - "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" - ] - }, - "ResponseBody": "{\r\n \"TasksList\": [],\r\n \"PropertyBag\": {\r\n \"VM Name\": \"dev01Testing\",\r\n \"Delete Backup Data\": \"False\"\r\n },\r\n \"ProgressPercentage\": null,\r\n \"DynamicErrorMessage\": null,\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Unprotect\",\r\n \"Status\": \"Failed\",\r\n \"StartTimestamp\": \"2015-06-17T08:17:18.0709625Z\",\r\n \"EndTimestamp\": \"2015-06-17T08:17:19.5124912Z\",\r\n \"Duration\": \"00:00:01.4415287\",\r\n \"EntityFriendlyName\": \"dev01Testing\",\r\n \"ActionsInfo\": null,\r\n \"ErrorDetails\": [\r\n {\r\n \"ErrorCode\": 1073871825,\r\n \"ErrorTitle\": \"\",\r\n \"ErrorString\": \"Microsoft Azure Backup encountered an internal error.\",\r\n \"Recommendations\": [\r\n \"Wait for a few minutes and then try the operation again. If the issue persists, contact Microsoft Support.\"\r\n ]\r\n }\r\n ],\r\n \"InstanceId\": \"6f19f32d-e02b-4183-a9fd-36ad0691ba3e\",\r\n \"Name\": \"6f19f32d-e02b-4183-a9fd-36ad0691ba3e\",\r\n \"OperationInProgress\": false\r\n}", - "ResponseHeaders": { - "Content-Length": [ - "755" - ], - "Content-Type": [ - "application/json" - ], - "Expires": [ - "-1" - ], - "Pragma": [ - "no-cache" - ], - "x-ms-request-id": [ - "eec42be1-5da4-4314-9723-b3cbc576650f" - ], - "x-ms-client-request-id": [ - "3d0efdf4-3461-4c8d-aed0-e53395a5af68-2015-06-17 09:37:01Z-PS", - "3d0efdf4-3461-4c8d-aed0-e53395a5af68-2015-06-17 09:37:01Z-PS" - ], - "Strict-Transport-Security": [ - "max-age=31536000; includeSubDomains" - ], - "x-ms-ratelimit-remaining-subscription-reads": [ - "14905" - ], - "x-ms-correlation-request-id": [ - "eec42be1-5da4-4314-9723-b3cbc576650f" - ], - "x-ms-routing-request-id": [ - "CENTRALUS:20150617T093702Z:eec42be1-5da4-4314-9723-b3cbc576650f" - ], - "Cache-Control": [ - "no-cache" - ], - "Date": [ - "Wed, 17 Jun 2015 09:37:02 GMT" - ], - "Server": [ - "Microsoft-IIS/8.0" - ], - "X-Powered-By": [ - "ASP.NET" - ] - }, - "StatusCode": 200 - }, - { - "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/jobs/b412156e-4a8b-41a0-87d1-5a552f46e36e/jobdetails?api-version=2014-09-01", - "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vam9icy9iNDEyMTU2ZS00YThiLTQxYTAtODdkMS01YTU1MmY0NmUzNmUvam9iZGV0YWlscz9hcGktdmVyc2lvbj0yMDE0LTA5LTAx", - "RequestMethod": "GET", - "RequestBody": "", - "RequestHeaders": { - "Accept-Language": [ - "en-us" - ], - "x-ms-client-request-id": [ - "27ef4a9a-e69d-43d1-980c-9898f455d434-2015-06-17 09:37:02Z-PS" - ], - "User-Agent": [ - "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" - ] - }, - "ResponseBody": "{\r\n \"TasksList\": [],\r\n \"PropertyBag\": {\r\n \"VM Name\": \"dev01Testing\",\r\n \"Policy Name\": \"Policy9\"\r\n },\r\n \"ProgressPercentage\": null,\r\n \"DynamicErrorMessage\": null,\r\n \"Type\": \"VM\",\r\n \"Operation\": \"ConfigureBackup\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-17T08:16:56.440266Z\",\r\n \"EndTimestamp\": \"2015-06-17T08:17:00.1534989Z\",\r\n \"Duration\": \"00:00:03.7132329\",\r\n \"EntityFriendlyName\": \"dev01Testing\",\r\n \"ActionsInfo\": null,\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"b412156e-4a8b-41a0-87d1-5a552f46e36e\",\r\n \"Name\": \"b412156e-4a8b-41a0-87d1-5a552f46e36e\",\r\n \"OperationInProgress\": false\r\n}", - "ResponseHeaders": { - "Content-Length": [ - "521" - ], - "Content-Type": [ - "application/json" - ], - "Expires": [ - "-1" - ], - "Pragma": [ - "no-cache" - ], - "x-ms-request-id": [ - "1fb2b2d2-b9e1-4d60-9478-7611b061336d" - ], - "x-ms-client-request-id": [ - "27ef4a9a-e69d-43d1-980c-9898f455d434-2015-06-17 09:37:02Z-PS", - "27ef4a9a-e69d-43d1-980c-9898f455d434-2015-06-17 09:37:02Z-PS" - ], - "Strict-Transport-Security": [ - "max-age=31536000; includeSubDomains" - ], - "x-ms-ratelimit-remaining-subscription-reads": [ - "14904" - ], - "x-ms-correlation-request-id": [ - "1fb2b2d2-b9e1-4d60-9478-7611b061336d" - ], - "x-ms-routing-request-id": [ - "CENTRALUS:20150617T093703Z:1fb2b2d2-b9e1-4d60-9478-7611b061336d" - ], - "Cache-Control": [ - "no-cache" - ], - "Date": [ - "Wed, 17 Jun 2015 09:37:02 GMT" - ], - "Server": [ - "Microsoft-IIS/8.0" - ], - "X-Powered-By": [ - "ASP.NET" - ] - }, - "StatusCode": 200 - }, - { - "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/jobs/033b47f8-66c9-465f-a193-21ee0f21b90e/jobdetails?api-version=2014-09-01", - "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vam9icy8wMzNiNDdmOC02NmM5LTQ2NWYtYTE5My0yMWVlMGYyMWI5MGUvam9iZGV0YWlscz9hcGktdmVyc2lvbj0yMDE0LTA5LTAx", - "RequestMethod": "GET", - "RequestBody": "", - "RequestHeaders": { - "Accept-Language": [ - "en-us" - ], - "x-ms-client-request-id": [ - "2d84a3a0-7cfc-4921-b929-b1de1e19d54d-2015-06-17 09:37:03Z-PS" - ], - "User-Agent": [ - "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" - ] - }, - "ResponseBody": "{\r\n \"TasksList\": [],\r\n \"PropertyBag\": {\r\n \"VM Name\": \"dev01Testing\",\r\n \"Policy Name\": \"ProtPolicy01_updated\"\r\n },\r\n \"ProgressPercentage\": null,\r\n \"DynamicErrorMessage\": null,\r\n \"Type\": \"VM\",\r\n \"Operation\": \"ConfigureBackup\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-17T07:31:40.6730368Z\",\r\n \"EndTimestamp\": \"2015-06-17T07:31:42.8347267Z\",\r\n \"Duration\": \"00:00:02.1616899\",\r\n \"EntityFriendlyName\": \"dev01Testing\",\r\n \"ActionsInfo\": null,\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"033b47f8-66c9-465f-a193-21ee0f21b90e\",\r\n \"Name\": \"033b47f8-66c9-465f-a193-21ee0f21b90e\",\r\n \"OperationInProgress\": false\r\n}", - "ResponseHeaders": { - "Content-Length": [ - "535" - ], - "Content-Type": [ - "application/json" - ], - "Expires": [ - "-1" - ], - "Pragma": [ - "no-cache" - ], - "x-ms-request-id": [ - "1e6581c0-a6ee-4142-9d0a-49a583e284cb" - ], - "x-ms-client-request-id": [ - "2d84a3a0-7cfc-4921-b929-b1de1e19d54d-2015-06-17 09:37:03Z-PS", - "2d84a3a0-7cfc-4921-b929-b1de1e19d54d-2015-06-17 09:37:03Z-PS" - ], - "Strict-Transport-Security": [ - "max-age=31536000; includeSubDomains" - ], - "x-ms-ratelimit-remaining-subscription-reads": [ - "14903" - ], - "x-ms-correlation-request-id": [ - "1e6581c0-a6ee-4142-9d0a-49a583e284cb" - ], - "x-ms-routing-request-id": [ - "CENTRALUS:20150617T093703Z:1e6581c0-a6ee-4142-9d0a-49a583e284cb" - ], - "Cache-Control": [ - "no-cache" - ], - "Date": [ - "Wed, 17 Jun 2015 09:37:03 GMT" - ], - "Server": [ - "Microsoft-IIS/8.0" - ], - "X-Powered-By": [ - "ASP.NET" - ] - }, - "StatusCode": 200 - }, - { - "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/jobs/39fd255f-937d-4ad4-97ec-643462e3173b/jobdetails?api-version=2014-09-01", - "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vam9icy8zOWZkMjU1Zi05MzdkLTRhZDQtOTdlYy02NDM0NjJlMzE3M2Ivam9iZGV0YWlscz9hcGktdmVyc2lvbj0yMDE0LTA5LTAx", - "RequestMethod": "GET", - "RequestBody": "", - "RequestHeaders": { - "Accept-Language": [ - "en-us" - ], - "x-ms-client-request-id": [ - "9e7d61b3-8734-43f1-b3f6-5e4f3a0c02e7-2015-06-17 09:37:04Z-PS" - ], - "User-Agent": [ - "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" - ] - }, - "ResponseBody": "{\r\n \"TasksList\": [],\r\n \"PropertyBag\": {\r\n \"VM Name\": \"dev01Testing\",\r\n \"Delete Backup Data\": \"False\"\r\n },\r\n \"ProgressPercentage\": null,\r\n \"DynamicErrorMessage\": null,\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Unprotect\",\r\n \"Status\": \"Failed\",\r\n \"StartTimestamp\": \"2015-06-17T07:31:19.1455656Z\",\r\n \"EndTimestamp\": \"2015-06-17T07:31:21.5225441Z\",\r\n \"Duration\": \"00:00:02.3769785\",\r\n \"EntityFriendlyName\": \"dev01Testing\",\r\n \"ActionsInfo\": null,\r\n \"ErrorDetails\": [\r\n {\r\n \"ErrorCode\": 1073871825,\r\n \"ErrorTitle\": \"\",\r\n \"ErrorString\": \"Microsoft Azure Backup encountered an internal error.\",\r\n \"Recommendations\": [\r\n \"Wait for a few minutes and then try the operation again. If the issue persists, contact Microsoft Support.\"\r\n ]\r\n }\r\n ],\r\n \"InstanceId\": \"39fd255f-937d-4ad4-97ec-643462e3173b\",\r\n \"Name\": \"39fd255f-937d-4ad4-97ec-643462e3173b\",\r\n \"OperationInProgress\": false\r\n}", - "ResponseHeaders": { - "Content-Length": [ - "755" - ], - "Content-Type": [ - "application/json" - ], - "Expires": [ - "-1" - ], - "Pragma": [ - "no-cache" - ], - "x-ms-request-id": [ - "ea8f0305-27d8-44d7-9323-05e851602595" - ], - "x-ms-client-request-id": [ - "9e7d61b3-8734-43f1-b3f6-5e4f3a0c02e7-2015-06-17 09:37:04Z-PS", - "9e7d61b3-8734-43f1-b3f6-5e4f3a0c02e7-2015-06-17 09:37:04Z-PS" - ], - "Strict-Transport-Security": [ - "max-age=31536000; includeSubDomains" - ], - "x-ms-ratelimit-remaining-subscription-reads": [ - "14902" - ], - "x-ms-correlation-request-id": [ - "ea8f0305-27d8-44d7-9323-05e851602595" - ], - "x-ms-routing-request-id": [ - "CENTRALUS:20150617T093704Z:ea8f0305-27d8-44d7-9323-05e851602595" - ], - "Cache-Control": [ - "no-cache" - ], - "Date": [ - "Wed, 17 Jun 2015 09:37:04 GMT" - ], - "Server": [ - "Microsoft-IIS/8.0" - ], - "X-Powered-By": [ - "ASP.NET" - ] - }, - "StatusCode": 200 - }, - { - "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/jobs/fc86e9e5-b676-40e0-a4b5-61816a30ebb3/jobdetails?api-version=2014-09-01", - "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vam9icy9mYzg2ZTllNS1iNjc2LTQwZTAtYTRiNS02MTgxNmEzMGViYjMvam9iZGV0YWlscz9hcGktdmVyc2lvbj0yMDE0LTA5LTAx", - "RequestMethod": "GET", - "RequestBody": "", - "RequestHeaders": { - "Accept-Language": [ - "en-us" - ], - "x-ms-client-request-id": [ - "e6c0c51b-272f-4771-85d0-1dc804d49b44-2015-06-17 09:37:05Z-PS" - ], - "User-Agent": [ - "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" - ] - }, - "ResponseBody": "{\r\n \"TasksList\": [],\r\n \"PropertyBag\": {\r\n \"VM Name\": \"dev01Testing\",\r\n \"Policy Name\": \"ProtPolicy01_updated\"\r\n },\r\n \"ProgressPercentage\": null,\r\n \"DynamicErrorMessage\": null,\r\n \"Type\": \"VM\",\r\n \"Operation\": \"ConfigureBackup\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-17T07:30:57.2702223Z\",\r\n \"EndTimestamp\": \"2015-06-17T07:31:02.2771569Z\",\r\n \"Duration\": \"00:00:05.0069346\",\r\n \"EntityFriendlyName\": \"dev01Testing\",\r\n \"ActionsInfo\": null,\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"fc86e9e5-b676-40e0-a4b5-61816a30ebb3\",\r\n \"Name\": \"fc86e9e5-b676-40e0-a4b5-61816a30ebb3\",\r\n \"OperationInProgress\": false\r\n}", - "ResponseHeaders": { - "Content-Length": [ - "535" - ], - "Content-Type": [ - "application/json" - ], - "Expires": [ - "-1" - ], - "Pragma": [ - "no-cache" - ], - "x-ms-request-id": [ - "d71bcd1f-8770-4f39-9514-01edc6ed227c" - ], - "x-ms-client-request-id": [ - "e6c0c51b-272f-4771-85d0-1dc804d49b44-2015-06-17 09:37:05Z-PS", - "e6c0c51b-272f-4771-85d0-1dc804d49b44-2015-06-17 09:37:05Z-PS" - ], - "Strict-Transport-Security": [ - "max-age=31536000; includeSubDomains" - ], - "x-ms-ratelimit-remaining-subscription-reads": [ - "14901" - ], - "x-ms-correlation-request-id": [ - "d71bcd1f-8770-4f39-9514-01edc6ed227c" - ], - "x-ms-routing-request-id": [ - "CENTRALUS:20150617T093705Z:d71bcd1f-8770-4f39-9514-01edc6ed227c" - ], - "Cache-Control": [ - "no-cache" - ], - "Date": [ - "Wed, 17 Jun 2015 09:37:05 GMT" - ], - "Server": [ - "Microsoft-IIS/8.0" - ], - "X-Powered-By": [ - "ASP.NET" - ] - }, - "StatusCode": 200 - }, - { - "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/jobs/cfed4d3d-ce92-4d4a-b834-6343b781a55e/jobdetails?api-version=2014-09-01", - "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vam9icy9jZmVkNGQzZC1jZTkyLTRkNGEtYjgzNC02MzQzYjc4MWE1NWUvam9iZGV0YWlscz9hcGktdmVyc2lvbj0yMDE0LTA5LTAx", - "RequestMethod": "GET", - "RequestBody": "", - "RequestHeaders": { - "Accept-Language": [ - "en-us" - ], - "x-ms-client-request-id": [ - "9e3de08b-3725-4bed-851b-7d06ac321870-2015-06-17 09:37:06Z-PS" - ], - "User-Agent": [ - "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" - ] - }, - "ResponseBody": "{\r\n \"TasksList\": [\r\n {\r\n \"TaskId\": \"Take Snapshot\",\r\n \"StartTime\": null,\r\n \"EndTime\": null,\r\n \"Duration\": \"00:00:00\",\r\n \"Status\": \"Completed\",\r\n \"ProgressPercentage\": null,\r\n \"InstanceId\": null,\r\n \"Name\": null,\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"TaskId\": \"Transfer data to Backup vault\",\r\n \"StartTime\": null,\r\n \"EndTime\": null,\r\n \"Duration\": \"00:00:00\",\r\n \"Status\": \"Completed\",\r\n \"ProgressPercentage\": null,\r\n \"InstanceId\": null,\r\n \"Name\": null,\r\n \"OperationInProgress\": false\r\n }\r\n ],\r\n \"PropertyBag\": {\r\n \"VM Name\": \"dev01testing\",\r\n \"Backup Size\": \"105 MB\"\r\n },\r\n \"ProgressPercentage\": null,\r\n \"DynamicErrorMessage\": \"The following set of VSS writers failed during snapshot - \",\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Backup\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-16T19:30:55.8988097Z\",\r\n \"EndTimestamp\": \"2015-06-16T19:45:24.8671161Z\",\r\n \"Duration\": \"00:14:28.9683064\",\r\n \"EntityFriendlyName\": \"dev01testing\",\r\n \"ActionsInfo\": null,\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"cfed4d3d-ce92-4d4a-b834-6343b781a55e\",\r\n \"Name\": \"job_dev01testing_cfed4d3d-ce92-4d4a-b834-6343b781a55e\",\r\n \"OperationInProgress\": false\r\n}", - "ResponseHeaders": { - "Content-Length": [ - "972" - ], - "Content-Type": [ - "application/json" - ], - "Expires": [ - "-1" - ], - "Pragma": [ - "no-cache" - ], - "x-ms-request-id": [ - "21e1cc60-a16e-434f-84d5-8bb2cfb8db8e" - ], - "x-ms-client-request-id": [ - "9e3de08b-3725-4bed-851b-7d06ac321870-2015-06-17 09:37:06Z-PS", - "9e3de08b-3725-4bed-851b-7d06ac321870-2015-06-17 09:37:06Z-PS" - ], - "Strict-Transport-Security": [ - "max-age=31536000; includeSubDomains" - ], - "x-ms-ratelimit-remaining-subscription-reads": [ - "14900" - ], - "x-ms-correlation-request-id": [ - "21e1cc60-a16e-434f-84d5-8bb2cfb8db8e" - ], - "x-ms-routing-request-id": [ - "CENTRALUS:20150617T093706Z:21e1cc60-a16e-434f-84d5-8bb2cfb8db8e" - ], - "Cache-Control": [ - "no-cache" - ], - "Date": [ - "Wed, 17 Jun 2015 09:37:06 GMT" - ], - "Server": [ - "Microsoft-IIS/8.0" - ], - "X-Powered-By": [ - "ASP.NET" - ] - }, - "StatusCode": 200 - }, - { - "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/jobs/a61303a4-5f52-4716-bb76-2715b6e91d0c/jobdetails?api-version=2014-09-01", - "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vam9icy9hNjEzMDNhNC01ZjUyLTQ3MTYtYmI3Ni0yNzE1YjZlOTFkMGMvam9iZGV0YWlscz9hcGktdmVyc2lvbj0yMDE0LTA5LTAx", - "RequestMethod": "GET", - "RequestBody": "", - "RequestHeaders": { - "Accept-Language": [ - "en-us" - ], - "x-ms-client-request-id": [ - "6ff739d5-adb4-43a4-8b73-accde9f49b6f-2015-06-17 09:37:06Z-PS" - ], - "User-Agent": [ - "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" - ] - }, - "ResponseBody": "{\r\n \"TasksList\": [],\r\n \"PropertyBag\": {\r\n \"VM Name\": \"dev01Testing\",\r\n \"Cloud Service\": \"dev01Testing\"\r\n },\r\n \"ProgressPercentage\": null,\r\n \"DynamicErrorMessage\": null,\r\n \"Type\": \"VM\",\r\n \"Operation\": \"UnRegister\",\r\n \"Status\": \"Failed\",\r\n \"StartTimestamp\": \"2015-06-16T13:49:03.8618717Z\",\r\n \"EndTimestamp\": \"2015-06-16T13:49:04.4078483Z\",\r\n \"Duration\": \"00:00:00.5459766\",\r\n \"EntityFriendlyName\": \"dev01Testing\",\r\n \"ActionsInfo\": null,\r\n \"ErrorDetails\": [\r\n {\r\n \"ErrorCode\": 134607754,\r\n \"ErrorTitle\": \"\",\r\n \"ErrorString\": \"Another operation is in progress on the selected item.\",\r\n \"Recommendations\": [\r\n \"If there is a current, in-progress operation, please retry after it has finished.\"\r\n ]\r\n }\r\n ],\r\n \"InstanceId\": \"a61303a4-5f52-4716-bb76-2715b6e91d0c\",\r\n \"Name\": \"iaasvmcontainer;dev01testing;dev01testing\",\r\n \"OperationInProgress\": false\r\n}", - "ResponseHeaders": { - "Content-Length": [ - "738" - ], - "Content-Type": [ - "application/json" - ], - "Expires": [ - "-1" - ], - "Pragma": [ - "no-cache" - ], - "x-ms-request-id": [ - "bf403f29-dc0c-402b-9408-8eafc0ab820a" - ], - "x-ms-client-request-id": [ - "6ff739d5-adb4-43a4-8b73-accde9f49b6f-2015-06-17 09:37:06Z-PS", - "6ff739d5-adb4-43a4-8b73-accde9f49b6f-2015-06-17 09:37:06Z-PS" - ], - "Strict-Transport-Security": [ - "max-age=31536000; includeSubDomains" - ], - "x-ms-ratelimit-remaining-subscription-reads": [ - "14899" - ], - "x-ms-correlation-request-id": [ - "bf403f29-dc0c-402b-9408-8eafc0ab820a" - ], - "x-ms-routing-request-id": [ - "CENTRALUS:20150617T093707Z:bf403f29-dc0c-402b-9408-8eafc0ab820a" - ], - "Cache-Control": [ - "no-cache" - ], - "Date": [ - "Wed, 17 Jun 2015 09:37:06 GMT" - ], - "Server": [ - "Microsoft-IIS/8.0" - ], - "X-Powered-By": [ - "ASP.NET" - ] - }, - "StatusCode": 200 - }, - { - "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/jobs/3683def8-bf7e-427d-995a-16622e67ad30/jobdetails?api-version=2014-09-01", - "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vam9icy8zNjgzZGVmOC1iZjdlLTQyN2QtOTk1YS0xNjYyMmU2N2FkMzAvam9iZGV0YWlscz9hcGktdmVyc2lvbj0yMDE0LTA5LTAx", - "RequestMethod": "GET", - "RequestBody": "", - "RequestHeaders": { - "Accept-Language": [ - "en-us" - ], - "x-ms-client-request-id": [ - "73fb2304-357c-41a6-b87a-cae70117fe71-2015-06-17 09:37:07Z-PS" - ], - "User-Agent": [ - "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" - ] - }, - "ResponseBody": "{\r\n \"TasksList\": [],\r\n \"PropertyBag\": {\r\n \"VM Name\": \"dev01Testing\",\r\n \"Cloud Service\": \"dev01Testing\"\r\n },\r\n \"ProgressPercentage\": null,\r\n \"DynamicErrorMessage\": null,\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Register\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-16T13:48:25.3211336Z\",\r\n \"EndTimestamp\": \"2015-06-16T13:49:42.0251501Z\",\r\n \"Duration\": \"00:01:16.7040165\",\r\n \"EntityFriendlyName\": \"dev01Testing\",\r\n \"ActionsInfo\": null,\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"3683def8-bf7e-427d-995a-16622e67ad30\",\r\n \"Name\": \"iaasvmcontainer;dev01testing;dev01testing\",\r\n \"OperationInProgress\": false\r\n}", - "ResponseHeaders": { - "Content-Length": [ - "527" - ], - "Content-Type": [ - "application/json" - ], - "Expires": [ - "-1" - ], - "Pragma": [ - "no-cache" - ], - "x-ms-request-id": [ - "e6aa50b3-7e75-4855-a198-cab984998a4f" - ], - "x-ms-client-request-id": [ - "73fb2304-357c-41a6-b87a-cae70117fe71-2015-06-17 09:37:07Z-PS", - "73fb2304-357c-41a6-b87a-cae70117fe71-2015-06-17 09:37:07Z-PS" - ], - "Strict-Transport-Security": [ - "max-age=31536000; includeSubDomains" - ], - "x-ms-ratelimit-remaining-subscription-reads": [ - "14898" - ], - "x-ms-correlation-request-id": [ - "e6aa50b3-7e75-4855-a198-cab984998a4f" - ], - "x-ms-routing-request-id": [ - "CENTRALUS:20150617T093708Z:e6aa50b3-7e75-4855-a198-cab984998a4f" - ], - "Cache-Control": [ - "no-cache" - ], - "Date": [ - "Wed, 17 Jun 2015 09:37:08 GMT" - ], - "Server": [ - "Microsoft-IIS/8.0" - ], - "X-Powered-By": [ - "ASP.NET" - ] - }, - "StatusCode": 200 - }, - { - "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/jobs/468d1bb0-6aad-4fd1-a4af-e89a13e29b5d/jobdetails?api-version=2014-09-01", - "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vam9icy80NjhkMWJiMC02YWFkLTRmZDEtYTRhZi1lODlhMTNlMjliNWQvam9iZGV0YWlscz9hcGktdmVyc2lvbj0yMDE0LTA5LTAx", - "RequestMethod": "GET", - "RequestBody": "", - "RequestHeaders": { - "Accept-Language": [ - "en-us" - ], - "x-ms-client-request-id": [ - "7091f5ba-b2cb-4576-a2e1-5f8550e5d535-2015-06-17 09:37:08Z-PS" - ], - "User-Agent": [ - "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" - ] - }, - "ResponseBody": "{\r\n \"TasksList\": [],\r\n \"PropertyBag\": {\r\n \"VM Name\": \"dev01Testing\",\r\n \"Policy Name\": \"ProtPolicy01_updated\"\r\n },\r\n \"ProgressPercentage\": null,\r\n \"DynamicErrorMessage\": null,\r\n \"Type\": \"VM\",\r\n \"Operation\": \"ConfigureBackup\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-16T10:55:27.5671369Z\",\r\n \"EndTimestamp\": \"2015-06-16T10:55:31.3950698Z\",\r\n \"Duration\": \"00:00:03.8279329\",\r\n \"EntityFriendlyName\": \"dev01Testing\",\r\n \"ActionsInfo\": null,\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"468d1bb0-6aad-4fd1-a4af-e89a13e29b5d\",\r\n \"Name\": \"468d1bb0-6aad-4fd1-a4af-e89a13e29b5d\",\r\n \"OperationInProgress\": false\r\n}", - "ResponseHeaders": { - "Content-Length": [ - "535" - ], - "Content-Type": [ - "application/json" - ], - "Expires": [ - "-1" - ], - "Pragma": [ - "no-cache" - ], - "x-ms-request-id": [ - "be6995bb-fdf6-4939-95d6-499266633e22" - ], - "x-ms-client-request-id": [ - "7091f5ba-b2cb-4576-a2e1-5f8550e5d535-2015-06-17 09:37:08Z-PS", - "7091f5ba-b2cb-4576-a2e1-5f8550e5d535-2015-06-17 09:37:08Z-PS" - ], - "Strict-Transport-Security": [ - "max-age=31536000; includeSubDomains" - ], - "x-ms-ratelimit-remaining-subscription-reads": [ - "14897" - ], - "x-ms-correlation-request-id": [ - "be6995bb-fdf6-4939-95d6-499266633e22" - ], - "x-ms-routing-request-id": [ - "CENTRALUS:20150617T093709Z:be6995bb-fdf6-4939-95d6-499266633e22" - ], - "Cache-Control": [ - "no-cache" - ], - "Date": [ - "Wed, 17 Jun 2015 09:37:08 GMT" - ], - "Server": [ - "Microsoft-IIS/8.0" - ], - "X-Powered-By": [ - "ASP.NET" - ] - }, - "StatusCode": 200 - }, - { - "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/jobs/76814dac-9493-4908-b66b-814614fe79ab/jobdetails?api-version=2014-09-01", - "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vam9icy83NjgxNGRhYy05NDkzLTQ5MDgtYjY2Yi04MTQ2MTRmZTc5YWIvam9iZGV0YWlscz9hcGktdmVyc2lvbj0yMDE0LTA5LTAx", - "RequestMethod": "GET", - "RequestBody": "", - "RequestHeaders": { - "Accept-Language": [ - "en-us" - ], - "x-ms-client-request-id": [ - "b3356988-cd30-40bc-9a14-d5a6334a420f-2015-06-17 09:37:09Z-PS" - ], - "User-Agent": [ - "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" - ] - }, - "ResponseBody": "{\r\n \"TasksList\": [],\r\n \"PropertyBag\": {\r\n \"VM Name\": \"dev01Testing\",\r\n \"Policy Name\": \"ProtPolicy01_updated\"\r\n },\r\n \"ProgressPercentage\": null,\r\n \"DynamicErrorMessage\": null,\r\n \"Type\": \"VM\",\r\n \"Operation\": \"ConfigureBackup\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-16T10:13:04.4652467Z\",\r\n \"EndTimestamp\": \"2015-06-16T10:13:07.7148831Z\",\r\n \"Duration\": \"00:00:03.2496364\",\r\n \"EntityFriendlyName\": \"dev01Testing\",\r\n \"ActionsInfo\": null,\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"76814dac-9493-4908-b66b-814614fe79ab\",\r\n \"Name\": \"76814dac-9493-4908-b66b-814614fe79ab\",\r\n \"OperationInProgress\": false\r\n}", - "ResponseHeaders": { - "Content-Length": [ - "535" - ], - "Content-Type": [ - "application/json" - ], - "Expires": [ - "-1" - ], - "Pragma": [ - "no-cache" - ], - "x-ms-request-id": [ - "f2055b23-af53-4e9c-bd43-9fabb1379165" - ], - "x-ms-client-request-id": [ - "b3356988-cd30-40bc-9a14-d5a6334a420f-2015-06-17 09:37:09Z-PS", - "b3356988-cd30-40bc-9a14-d5a6334a420f-2015-06-17 09:37:09Z-PS" - ], - "Strict-Transport-Security": [ - "max-age=31536000; includeSubDomains" - ], - "x-ms-ratelimit-remaining-subscription-reads": [ - "14896" - ], - "x-ms-correlation-request-id": [ - "f2055b23-af53-4e9c-bd43-9fabb1379165" - ], - "x-ms-routing-request-id": [ - "CENTRALUS:20150617T093709Z:f2055b23-af53-4e9c-bd43-9fabb1379165" - ], - "Cache-Control": [ - "no-cache" - ], - "Date": [ - "Wed, 17 Jun 2015 09:37:09 GMT" - ], - "Server": [ - "Microsoft-IIS/8.0" - ], - "X-Powered-By": [ - "ASP.NET" - ] - }, - "StatusCode": 200 - }, - { - "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/jobs/b0c81102-27a2-424e-909c-3ffc3e581b5d/jobdetails?api-version=2014-09-01", - "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vam9icy9iMGM4MTEwMi0yN2EyLTQyNGUtOTA5Yy0zZmZjM2U1ODFiNWQvam9iZGV0YWlscz9hcGktdmVyc2lvbj0yMDE0LTA5LTAx", - "RequestMethod": "GET", - "RequestBody": "", - "RequestHeaders": { - "Accept-Language": [ - "en-us" - ], - "x-ms-client-request-id": [ - "8e4f26c9-0fe3-4c6f-ac03-403e4569fcaa-2015-06-17 09:37:10Z-PS" - ], - "User-Agent": [ - "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" - ] - }, - "ResponseBody": "{\r\n \"TasksList\": [],\r\n \"PropertyBag\": {\r\n \"VM Name\": \"dev01Testing\",\r\n \"Policy Name\": \"ProtPolicy01_updated\"\r\n },\r\n \"ProgressPercentage\": null,\r\n \"DynamicErrorMessage\": null,\r\n \"Type\": \"VM\",\r\n \"Operation\": \"ConfigureBackup\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-16T08:33:10.2998041Z\",\r\n \"EndTimestamp\": \"2015-06-16T08:33:12.5167364Z\",\r\n \"Duration\": \"00:00:02.2169323\",\r\n \"EntityFriendlyName\": \"dev01Testing\",\r\n \"ActionsInfo\": null,\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"b0c81102-27a2-424e-909c-3ffc3e581b5d\",\r\n \"Name\": \"b0c81102-27a2-424e-909c-3ffc3e581b5d\",\r\n \"OperationInProgress\": false\r\n}", - "ResponseHeaders": { - "Content-Length": [ - "535" - ], - "Content-Type": [ - "application/json" - ], - "Expires": [ - "-1" - ], - "Pragma": [ - "no-cache" - ], - "x-ms-request-id": [ - "b1d092ab-3817-4746-a92e-147fce560298" - ], - "x-ms-client-request-id": [ - "8e4f26c9-0fe3-4c6f-ac03-403e4569fcaa-2015-06-17 09:37:10Z-PS", - "8e4f26c9-0fe3-4c6f-ac03-403e4569fcaa-2015-06-17 09:37:10Z-PS" - ], - "Strict-Transport-Security": [ - "max-age=31536000; includeSubDomains" - ], - "x-ms-ratelimit-remaining-subscription-reads": [ - "14895" - ], - "x-ms-correlation-request-id": [ - "b1d092ab-3817-4746-a92e-147fce560298" - ], - "x-ms-routing-request-id": [ - "CENTRALUS:20150617T093710Z:b1d092ab-3817-4746-a92e-147fce560298" - ], - "Cache-Control": [ - "no-cache" - ], - "Date": [ - "Wed, 17 Jun 2015 09:37:10 GMT" - ], - "Server": [ - "Microsoft-IIS/8.0" - ], - "X-Powered-By": [ - "ASP.NET" - ] - }, - "StatusCode": 200 - }, - { - "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/jobs/3bfe56a3-1c53-497a-bef1-5b960d090994/jobdetails?api-version=2014-09-01", - "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vam9icy8zYmZlNTZhMy0xYzUzLTQ5N2EtYmVmMS01Yjk2MGQwOTA5OTQvam9iZGV0YWlscz9hcGktdmVyc2lvbj0yMDE0LTA5LTAx", - "RequestMethod": "GET", - "RequestBody": "", - "RequestHeaders": { - "Accept-Language": [ - "en-us" - ], - "x-ms-client-request-id": [ - "d29989d4-86a0-4220-9297-150153518cbc-2015-06-17 09:37:10Z-PS" - ], - "User-Agent": [ - "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" - ] - }, - "ResponseBody": "{\r\n \"TasksList\": [],\r\n \"PropertyBag\": {\r\n \"VM Name\": \"dev01Testing\",\r\n \"Delete Backup Data\": \"False\"\r\n },\r\n \"ProgressPercentage\": null,\r\n \"DynamicErrorMessage\": null,\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Unprotect\",\r\n \"Status\": \"Failed\",\r\n \"StartTimestamp\": \"2015-06-16T08:32:48.6873719Z\",\r\n \"EndTimestamp\": \"2015-06-16T08:32:50.7129506Z\",\r\n \"Duration\": \"00:00:02.0255787\",\r\n \"EntityFriendlyName\": \"dev01Testing\",\r\n \"ActionsInfo\": null,\r\n \"ErrorDetails\": [\r\n {\r\n \"ErrorCode\": 1073871825,\r\n \"ErrorTitle\": \"\",\r\n \"ErrorString\": \"Microsoft Azure Backup encountered an internal error.\",\r\n \"Recommendations\": [\r\n \"Wait for a few minutes and then try the operation again. If the issue persists, contact Microsoft Support.\"\r\n ]\r\n }\r\n ],\r\n \"InstanceId\": \"3bfe56a3-1c53-497a-bef1-5b960d090994\",\r\n \"Name\": \"3bfe56a3-1c53-497a-bef1-5b960d090994\",\r\n \"OperationInProgress\": false\r\n}", - "ResponseHeaders": { - "Content-Length": [ - "755" - ], - "Content-Type": [ - "application/json" - ], - "Expires": [ - "-1" - ], - "Pragma": [ - "no-cache" - ], - "x-ms-request-id": [ - "0b307fc6-5489-40ab-98ec-dba3b23360be" - ], - "x-ms-client-request-id": [ - "d29989d4-86a0-4220-9297-150153518cbc-2015-06-17 09:37:10Z-PS", - "d29989d4-86a0-4220-9297-150153518cbc-2015-06-17 09:37:10Z-PS" - ], - "Strict-Transport-Security": [ - "max-age=31536000; includeSubDomains" - ], - "x-ms-ratelimit-remaining-subscription-reads": [ - "14894" - ], - "x-ms-correlation-request-id": [ - "0b307fc6-5489-40ab-98ec-dba3b23360be" - ], - "x-ms-routing-request-id": [ - "CENTRALUS:20150617T093711Z:0b307fc6-5489-40ab-98ec-dba3b23360be" - ], - "Cache-Control": [ - "no-cache" - ], - "Date": [ - "Wed, 17 Jun 2015 09:37:10 GMT" - ], - "Server": [ - "Microsoft-IIS/8.0" - ], - "X-Powered-By": [ - "ASP.NET" - ] - }, - "StatusCode": 200 - }, - { - "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/jobs/b0f58a95-bd96-4b50-a1d8-47d585b54995/jobdetails?api-version=2014-09-01", - "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vam9icy9iMGY1OGE5NS1iZDk2LTRiNTAtYTFkOC00N2Q1ODViNTQ5OTUvam9iZGV0YWlscz9hcGktdmVyc2lvbj0yMDE0LTA5LTAx", - "RequestMethod": "GET", - "RequestBody": "", - "RequestHeaders": { - "Accept-Language": [ - "en-us" - ], - "x-ms-client-request-id": [ - "a62a2cb9-8241-4d82-9003-8ace89220e00-2015-06-17 09:37:11Z-PS" - ], - "User-Agent": [ - "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" - ] - }, - "ResponseBody": "{\r\n \"TasksList\": [],\r\n \"PropertyBag\": {\r\n \"VM Name\": \"dev01Testing\",\r\n \"Policy Name\": \"ProtPolicy01_updated\"\r\n },\r\n \"ProgressPercentage\": null,\r\n \"DynamicErrorMessage\": null,\r\n \"Type\": \"VM\",\r\n \"Operation\": \"ConfigureBackup\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-16T08:32:26.6301914Z\",\r\n \"EndTimestamp\": \"2015-06-16T08:32:29.339627Z\",\r\n \"Duration\": \"00:00:02.7094356\",\r\n \"EntityFriendlyName\": \"dev01Testing\",\r\n \"ActionsInfo\": null,\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"b0f58a95-bd96-4b50-a1d8-47d585b54995\",\r\n \"Name\": \"b0f58a95-bd96-4b50-a1d8-47d585b54995\",\r\n \"OperationInProgress\": false\r\n}", - "ResponseHeaders": { - "Content-Length": [ - "534" - ], - "Content-Type": [ - "application/json" - ], - "Expires": [ - "-1" - ], - "Pragma": [ - "no-cache" - ], - "x-ms-request-id": [ - "83d85865-3880-4dd7-8281-0f8761c50fa6" - ], - "x-ms-client-request-id": [ - "a62a2cb9-8241-4d82-9003-8ace89220e00-2015-06-17 09:37:11Z-PS", - "a62a2cb9-8241-4d82-9003-8ace89220e00-2015-06-17 09:37:11Z-PS" - ], - "Strict-Transport-Security": [ - "max-age=31536000; includeSubDomains" - ], - "x-ms-ratelimit-remaining-subscription-reads": [ - "14893" - ], - "x-ms-correlation-request-id": [ - "83d85865-3880-4dd7-8281-0f8761c50fa6" - ], - "x-ms-routing-request-id": [ - "CENTRALUS:20150617T093712Z:83d85865-3880-4dd7-8281-0f8761c50fa6" - ], - "Cache-Control": [ - "no-cache" - ], - "Date": [ - "Wed, 17 Jun 2015 09:37:11 GMT" - ], - "Server": [ - "Microsoft-IIS/8.0" - ], - "X-Powered-By": [ - "ASP.NET" - ] - }, - "StatusCode": 200 - }, - { - "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/jobs/71617c2a-e348-4268-9077-5e4273db38c5/jobdetails?api-version=2014-09-01", - "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vam9icy83MTYxN2MyYS1lMzQ4LTQyNjgtOTA3Ny01ZTQyNzNkYjM4YzUvam9iZGV0YWlscz9hcGktdmVyc2lvbj0yMDE0LTA5LTAx", - "RequestMethod": "GET", - "RequestBody": "", - "RequestHeaders": { - "Accept-Language": [ - "en-us" - ], - "x-ms-client-request-id": [ - "284ae55b-035f-4d28-bc80-b9798c56077a-2015-06-17 09:37:12Z-PS" - ], - "User-Agent": [ - "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" - ] - }, - "ResponseBody": "{\r\n \"TasksList\": [],\r\n \"PropertyBag\": {\r\n \"VM Name\": \"dev01Testing\",\r\n \"Policy Name\": \"ProtPolicy01_updated\"\r\n },\r\n \"ProgressPercentage\": null,\r\n \"DynamicErrorMessage\": null,\r\n \"Type\": \"VM\",\r\n \"Operation\": \"ConfigureBackup\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-16T08:27:38.2970023Z\",\r\n \"EndTimestamp\": \"2015-06-16T08:27:40.2464079Z\",\r\n \"Duration\": \"00:00:01.9494056\",\r\n \"EntityFriendlyName\": \"dev01Testing\",\r\n \"ActionsInfo\": null,\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"71617c2a-e348-4268-9077-5e4273db38c5\",\r\n \"Name\": \"71617c2a-e348-4268-9077-5e4273db38c5\",\r\n \"OperationInProgress\": false\r\n}", - "ResponseHeaders": { - "Content-Length": [ - "535" - ], - "Content-Type": [ - "application/json" - ], - "Expires": [ - "-1" - ], - "Pragma": [ - "no-cache" - ], - "x-ms-request-id": [ - "5760a637-0da9-496f-964b-2e69cd7bb7f1" - ], - "x-ms-client-request-id": [ - "284ae55b-035f-4d28-bc80-b9798c56077a-2015-06-17 09:37:12Z-PS", - "284ae55b-035f-4d28-bc80-b9798c56077a-2015-06-17 09:37:12Z-PS" - ], - "Strict-Transport-Security": [ - "max-age=31536000; includeSubDomains" - ], - "x-ms-ratelimit-remaining-subscription-reads": [ - "14892" - ], - "x-ms-correlation-request-id": [ - "5760a637-0da9-496f-964b-2e69cd7bb7f1" - ], - "x-ms-routing-request-id": [ - "CENTRALUS:20150617T093713Z:5760a637-0da9-496f-964b-2e69cd7bb7f1" - ], - "Cache-Control": [ - "no-cache" - ], - "Date": [ - "Wed, 17 Jun 2015 09:37:12 GMT" - ], - "Server": [ - "Microsoft-IIS/8.0" - ], - "X-Powered-By": [ - "ASP.NET" - ] - }, - "StatusCode": 200 - }, - { - "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/jobs/b32c86bd-e101-434a-8692-c66fa5e29061/jobdetails?api-version=2014-09-01", - "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vam9icy9iMzJjODZiZC1lMTAxLTQzNGEtODY5Mi1jNjZmYTVlMjkwNjEvam9iZGV0YWlscz9hcGktdmVyc2lvbj0yMDE0LTA5LTAx", - "RequestMethod": "GET", - "RequestBody": "", - "RequestHeaders": { - "Accept-Language": [ - "en-us" - ], - "x-ms-client-request-id": [ - "0c302e44-64fb-4493-bb6b-6962077ebbf2-2015-06-17 09:37:13Z-PS" - ], - "User-Agent": [ - "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" - ] - }, - "ResponseBody": "{\r\n \"TasksList\": [],\r\n \"PropertyBag\": {\r\n \"VM Name\": \"dev01Testing\",\r\n \"Delete Backup Data\": \"False\"\r\n },\r\n \"ProgressPercentage\": null,\r\n \"DynamicErrorMessage\": null,\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Unprotect\",\r\n \"Status\": \"Failed\",\r\n \"StartTimestamp\": \"2015-06-16T08:27:16.5876939Z\",\r\n \"EndTimestamp\": \"2015-06-16T08:27:19.0011557Z\",\r\n \"Duration\": \"00:00:02.4134618\",\r\n \"EntityFriendlyName\": \"dev01Testing\",\r\n \"ActionsInfo\": null,\r\n \"ErrorDetails\": [\r\n {\r\n \"ErrorCode\": 1073871825,\r\n \"ErrorTitle\": \"\",\r\n \"ErrorString\": \"Microsoft Azure Backup encountered an internal error.\",\r\n \"Recommendations\": [\r\n \"Wait for a few minutes and then try the operation again. If the issue persists, contact Microsoft Support.\"\r\n ]\r\n }\r\n ],\r\n \"InstanceId\": \"b32c86bd-e101-434a-8692-c66fa5e29061\",\r\n \"Name\": \"b32c86bd-e101-434a-8692-c66fa5e29061\",\r\n \"OperationInProgress\": false\r\n}", - "ResponseHeaders": { - "Content-Length": [ - "755" - ], - "Content-Type": [ - "application/json" - ], - "Expires": [ - "-1" - ], - "Pragma": [ - "no-cache" - ], - "x-ms-request-id": [ - "b91d45de-ef6c-43ab-819d-8c4b3daf8b01" - ], - "x-ms-client-request-id": [ - "0c302e44-64fb-4493-bb6b-6962077ebbf2-2015-06-17 09:37:13Z-PS", - "0c302e44-64fb-4493-bb6b-6962077ebbf2-2015-06-17 09:37:13Z-PS" - ], - "Strict-Transport-Security": [ - "max-age=31536000; includeSubDomains" - ], - "x-ms-ratelimit-remaining-subscription-reads": [ - "14891" - ], - "x-ms-correlation-request-id": [ - "b91d45de-ef6c-43ab-819d-8c4b3daf8b01" - ], - "x-ms-routing-request-id": [ - "CENTRALUS:20150617T093714Z:b91d45de-ef6c-43ab-819d-8c4b3daf8b01" - ], - "Cache-Control": [ - "no-cache" - ], - "Date": [ - "Wed, 17 Jun 2015 09:37:14 GMT" - ], - "Server": [ - "Microsoft-IIS/8.0" - ], - "X-Powered-By": [ - "ASP.NET" - ] - }, - "StatusCode": 200 - }, - { - "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/jobs/e605039d-3937-42e7-bf7a-ca192d630250/jobdetails?api-version=2014-09-01", - "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vam9icy9lNjA1MDM5ZC0zOTM3LTQyZTctYmY3YS1jYTE5MmQ2MzAyNTAvam9iZGV0YWlscz9hcGktdmVyc2lvbj0yMDE0LTA5LTAx", - "RequestMethod": "GET", - "RequestBody": "", - "RequestHeaders": { - "Accept-Language": [ - "en-us" - ], - "x-ms-client-request-id": [ - "7de813a4-2fc1-4373-a036-36e2a34118db-2015-06-17 09:37:14Z-PS" - ], - "User-Agent": [ - "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" - ] - }, - "ResponseBody": "{\r\n \"TasksList\": [],\r\n \"PropertyBag\": {\r\n \"VM Name\": \"dev01Testing\",\r\n \"Policy Name\": \"ProtPolicy01_updated\"\r\n },\r\n \"ProgressPercentage\": null,\r\n \"DynamicErrorMessage\": null,\r\n \"Type\": \"VM\",\r\n \"Operation\": \"ConfigureBackup\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-16T08:26:54.494304Z\",\r\n \"EndTimestamp\": \"2015-06-16T08:26:57.4105598Z\",\r\n \"Duration\": \"00:00:02.9162558\",\r\n \"EntityFriendlyName\": \"dev01Testing\",\r\n \"ActionsInfo\": null,\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"e605039d-3937-42e7-bf7a-ca192d630250\",\r\n \"Name\": \"e605039d-3937-42e7-bf7a-ca192d630250\",\r\n \"OperationInProgress\": false\r\n}", - "ResponseHeaders": { - "Content-Length": [ - "534" - ], - "Content-Type": [ - "application/json" - ], - "Expires": [ - "-1" - ], - "Pragma": [ - "no-cache" - ], - "x-ms-request-id": [ - "ac6b3ac6-86b2-4f35-8604-4b3b3888541f" - ], - "x-ms-client-request-id": [ - "7de813a4-2fc1-4373-a036-36e2a34118db-2015-06-17 09:37:14Z-PS", - "7de813a4-2fc1-4373-a036-36e2a34118db-2015-06-17 09:37:14Z-PS" - ], - "Strict-Transport-Security": [ - "max-age=31536000; includeSubDomains" - ], - "x-ms-ratelimit-remaining-subscription-reads": [ - "14890" - ], - "x-ms-correlation-request-id": [ - "ac6b3ac6-86b2-4f35-8604-4b3b3888541f" - ], - "x-ms-routing-request-id": [ - "CENTRALUS:20150617T093714Z:ac6b3ac6-86b2-4f35-8604-4b3b3888541f" - ], - "Cache-Control": [ - "no-cache" - ], - "Date": [ - "Wed, 17 Jun 2015 09:37:14 GMT" - ], - "Server": [ - "Microsoft-IIS/8.0" - ], - "X-Powered-By": [ - "ASP.NET" - ] - }, - "StatusCode": 200 - }, - { - "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/jobs/463fbae9-2bcc-46af-8e2e-8487883ca673/jobdetails?api-version=2014-09-01", - "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vam9icy80NjNmYmFlOS0yYmNjLTQ2YWYtOGUyZS04NDg3ODgzY2E2NzMvam9iZGV0YWlscz9hcGktdmVyc2lvbj0yMDE0LTA5LTAx", - "RequestMethod": "GET", - "RequestBody": "", - "RequestHeaders": { - "Accept-Language": [ - "en-us" - ], - "x-ms-client-request-id": [ - "6a6678ef-2b2f-4924-9a5e-a97328d578fb-2015-06-17 09:37:15Z-PS" - ], - "User-Agent": [ - "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" - ] - }, - "ResponseBody": "{\r\n \"TasksList\": [],\r\n \"PropertyBag\": {\r\n \"VM Name\": \"dev01Testing\",\r\n \"Policy Name\": \"ProtPolicy01_updated\"\r\n },\r\n \"ProgressPercentage\": null,\r\n \"DynamicErrorMessage\": null,\r\n \"Type\": \"VM\",\r\n \"Operation\": \"ConfigureBackup\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-16T08:18:25.2594536Z\",\r\n \"EndTimestamp\": \"2015-06-16T08:18:28.6399787Z\",\r\n \"Duration\": \"00:00:03.3805251\",\r\n \"EntityFriendlyName\": \"dev01Testing\",\r\n \"ActionsInfo\": null,\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"463fbae9-2bcc-46af-8e2e-8487883ca673\",\r\n \"Name\": \"463fbae9-2bcc-46af-8e2e-8487883ca673\",\r\n \"OperationInProgress\": false\r\n}", - "ResponseHeaders": { - "Content-Length": [ - "535" - ], - "Content-Type": [ - "application/json" - ], - "Expires": [ - "-1" - ], - "Pragma": [ - "no-cache" - ], - "x-ms-request-id": [ - "0ed0f649-cbf5-4819-b912-4327714fac5d" - ], - "x-ms-client-request-id": [ - "6a6678ef-2b2f-4924-9a5e-a97328d578fb-2015-06-17 09:37:15Z-PS", - "6a6678ef-2b2f-4924-9a5e-a97328d578fb-2015-06-17 09:37:15Z-PS" - ], - "Strict-Transport-Security": [ - "max-age=31536000; includeSubDomains" - ], - "x-ms-ratelimit-remaining-subscription-reads": [ - "14889" - ], - "x-ms-correlation-request-id": [ - "0ed0f649-cbf5-4819-b912-4327714fac5d" - ], - "x-ms-routing-request-id": [ - "CENTRALUS:20150617T093715Z:0ed0f649-cbf5-4819-b912-4327714fac5d" - ], - "Cache-Control": [ - "no-cache" - ], - "Date": [ - "Wed, 17 Jun 2015 09:37:15 GMT" - ], - "Server": [ - "Microsoft-IIS/8.0" - ], - "X-Powered-By": [ - "ASP.NET" - ] - }, - "StatusCode": 200 - }, - { - "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/jobs/4e971b74-5842-4bbe-a766-d8d9fb1da9e4/jobdetails?api-version=2014-09-01", - "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vam9icy80ZTk3MWI3NC01ODQyLTRiYmUtYTc2Ni1kOGQ5ZmIxZGE5ZTQvam9iZGV0YWlscz9hcGktdmVyc2lvbj0yMDE0LTA5LTAx", - "RequestMethod": "GET", - "RequestBody": "", - "RequestHeaders": { - "Accept-Language": [ - "en-us" - ], - "x-ms-client-request-id": [ - "aee7f567-e4ba-42be-bf00-1110420b7f1b-2015-06-17 09:37:16Z-PS" - ], - "User-Agent": [ - "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" - ] - }, - "ResponseBody": "{\r\n \"TasksList\": [],\r\n \"PropertyBag\": {\r\n \"VM Name\": \"dev01Testing\",\r\n \"Delete Backup Data\": \"False\"\r\n },\r\n \"ProgressPercentage\": null,\r\n \"DynamicErrorMessage\": null,\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Unprotect\",\r\n \"Status\": \"Failed\",\r\n \"StartTimestamp\": \"2015-06-16T08:18:03.5880068Z\",\r\n \"EndTimestamp\": \"2015-06-16T08:18:05.8881248Z\",\r\n \"Duration\": \"00:00:02.3001180\",\r\n \"EntityFriendlyName\": \"dev01Testing\",\r\n \"ActionsInfo\": null,\r\n \"ErrorDetails\": [\r\n {\r\n \"ErrorCode\": 1073871825,\r\n \"ErrorTitle\": \"\",\r\n \"ErrorString\": \"Microsoft Azure Backup encountered an internal error.\",\r\n \"Recommendations\": [\r\n \"Wait for a few minutes and then try the operation again. If the issue persists, contact Microsoft Support.\"\r\n ]\r\n }\r\n ],\r\n \"InstanceId\": \"4e971b74-5842-4bbe-a766-d8d9fb1da9e4\",\r\n \"Name\": \"4e971b74-5842-4bbe-a766-d8d9fb1da9e4\",\r\n \"OperationInProgress\": false\r\n}", - "ResponseHeaders": { - "Content-Length": [ - "755" - ], - "Content-Type": [ - "application/json" - ], - "Expires": [ - "-1" - ], - "Pragma": [ - "no-cache" - ], - "x-ms-request-id": [ - "3ca41bdc-fa1b-4986-a811-e71924bdd191" - ], - "x-ms-client-request-id": [ - "aee7f567-e4ba-42be-bf00-1110420b7f1b-2015-06-17 09:37:16Z-PS", - "aee7f567-e4ba-42be-bf00-1110420b7f1b-2015-06-17 09:37:16Z-PS" - ], - "Strict-Transport-Security": [ - "max-age=31536000; includeSubDomains" - ], - "x-ms-ratelimit-remaining-subscription-reads": [ - "14888" - ], - "x-ms-correlation-request-id": [ - "3ca41bdc-fa1b-4986-a811-e71924bdd191" - ], - "x-ms-routing-request-id": [ - "CENTRALUS:20150617T093716Z:3ca41bdc-fa1b-4986-a811-e71924bdd191" - ], - "Cache-Control": [ - "no-cache" - ], - "Date": [ - "Wed, 17 Jun 2015 09:37:16 GMT" - ], - "Server": [ - "Microsoft-IIS/8.0" - ], - "X-Powered-By": [ - "ASP.NET" - ] - }, - "StatusCode": 200 - }, - { - "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/jobs/56e7bc5c-8857-4ee2-8a7d-7ec78071c23f/jobdetails?api-version=2014-09-01", - "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vam9icy81NmU3YmM1Yy04ODU3LTRlZTItOGE3ZC03ZWM3ODA3MWMyM2Yvam9iZGV0YWlscz9hcGktdmVyc2lvbj0yMDE0LTA5LTAx", - "RequestMethod": "GET", - "RequestBody": "", - "RequestHeaders": { - "Accept-Language": [ - "en-us" - ], - "x-ms-client-request-id": [ - "98dbc3b6-e9ec-4a38-b643-a1e5f157c71e-2015-06-17 09:37:16Z-PS" - ], - "User-Agent": [ - "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" - ] - }, - "ResponseBody": "{\r\n \"TasksList\": [],\r\n \"PropertyBag\": {\r\n \"VM Name\": \"dev01Testing\",\r\n \"Policy Name\": \"ProtPolicy01_updated\"\r\n },\r\n \"ProgressPercentage\": null,\r\n \"DynamicErrorMessage\": null,\r\n \"Type\": \"VM\",\r\n \"Operation\": \"ConfigureBackup\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-16T08:17:41.6186629Z\",\r\n \"EndTimestamp\": \"2015-06-16T08:17:52.5720242Z\",\r\n \"Duration\": \"00:00:10.9533613\",\r\n \"EntityFriendlyName\": \"dev01Testing\",\r\n \"ActionsInfo\": null,\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"56e7bc5c-8857-4ee2-8a7d-7ec78071c23f\",\r\n \"Name\": \"56e7bc5c-8857-4ee2-8a7d-7ec78071c23f\",\r\n \"OperationInProgress\": false\r\n}", - "ResponseHeaders": { - "Content-Length": [ - "535" - ], - "Content-Type": [ - "application/json" - ], - "Expires": [ - "-1" - ], - "Pragma": [ - "no-cache" - ], - "x-ms-request-id": [ - "523d8863-93b4-4289-b6df-cd2bd0aa84a2" - ], - "x-ms-client-request-id": [ - "98dbc3b6-e9ec-4a38-b643-a1e5f157c71e-2015-06-17 09:37:16Z-PS", - "98dbc3b6-e9ec-4a38-b643-a1e5f157c71e-2015-06-17 09:37:16Z-PS" - ], - "Strict-Transport-Security": [ - "max-age=31536000; includeSubDomains" - ], - "x-ms-ratelimit-remaining-subscription-reads": [ - "14887" - ], - "x-ms-correlation-request-id": [ - "523d8863-93b4-4289-b6df-cd2bd0aa84a2" - ], - "x-ms-routing-request-id": [ - "CENTRALUS:20150617T093717Z:523d8863-93b4-4289-b6df-cd2bd0aa84a2" - ], - "Cache-Control": [ - "no-cache" - ], - "Date": [ - "Wed, 17 Jun 2015 09:37:17 GMT" - ], - "Server": [ - "Microsoft-IIS/8.0" - ], - "X-Powered-By": [ - "ASP.NET" - ] - }, - "StatusCode": 200 - }, - { - "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/jobs/b7ee843b-1fd1-4a2f-bdf9-eee6b4821fc1/jobdetails?api-version=2014-09-01", - "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vam9icy9iN2VlODQzYi0xZmQxLTRhMmYtYmRmOS1lZWU2YjQ4MjFmYzEvam9iZGV0YWlscz9hcGktdmVyc2lvbj0yMDE0LTA5LTAx", - "RequestMethod": "GET", - "RequestBody": "", - "RequestHeaders": { - "Accept-Language": [ - "en-us" - ], - "x-ms-client-request-id": [ - "9a13af19-7175-49d0-be79-09538fcc9b5f-2015-06-17 09:37:17Z-PS" - ], - "User-Agent": [ - "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" - ] - }, - "ResponseBody": "{\r\n \"TasksList\": [],\r\n \"PropertyBag\": {\r\n \"VM Name\": \"dev01Testing\",\r\n \"Delete Backup Data\": \"False\"\r\n },\r\n \"ProgressPercentage\": null,\r\n \"DynamicErrorMessage\": null,\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Unprotect\",\r\n \"Status\": \"Failed\",\r\n \"StartTimestamp\": \"2015-06-16T06:31:21.0804773Z\",\r\n \"EndTimestamp\": \"2015-06-16T06:31:22.9163182Z\",\r\n \"Duration\": \"00:00:01.8358409\",\r\n \"EntityFriendlyName\": \"dev01Testing\",\r\n \"ActionsInfo\": null,\r\n \"ErrorDetails\": [\r\n {\r\n \"ErrorCode\": 1073871825,\r\n \"ErrorTitle\": \"\",\r\n \"ErrorString\": \"Microsoft Azure Backup encountered an internal error.\",\r\n \"Recommendations\": [\r\n \"Wait for a few minutes and then try the operation again. If the issue persists, contact Microsoft Support.\"\r\n ]\r\n }\r\n ],\r\n \"InstanceId\": \"b7ee843b-1fd1-4a2f-bdf9-eee6b4821fc1\",\r\n \"Name\": \"b7ee843b-1fd1-4a2f-bdf9-eee6b4821fc1\",\r\n \"OperationInProgress\": false\r\n}", - "ResponseHeaders": { - "Content-Length": [ - "755" - ], - "Content-Type": [ - "application/json" - ], - "Expires": [ - "-1" - ], - "Pragma": [ - "no-cache" - ], - "x-ms-request-id": [ - "9015c196-cf2f-4118-94e7-5566235e9e70" - ], - "x-ms-client-request-id": [ - "9a13af19-7175-49d0-be79-09538fcc9b5f-2015-06-17 09:37:17Z-PS", - "9a13af19-7175-49d0-be79-09538fcc9b5f-2015-06-17 09:37:17Z-PS" - ], - "Strict-Transport-Security": [ - "max-age=31536000; includeSubDomains" - ], - "x-ms-ratelimit-remaining-subscription-reads": [ - "14886" - ], - "x-ms-correlation-request-id": [ - "9015c196-cf2f-4118-94e7-5566235e9e70" - ], - "x-ms-routing-request-id": [ - "CENTRALUS:20150617T093718Z:9015c196-cf2f-4118-94e7-5566235e9e70" - ], - "Cache-Control": [ - "no-cache" - ], - "Date": [ - "Wed, 17 Jun 2015 09:37:17 GMT" - ], - "Server": [ - "Microsoft-IIS/8.0" - ], - "X-Powered-By": [ - "ASP.NET" - ] - }, - "StatusCode": 200 - }, - { - "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/jobs/7321f849-253a-496d-8a50-027f7e024a48/jobdetails?api-version=2014-09-01", - "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vam9icy83MzIxZjg0OS0yNTNhLTQ5NmQtOGE1MC0wMjdmN2UwMjRhNDgvam9iZGV0YWlscz9hcGktdmVyc2lvbj0yMDE0LTA5LTAx", - "RequestMethod": "GET", - "RequestBody": "", - "RequestHeaders": { - "Accept-Language": [ - "en-us" - ], - "x-ms-client-request-id": [ - "b88db386-3d4d-4597-96e8-16642b0c6e57-2015-06-17 09:37:18Z-PS" - ], - "User-Agent": [ - "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" - ] - }, - "ResponseBody": "{\r\n \"TasksList\": [],\r\n \"PropertyBag\": {\r\n \"VM Name\": \"dev01Testing\",\r\n \"Policy Name\": \"ProtPolicy01_updated\"\r\n },\r\n \"ProgressPercentage\": null,\r\n \"DynamicErrorMessage\": null,\r\n \"Type\": \"VM\",\r\n \"Operation\": \"ConfigureBackup\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-16T06:30:58.9651061Z\",\r\n \"EndTimestamp\": \"2015-06-16T06:31:03.5761814Z\",\r\n \"Duration\": \"00:00:04.6110753\",\r\n \"EntityFriendlyName\": \"dev01Testing\",\r\n \"ActionsInfo\": null,\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"7321f849-253a-496d-8a50-027f7e024a48\",\r\n \"Name\": \"7321f849-253a-496d-8a50-027f7e024a48\",\r\n \"OperationInProgress\": false\r\n}", - "ResponseHeaders": { - "Content-Length": [ - "535" - ], - "Content-Type": [ - "application/json" - ], - "Expires": [ - "-1" - ], - "Pragma": [ - "no-cache" - ], - "x-ms-request-id": [ - "6b1fc5fc-7db3-4b01-9e76-e1b30b2d3705" - ], - "x-ms-client-request-id": [ - "b88db386-3d4d-4597-96e8-16642b0c6e57-2015-06-17 09:37:18Z-PS", - "b88db386-3d4d-4597-96e8-16642b0c6e57-2015-06-17 09:37:18Z-PS" - ], - "Strict-Transport-Security": [ - "max-age=31536000; includeSubDomains" - ], - "x-ms-ratelimit-remaining-subscription-reads": [ - "14885" - ], - "x-ms-correlation-request-id": [ - "6b1fc5fc-7db3-4b01-9e76-e1b30b2d3705" - ], - "x-ms-routing-request-id": [ - "CENTRALUS:20150617T093719Z:6b1fc5fc-7db3-4b01-9e76-e1b30b2d3705" - ], - "Cache-Control": [ - "no-cache" - ], - "Date": [ - "Wed, 17 Jun 2015 09:37:18 GMT" - ], - "Server": [ - "Microsoft-IIS/8.0" - ], - "X-Powered-By": [ - "ASP.NET" - ] - }, - "StatusCode": 200 - }, - { - "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/jobs/1d98c568-c8e1-4341-991d-0829d33c5fb7/jobdetails?api-version=2014-09-01", - "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vam9icy8xZDk4YzU2OC1jOGUxLTQzNDEtOTkxZC0wODI5ZDMzYzVmYjcvam9iZGV0YWlscz9hcGktdmVyc2lvbj0yMDE0LTA5LTAx", - "RequestMethod": "GET", - "RequestBody": "", - "RequestHeaders": { - "Accept-Language": [ - "en-us" - ], - "x-ms-client-request-id": [ - "a3674ee1-adcd-4b07-a8a7-04a3460a2f57-2015-06-17 09:37:19Z-PS" - ], - "User-Agent": [ - "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" - ] - }, - "ResponseBody": "{\r\n \"TasksList\": [],\r\n \"PropertyBag\": {\r\n \"VM Name\": \"dev01Testing\",\r\n \"Policy Name\": \"ProtPolicy01_updated\"\r\n },\r\n \"ProgressPercentage\": null,\r\n \"DynamicErrorMessage\": null,\r\n \"Type\": \"VM\",\r\n \"Operation\": \"ConfigureBackup\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-16T06:09:33.354948Z\",\r\n \"EndTimestamp\": \"2015-06-16T06:09:35.4256827Z\",\r\n \"Duration\": \"00:00:02.0707347\",\r\n \"EntityFriendlyName\": \"dev01Testing\",\r\n \"ActionsInfo\": null,\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"1d98c568-c8e1-4341-991d-0829d33c5fb7\",\r\n \"Name\": \"1d98c568-c8e1-4341-991d-0829d33c5fb7\",\r\n \"OperationInProgress\": false\r\n}", - "ResponseHeaders": { - "Content-Length": [ - "534" - ], - "Content-Type": [ - "application/json" - ], - "Expires": [ - "-1" - ], - "Pragma": [ - "no-cache" - ], - "x-ms-request-id": [ - "646e888e-8773-44b3-b4a8-f3df4afbf02f" - ], - "x-ms-client-request-id": [ - "a3674ee1-adcd-4b07-a8a7-04a3460a2f57-2015-06-17 09:37:19Z-PS", - "a3674ee1-adcd-4b07-a8a7-04a3460a2f57-2015-06-17 09:37:19Z-PS" - ], - "Strict-Transport-Security": [ - "max-age=31536000; includeSubDomains" - ], - "x-ms-ratelimit-remaining-subscription-reads": [ - "14884" - ], - "x-ms-correlation-request-id": [ - "646e888e-8773-44b3-b4a8-f3df4afbf02f" - ], - "x-ms-routing-request-id": [ - "CENTRALUS:20150617T093719Z:646e888e-8773-44b3-b4a8-f3df4afbf02f" - ], - "Cache-Control": [ - "no-cache" - ], - "Date": [ - "Wed, 17 Jun 2015 09:37:19 GMT" - ], - "Server": [ - "Microsoft-IIS/8.0" - ], - "X-Powered-By": [ - "ASP.NET" - ] - }, - "StatusCode": 200 - }, - { - "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/jobs/46c87d04-bb63-47e6-9830-c4172ead903f/jobdetails?api-version=2014-09-01", - "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vam9icy80NmM4N2QwNC1iYjYzLTQ3ZTYtOTgzMC1jNDE3MmVhZDkwM2Yvam9iZGV0YWlscz9hcGktdmVyc2lvbj0yMDE0LTA5LTAx", - "RequestMethod": "GET", - "RequestBody": "", - "RequestHeaders": { - "Accept-Language": [ - "en-us" - ], - "x-ms-client-request-id": [ - "0c9fa3f0-3f5c-483b-b4ad-04b081593fb2-2015-06-17 09:37:20Z-PS" - ], - "User-Agent": [ - "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" - ] - }, - "ResponseBody": "{\r\n \"TasksList\": [],\r\n \"PropertyBag\": {\r\n \"VM Name\": \"dev01Testing\",\r\n \"Policy Name\": \"ProtPolicy01\"\r\n },\r\n \"ProgressPercentage\": null,\r\n \"DynamicErrorMessage\": null,\r\n \"Type\": \"VM\",\r\n \"Operation\": \"ConfigureBackup\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-16T06:09:06.5941766Z\",\r\n \"EndTimestamp\": \"2015-06-16T06:09:09.108794Z\",\r\n \"Duration\": \"00:00:02.5146174\",\r\n \"EntityFriendlyName\": \"dev01Testing\",\r\n \"ActionsInfo\": null,\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"46c87d04-bb63-47e6-9830-c4172ead903f\",\r\n \"Name\": \"46c87d04-bb63-47e6-9830-c4172ead903f\",\r\n \"OperationInProgress\": false\r\n}", - "ResponseHeaders": { - "Content-Length": [ - "526" - ], - "Content-Type": [ - "application/json" - ], - "Expires": [ - "-1" - ], - "Pragma": [ - "no-cache" - ], - "x-ms-request-id": [ - "45c29f3a-5be7-4781-bc0e-58022bd3fe38" - ], - "x-ms-client-request-id": [ - "0c9fa3f0-3f5c-483b-b4ad-04b081593fb2-2015-06-17 09:37:20Z-PS", - "0c9fa3f0-3f5c-483b-b4ad-04b081593fb2-2015-06-17 09:37:20Z-PS" - ], - "Strict-Transport-Security": [ - "max-age=31536000; includeSubDomains" - ], - "x-ms-ratelimit-remaining-subscription-reads": [ - "14883" - ], - "x-ms-correlation-request-id": [ - "45c29f3a-5be7-4781-bc0e-58022bd3fe38" - ], - "x-ms-routing-request-id": [ - "CENTRALUS:20150617T093720Z:45c29f3a-5be7-4781-bc0e-58022bd3fe38" - ], - "Cache-Control": [ - "no-cache" - ], - "Date": [ - "Wed, 17 Jun 2015 09:37:20 GMT" - ], - "Server": [ - "Microsoft-IIS/8.0" - ], - "X-Powered-By": [ - "ASP.NET" - ] - }, - "StatusCode": 200 - }, - { - "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/jobs/8f01a660-0908-48c1-9b8b-9594cbc8fd01/jobdetails?api-version=2014-09-01", - "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vam9icy84ZjAxYTY2MC0wOTA4LTQ4YzEtOWI4Yi05NTk0Y2JjOGZkMDEvam9iZGV0YWlscz9hcGktdmVyc2lvbj0yMDE0LTA5LTAx", - "RequestMethod": "GET", - "RequestBody": "", - "RequestHeaders": { - "Accept-Language": [ - "en-us" - ], - "x-ms-client-request-id": [ - "ad62604d-ddb6-4f1f-9a7e-c6267c8e87bb-2015-06-17 09:37:21Z-PS" - ], - "User-Agent": [ - "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" - ] - }, - "ResponseBody": "{\r\n \"TasksList\": [],\r\n \"PropertyBag\": {\r\n \"VM Name\": \"dev01Testing\",\r\n \"Delete Backup Data\": \"False\"\r\n },\r\n \"ProgressPercentage\": null,\r\n \"DynamicErrorMessage\": null,\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Unprotect\",\r\n \"Status\": \"Failed\",\r\n \"StartTimestamp\": \"2015-06-16T06:08:44.9026099Z\",\r\n \"EndTimestamp\": \"2015-06-16T06:08:47.6574861Z\",\r\n \"Duration\": \"00:00:02.7548762\",\r\n \"EntityFriendlyName\": \"dev01Testing\",\r\n \"ActionsInfo\": null,\r\n \"ErrorDetails\": [\r\n {\r\n \"ErrorCode\": 1073871825,\r\n \"ErrorTitle\": \"\",\r\n \"ErrorString\": \"Microsoft Azure Backup encountered an internal error.\",\r\n \"Recommendations\": [\r\n \"Wait for a few minutes and then try the operation again. If the issue persists, contact Microsoft Support.\"\r\n ]\r\n }\r\n ],\r\n \"InstanceId\": \"8f01a660-0908-48c1-9b8b-9594cbc8fd01\",\r\n \"Name\": \"8f01a660-0908-48c1-9b8b-9594cbc8fd01\",\r\n \"OperationInProgress\": false\r\n}", - "ResponseHeaders": { - "Content-Length": [ - "755" - ], - "Content-Type": [ - "application/json" - ], - "Expires": [ - "-1" - ], - "Pragma": [ - "no-cache" - ], - "x-ms-request-id": [ - "a100f102-0bfc-472c-ad38-59c2985129f2" - ], - "x-ms-client-request-id": [ - "ad62604d-ddb6-4f1f-9a7e-c6267c8e87bb-2015-06-17 09:37:21Z-PS", - "ad62604d-ddb6-4f1f-9a7e-c6267c8e87bb-2015-06-17 09:37:21Z-PS" - ], - "Strict-Transport-Security": [ - "max-age=31536000; includeSubDomains" - ], - "x-ms-ratelimit-remaining-subscription-reads": [ - "14882" - ], - "x-ms-correlation-request-id": [ - "a100f102-0bfc-472c-ad38-59c2985129f2" - ], - "x-ms-routing-request-id": [ - "CENTRALUS:20150617T093721Z:a100f102-0bfc-472c-ad38-59c2985129f2" - ], - "Cache-Control": [ - "no-cache" - ], - "Date": [ - "Wed, 17 Jun 2015 09:37:20 GMT" - ], - "Server": [ - "Microsoft-IIS/8.0" - ], - "X-Powered-By": [ - "ASP.NET" - ] - }, - "StatusCode": 200 - }, - { - "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/jobs/2cb3ab5e-8dc5-44c0-80d8-f58789392b5e/jobdetails?api-version=2014-09-01", - "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vam9icy8yY2IzYWI1ZS04ZGM1LTQ0YzAtODBkOC1mNTg3ODkzOTJiNWUvam9iZGV0YWlscz9hcGktdmVyc2lvbj0yMDE0LTA5LTAx", - "RequestMethod": "GET", - "RequestBody": "", - "RequestHeaders": { - "Accept-Language": [ - "en-us" - ], - "x-ms-client-request-id": [ - "85492416-c93f-4cc1-8a89-b0d9ab505aec-2015-06-17 09:37:21Z-PS" - ], - "User-Agent": [ - "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" - ] - }, - "ResponseBody": "{\r\n \"TasksList\": [],\r\n \"PropertyBag\": {\r\n \"VM Name\": \"dev01Testing\",\r\n \"Policy Name\": \"ProtPolicy01\"\r\n },\r\n \"ProgressPercentage\": null,\r\n \"DynamicErrorMessage\": null,\r\n \"Type\": \"VM\",\r\n \"Operation\": \"ConfigureBackup\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-16T06:08:22.3327404Z\",\r\n \"EndTimestamp\": \"2015-06-16T06:08:31.6070217Z\",\r\n \"Duration\": \"00:00:09.2742813\",\r\n \"EntityFriendlyName\": \"dev01Testing\",\r\n \"ActionsInfo\": null,\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"2cb3ab5e-8dc5-44c0-80d8-f58789392b5e\",\r\n \"Name\": \"2cb3ab5e-8dc5-44c0-80d8-f58789392b5e\",\r\n \"OperationInProgress\": false\r\n}", - "ResponseHeaders": { - "Content-Length": [ - "527" - ], - "Content-Type": [ - "application/json" - ], - "Expires": [ - "-1" - ], - "Pragma": [ - "no-cache" - ], - "x-ms-request-id": [ - "ce2507c4-e777-477b-820e-c27e8dabf90c" - ], - "x-ms-client-request-id": [ - "85492416-c93f-4cc1-8a89-b0d9ab505aec-2015-06-17 09:37:21Z-PS", - "85492416-c93f-4cc1-8a89-b0d9ab505aec-2015-06-17 09:37:21Z-PS" - ], - "Strict-Transport-Security": [ - "max-age=31536000; includeSubDomains" - ], - "x-ms-ratelimit-remaining-subscription-reads": [ - "14881" - ], - "x-ms-correlation-request-id": [ - "ce2507c4-e777-477b-820e-c27e8dabf90c" - ], - "x-ms-routing-request-id": [ - "CENTRALUS:20150617T093722Z:ce2507c4-e777-477b-820e-c27e8dabf90c" - ], - "Cache-Control": [ - "no-cache" - ], - "Date": [ - "Wed, 17 Jun 2015 09:37:21 GMT" - ], - "Server": [ - "Microsoft-IIS/8.0" - ], - "X-Powered-By": [ - "ASP.NET" - ] - }, - "StatusCode": 200 - }, - { - "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/jobs/bcc46976-4cde-4c48-b19a-baa001e9aea0/jobdetails?api-version=2014-09-01", - "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vam9icy9iY2M0Njk3Ni00Y2RlLTRjNDgtYjE5YS1iYWEwMDFlOWFlYTAvam9iZGV0YWlscz9hcGktdmVyc2lvbj0yMDE0LTA5LTAx", - "RequestMethod": "GET", - "RequestBody": "", - "RequestHeaders": { - "Accept-Language": [ - "en-us" - ], - "x-ms-client-request-id": [ - "c7f20994-d872-4286-8a8a-03f4db76fc73-2015-06-17 09:37:22Z-PS" - ], - "User-Agent": [ - "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" - ] - }, - "ResponseBody": "{\r\n \"TasksList\": [\r\n {\r\n \"TaskId\": \"Take Snapshot\",\r\n \"StartTime\": null,\r\n \"EndTime\": null,\r\n \"Duration\": \"00:00:00\",\r\n \"Status\": \"Cancelled\",\r\n \"ProgressPercentage\": null,\r\n \"InstanceId\": null,\r\n \"Name\": null,\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"TaskId\": \"Transfer data to Backup vault\",\r\n \"StartTime\": null,\r\n \"EndTime\": null,\r\n \"Duration\": \"00:00:00\",\r\n \"Status\": \"NotStarted\",\r\n \"ProgressPercentage\": null,\r\n \"InstanceId\": null,\r\n \"Name\": null,\r\n \"OperationInProgress\": false\r\n }\r\n ],\r\n \"PropertyBag\": {\r\n \"VM Name\": \"dev01testing\",\r\n \"Backup Size\": \"0 MB\"\r\n },\r\n \"ProgressPercentage\": null,\r\n \"DynamicErrorMessage\": \"The following set of VSS writers failed during snapshot - \",\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Backup\",\r\n \"Status\": \"Cancelled\",\r\n \"StartTimestamp\": \"2015-06-16T04:19:02.5947672Z\",\r\n \"EndTimestamp\": \"2015-06-16T04:22:59.807138Z\",\r\n \"Duration\": \"00:03:57.2123708\",\r\n \"EntityFriendlyName\": \"dev01testing\",\r\n \"ActionsInfo\": [\r\n 1\r\n ],\r\n \"ErrorDetails\": [\r\n {\r\n \"ErrorCode\": 400057,\r\n \"ErrorTitle\": \"\",\r\n \"ErrorString\": \"Job is successfully cancelled.\",\r\n \"Recommendations\": []\r\n }\r\n ],\r\n \"InstanceId\": \"bcc46976-4cde-4c48-b19a-baa001e9aea0\",\r\n \"Name\": \"job_dev01testing_bcc46976-4cde-4c48-b19a-baa001e9aea0\",\r\n \"OperationInProgress\": false\r\n}", - "ResponseHeaders": { - "Content-Length": [ - "1071" - ], - "Content-Type": [ - "application/json" - ], - "Expires": [ - "-1" - ], - "Pragma": [ - "no-cache" - ], - "x-ms-request-id": [ - "1ac858f5-2dca-4175-aa88-ce6637df4b12" - ], - "x-ms-client-request-id": [ - "c7f20994-d872-4286-8a8a-03f4db76fc73-2015-06-17 09:37:22Z-PS", - "c7f20994-d872-4286-8a8a-03f4db76fc73-2015-06-17 09:37:22Z-PS" - ], - "Strict-Transport-Security": [ - "max-age=31536000; includeSubDomains" - ], - "x-ms-ratelimit-remaining-subscription-reads": [ - "14880" - ], - "x-ms-correlation-request-id": [ - "1ac858f5-2dca-4175-aa88-ce6637df4b12" - ], - "x-ms-routing-request-id": [ - "CENTRALUS:20150617T093723Z:1ac858f5-2dca-4175-aa88-ce6637df4b12" - ], - "Cache-Control": [ - "no-cache" - ], - "Date": [ - "Wed, 17 Jun 2015 09:37:23 GMT" - ], - "Server": [ - "Microsoft-IIS/8.0" - ], - "X-Powered-By": [ - "ASP.NET" - ] - }, - "StatusCode": 200 - }, - { - "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/jobs/0243f826-e7ea-44e0-b1c6-c3f772f43686/jobdetails?api-version=2014-09-01", - "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vam9icy8wMjQzZjgyNi1lN2VhLTQ0ZTAtYjFjNi1jM2Y3NzJmNDM2ODYvam9iZGV0YWlscz9hcGktdmVyc2lvbj0yMDE0LTA5LTAx", - "RequestMethod": "GET", - "RequestBody": "", - "RequestHeaders": { - "Accept-Language": [ - "en-us" - ], - "x-ms-client-request-id": [ - "9a679ee5-dc99-4a89-b698-67c456c629b3-2015-06-17 09:37:23Z-PS" - ], - "User-Agent": [ - "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" - ] - }, - "ResponseBody": "{\r\n \"TasksList\": [\r\n {\r\n \"TaskId\": \"Take Snapshot\",\r\n \"StartTime\": null,\r\n \"EndTime\": null,\r\n \"Duration\": \"00:00:00\",\r\n \"Status\": \"Cancelled\",\r\n \"ProgressPercentage\": null,\r\n \"InstanceId\": null,\r\n \"Name\": null,\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"TaskId\": \"Transfer data to Backup vault\",\r\n \"StartTime\": null,\r\n \"EndTime\": null,\r\n \"Duration\": \"00:00:00\",\r\n \"Status\": \"NotStarted\",\r\n \"ProgressPercentage\": null,\r\n \"InstanceId\": null,\r\n \"Name\": null,\r\n \"OperationInProgress\": false\r\n }\r\n ],\r\n \"PropertyBag\": {\r\n \"VM Name\": \"dev01testing\",\r\n \"Backup Size\": \"0 MB\"\r\n },\r\n \"ProgressPercentage\": null,\r\n \"DynamicErrorMessage\": \"The following set of VSS writers failed during snapshot - \",\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Backup\",\r\n \"Status\": \"Cancelled\",\r\n \"StartTimestamp\": \"2015-06-16T04:12:02.6093859Z\",\r\n \"EndTimestamp\": \"2015-06-16T04:15:54.3942965Z\",\r\n \"Duration\": \"00:03:51.7849106\",\r\n \"EntityFriendlyName\": \"dev01testing\",\r\n \"ActionsInfo\": [\r\n 1\r\n ],\r\n \"ErrorDetails\": [\r\n {\r\n \"ErrorCode\": 400057,\r\n \"ErrorTitle\": \"\",\r\n \"ErrorString\": \"Job is successfully cancelled.\",\r\n \"Recommendations\": []\r\n }\r\n ],\r\n \"InstanceId\": \"0243f826-e7ea-44e0-b1c6-c3f772f43686\",\r\n \"Name\": \"job_dev01testing_0243f826-e7ea-44e0-b1c6-c3f772f43686\",\r\n \"OperationInProgress\": false\r\n}", - "ResponseHeaders": { - "Content-Length": [ - "1072" - ], - "Content-Type": [ - "application/json" - ], - "Expires": [ - "-1" - ], - "Pragma": [ - "no-cache" - ], - "x-ms-request-id": [ - "82e279bb-efc2-4f54-b947-743bcea21f5b" - ], - "x-ms-client-request-id": [ - "9a679ee5-dc99-4a89-b698-67c456c629b3-2015-06-17 09:37:23Z-PS", - "9a679ee5-dc99-4a89-b698-67c456c629b3-2015-06-17 09:37:23Z-PS" - ], - "Strict-Transport-Security": [ - "max-age=31536000; includeSubDomains" - ], - "x-ms-ratelimit-remaining-subscription-reads": [ - "14879" - ], - "x-ms-correlation-request-id": [ - "82e279bb-efc2-4f54-b947-743bcea21f5b" - ], - "x-ms-routing-request-id": [ - "CENTRALUS:20150617T093723Z:82e279bb-efc2-4f54-b947-743bcea21f5b" - ], - "Cache-Control": [ - "no-cache" - ], - "Date": [ - "Wed, 17 Jun 2015 09:37:23 GMT" - ], - "Server": [ - "Microsoft-IIS/8.0" - ], - "X-Powered-By": [ - "ASP.NET" - ] - }, - "StatusCode": 200 - }, - { - "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/jobs/e3e53a20-f4b5-40f8-a926-adf72c6689a3/jobdetails?api-version=2014-09-01", - "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vam9icy9lM2U1M2EyMC1mNGI1LTQwZjgtYTkyNi1hZGY3MmM2Njg5YTMvam9iZGV0YWlscz9hcGktdmVyc2lvbj0yMDE0LTA5LTAx", - "RequestMethod": "GET", - "RequestBody": "", - "RequestHeaders": { - "Accept-Language": [ - "en-us" - ], - "x-ms-client-request-id": [ - "df543a82-8a33-4dc9-8432-e2c49cb3139e-2015-06-17 09:37:24Z-PS" - ], - "User-Agent": [ - "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" - ] - }, - "ResponseBody": "{\r\n \"TasksList\": [],\r\n \"PropertyBag\": {\r\n \"VM Name\": \"dev01Testing\",\r\n \"Policy Name\": \"Policy9\"\r\n },\r\n \"ProgressPercentage\": null,\r\n \"DynamicErrorMessage\": null,\r\n \"Type\": \"VM\",\r\n \"Operation\": \"ConfigureBackup\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-15T18:38:32.3981994Z\",\r\n \"EndTimestamp\": \"2015-06-15T18:38:34.1605724Z\",\r\n \"Duration\": \"00:00:01.7623730\",\r\n \"EntityFriendlyName\": \"dev01Testing\",\r\n \"ActionsInfo\": null,\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"e3e53a20-f4b5-40f8-a926-adf72c6689a3\",\r\n \"Name\": \"e3e53a20-f4b5-40f8-a926-adf72c6689a3\",\r\n \"OperationInProgress\": false\r\n}", - "ResponseHeaders": { - "Content-Length": [ - "522" - ], - "Content-Type": [ - "application/json" - ], - "Expires": [ - "-1" - ], - "Pragma": [ - "no-cache" - ], - "x-ms-request-id": [ - "a1542e75-2d39-4667-bfa4-c3df164f4b2c" - ], - "x-ms-client-request-id": [ - "df543a82-8a33-4dc9-8432-e2c49cb3139e-2015-06-17 09:37:24Z-PS", - "df543a82-8a33-4dc9-8432-e2c49cb3139e-2015-06-17 09:37:24Z-PS" - ], - "Strict-Transport-Security": [ - "max-age=31536000; includeSubDomains" - ], - "x-ms-ratelimit-remaining-subscription-reads": [ - "14878" - ], - "x-ms-correlation-request-id": [ - "a1542e75-2d39-4667-bfa4-c3df164f4b2c" - ], - "x-ms-routing-request-id": [ - "CENTRALUS:20150617T093724Z:a1542e75-2d39-4667-bfa4-c3df164f4b2c" - ], - "Cache-Control": [ - "no-cache" - ], - "Date": [ - "Wed, 17 Jun 2015 09:37:24 GMT" - ], - "Server": [ - "Microsoft-IIS/8.0" - ], - "X-Powered-By": [ - "ASP.NET" - ] - }, - "StatusCode": 200 - }, - { - "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/jobs/70c5ac47-80c3-4cc9-840f-0c8a40894051/jobdetails?api-version=2014-09-01", - "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vam9icy83MGM1YWM0Ny04MGMzLTRjYzktODQwZi0wYzhhNDA4OTQwNTEvam9iZGV0YWlscz9hcGktdmVyc2lvbj0yMDE0LTA5LTAx", - "RequestMethod": "GET", - "RequestBody": "", - "RequestHeaders": { - "Accept-Language": [ - "en-us" - ], - "x-ms-client-request-id": [ - "e928302c-e40a-456f-9858-a77f424ea4fb-2015-06-17 09:37:25Z-PS" - ], - "User-Agent": [ - "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" - ] - }, - "ResponseBody": "{\r\n \"TasksList\": [],\r\n \"PropertyBag\": {\r\n \"VM Name\": \"dev01Testing\",\r\n \"Delete Backup Data\": \"False\"\r\n },\r\n \"ProgressPercentage\": null,\r\n \"DynamicErrorMessage\": null,\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Unprotect\",\r\n \"Status\": \"Failed\",\r\n \"StartTimestamp\": \"2015-06-15T18:38:10.9046253Z\",\r\n \"EndTimestamp\": \"2015-06-15T18:38:12.702791Z\",\r\n \"Duration\": \"00:00:01.7981657\",\r\n \"EntityFriendlyName\": \"dev01Testing\",\r\n \"ActionsInfo\": null,\r\n \"ErrorDetails\": [\r\n {\r\n \"ErrorCode\": 1073871825,\r\n \"ErrorTitle\": \"\",\r\n \"ErrorString\": \"Microsoft Azure Backup encountered an internal error.\",\r\n \"Recommendations\": [\r\n \"Wait for a few minutes and then try the operation again. If the issue persists, contact Microsoft Support.\"\r\n ]\r\n }\r\n ],\r\n \"InstanceId\": \"70c5ac47-80c3-4cc9-840f-0c8a40894051\",\r\n \"Name\": \"70c5ac47-80c3-4cc9-840f-0c8a40894051\",\r\n \"OperationInProgress\": false\r\n}", - "ResponseHeaders": { - "Content-Length": [ - "754" - ], - "Content-Type": [ - "application/json" - ], - "Expires": [ - "-1" - ], - "Pragma": [ - "no-cache" - ], - "x-ms-request-id": [ - "f1d17322-1e25-44a7-8833-5e994969c032" - ], - "x-ms-client-request-id": [ - "e928302c-e40a-456f-9858-a77f424ea4fb-2015-06-17 09:37:25Z-PS", - "e928302c-e40a-456f-9858-a77f424ea4fb-2015-06-17 09:37:25Z-PS" - ], - "Strict-Transport-Security": [ - "max-age=31536000; includeSubDomains" - ], - "x-ms-ratelimit-remaining-subscription-reads": [ - "14877" - ], - "x-ms-correlation-request-id": [ - "f1d17322-1e25-44a7-8833-5e994969c032" - ], - "x-ms-routing-request-id": [ - "CENTRALUS:20150617T093725Z:f1d17322-1e25-44a7-8833-5e994969c032" - ], - "Cache-Control": [ - "no-cache" - ], - "Date": [ - "Wed, 17 Jun 2015 09:37:25 GMT" - ], - "Server": [ - "Microsoft-IIS/8.0" - ], - "X-Powered-By": [ - "ASP.NET" - ] - }, - "StatusCode": 200 - }, - { - "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/jobs/0853b887-b6df-49b5-9e75-e298144a80cf/jobdetails?api-version=2014-09-01", - "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vam9icy8wODUzYjg4Ny1iNmRmLTQ5YjUtOWU3NS1lMjk4MTQ0YTgwY2Yvam9iZGV0YWlscz9hcGktdmVyc2lvbj0yMDE0LTA5LTAx", - "RequestMethod": "GET", - "RequestBody": "", - "RequestHeaders": { - "Accept-Language": [ - "en-us" - ], - "x-ms-client-request-id": [ - "86334799-d6cc-4771-8167-0759f03edf81-2015-06-17 09:37:25Z-PS" - ], - "User-Agent": [ - "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" - ] - }, - "ResponseBody": "{\r\n \"TasksList\": [],\r\n \"PropertyBag\": {\r\n \"VM Name\": \"dev01Testing\",\r\n \"Policy Name\": \"Policy9\"\r\n },\r\n \"ProgressPercentage\": null,\r\n \"DynamicErrorMessage\": null,\r\n \"Type\": \"VM\",\r\n \"Operation\": \"ConfigureBackup\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-15T18:37:49.0128974Z\",\r\n \"EndTimestamp\": \"2015-06-15T18:37:51.8484281Z\",\r\n \"Duration\": \"00:00:02.8355307\",\r\n \"EntityFriendlyName\": \"dev01Testing\",\r\n \"ActionsInfo\": null,\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"0853b887-b6df-49b5-9e75-e298144a80cf\",\r\n \"Name\": \"0853b887-b6df-49b5-9e75-e298144a80cf\",\r\n \"OperationInProgress\": false\r\n}", - "ResponseHeaders": { - "Content-Length": [ - "522" - ], - "Content-Type": [ - "application/json" - ], - "Expires": [ - "-1" - ], - "Pragma": [ - "no-cache" - ], - "x-ms-request-id": [ - "4e1e031c-8ffe-45a9-b49c-bf44f43c38af" - ], - "x-ms-client-request-id": [ - "86334799-d6cc-4771-8167-0759f03edf81-2015-06-17 09:37:25Z-PS", - "86334799-d6cc-4771-8167-0759f03edf81-2015-06-17 09:37:25Z-PS" - ], - "Strict-Transport-Security": [ - "max-age=31536000; includeSubDomains" - ], - "x-ms-ratelimit-remaining-subscription-reads": [ - "14876" - ], - "x-ms-correlation-request-id": [ - "4e1e031c-8ffe-45a9-b49c-bf44f43c38af" - ], - "x-ms-routing-request-id": [ - "CENTRALUS:20150617T093726Z:4e1e031c-8ffe-45a9-b49c-bf44f43c38af" - ], - "Cache-Control": [ - "no-cache" - ], - "Date": [ - "Wed, 17 Jun 2015 09:37:25 GMT" - ], - "Server": [ - "Microsoft-IIS/8.0" - ], - "X-Powered-By": [ - "ASP.NET" - ] - }, - "StatusCode": 200 - }, - { - "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/jobs/67fcb53e-9fd3-4c7b-8359-5b8b59d65f0d/jobdetails?api-version=2014-09-01", - "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vam9icy82N2ZjYjUzZS05ZmQzLTRjN2ItODM1OS01YjhiNTlkNjVmMGQvam9iZGV0YWlscz9hcGktdmVyc2lvbj0yMDE0LTA5LTAx", - "RequestMethod": "GET", - "RequestBody": "", - "RequestHeaders": { - "Accept-Language": [ - "en-us" - ], - "x-ms-client-request-id": [ - "c01d0fea-af58-4029-95f3-eaef8796db20-2015-06-17 09:37:26Z-PS" - ], - "User-Agent": [ - "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" - ] - }, - "ResponseBody": "{\r\n \"TasksList\": [\r\n {\r\n \"TaskId\": \"Take Snapshot\",\r\n \"StartTime\": null,\r\n \"EndTime\": null,\r\n \"Duration\": \"00:00:00\",\r\n \"Status\": \"Completed\",\r\n \"ProgressPercentage\": null,\r\n \"InstanceId\": null,\r\n \"Name\": null,\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"TaskId\": \"Transfer data to Backup vault\",\r\n \"StartTime\": null,\r\n \"EndTime\": null,\r\n \"Duration\": \"00:00:00\",\r\n \"Status\": \"Completed\",\r\n \"ProgressPercentage\": null,\r\n \"InstanceId\": null,\r\n \"Name\": null,\r\n \"OperationInProgress\": false\r\n }\r\n ],\r\n \"PropertyBag\": {\r\n \"VM Name\": \"dev01testing\",\r\n \"Backup Size\": \"49 MB\"\r\n },\r\n \"ProgressPercentage\": null,\r\n \"DynamicErrorMessage\": \"The following set of VSS writers failed during snapshot - \",\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Backup\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-15T17:36:11.0872567Z\",\r\n \"EndTimestamp\": \"2015-06-15T17:50:18.6830491Z\",\r\n \"Duration\": \"00:14:07.5957924\",\r\n \"EntityFriendlyName\": \"dev01testing\",\r\n \"ActionsInfo\": [\r\n 1\r\n ],\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"67fcb53e-9fd3-4c7b-8359-5b8b59d65f0d\",\r\n \"Name\": \"job_dev01testing_67fcb53e-9fd3-4c7b-8359-5b8b59d65f0d\",\r\n \"OperationInProgress\": false\r\n}", - "ResponseHeaders": { - "Content-Length": [ - "970" - ], - "Content-Type": [ - "application/json" - ], - "Expires": [ - "-1" - ], - "Pragma": [ - "no-cache" - ], - "x-ms-request-id": [ - "ae7fd438-5b45-4fb6-99d4-1047f6d6983b" - ], - "x-ms-client-request-id": [ - "c01d0fea-af58-4029-95f3-eaef8796db20-2015-06-17 09:37:26Z-PS", - "c01d0fea-af58-4029-95f3-eaef8796db20-2015-06-17 09:37:26Z-PS" - ], - "Strict-Transport-Security": [ - "max-age=31536000; includeSubDomains" - ], - "x-ms-ratelimit-remaining-subscription-reads": [ - "14875" - ], - "x-ms-correlation-request-id": [ - "ae7fd438-5b45-4fb6-99d4-1047f6d6983b" - ], - "x-ms-routing-request-id": [ - "CENTRALUS:20150617T093727Z:ae7fd438-5b45-4fb6-99d4-1047f6d6983b" - ], - "Cache-Control": [ - "no-cache" - ], - "Date": [ - "Wed, 17 Jun 2015 09:37:26 GMT" - ], - "Server": [ - "Microsoft-IIS/8.0" - ], - "X-Powered-By": [ - "ASP.NET" - ] - }, - "StatusCode": 200 - }, - { - "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/jobs/7d0ce796-9565-4b2d-8be0-efc5f674ad89/jobdetails?api-version=2014-09-01", - "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vam9icy83ZDBjZTc5Ni05NTY1LTRiMmQtOGJlMC1lZmM1ZjY3NGFkODkvam9iZGV0YWlscz9hcGktdmVyc2lvbj0yMDE0LTA5LTAx", - "RequestMethod": "GET", - "RequestBody": "", - "RequestHeaders": { - "Accept-Language": [ - "en-us" - ], - "x-ms-client-request-id": [ - "59d9112f-1fce-47da-99ed-1ff950e99d71-2015-06-17 09:37:27Z-PS" - ], - "User-Agent": [ - "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" - ] - }, - "ResponseBody": "{\r\n \"TasksList\": [],\r\n \"PropertyBag\": {\r\n \"VM Name\": \"dev01Testing\",\r\n \"Policy Name\": \"Policy9\"\r\n },\r\n \"ProgressPercentage\": null,\r\n \"DynamicErrorMessage\": null,\r\n \"Type\": \"VM\",\r\n \"Operation\": \"ConfigureBackup\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-15T17:35:43.8148581Z\",\r\n \"EndTimestamp\": \"2015-06-15T17:35:46.4798787Z\",\r\n \"Duration\": \"00:00:02.6650206\",\r\n \"EntityFriendlyName\": \"dev01Testing\",\r\n \"ActionsInfo\": null,\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"7d0ce796-9565-4b2d-8be0-efc5f674ad89\",\r\n \"Name\": \"7d0ce796-9565-4b2d-8be0-efc5f674ad89\",\r\n \"OperationInProgress\": false\r\n}", - "ResponseHeaders": { - "Content-Length": [ - "522" - ], - "Content-Type": [ - "application/json" - ], - "Expires": [ - "-1" - ], - "Pragma": [ - "no-cache" - ], - "x-ms-request-id": [ - "39d0052c-747f-48b6-84e6-b84ca6839400" - ], - "x-ms-client-request-id": [ - "59d9112f-1fce-47da-99ed-1ff950e99d71-2015-06-17 09:37:27Z-PS", - "59d9112f-1fce-47da-99ed-1ff950e99d71-2015-06-17 09:37:27Z-PS" - ], - "Strict-Transport-Security": [ - "max-age=31536000; includeSubDomains" - ], - "x-ms-ratelimit-remaining-subscription-reads": [ - "14874" - ], - "x-ms-correlation-request-id": [ - "39d0052c-747f-48b6-84e6-b84ca6839400" - ], - "x-ms-routing-request-id": [ - "CENTRALUS:20150617T093728Z:39d0052c-747f-48b6-84e6-b84ca6839400" - ], - "Cache-Control": [ - "no-cache" - ], - "Date": [ - "Wed, 17 Jun 2015 09:37:27 GMT" - ], - "Server": [ - "Microsoft-IIS/8.0" - ], - "X-Powered-By": [ - "ASP.NET" - ] - }, - "StatusCode": 200 - }, - { - "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/jobs/cf28195f-8fb9-4ad6-b6b7-bb7446847113/jobdetails?api-version=2014-09-01", - "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vam9icy9jZjI4MTk1Zi04ZmI5LTRhZDYtYjZiNy1iYjc0NDY4NDcxMTMvam9iZGV0YWlscz9hcGktdmVyc2lvbj0yMDE0LTA5LTAx", - "RequestMethod": "GET", - "RequestBody": "", - "RequestHeaders": { - "Accept-Language": [ - "en-us" - ], - "x-ms-client-request-id": [ - "a2fcf1cb-8d16-4999-92c5-fe033222cb7e-2015-06-17 09:37:28Z-PS" - ], - "User-Agent": [ - "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" - ] - }, - "ResponseBody": "{\r\n \"TasksList\": [],\r\n \"PropertyBag\": {\r\n \"VM Name\": \"dev01Testing\",\r\n \"Delete Backup Data\": \"False\"\r\n },\r\n \"ProgressPercentage\": null,\r\n \"DynamicErrorMessage\": null,\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Unprotect\",\r\n \"Status\": \"Failed\",\r\n \"StartTimestamp\": \"2015-06-15T17:35:34.4565621Z\",\r\n \"EndTimestamp\": \"2015-06-15T17:35:37.3287093Z\",\r\n \"Duration\": \"00:00:02.8721472\",\r\n \"EntityFriendlyName\": \"dev01Testing\",\r\n \"ActionsInfo\": null,\r\n \"ErrorDetails\": [\r\n {\r\n \"ErrorCode\": 1073871825,\r\n \"ErrorTitle\": \"\",\r\n \"ErrorString\": \"Microsoft Azure Backup encountered an internal error.\",\r\n \"Recommendations\": [\r\n \"Wait for a few minutes and then try the operation again. If the issue persists, contact Microsoft Support.\"\r\n ]\r\n }\r\n ],\r\n \"InstanceId\": \"cf28195f-8fb9-4ad6-b6b7-bb7446847113\",\r\n \"Name\": \"cf28195f-8fb9-4ad6-b6b7-bb7446847113\",\r\n \"OperationInProgress\": false\r\n}", - "ResponseHeaders": { - "Content-Length": [ - "755" - ], - "Content-Type": [ - "application/json" - ], - "Expires": [ - "-1" - ], - "Pragma": [ - "no-cache" - ], - "x-ms-request-id": [ - "265e5ab8-0307-4d5d-865d-e976df700175" - ], - "x-ms-client-request-id": [ - "a2fcf1cb-8d16-4999-92c5-fe033222cb7e-2015-06-17 09:37:28Z-PS", - "a2fcf1cb-8d16-4999-92c5-fe033222cb7e-2015-06-17 09:37:28Z-PS" - ], - "Strict-Transport-Security": [ - "max-age=31536000; includeSubDomains" - ], - "x-ms-ratelimit-remaining-subscription-reads": [ - "14873" - ], - "x-ms-correlation-request-id": [ - "265e5ab8-0307-4d5d-865d-e976df700175" - ], - "x-ms-routing-request-id": [ - "CENTRALUS:20150617T093728Z:265e5ab8-0307-4d5d-865d-e976df700175" - ], - "Cache-Control": [ - "no-cache" - ], - "Date": [ - "Wed, 17 Jun 2015 09:37:28 GMT" - ], - "Server": [ - "Microsoft-IIS/8.0" - ], - "X-Powered-By": [ - "ASP.NET" - ] - }, - "StatusCode": 200 - }, - { - "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/jobs/051dc4a7-5029-475a-9253-c3a0b5bfc3fc/jobdetails?api-version=2014-09-01", - "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vam9icy8wNTFkYzRhNy01MDI5LTQ3NWEtOTI1My1jM2EwYjViZmMzZmMvam9iZGV0YWlscz9hcGktdmVyc2lvbj0yMDE0LTA5LTAx", - "RequestMethod": "GET", - "RequestBody": "", - "RequestHeaders": { - "Accept-Language": [ - "en-us" - ], - "x-ms-client-request-id": [ - "584482e1-ba39-49c6-90ce-2c0499255e2c-2015-06-17 09:37:29Z-PS" - ], - "User-Agent": [ - "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" - ] - }, - "ResponseBody": "{\r\n \"TasksList\": [],\r\n \"PropertyBag\": {\r\n \"VM Name\": \"dev01Testing\",\r\n \"Policy Name\": \"Policy9\"\r\n },\r\n \"ProgressPercentage\": null,\r\n \"DynamicErrorMessage\": null,\r\n \"Type\": \"VM\",\r\n \"Operation\": \"ConfigureBackup\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-15T14:45:59.2312666Z\",\r\n \"EndTimestamp\": \"2015-06-15T14:46:01.2914477Z\",\r\n \"Duration\": \"00:00:02.0601811\",\r\n \"EntityFriendlyName\": \"dev01Testing\",\r\n \"ActionsInfo\": null,\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"051dc4a7-5029-475a-9253-c3a0b5bfc3fc\",\r\n \"Name\": \"051dc4a7-5029-475a-9253-c3a0b5bfc3fc\",\r\n \"OperationInProgress\": false\r\n}", - "ResponseHeaders": { - "Content-Length": [ - "522" - ], - "Content-Type": [ - "application/json" - ], - "Expires": [ - "-1" - ], - "Pragma": [ - "no-cache" - ], - "x-ms-request-id": [ - "9c8f3288-a8ca-4b17-bbfb-dddb00415d6e" - ], - "x-ms-client-request-id": [ - "584482e1-ba39-49c6-90ce-2c0499255e2c-2015-06-17 09:37:29Z-PS", - "584482e1-ba39-49c6-90ce-2c0499255e2c-2015-06-17 09:37:29Z-PS" - ], - "Strict-Transport-Security": [ - "max-age=31536000; includeSubDomains" - ], - "x-ms-ratelimit-remaining-subscription-reads": [ - "14872" - ], - "x-ms-correlation-request-id": [ - "9c8f3288-a8ca-4b17-bbfb-dddb00415d6e" - ], - "x-ms-routing-request-id": [ - "CENTRALUS:20150617T093729Z:9c8f3288-a8ca-4b17-bbfb-dddb00415d6e" - ], - "Cache-Control": [ - "no-cache" - ], - "Date": [ - "Wed, 17 Jun 2015 09:37:28 GMT" - ], - "Server": [ - "Microsoft-IIS/8.0" - ], - "X-Powered-By": [ - "ASP.NET" - ] - }, - "StatusCode": 200 - }, - { - "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/jobs/d477023c-9f74-4666-a163-33de31b49878/jobdetails?api-version=2014-09-01", - "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vam9icy9kNDc3MDIzYy05Zjc0LTQ2NjYtYTE2My0zM2RlMzFiNDk4Nzgvam9iZGV0YWlscz9hcGktdmVyc2lvbj0yMDE0LTA5LTAx", - "RequestMethod": "GET", - "RequestBody": "", - "RequestHeaders": { - "Accept-Language": [ - "en-us" - ], - "x-ms-client-request-id": [ - "ddee335e-7dae-4a76-8544-5aa50be050ba-2015-06-17 09:37:29Z-PS" - ], - "User-Agent": [ - "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" - ] - }, - "ResponseBody": "{\r\n \"TasksList\": [],\r\n \"PropertyBag\": {\r\n \"VM Name\": \"dev01Testing\",\r\n \"Delete Backup Data\": \"False\"\r\n },\r\n \"ProgressPercentage\": null,\r\n \"DynamicErrorMessage\": null,\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Unprotect\",\r\n \"Status\": \"Failed\",\r\n \"StartTimestamp\": \"2015-06-15T14:45:36.8979669Z\",\r\n \"EndTimestamp\": \"2015-06-15T14:45:38.3452314Z\",\r\n \"Duration\": \"00:00:01.4472645\",\r\n \"EntityFriendlyName\": \"dev01Testing\",\r\n \"ActionsInfo\": null,\r\n \"ErrorDetails\": [\r\n {\r\n \"ErrorCode\": 1073871825,\r\n \"ErrorTitle\": \"\",\r\n \"ErrorString\": \"Microsoft Azure Backup encountered an internal error.\",\r\n \"Recommendations\": [\r\n \"Wait for a few minutes and then try the operation again. If the issue persists, contact Microsoft Support.\"\r\n ]\r\n }\r\n ],\r\n \"InstanceId\": \"d477023c-9f74-4666-a163-33de31b49878\",\r\n \"Name\": \"d477023c-9f74-4666-a163-33de31b49878\",\r\n \"OperationInProgress\": false\r\n}", - "ResponseHeaders": { - "Content-Length": [ - "755" - ], - "Content-Type": [ - "application/json" - ], - "Expires": [ - "-1" - ], - "Pragma": [ - "no-cache" - ], - "x-ms-request-id": [ - "efe4ef72-9aac-44bf-9160-63c1c37ca3d0" - ], - "x-ms-client-request-id": [ - "ddee335e-7dae-4a76-8544-5aa50be050ba-2015-06-17 09:37:29Z-PS", - "ddee335e-7dae-4a76-8544-5aa50be050ba-2015-06-17 09:37:29Z-PS" - ], - "Strict-Transport-Security": [ - "max-age=31536000; includeSubDomains" - ], - "x-ms-ratelimit-remaining-subscription-reads": [ - "14871" - ], - "x-ms-correlation-request-id": [ - "efe4ef72-9aac-44bf-9160-63c1c37ca3d0" - ], - "x-ms-routing-request-id": [ - "CENTRALUS:20150617T093730Z:efe4ef72-9aac-44bf-9160-63c1c37ca3d0" - ], - "Cache-Control": [ - "no-cache" - ], - "Date": [ - "Wed, 17 Jun 2015 09:37:29 GMT" - ], - "Server": [ - "Microsoft-IIS/8.0" - ], - "X-Powered-By": [ - "ASP.NET" - ] - }, - "StatusCode": 200 - }, - { - "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/jobs/edaa3bcd-1353-4122-993b-ca26fbdd3dc0/jobdetails?api-version=2014-09-01", - "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vam9icy9lZGFhM2JjZC0xMzUzLTQxMjItOTkzYi1jYTI2ZmJkZDNkYzAvam9iZGV0YWlscz9hcGktdmVyc2lvbj0yMDE0LTA5LTAx", - "RequestMethod": "GET", - "RequestBody": "", - "RequestHeaders": { - "Accept-Language": [ - "en-us" - ], - "x-ms-client-request-id": [ - "ea827741-30d9-4e58-9d4d-adcf013d6730-2015-06-17 09:37:30Z-PS" - ], - "User-Agent": [ - "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" - ] - }, - "ResponseBody": "{\r\n \"TasksList\": [],\r\n \"PropertyBag\": {\r\n \"VM Name\": \"dev01Testing\",\r\n \"Policy Name\": \"Policy9\"\r\n },\r\n \"ProgressPercentage\": null,\r\n \"DynamicErrorMessage\": null,\r\n \"Type\": \"VM\",\r\n \"Operation\": \"ConfigureBackup\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-15T14:45:15.3831506Z\",\r\n \"EndTimestamp\": \"2015-06-15T14:45:17.5388117Z\",\r\n \"Duration\": \"00:00:02.1556611\",\r\n \"EntityFriendlyName\": \"dev01Testing\",\r\n \"ActionsInfo\": null,\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"edaa3bcd-1353-4122-993b-ca26fbdd3dc0\",\r\n \"Name\": \"edaa3bcd-1353-4122-993b-ca26fbdd3dc0\",\r\n \"OperationInProgress\": false\r\n}", - "ResponseHeaders": { - "Content-Length": [ - "522" - ], - "Content-Type": [ - "application/json" - ], - "Expires": [ - "-1" - ], - "Pragma": [ - "no-cache" - ], - "x-ms-request-id": [ - "4d0c9be4-2d6f-43d2-ae48-dfcb8f12714a" - ], - "x-ms-client-request-id": [ - "ea827741-30d9-4e58-9d4d-adcf013d6730-2015-06-17 09:37:30Z-PS", - "ea827741-30d9-4e58-9d4d-adcf013d6730-2015-06-17 09:37:30Z-PS" - ], - "Strict-Transport-Security": [ - "max-age=31536000; includeSubDomains" - ], - "x-ms-ratelimit-remaining-subscription-reads": [ - "14870" - ], - "x-ms-correlation-request-id": [ - "4d0c9be4-2d6f-43d2-ae48-dfcb8f12714a" - ], - "x-ms-routing-request-id": [ - "CENTRALUS:20150617T093731Z:4d0c9be4-2d6f-43d2-ae48-dfcb8f12714a" - ], - "Cache-Control": [ - "no-cache" - ], - "Date": [ - "Wed, 17 Jun 2015 09:37:30 GMT" - ], - "Server": [ - "Microsoft-IIS/8.0" - ], - "X-Powered-By": [ - "ASP.NET" - ] - }, - "StatusCode": 200 - }, - { - "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/jobs/38847dcc-4aeb-4305-9e4c-e854a81c36d8/jobdetails?api-version=2014-09-01", - "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vam9icy8zODg0N2RjYy00YWViLTQzMDUtOWU0Yy1lODU0YTgxYzM2ZDgvam9iZGV0YWlscz9hcGktdmVyc2lvbj0yMDE0LTA5LTAx", - "RequestMethod": "GET", - "RequestBody": "", - "RequestHeaders": { - "Accept-Language": [ - "en-us" - ], - "x-ms-client-request-id": [ - "2e8243f3-f58e-42ba-a630-402abc388baa-2015-06-17 09:37:31Z-PS" - ], - "User-Agent": [ - "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" - ] - }, - "ResponseBody": "{\r\n \"TasksList\": [],\r\n \"PropertyBag\": {\r\n \"VM Name\": \"dev01Testing\",\r\n \"Policy Name\": \"Policy9\"\r\n },\r\n \"ProgressPercentage\": null,\r\n \"DynamicErrorMessage\": null,\r\n \"Type\": \"VM\",\r\n \"Operation\": \"ConfigureBackup\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-15T14:44:38.2105575Z\",\r\n \"EndTimestamp\": \"2015-06-15T14:44:40.7833338Z\",\r\n \"Duration\": \"00:00:02.5727763\",\r\n \"EntityFriendlyName\": \"dev01Testing\",\r\n \"ActionsInfo\": null,\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"38847dcc-4aeb-4305-9e4c-e854a81c36d8\",\r\n \"Name\": \"38847dcc-4aeb-4305-9e4c-e854a81c36d8\",\r\n \"OperationInProgress\": false\r\n}", - "ResponseHeaders": { - "Content-Length": [ - "522" - ], - "Content-Type": [ - "application/json" - ], - "Expires": [ - "-1" - ], - "Pragma": [ - "no-cache" - ], - "x-ms-request-id": [ - "79a55b66-1c8c-4fc9-be29-9bcbc4891283" - ], - "x-ms-client-request-id": [ - "2e8243f3-f58e-42ba-a630-402abc388baa-2015-06-17 09:37:31Z-PS", - "2e8243f3-f58e-42ba-a630-402abc388baa-2015-06-17 09:37:31Z-PS" - ], - "Strict-Transport-Security": [ - "max-age=31536000; includeSubDomains" - ], - "x-ms-ratelimit-remaining-subscription-reads": [ - "14869" - ], - "x-ms-correlation-request-id": [ - "79a55b66-1c8c-4fc9-be29-9bcbc4891283" - ], - "x-ms-routing-request-id": [ - "CENTRALUS:20150617T093732Z:79a55b66-1c8c-4fc9-be29-9bcbc4891283" - ], - "Cache-Control": [ - "no-cache" - ], - "Date": [ - "Wed, 17 Jun 2015 09:37:32 GMT" - ], - "Server": [ - "Microsoft-IIS/8.0" - ], - "X-Powered-By": [ - "ASP.NET" - ] - }, - "StatusCode": 200 - }, - { - "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/jobs/7c6f3d8f-a03c-453b-8fc6-96d4a6858f12/jobdetails?api-version=2014-09-01", - "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vam9icy83YzZmM2Q4Zi1hMDNjLTQ1M2ItOGZjNi05NmQ0YTY4NThmMTIvam9iZGV0YWlscz9hcGktdmVyc2lvbj0yMDE0LTA5LTAx", - "RequestMethod": "GET", - "RequestBody": "", - "RequestHeaders": { - "Accept-Language": [ - "en-us" - ], - "x-ms-client-request-id": [ - "aca33fe5-005d-4565-bad0-d217302b4c5a-2015-06-17 09:37:32Z-PS" - ], - "User-Agent": [ - "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" - ] - }, - "ResponseBody": "{\r\n \"TasksList\": [],\r\n \"PropertyBag\": {\r\n \"VM Name\": \"dev01Testing\",\r\n \"Policy Name\": \"Policy9\"\r\n },\r\n \"ProgressPercentage\": null,\r\n \"DynamicErrorMessage\": null,\r\n \"Type\": \"VM\",\r\n \"Operation\": \"ConfigureBackup\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-15T14:41:30.3616716Z\",\r\n \"EndTimestamp\": \"2015-06-15T14:41:33.1512668Z\",\r\n \"Duration\": \"00:00:02.7895952\",\r\n \"EntityFriendlyName\": \"dev01Testing\",\r\n \"ActionsInfo\": null,\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"7c6f3d8f-a03c-453b-8fc6-96d4a6858f12\",\r\n \"Name\": \"7c6f3d8f-a03c-453b-8fc6-96d4a6858f12\",\r\n \"OperationInProgress\": false\r\n}", - "ResponseHeaders": { - "Content-Length": [ - "522" - ], - "Content-Type": [ - "application/json" - ], - "Expires": [ - "-1" - ], - "Pragma": [ - "no-cache" - ], - "x-ms-request-id": [ - "59d8ff73-6370-428a-958a-5ef97a3c3c95" - ], - "x-ms-client-request-id": [ - "aca33fe5-005d-4565-bad0-d217302b4c5a-2015-06-17 09:37:32Z-PS", - "aca33fe5-005d-4565-bad0-d217302b4c5a-2015-06-17 09:37:32Z-PS" - ], - "Strict-Transport-Security": [ - "max-age=31536000; includeSubDomains" - ], - "x-ms-ratelimit-remaining-subscription-reads": [ - "14868" - ], - "x-ms-correlation-request-id": [ - "59d8ff73-6370-428a-958a-5ef97a3c3c95" - ], - "x-ms-routing-request-id": [ - "CENTRALUS:20150617T093732Z:59d8ff73-6370-428a-958a-5ef97a3c3c95" - ], - "Cache-Control": [ - "no-cache" - ], - "Date": [ - "Wed, 17 Jun 2015 09:37:32 GMT" - ], - "Server": [ - "Microsoft-IIS/8.0" - ], - "X-Powered-By": [ - "ASP.NET" - ] - }, - "StatusCode": 200 - }, - { - "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/jobs/f2fd996a-0303-48a3-a979-3c6130b32594/jobdetails?api-version=2014-09-01", - "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vam9icy9mMmZkOTk2YS0wMzAzLTQ4YTMtYTk3OS0zYzYxMzBiMzI1OTQvam9iZGV0YWlscz9hcGktdmVyc2lvbj0yMDE0LTA5LTAx", - "RequestMethod": "GET", - "RequestBody": "", - "RequestHeaders": { - "Accept-Language": [ - "en-us" - ], - "x-ms-client-request-id": [ - "6df442c7-8e2f-439f-9268-fce0380243e6-2015-06-17 09:37:33Z-PS" - ], - "User-Agent": [ - "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" - ] - }, - "ResponseBody": "{\r\n \"TasksList\": [],\r\n \"PropertyBag\": {\r\n \"VM Name\": \"mkheranivmps05\",\r\n \"Cloud Service\": \"mkheranivmps02\"\r\n },\r\n \"ProgressPercentage\": null,\r\n \"DynamicErrorMessage\": null,\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Register\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-15T14:31:26.1920785Z\",\r\n \"EndTimestamp\": \"2015-06-15T14:36:59.7193043Z\",\r\n \"Duration\": \"00:05:33.5272258\",\r\n \"EntityFriendlyName\": \"mkheranivmps05\",\r\n \"ActionsInfo\": null,\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"f2fd996a-0303-48a3-a979-3c6130b32594\",\r\n \"Name\": \"iaasvmcontainer;mkheranivmps02;mkheranivmps05\",\r\n \"OperationInProgress\": false\r\n}", - "ResponseHeaders": { - "Content-Length": [ - "537" - ], - "Content-Type": [ - "application/json" - ], - "Expires": [ - "-1" - ], - "Pragma": [ - "no-cache" - ], - "x-ms-request-id": [ - "8105ec0b-859a-4b13-bc5b-189f61aaf6ac" - ], - "x-ms-client-request-id": [ - "6df442c7-8e2f-439f-9268-fce0380243e6-2015-06-17 09:37:33Z-PS", - "6df442c7-8e2f-439f-9268-fce0380243e6-2015-06-17 09:37:33Z-PS" - ], - "Strict-Transport-Security": [ - "max-age=31536000; includeSubDomains" - ], - "x-ms-ratelimit-remaining-subscription-reads": [ - "14867" - ], - "x-ms-correlation-request-id": [ - "8105ec0b-859a-4b13-bc5b-189f61aaf6ac" - ], - "x-ms-routing-request-id": [ - "CENTRALUS:20150617T093733Z:8105ec0b-859a-4b13-bc5b-189f61aaf6ac" - ], - "Cache-Control": [ - "no-cache" - ], - "Date": [ - "Wed, 17 Jun 2015 09:37:33 GMT" - ], - "Server": [ - "Microsoft-IIS/8.0" - ], - "X-Powered-By": [ - "ASP.NET" - ] - }, - "StatusCode": 200 - }, - { - "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/jobs/dece8182-8d97-434e-80d5-96e7755bae81/jobdetails?api-version=2014-09-01", - "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vam9icy9kZWNlODE4Mi04ZDk3LTQzNGUtODBkNS05NmU3NzU1YmFlODEvam9iZGV0YWlscz9hcGktdmVyc2lvbj0yMDE0LTA5LTAx", - "RequestMethod": "GET", - "RequestBody": "", - "RequestHeaders": { - "Accept-Language": [ - "en-us" - ], - "x-ms-client-request-id": [ - "7e239c9d-b24d-4a27-809b-047feedbb438-2015-06-17 09:37:33Z-PS" - ], - "User-Agent": [ - "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" - ] - }, - "ResponseBody": "{\r\n \"TasksList\": [],\r\n \"PropertyBag\": {\r\n \"VM Name\": \"dev01Testing\",\r\n \"Delete Backup Data\": \"False\"\r\n },\r\n \"ProgressPercentage\": null,\r\n \"DynamicErrorMessage\": null,\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Unprotect\",\r\n \"Status\": \"Failed\",\r\n \"StartTimestamp\": \"2015-06-15T13:55:41.1268867Z\",\r\n \"EndTimestamp\": \"2015-06-15T13:55:43.4663585Z\",\r\n \"Duration\": \"00:00:02.3394718\",\r\n \"EntityFriendlyName\": \"dev01Testing\",\r\n \"ActionsInfo\": null,\r\n \"ErrorDetails\": [\r\n {\r\n \"ErrorCode\": 1073871825,\r\n \"ErrorTitle\": \"\",\r\n \"ErrorString\": \"Microsoft Azure Backup encountered an internal error.\",\r\n \"Recommendations\": [\r\n \"Wait for a few minutes and then try the operation again. If the issue persists, contact Microsoft Support.\"\r\n ]\r\n }\r\n ],\r\n \"InstanceId\": \"dece8182-8d97-434e-80d5-96e7755bae81\",\r\n \"Name\": \"dece8182-8d97-434e-80d5-96e7755bae81\",\r\n \"OperationInProgress\": false\r\n}", - "ResponseHeaders": { - "Content-Length": [ - "755" - ], - "Content-Type": [ - "application/json" - ], - "Expires": [ - "-1" - ], - "Pragma": [ - "no-cache" - ], - "x-ms-request-id": [ - "ded90fb9-f64f-493d-8065-64719f994979" - ], - "x-ms-client-request-id": [ - "7e239c9d-b24d-4a27-809b-047feedbb438-2015-06-17 09:37:33Z-PS", - "7e239c9d-b24d-4a27-809b-047feedbb438-2015-06-17 09:37:33Z-PS" - ], - "Strict-Transport-Security": [ - "max-age=31536000; includeSubDomains" - ], - "x-ms-ratelimit-remaining-subscription-reads": [ - "14866" - ], - "x-ms-correlation-request-id": [ - "ded90fb9-f64f-493d-8065-64719f994979" - ], - "x-ms-routing-request-id": [ - "CENTRALUS:20150617T093734Z:ded90fb9-f64f-493d-8065-64719f994979" - ], - "Cache-Control": [ - "no-cache" - ], - "Date": [ - "Wed, 17 Jun 2015 09:37:33 GMT" - ], - "Server": [ - "Microsoft-IIS/8.0" - ], - "X-Powered-By": [ - "ASP.NET" - ] - }, - "StatusCode": 200 - }, - { - "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/jobs/cb7c1675-2661-493c-b842-3360313333cb/jobdetails?api-version=2014-09-01", - "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vam9icy9jYjdjMTY3NS0yNjYxLTQ5M2MtYjg0Mi0zMzYwMzEzMzMzY2Ivam9iZGV0YWlscz9hcGktdmVyc2lvbj0yMDE0LTA5LTAx", - "RequestMethod": "GET", - "RequestBody": "", - "RequestHeaders": { - "Accept-Language": [ - "en-us" - ], - "x-ms-client-request-id": [ - "5b77a303-dbae-4f77-b4cf-c1817c3cf51c-2015-06-17 09:37:34Z-PS" - ], - "User-Agent": [ - "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" - ] - }, - "ResponseBody": "{\r\n \"TasksList\": [],\r\n \"PropertyBag\": {\r\n \"VM Name\": \"mkheranivmps02\",\r\n \"Cloud Service\": \"mkheranivmps02\"\r\n },\r\n \"ProgressPercentage\": null,\r\n \"DynamicErrorMessage\": null,\r\n \"Type\": \"VM\",\r\n \"Operation\": \"UnRegister\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-15T12:59:31.0707896Z\",\r\n \"EndTimestamp\": \"2015-06-15T13:01:58.1942989Z\",\r\n \"Duration\": \"00:02:27.1235093\",\r\n \"EntityFriendlyName\": \"mkheranivmps02\",\r\n \"ActionsInfo\": null,\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"cb7c1675-2661-493c-b842-3360313333cb\",\r\n \"Name\": \"iaasvmcontainer;mkheranivmps02;mkheranivmps02\",\r\n \"OperationInProgress\": false\r\n}", - "ResponseHeaders": { - "Content-Length": [ - "539" - ], - "Content-Type": [ - "application/json" - ], - "Expires": [ - "-1" - ], - "Pragma": [ - "no-cache" - ], - "x-ms-request-id": [ - "12c190fd-faac-46c2-ae5c-5d932eb1ef12" - ], - "x-ms-client-request-id": [ - "5b77a303-dbae-4f77-b4cf-c1817c3cf51c-2015-06-17 09:37:34Z-PS", - "5b77a303-dbae-4f77-b4cf-c1817c3cf51c-2015-06-17 09:37:34Z-PS" - ], - "Strict-Transport-Security": [ - "max-age=31536000; includeSubDomains" - ], - "x-ms-ratelimit-remaining-subscription-reads": [ - "14865" - ], - "x-ms-correlation-request-id": [ - "12c190fd-faac-46c2-ae5c-5d932eb1ef12" - ], - "x-ms-routing-request-id": [ - "CENTRALUS:20150617T093735Z:12c190fd-faac-46c2-ae5c-5d932eb1ef12" - ], - "Cache-Control": [ - "no-cache" - ], - "Date": [ - "Wed, 17 Jun 2015 09:37:34 GMT" - ], - "Server": [ - "Microsoft-IIS/8.0" - ], - "X-Powered-By": [ - "ASP.NET" - ] - }, - "StatusCode": 200 - }, - { - "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/jobs/ba1b3a65-8004-4e31-9e2a-f77f4e16543e/jobdetails?api-version=2014-09-01", - "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vam9icy9iYTFiM2E2NS04MDA0LTRlMzEtOWUyYS1mNzdmNGUxNjU0M2Uvam9iZGV0YWlscz9hcGktdmVyc2lvbj0yMDE0LTA5LTAx", - "RequestMethod": "GET", - "RequestBody": "", - "RequestHeaders": { - "Accept-Language": [ - "en-us" - ], - "x-ms-client-request-id": [ - "058925e5-9c3d-4a49-98fe-d9b62972c3c3-2015-06-17 09:37:35Z-PS" - ], - "User-Agent": [ - "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" - ] - }, - "ResponseBody": "{\r\n \"TasksList\": [],\r\n \"PropertyBag\": {\r\n \"VM Name\": \"mkheranivmps02\",\r\n \"Cloud Service\": \"mkheranivmps02\"\r\n },\r\n \"ProgressPercentage\": null,\r\n \"DynamicErrorMessage\": null,\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Register\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-15T12:51:32.6298143Z\",\r\n \"EndTimestamp\": \"2015-06-15T12:56:27.0482935Z\",\r\n \"Duration\": \"00:04:54.4184792\",\r\n \"EntityFriendlyName\": \"mkheranivmps02\",\r\n \"ActionsInfo\": null,\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"ba1b3a65-8004-4e31-9e2a-f77f4e16543e\",\r\n \"Name\": \"iaasvmcontainer;mkheranivmps02;mkheranivmps02\",\r\n \"OperationInProgress\": false\r\n}", - "ResponseHeaders": { - "Content-Length": [ - "537" - ], - "Content-Type": [ - "application/json" - ], - "Expires": [ - "-1" - ], - "Pragma": [ - "no-cache" - ], - "x-ms-request-id": [ - "25aec970-07cb-49ee-a8b6-98d45d0be36a" - ], - "x-ms-client-request-id": [ - "058925e5-9c3d-4a49-98fe-d9b62972c3c3-2015-06-17 09:37:35Z-PS", - "058925e5-9c3d-4a49-98fe-d9b62972c3c3-2015-06-17 09:37:35Z-PS" - ], - "Strict-Transport-Security": [ - "max-age=31536000; includeSubDomains" - ], - "x-ms-ratelimit-remaining-subscription-reads": [ - "14864" - ], - "x-ms-correlation-request-id": [ - "25aec970-07cb-49ee-a8b6-98d45d0be36a" - ], - "x-ms-routing-request-id": [ - "CENTRALUS:20150617T093736Z:25aec970-07cb-49ee-a8b6-98d45d0be36a" - ], - "Cache-Control": [ - "no-cache" - ], - "Date": [ - "Wed, 17 Jun 2015 09:37:36 GMT" - ], - "Server": [ - "Microsoft-IIS/8.0" - ], - "X-Powered-By": [ - "ASP.NET" - ] - }, - "StatusCode": 200 - }, - { - "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/jobs/3198b8b5-6a1b-492e-b550-a3ebd57b6fad/jobdetails?api-version=2014-09-01", - "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vam9icy8zMTk4YjhiNS02YTFiLTQ5MmUtYjU1MC1hM2ViZDU3YjZmYWQvam9iZGV0YWlscz9hcGktdmVyc2lvbj0yMDE0LTA5LTAx", - "RequestMethod": "GET", - "RequestBody": "", - "RequestHeaders": { - "Accept-Language": [ - "en-us" - ], - "x-ms-client-request-id": [ - "1c97c509-863b-4a1f-b254-b3ac47c66061-2015-06-17 09:37:36Z-PS" - ], - "User-Agent": [ - "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" - ] - }, - "ResponseBody": "{\r\n \"TasksList\": [\r\n {\r\n \"TaskId\": \"Take Snapshot\",\r\n \"StartTime\": null,\r\n \"EndTime\": null,\r\n \"Duration\": \"00:00:00\",\r\n \"Status\": \"Completed\",\r\n \"ProgressPercentage\": null,\r\n \"InstanceId\": null,\r\n \"Name\": null,\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"TaskId\": \"Transfer data to Backup vault\",\r\n \"StartTime\": null,\r\n \"EndTime\": null,\r\n \"Duration\": \"00:00:00\",\r\n \"Status\": \"Completed\",\r\n \"ProgressPercentage\": null,\r\n \"InstanceId\": null,\r\n \"Name\": null,\r\n \"OperationInProgress\": false\r\n }\r\n ],\r\n \"PropertyBag\": {\r\n \"VM Name\": \"dev01testing\",\r\n \"Backup Size\": \"436 MB\"\r\n },\r\n \"ProgressPercentage\": null,\r\n \"DynamicErrorMessage\": \"The following set of VSS writers failed during snapshot - \",\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Backup\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-15T11:11:03.142968Z\",\r\n \"EndTimestamp\": \"2015-06-15T11:27:18.028978Z\",\r\n \"Duration\": \"00:16:14.8860100\",\r\n \"EntityFriendlyName\": \"dev01testing\",\r\n \"ActionsInfo\": [\r\n 1\r\n ],\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"3198b8b5-6a1b-492e-b550-a3ebd57b6fad\",\r\n \"Name\": \"job_dev01testing_3198b8b5-6a1b-492e-b550-a3ebd57b6fad\",\r\n \"OperationInProgress\": false\r\n}", - "ResponseHeaders": { - "Content-Length": [ - "969" - ], - "Content-Type": [ - "application/json" - ], - "Expires": [ - "-1" - ], - "Pragma": [ - "no-cache" - ], - "x-ms-request-id": [ - "d1b310ed-6067-4535-9465-9605a309aa76" - ], - "x-ms-client-request-id": [ - "1c97c509-863b-4a1f-b254-b3ac47c66061-2015-06-17 09:37:36Z-PS", - "1c97c509-863b-4a1f-b254-b3ac47c66061-2015-06-17 09:37:36Z-PS" - ], - "Strict-Transport-Security": [ - "max-age=31536000; includeSubDomains" - ], - "x-ms-ratelimit-remaining-subscription-reads": [ - "14863" - ], - "x-ms-correlation-request-id": [ - "d1b310ed-6067-4535-9465-9605a309aa76" - ], - "x-ms-routing-request-id": [ - "CENTRALUS:20150617T093736Z:d1b310ed-6067-4535-9465-9605a309aa76" - ], - "Cache-Control": [ - "no-cache" - ], - "Date": [ - "Wed, 17 Jun 2015 09:37:36 GMT" - ], - "Server": [ - "Microsoft-IIS/8.0" - ], - "X-Powered-By": [ - "ASP.NET" - ] - }, - "StatusCode": 200 - }, - { - "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/jobs/888a659f-04b1-4625-903f-776084d4ab0b/jobdetails?api-version=2014-09-01", - "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vam9icy84ODhhNjU5Zi0wNGIxLTQ2MjUtOTAzZi03NzYwODRkNGFiMGIvam9iZGV0YWlscz9hcGktdmVyc2lvbj0yMDE0LTA5LTAx", - "RequestMethod": "GET", - "RequestBody": "", - "RequestHeaders": { - "Accept-Language": [ - "en-us" - ], - "x-ms-client-request-id": [ - "955d8f6e-1f05-4725-96b1-91739b297bc6-2015-06-17 09:37:37Z-PS" - ], - "User-Agent": [ - "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" - ] - }, - "ResponseBody": "{\r\n \"TasksList\": [\r\n {\r\n \"TaskId\": \"Take Snapshot\",\r\n \"StartTime\": null,\r\n \"EndTime\": null,\r\n \"Duration\": \"00:00:00\",\r\n \"Status\": \"Completed\",\r\n \"ProgressPercentage\": null,\r\n \"InstanceId\": null,\r\n \"Name\": null,\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"TaskId\": \"Transfer data to Backup vault\",\r\n \"StartTime\": null,\r\n \"EndTime\": null,\r\n \"Duration\": \"00:00:00\",\r\n \"Status\": \"Completed\",\r\n \"ProgressPercentage\": null,\r\n \"InstanceId\": null,\r\n \"Name\": null,\r\n \"OperationInProgress\": false\r\n }\r\n ],\r\n \"PropertyBag\": {\r\n \"VM Name\": \"dev01testing\",\r\n \"Backup Size\": \"190 MB\"\r\n },\r\n \"ProgressPercentage\": null,\r\n \"DynamicErrorMessage\": \"The following set of VSS writers failed during snapshot - \",\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Backup\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-14T20:30:06.6397949Z\",\r\n \"EndTimestamp\": \"2015-06-14T20:43:58.7446302Z\",\r\n \"Duration\": \"00:13:52.1048353\",\r\n \"EntityFriendlyName\": \"dev01testing\",\r\n \"ActionsInfo\": [\r\n 1\r\n ],\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"888a659f-04b1-4625-903f-776084d4ab0b\",\r\n \"Name\": \"job_dev01testing_888a659f-04b1-4625-903f-776084d4ab0b\",\r\n \"OperationInProgress\": false\r\n}", - "ResponseHeaders": { - "Content-Length": [ - "971" - ], - "Content-Type": [ - "application/json" - ], - "Expires": [ - "-1" - ], - "Pragma": [ - "no-cache" - ], - "x-ms-request-id": [ - "115add53-09a0-47a1-93ff-1124f5ab7bbc" - ], - "x-ms-client-request-id": [ - "955d8f6e-1f05-4725-96b1-91739b297bc6-2015-06-17 09:37:37Z-PS", - "955d8f6e-1f05-4725-96b1-91739b297bc6-2015-06-17 09:37:37Z-PS" - ], - "Strict-Transport-Security": [ - "max-age=31536000; includeSubDomains" - ], - "x-ms-ratelimit-remaining-subscription-reads": [ - "14862" - ], - "x-ms-correlation-request-id": [ - "115add53-09a0-47a1-93ff-1124f5ab7bbc" - ], - "x-ms-routing-request-id": [ - "CENTRALUS:20150617T093737Z:115add53-09a0-47a1-93ff-1124f5ab7bbc" - ], - "Cache-Control": [ - "no-cache" - ], - "Date": [ - "Wed, 17 Jun 2015 09:37:37 GMT" - ], - "Server": [ - "Microsoft-IIS/8.0" - ], - "X-Powered-By": [ - "ASP.NET" - ] - }, - "StatusCode": 200 - }, - { - "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/jobs/3fae8ec8-b35b-4c75-976f-bdfcc66875c6/jobdetails?api-version=2014-09-01", - "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vam9icy8zZmFlOGVjOC1iMzViLTRjNzUtOTc2Zi1iZGZjYzY2ODc1YzYvam9iZGV0YWlscz9hcGktdmVyc2lvbj0yMDE0LTA5LTAx", - "RequestMethod": "GET", - "RequestBody": "", - "RequestHeaders": { - "Accept-Language": [ - "en-us" - ], - "x-ms-client-request-id": [ - "649f7f39-79b3-4d18-9529-aa67aed921cd-2015-06-17 09:37:38Z-PS" - ], - "User-Agent": [ - "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" - ] - }, - "ResponseBody": "{\r\n \"TasksList\": [\r\n {\r\n \"TaskId\": \"Take Snapshot\",\r\n \"StartTime\": null,\r\n \"EndTime\": null,\r\n \"Duration\": \"00:00:00\",\r\n \"Status\": \"Completed\",\r\n \"ProgressPercentage\": null,\r\n \"InstanceId\": null,\r\n \"Name\": null,\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"TaskId\": \"Transfer data to Backup vault\",\r\n \"StartTime\": null,\r\n \"EndTime\": null,\r\n \"Duration\": \"00:00:00\",\r\n \"Status\": \"Completed\",\r\n \"ProgressPercentage\": null,\r\n \"InstanceId\": null,\r\n \"Name\": null,\r\n \"OperationInProgress\": false\r\n }\r\n ],\r\n \"PropertyBag\": {\r\n \"VM Name\": \"dev01testing\",\r\n \"Backup Size\": \"29 MB\"\r\n },\r\n \"ProgressPercentage\": null,\r\n \"DynamicErrorMessage\": \"The following set of VSS writers failed during snapshot - \",\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Backup\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-13T20:31:00.1780039Z\",\r\n \"EndTimestamp\": \"2015-06-13T20:45:23.4848097Z\",\r\n \"Duration\": \"00:14:23.3068058\",\r\n \"EntityFriendlyName\": \"dev01testing\",\r\n \"ActionsInfo\": [\r\n 1\r\n ],\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"3fae8ec8-b35b-4c75-976f-bdfcc66875c6\",\r\n \"Name\": \"job_dev01testing_3fae8ec8-b35b-4c75-976f-bdfcc66875c6\",\r\n \"OperationInProgress\": false\r\n}", - "ResponseHeaders": { - "Content-Length": [ - "970" - ], - "Content-Type": [ - "application/json" - ], - "Expires": [ - "-1" - ], - "Pragma": [ - "no-cache" - ], - "x-ms-request-id": [ - "a433b26b-90b3-4cec-a466-7b0d371f6ee7" - ], - "x-ms-client-request-id": [ - "649f7f39-79b3-4d18-9529-aa67aed921cd-2015-06-17 09:37:38Z-PS", - "649f7f39-79b3-4d18-9529-aa67aed921cd-2015-06-17 09:37:38Z-PS" - ], - "Strict-Transport-Security": [ - "max-age=31536000; includeSubDomains" - ], - "x-ms-ratelimit-remaining-subscription-reads": [ - "14861" - ], - "x-ms-correlation-request-id": [ - "a433b26b-90b3-4cec-a466-7b0d371f6ee7" - ], - "x-ms-routing-request-id": [ - "CENTRALUS:20150617T093738Z:a433b26b-90b3-4cec-a466-7b0d371f6ee7" - ], - "Cache-Control": [ - "no-cache" - ], - "Date": [ - "Wed, 17 Jun 2015 09:37:38 GMT" - ], - "Server": [ - "Microsoft-IIS/8.0" - ], - "X-Powered-By": [ - "ASP.NET" - ] - }, - "StatusCode": 200 - }, - { - "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/jobs/53b29c0a-88c8-446e-9e58-01dcdf2f315a/jobdetails?api-version=2014-09-01", - "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vam9icy81M2IyOWMwYS04OGM4LTQ0NmUtOWU1OC0wMWRjZGYyZjMxNWEvam9iZGV0YWlscz9hcGktdmVyc2lvbj0yMDE0LTA5LTAx", - "RequestMethod": "GET", - "RequestBody": "", - "RequestHeaders": { - "Accept-Language": [ - "en-us" - ], - "x-ms-client-request-id": [ - "eaaeb7b4-1456-477e-8994-1abb4c95bbc6-2015-06-17 09:37:38Z-PS" - ], - "User-Agent": [ - "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" - ] - }, - "ResponseBody": "{\r\n \"TasksList\": [\r\n {\r\n \"TaskId\": \"Take Snapshot\",\r\n \"StartTime\": null,\r\n \"EndTime\": null,\r\n \"Duration\": \"00:00:00\",\r\n \"Status\": \"Completed\",\r\n \"ProgressPercentage\": null,\r\n \"InstanceId\": null,\r\n \"Name\": null,\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"TaskId\": \"Transfer data to Backup vault\",\r\n \"StartTime\": null,\r\n \"EndTime\": null,\r\n \"Duration\": \"00:00:00\",\r\n \"Status\": \"Completed\",\r\n \"ProgressPercentage\": null,\r\n \"InstanceId\": null,\r\n \"Name\": null,\r\n \"OperationInProgress\": false\r\n }\r\n ],\r\n \"PropertyBag\": {\r\n \"VM Name\": \"dev01testing\",\r\n \"Backup Size\": \"561 MB\"\r\n },\r\n \"ProgressPercentage\": null,\r\n \"DynamicErrorMessage\": \"The following set of VSS writers failed during snapshot - \",\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Backup\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-13T14:42:37.7185258Z\",\r\n \"EndTimestamp\": \"2015-06-13T14:57:39.8014518Z\",\r\n \"Duration\": \"00:15:02.0829260\",\r\n \"EntityFriendlyName\": \"dev01testing\",\r\n \"ActionsInfo\": [\r\n 1\r\n ],\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"53b29c0a-88c8-446e-9e58-01dcdf2f315a\",\r\n \"Name\": \"job_dev01testing_53b29c0a-88c8-446e-9e58-01dcdf2f315a\",\r\n \"OperationInProgress\": false\r\n}", - "ResponseHeaders": { - "Content-Length": [ - "971" - ], - "Content-Type": [ - "application/json" - ], - "Expires": [ - "-1" - ], - "Pragma": [ - "no-cache" - ], - "x-ms-request-id": [ - "87630c4a-2cd3-4165-b6f4-872475f7e73e" - ], - "x-ms-client-request-id": [ - "eaaeb7b4-1456-477e-8994-1abb4c95bbc6-2015-06-17 09:37:38Z-PS", - "eaaeb7b4-1456-477e-8994-1abb4c95bbc6-2015-06-17 09:37:38Z-PS" - ], - "Strict-Transport-Security": [ - "max-age=31536000; includeSubDomains" - ], - "x-ms-ratelimit-remaining-subscription-reads": [ - "14860" - ], - "x-ms-correlation-request-id": [ - "87630c4a-2cd3-4165-b6f4-872475f7e73e" - ], - "x-ms-routing-request-id": [ - "CENTRALUS:20150617T093739Z:87630c4a-2cd3-4165-b6f4-872475f7e73e" - ], - "Cache-Control": [ - "no-cache" - ], - "Date": [ - "Wed, 17 Jun 2015 09:37:39 GMT" - ], - "Server": [ - "Microsoft-IIS/8.0" - ], - "X-Powered-By": [ - "ASP.NET" - ] - }, - "StatusCode": 200 - }, - { - "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/jobs/d504ecd6-aecc-4c62-85b5-8585e8d7d373/jobdetails?api-version=2014-09-01", - "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vam9icy9kNTA0ZWNkNi1hZWNjLTRjNjItODViNS04NTg1ZThkN2QzNzMvam9iZGV0YWlscz9hcGktdmVyc2lvbj0yMDE0LTA5LTAx", - "RequestMethod": "GET", - "RequestBody": "", - "RequestHeaders": { - "Accept-Language": [ - "en-us" - ], - "x-ms-client-request-id": [ - "1becf90c-cc79-4740-8cb1-9aedb008bd38-2015-06-17 09:37:39Z-PS" - ], - "User-Agent": [ - "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" - ] - }, - "ResponseBody": "{\r\n \"TasksList\": [],\r\n \"PropertyBag\": {\r\n \"VM Name\": \"dev01Testing\",\r\n \"Policy Name\": \"DefaultPolicy\"\r\n },\r\n \"ProgressPercentage\": null,\r\n \"DynamicErrorMessage\": null,\r\n \"Type\": \"VM\",\r\n \"Operation\": \"ConfigureBackup\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-13T11:01:10.0627574Z\",\r\n \"EndTimestamp\": \"2015-06-13T11:01:14.2893205Z\",\r\n \"Duration\": \"00:00:04.2265631\",\r\n \"EntityFriendlyName\": \"dev01Testing\",\r\n \"ActionsInfo\": null,\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"d504ecd6-aecc-4c62-85b5-8585e8d7d373\",\r\n \"Name\": \"d504ecd6-aecc-4c62-85b5-8585e8d7d373\",\r\n \"OperationInProgress\": false\r\n}", - "ResponseHeaders": { - "Content-Length": [ - "528" - ], - "Content-Type": [ - "application/json" - ], - "Expires": [ - "-1" - ], - "Pragma": [ - "no-cache" - ], - "x-ms-request-id": [ - "dae9ad7d-8311-47bd-843c-625df487736a" - ], - "x-ms-client-request-id": [ - "1becf90c-cc79-4740-8cb1-9aedb008bd38-2015-06-17 09:37:39Z-PS", - "1becf90c-cc79-4740-8cb1-9aedb008bd38-2015-06-17 09:37:39Z-PS" - ], - "Strict-Transport-Security": [ - "max-age=31536000; includeSubDomains" - ], - "x-ms-ratelimit-remaining-subscription-reads": [ - "14859" - ], - "x-ms-correlation-request-id": [ - "dae9ad7d-8311-47bd-843c-625df487736a" - ], - "x-ms-routing-request-id": [ - "CENTRALUS:20150617T093740Z:dae9ad7d-8311-47bd-843c-625df487736a" - ], - "Cache-Control": [ - "no-cache" - ], - "Date": [ - "Wed, 17 Jun 2015 09:37:39 GMT" - ], - "Server": [ - "Microsoft-IIS/8.0" - ], - "X-Powered-By": [ - "ASP.NET" - ] - }, - "StatusCode": 200 - }, - { - "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/jobs/03a7662a-45be-493e-8fea-7ec5bad31f68/jobdetails?api-version=2014-09-01", - "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vam9icy8wM2E3NjYyYS00NWJlLTQ5M2UtOGZlYS03ZWM1YmFkMzFmNjgvam9iZGV0YWlscz9hcGktdmVyc2lvbj0yMDE0LTA5LTAx", - "RequestMethod": "GET", - "RequestBody": "", - "RequestHeaders": { - "Accept-Language": [ - "en-us" - ], - "x-ms-client-request-id": [ - "65021281-c0d0-4320-a1d4-2c8c3ec8c826-2015-06-17 09:37:40Z-PS" - ], - "User-Agent": [ - "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" - ] - }, - "ResponseBody": "{\r\n \"TasksList\": [],\r\n \"PropertyBag\": {\r\n \"VM Name\": \"dev01Testing\",\r\n \"Delete Backup Data\": \"False\"\r\n },\r\n \"ProgressPercentage\": null,\r\n \"DynamicErrorMessage\": null,\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Unprotect\",\r\n \"Status\": \"Failed\",\r\n \"StartTimestamp\": \"2015-06-13T10:58:48.9035774Z\",\r\n \"EndTimestamp\": \"2015-06-13T10:58:51.5388817Z\",\r\n \"Duration\": \"00:00:02.6353043\",\r\n \"EntityFriendlyName\": \"dev01Testing\",\r\n \"ActionsInfo\": null,\r\n \"ErrorDetails\": [\r\n {\r\n \"ErrorCode\": 1073871825,\r\n \"ErrorTitle\": \"\",\r\n \"ErrorString\": \"Microsoft Azure Backup encountered an internal error.\",\r\n \"Recommendations\": [\r\n \"Wait for a few minutes and then try the operation again. If the issue persists, contact Microsoft Support.\"\r\n ]\r\n }\r\n ],\r\n \"InstanceId\": \"03a7662a-45be-493e-8fea-7ec5bad31f68\",\r\n \"Name\": \"03a7662a-45be-493e-8fea-7ec5bad31f68\",\r\n \"OperationInProgress\": false\r\n}", - "ResponseHeaders": { - "Content-Length": [ - "755" - ], - "Content-Type": [ - "application/json" - ], - "Expires": [ - "-1" - ], - "Pragma": [ - "no-cache" - ], - "x-ms-request-id": [ - "65215154-8ba2-4710-95a4-dc18e7b34d05" - ], - "x-ms-client-request-id": [ - "65021281-c0d0-4320-a1d4-2c8c3ec8c826-2015-06-17 09:37:40Z-PS", - "65021281-c0d0-4320-a1d4-2c8c3ec8c826-2015-06-17 09:37:40Z-PS" - ], - "Strict-Transport-Security": [ - "max-age=31536000; includeSubDomains" - ], - "x-ms-ratelimit-remaining-subscription-reads": [ - "14858" - ], - "x-ms-correlation-request-id": [ - "65215154-8ba2-4710-95a4-dc18e7b34d05" - ], - "x-ms-routing-request-id": [ - "CENTRALUS:20150617T093740Z:65215154-8ba2-4710-95a4-dc18e7b34d05" - ], - "Cache-Control": [ - "no-cache" - ], - "Date": [ - "Wed, 17 Jun 2015 09:37:40 GMT" - ], - "Server": [ - "Microsoft-IIS/8.0" - ], - "X-Powered-By": [ - "ASP.NET" - ] - }, - "StatusCode": 200 - }, - { - "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/jobs/4c932581-f408-4b41-80c1-c29fc15a8d71/jobdetails?api-version=2014-09-01", - "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vam9icy80YzkzMjU4MS1mNDA4LTRiNDEtODBjMS1jMjlmYzE1YThkNzEvam9iZGV0YWlscz9hcGktdmVyc2lvbj0yMDE0LTA5LTAx", - "RequestMethod": "GET", - "RequestBody": "", - "RequestHeaders": { - "Accept-Language": [ - "en-us" - ], - "x-ms-client-request-id": [ - "f8f7d7d7-b2d5-48d5-acd6-e0d3c3f4fead-2015-06-17 09:37:41Z-PS" - ], - "User-Agent": [ - "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" - ] - }, - "ResponseBody": "{\r\n \"TasksList\": [\r\n {\r\n \"TaskId\": \"Take Snapshot\",\r\n \"StartTime\": null,\r\n \"EndTime\": null,\r\n \"Duration\": \"00:00:00\",\r\n \"Status\": \"Completed\",\r\n \"ProgressPercentage\": null,\r\n \"InstanceId\": null,\r\n \"Name\": null,\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"TaskId\": \"Transfer data to Backup vault\",\r\n \"StartTime\": null,\r\n \"EndTime\": null,\r\n \"Duration\": \"00:00:00\",\r\n \"Status\": \"Completed\",\r\n \"ProgressPercentage\": null,\r\n \"InstanceId\": null,\r\n \"Name\": null,\r\n \"OperationInProgress\": false\r\n }\r\n ],\r\n \"PropertyBag\": {\r\n \"VM Name\": \"dev01testing\",\r\n \"Backup Size\": \"7 MB\"\r\n },\r\n \"ProgressPercentage\": null,\r\n \"DynamicErrorMessage\": \"The following set of VSS writers failed during snapshot - \",\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Backup\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-12T15:30:13.51768Z\",\r\n \"EndTimestamp\": \"2015-06-12T15:44:32.329239Z\",\r\n \"Duration\": \"00:14:18.8115590\",\r\n \"EntityFriendlyName\": \"dev01testing\",\r\n \"ActionsInfo\": [\r\n 1\r\n ],\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"4c932581-f408-4b41-80c1-c29fc15a8d71\",\r\n \"Name\": \"job_dev01testing_4c932581-f408-4b41-80c1-c29fc15a8d71\",\r\n \"OperationInProgress\": false\r\n}", - "ResponseHeaders": { - "Content-Length": [ - "966" - ], - "Content-Type": [ - "application/json" - ], - "Expires": [ - "-1" - ], - "Pragma": [ - "no-cache" - ], - "x-ms-request-id": [ - "60c4de25-19a2-46f4-8042-f8d73a4adc5a" - ], - "x-ms-client-request-id": [ - "f8f7d7d7-b2d5-48d5-acd6-e0d3c3f4fead-2015-06-17 09:37:41Z-PS", - "f8f7d7d7-b2d5-48d5-acd6-e0d3c3f4fead-2015-06-17 09:37:41Z-PS" - ], - "Strict-Transport-Security": [ - "max-age=31536000; includeSubDomains" - ], - "x-ms-ratelimit-remaining-subscription-reads": [ - "14857" - ], - "x-ms-correlation-request-id": [ - "60c4de25-19a2-46f4-8042-f8d73a4adc5a" - ], - "x-ms-routing-request-id": [ - "CENTRALUS:20150617T093741Z:60c4de25-19a2-46f4-8042-f8d73a4adc5a" - ], - "Cache-Control": [ - "no-cache" - ], - "Date": [ - "Wed, 17 Jun 2015 09:37:41 GMT" - ], - "Server": [ - "Microsoft-IIS/8.0" - ], - "X-Powered-By": [ - "ASP.NET" - ] - }, - "StatusCode": 200 - }, - { - "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/jobs/b453f9f7-deea-456e-956a-a0ecbfb2465a/jobdetails?api-version=2014-09-01", - "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vam9icy9iNDUzZjlmNy1kZWVhLTQ1NmUtOTU2YS1hMGVjYmZiMjQ2NWEvam9iZGV0YWlscz9hcGktdmVyc2lvbj0yMDE0LTA5LTAx", - "RequestMethod": "GET", - "RequestBody": "", - "RequestHeaders": { - "Accept-Language": [ - "en-us" - ], - "x-ms-client-request-id": [ - "b3a50685-8f63-4868-9a47-7fe93ba2f616-2015-06-17 09:37:42Z-PS" - ], - "User-Agent": [ - "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" - ] - }, - "ResponseBody": "{\r\n \"TasksList\": [\r\n {\r\n \"TaskId\": \"Take Snapshot\",\r\n \"StartTime\": null,\r\n \"EndTime\": null,\r\n \"Duration\": \"00:00:00\",\r\n \"Status\": \"Completed\",\r\n \"ProgressPercentage\": null,\r\n \"InstanceId\": null,\r\n \"Name\": null,\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"TaskId\": \"Transfer data to Backup vault\",\r\n \"StartTime\": null,\r\n \"EndTime\": null,\r\n \"Duration\": \"00:00:00\",\r\n \"Status\": \"Completed\",\r\n \"ProgressPercentage\": null,\r\n \"InstanceId\": null,\r\n \"Name\": null,\r\n \"OperationInProgress\": false\r\n }\r\n ],\r\n \"PropertyBag\": {\r\n \"VM Name\": \"dev01testing\",\r\n \"Backup Size\": \"6 MB\"\r\n },\r\n \"ProgressPercentage\": null,\r\n \"DynamicErrorMessage\": \"The following set of VSS writers failed during snapshot - \",\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Backup\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-12T14:57:10.3094061Z\",\r\n \"EndTimestamp\": \"2015-06-12T15:11:24.5753982Z\",\r\n \"Duration\": \"00:14:14.2659921\",\r\n \"EntityFriendlyName\": \"dev01testing\",\r\n \"ActionsInfo\": [\r\n 1\r\n ],\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"b453f9f7-deea-456e-956a-a0ecbfb2465a\",\r\n \"Name\": \"job_dev01testing_b453f9f7-deea-456e-956a-a0ecbfb2465a\",\r\n \"OperationInProgress\": false\r\n}", - "ResponseHeaders": { - "Content-Length": [ - "969" - ], - "Content-Type": [ - "application/json" - ], - "Expires": [ - "-1" - ], - "Pragma": [ - "no-cache" - ], - "x-ms-request-id": [ - "8a248764-5893-460a-a8d9-25c73361de35" - ], - "x-ms-client-request-id": [ - "b3a50685-8f63-4868-9a47-7fe93ba2f616-2015-06-17 09:37:42Z-PS", - "b3a50685-8f63-4868-9a47-7fe93ba2f616-2015-06-17 09:37:42Z-PS" - ], - "Strict-Transport-Security": [ - "max-age=31536000; includeSubDomains" - ], - "x-ms-ratelimit-remaining-subscription-reads": [ - "14856" - ], - "x-ms-correlation-request-id": [ - "8a248764-5893-460a-a8d9-25c73361de35" - ], - "x-ms-routing-request-id": [ - "CENTRALUS:20150617T093742Z:8a248764-5893-460a-a8d9-25c73361de35" - ], - "Cache-Control": [ - "no-cache" - ], - "Date": [ - "Wed, 17 Jun 2015 09:37:41 GMT" - ], - "Server": [ - "Microsoft-IIS/8.0" - ], - "X-Powered-By": [ - "ASP.NET" - ] - }, - "StatusCode": 200 - }, - { - "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/jobs/6123eb41-22cc-4f14-b3b7-ae1caf4281ce/jobdetails?api-version=2014-09-01", - "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vam9icy82MTIzZWI0MS0yMmNjLTRmMTQtYjNiNy1hZTFjYWY0MjgxY2Uvam9iZGV0YWlscz9hcGktdmVyc2lvbj0yMDE0LTA5LTAx", - "RequestMethod": "GET", - "RequestBody": "", - "RequestHeaders": { - "Accept-Language": [ - "en-us" - ], - "x-ms-client-request-id": [ - "cf9707e0-5885-4e3a-978d-819dbc2bd087-2015-06-17 09:37:42Z-PS" - ], - "User-Agent": [ - "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" - ] - }, - "ResponseBody": "{\r\n \"TasksList\": [\r\n {\r\n \"TaskId\": \"Take Snapshot\",\r\n \"StartTime\": null,\r\n \"EndTime\": null,\r\n \"Duration\": \"00:00:00\",\r\n \"Status\": \"Completed\",\r\n \"ProgressPercentage\": null,\r\n \"InstanceId\": null,\r\n \"Name\": null,\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"TaskId\": \"Transfer data to Backup vault\",\r\n \"StartTime\": null,\r\n \"EndTime\": null,\r\n \"Duration\": \"00:00:00\",\r\n \"Status\": \"Completed\",\r\n \"ProgressPercentage\": null,\r\n \"InstanceId\": null,\r\n \"Name\": null,\r\n \"OperationInProgress\": false\r\n }\r\n ],\r\n \"PropertyBag\": {\r\n \"VM Name\": \"dev01testing\",\r\n \"Backup Size\": \"40 MB\"\r\n },\r\n \"ProgressPercentage\": null,\r\n \"DynamicErrorMessage\": \"The following set of VSS writers failed during snapshot - \",\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Backup\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-12T14:35:25.0178152Z\",\r\n \"EndTimestamp\": \"2015-06-12T14:51:06.0851166Z\",\r\n \"Duration\": \"00:15:41.0673014\",\r\n \"EntityFriendlyName\": \"dev01testing\",\r\n \"ActionsInfo\": [\r\n 1\r\n ],\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"6123eb41-22cc-4f14-b3b7-ae1caf4281ce\",\r\n \"Name\": \"job_dev01testing_6123eb41-22cc-4f14-b3b7-ae1caf4281ce\",\r\n \"OperationInProgress\": false\r\n}", - "ResponseHeaders": { - "Content-Length": [ - "970" - ], - "Content-Type": [ - "application/json" - ], - "Expires": [ - "-1" - ], - "Pragma": [ - "no-cache" - ], - "x-ms-request-id": [ - "9f6d9b4f-b71a-4bd7-8191-628d52fee1f1" - ], - "x-ms-client-request-id": [ - "cf9707e0-5885-4e3a-978d-819dbc2bd087-2015-06-17 09:37:42Z-PS", - "cf9707e0-5885-4e3a-978d-819dbc2bd087-2015-06-17 09:37:42Z-PS" - ], - "Strict-Transport-Security": [ - "max-age=31536000; includeSubDomains" - ], - "x-ms-ratelimit-remaining-subscription-reads": [ - "14855" - ], - "x-ms-correlation-request-id": [ - "9f6d9b4f-b71a-4bd7-8191-628d52fee1f1" - ], - "x-ms-routing-request-id": [ - "CENTRALUS:20150617T093743Z:9f6d9b4f-b71a-4bd7-8191-628d52fee1f1" - ], - "Cache-Control": [ - "no-cache" - ], - "Date": [ - "Wed, 17 Jun 2015 09:37:42 GMT" - ], - "Server": [ - "Microsoft-IIS/8.0" - ], - "X-Powered-By": [ - "ASP.NET" - ] - }, - "StatusCode": 200 - }, - { - "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/jobs/11152897-e262-4eef-9c34-ba621caece73/jobdetails?api-version=2014-09-01", - "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vam9icy8xMTE1Mjg5Ny1lMjYyLTRlZWYtOWMzNC1iYTYyMWNhZWNlNzMvam9iZGV0YWlscz9hcGktdmVyc2lvbj0yMDE0LTA5LTAx", - "RequestMethod": "GET", - "RequestBody": "", - "RequestHeaders": { - "Accept-Language": [ - "en-us" - ], - "x-ms-client-request-id": [ - "c1e3588f-605d-41b7-9dce-19bbb781885b-2015-06-17 09:37:43Z-PS" - ], - "User-Agent": [ - "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" - ] - }, - "ResponseBody": "{\r\n \"TasksList\": [\r\n {\r\n \"TaskId\": \"Take Snapshot\",\r\n \"StartTime\": null,\r\n \"EndTime\": null,\r\n \"Duration\": \"00:00:00\",\r\n \"Status\": \"Failed\",\r\n \"ProgressPercentage\": null,\r\n \"InstanceId\": null,\r\n \"Name\": null,\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"TaskId\": \"Transfer data to Backup vault\",\r\n \"StartTime\": null,\r\n \"EndTime\": null,\r\n \"Duration\": \"00:00:00\",\r\n \"Status\": \"NotStarted\",\r\n \"ProgressPercentage\": null,\r\n \"InstanceId\": null,\r\n \"Name\": null,\r\n \"OperationInProgress\": false\r\n }\r\n ],\r\n \"PropertyBag\": {\r\n \"VM Name\": \"dev01testing\",\r\n \"Backup Size\": \"0 MB\"\r\n },\r\n \"ProgressPercentage\": null,\r\n \"DynamicErrorMessage\": null,\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Backup\",\r\n \"Status\": \"Failed\",\r\n \"StartTimestamp\": \"2015-06-12T06:25:30.8517368Z\",\r\n \"EndTimestamp\": \"2015-06-12T06:25:32.1713123Z\",\r\n \"Duration\": \"00:00:01.3195755\",\r\n \"EntityFriendlyName\": \"dev01testing\",\r\n \"ActionsInfo\": [\r\n 1\r\n ],\r\n \"ErrorDetails\": [\r\n {\r\n \"ErrorCode\": 400001,\r\n \"ErrorTitle\": \"\",\r\n \"ErrorString\": \"Command execution failed.\",\r\n \"Recommendations\": [\r\n \"Another operation is currently in progress on this item. Please wait until the previous operation is completed, and then retry.\"\r\n ]\r\n }\r\n ],\r\n \"InstanceId\": \"11152897-e262-4eef-9c34-ba621caece73\",\r\n \"Name\": \"job_dev01testing_11152897-e262-4eef-9c34-ba621caece73\",\r\n \"OperationInProgress\": false\r\n}", - "ResponseHeaders": { - "Content-Length": [ - "1134" - ], - "Content-Type": [ - "application/json" - ], - "Expires": [ - "-1" - ], - "Pragma": [ - "no-cache" - ], - "x-ms-request-id": [ - "0b289ec9-2fb5-4035-84c3-9320ae15093c" - ], - "x-ms-client-request-id": [ - "c1e3588f-605d-41b7-9dce-19bbb781885b-2015-06-17 09:37:43Z-PS", - "c1e3588f-605d-41b7-9dce-19bbb781885b-2015-06-17 09:37:43Z-PS" - ], - "Strict-Transport-Security": [ - "max-age=31536000; includeSubDomains" - ], - "x-ms-ratelimit-remaining-subscription-reads": [ - "14854" - ], - "x-ms-correlation-request-id": [ - "0b289ec9-2fb5-4035-84c3-9320ae15093c" - ], - "x-ms-routing-request-id": [ - "CENTRALUS:20150617T093744Z:0b289ec9-2fb5-4035-84c3-9320ae15093c" - ], - "Cache-Control": [ - "no-cache" - ], - "Date": [ - "Wed, 17 Jun 2015 09:37:43 GMT" - ], - "Server": [ - "Microsoft-IIS/8.0" - ], - "X-Powered-By": [ - "ASP.NET" - ] - }, - "StatusCode": 200 - }, - { - "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/jobs/4bf3889d-d689-45ab-aea6-61693bbe4c71/jobdetails?api-version=2014-09-01", - "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vam9icy80YmYzODg5ZC1kNjg5LTQ1YWItYWVhNi02MTY5M2JiZTRjNzEvam9iZGV0YWlscz9hcGktdmVyc2lvbj0yMDE0LTA5LTAx", - "RequestMethod": "GET", - "RequestBody": "", - "RequestHeaders": { - "Accept-Language": [ - "en-us" - ], - "x-ms-client-request-id": [ - "62cef49a-21b2-4290-8a4f-3b673fc865c3-2015-06-17 09:37:44Z-PS" - ], - "User-Agent": [ - "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" - ] - }, - "ResponseBody": "{\r\n \"TasksList\": [\r\n {\r\n \"TaskId\": \"Take Snapshot\",\r\n \"StartTime\": null,\r\n \"EndTime\": null,\r\n \"Duration\": \"00:00:00\",\r\n \"Status\": \"Completed\",\r\n \"ProgressPercentage\": null,\r\n \"InstanceId\": null,\r\n \"Name\": null,\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"TaskId\": \"Transfer data to Backup vault\",\r\n \"StartTime\": null,\r\n \"EndTime\": null,\r\n \"Duration\": \"00:00:00\",\r\n \"Status\": \"Completed\",\r\n \"ProgressPercentage\": null,\r\n \"InstanceId\": null,\r\n \"Name\": null,\r\n \"OperationInProgress\": false\r\n }\r\n ],\r\n \"PropertyBag\": {\r\n \"VM Name\": \"dev01testing\",\r\n \"Backup Size\": \"7 MB\"\r\n },\r\n \"ProgressPercentage\": null,\r\n \"DynamicErrorMessage\": \"The following set of VSS writers failed during snapshot - \",\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Backup\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-12T06:23:00.6818602Z\",\r\n \"EndTimestamp\": \"2015-06-12T06:35:58.1602094Z\",\r\n \"Duration\": \"00:12:57.4783492\",\r\n \"EntityFriendlyName\": \"dev01testing\",\r\n \"ActionsInfo\": [\r\n 1\r\n ],\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"4bf3889d-d689-45ab-aea6-61693bbe4c71\",\r\n \"Name\": \"job_dev01testing_4bf3889d-d689-45ab-aea6-61693bbe4c71\",\r\n \"OperationInProgress\": false\r\n}", - "ResponseHeaders": { - "Content-Length": [ - "969" - ], - "Content-Type": [ - "application/json" - ], - "Expires": [ - "-1" - ], - "Pragma": [ - "no-cache" - ], - "x-ms-request-id": [ - "675e88e5-772f-4108-aedc-605f4140cbb6" - ], - "x-ms-client-request-id": [ - "62cef49a-21b2-4290-8a4f-3b673fc865c3-2015-06-17 09:37:44Z-PS", - "62cef49a-21b2-4290-8a4f-3b673fc865c3-2015-06-17 09:37:44Z-PS" - ], - "Strict-Transport-Security": [ - "max-age=31536000; includeSubDomains" - ], - "x-ms-ratelimit-remaining-subscription-reads": [ - "14853" - ], - "x-ms-correlation-request-id": [ - "675e88e5-772f-4108-aedc-605f4140cbb6" - ], - "x-ms-routing-request-id": [ - "CENTRALUS:20150617T093745Z:675e88e5-772f-4108-aedc-605f4140cbb6" - ], - "Cache-Control": [ - "no-cache" - ], - "Date": [ - "Wed, 17 Jun 2015 09:37:44 GMT" - ], - "Server": [ - "Microsoft-IIS/8.0" - ], - "X-Powered-By": [ - "ASP.NET" - ] - }, - "StatusCode": 200 - }, - { - "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/jobs/8ec18e26-1b63-4a20-a8c8-c23eb0d54e18/jobdetails?api-version=2014-09-01", - "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vam9icy84ZWMxOGUyNi0xYjYzLTRhMjAtYThjOC1jMjNlYjBkNTRlMTgvam9iZGV0YWlscz9hcGktdmVyc2lvbj0yMDE0LTA5LTAx", - "RequestMethod": "GET", - "RequestBody": "", - "RequestHeaders": { - "Accept-Language": [ - "en-us" - ], - "x-ms-client-request-id": [ - "d000b7fd-2d58-4fed-a6c1-aa868e602fee-2015-06-17 09:37:45Z-PS" - ], - "User-Agent": [ - "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" - ] - }, - "ResponseBody": "{\r\n \"TasksList\": [\r\n {\r\n \"TaskId\": \"Take Snapshot\",\r\n \"StartTime\": null,\r\n \"EndTime\": null,\r\n \"Duration\": \"00:00:00\",\r\n \"Status\": \"Failed\",\r\n \"ProgressPercentage\": null,\r\n \"InstanceId\": null,\r\n \"Name\": null,\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"TaskId\": \"Transfer data to Backup vault\",\r\n \"StartTime\": null,\r\n \"EndTime\": null,\r\n \"Duration\": \"00:00:00\",\r\n \"Status\": \"NotStarted\",\r\n \"ProgressPercentage\": null,\r\n \"InstanceId\": null,\r\n \"Name\": null,\r\n \"OperationInProgress\": false\r\n }\r\n ],\r\n \"PropertyBag\": {\r\n \"VM Name\": \"dev01testing\",\r\n \"Backup Size\": \"0 MB\"\r\n },\r\n \"ProgressPercentage\": null,\r\n \"DynamicErrorMessage\": null,\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Backup\",\r\n \"Status\": \"Failed\",\r\n \"StartTimestamp\": \"2015-06-12T06:18:48.8101046Z\",\r\n \"EndTimestamp\": \"2015-06-12T06:18:49.974187Z\",\r\n \"Duration\": \"00:00:01.1640824\",\r\n \"EntityFriendlyName\": \"dev01testing\",\r\n \"ActionsInfo\": [\r\n 1\r\n ],\r\n \"ErrorDetails\": [\r\n {\r\n \"ErrorCode\": 400001,\r\n \"ErrorTitle\": \"\",\r\n \"ErrorString\": \"Command execution failed.\",\r\n \"Recommendations\": [\r\n \"Another operation is currently in progress on this item. Please wait until the previous operation is completed, and then retry.\"\r\n ]\r\n }\r\n ],\r\n \"InstanceId\": \"8ec18e26-1b63-4a20-a8c8-c23eb0d54e18\",\r\n \"Name\": \"job_dev01testing_8ec18e26-1b63-4a20-a8c8-c23eb0d54e18\",\r\n \"OperationInProgress\": false\r\n}", - "ResponseHeaders": { - "Content-Length": [ - "1133" - ], - "Content-Type": [ - "application/json" - ], - "Expires": [ - "-1" - ], - "Pragma": [ - "no-cache" - ], - "x-ms-request-id": [ - "e40373eb-c2e8-4e86-ae8e-3cc6a7556fb3" - ], - "x-ms-client-request-id": [ - "d000b7fd-2d58-4fed-a6c1-aa868e602fee-2015-06-17 09:37:45Z-PS", - "d000b7fd-2d58-4fed-a6c1-aa868e602fee-2015-06-17 09:37:45Z-PS" - ], - "Strict-Transport-Security": [ - "max-age=31536000; includeSubDomains" - ], - "x-ms-ratelimit-remaining-subscription-reads": [ - "14852" - ], - "x-ms-correlation-request-id": [ - "e40373eb-c2e8-4e86-ae8e-3cc6a7556fb3" - ], - "x-ms-routing-request-id": [ - "CENTRALUS:20150617T093745Z:e40373eb-c2e8-4e86-ae8e-3cc6a7556fb3" - ], - "Cache-Control": [ - "no-cache" - ], - "Date": [ - "Wed, 17 Jun 2015 09:37:45 GMT" - ], - "Server": [ - "Microsoft-IIS/8.0" - ], - "X-Powered-By": [ - "ASP.NET" - ] - }, - "StatusCode": 200 - }, - { - "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/jobs/5cbd05f3-2461-44eb-a09d-69276e96406a/jobdetails?api-version=2014-09-01", - "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vam9icy81Y2JkMDVmMy0yNDYxLTQ0ZWItYTA5ZC02OTI3NmU5NjQwNmEvam9iZGV0YWlscz9hcGktdmVyc2lvbj0yMDE0LTA5LTAx", - "RequestMethod": "GET", - "RequestBody": "", - "RequestHeaders": { - "Accept-Language": [ - "en-us" - ], - "x-ms-client-request-id": [ - "30b2f1eb-e0a0-4a87-a078-3202c52cb5ca-2015-06-17 09:37:46Z-PS" - ], - "User-Agent": [ - "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" - ] - }, - "ResponseBody": "{\r\n \"TasksList\": [],\r\n \"PropertyBag\": {\r\n \"VM Name\": \"dev01Testing\",\r\n \"Policy Name\": \"DefaultPolicy\"\r\n },\r\n \"ProgressPercentage\": null,\r\n \"DynamicErrorMessage\": null,\r\n \"Type\": \"VM\",\r\n \"Operation\": \"ConfigureBackup\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-12T06:17:57.3610501Z\",\r\n \"EndTimestamp\": \"2015-06-12T06:18:00.4221104Z\",\r\n \"Duration\": \"00:00:03.0610603\",\r\n \"EntityFriendlyName\": \"dev01Testing\",\r\n \"ActionsInfo\": null,\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"5cbd05f3-2461-44eb-a09d-69276e96406a\",\r\n \"Name\": \"5cbd05f3-2461-44eb-a09d-69276e96406a\",\r\n \"OperationInProgress\": false\r\n}", - "ResponseHeaders": { - "Content-Length": [ - "528" - ], - "Content-Type": [ - "application/json" - ], - "Expires": [ - "-1" - ], - "Pragma": [ - "no-cache" - ], - "x-ms-request-id": [ - "6bf7f4ae-7a48-4e79-85b4-d4d9288515a5" - ], - "x-ms-client-request-id": [ - "30b2f1eb-e0a0-4a87-a078-3202c52cb5ca-2015-06-17 09:37:46Z-PS", - "30b2f1eb-e0a0-4a87-a078-3202c52cb5ca-2015-06-17 09:37:46Z-PS" - ], - "Strict-Transport-Security": [ - "max-age=31536000; includeSubDomains" - ], - "x-ms-ratelimit-remaining-subscription-reads": [ - "14851" - ], - "x-ms-correlation-request-id": [ - "6bf7f4ae-7a48-4e79-85b4-d4d9288515a5" - ], - "x-ms-routing-request-id": [ - "CENTRALUS:20150617T093746Z:6bf7f4ae-7a48-4e79-85b4-d4d9288515a5" - ], - "Cache-Control": [ - "no-cache" - ], - "Date": [ - "Wed, 17 Jun 2015 09:37:45 GMT" - ], - "Server": [ - "Microsoft-IIS/8.0" - ], - "X-Powered-By": [ - "ASP.NET" - ] - }, - "StatusCode": 200 - }, - { - "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/jobs/6d7f50ad-47de-4ac6-986c-7a1d3dddb04e/jobdetails?api-version=2014-09-01", - "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vam9icy82ZDdmNTBhZC00N2RlLTRhYzYtOTg2Yy03YTFkM2RkZGIwNGUvam9iZGV0YWlscz9hcGktdmVyc2lvbj0yMDE0LTA5LTAx", - "RequestMethod": "GET", - "RequestBody": "", - "RequestHeaders": { - "Accept-Language": [ - "en-us" - ], - "x-ms-client-request-id": [ - "0149c2e6-0a83-4419-aebf-e4e8858a38b5-2015-06-17 09:37:46Z-PS" - ], - "User-Agent": [ - "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" - ] - }, - "ResponseBody": "{\r\n \"TasksList\": [\r\n {\r\n \"TaskId\": \"Take Snapshot\",\r\n \"StartTime\": null,\r\n \"EndTime\": null,\r\n \"Duration\": \"00:00:00\",\r\n \"Status\": \"Completed\",\r\n \"ProgressPercentage\": null,\r\n \"InstanceId\": null,\r\n \"Name\": null,\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"TaskId\": \"Transfer data to Backup vault\",\r\n \"StartTime\": null,\r\n \"EndTime\": null,\r\n \"Duration\": \"00:00:00\",\r\n \"Status\": \"Completed\",\r\n \"ProgressPercentage\": null,\r\n \"InstanceId\": null,\r\n \"Name\": null,\r\n \"OperationInProgress\": false\r\n }\r\n ],\r\n \"PropertyBag\": {\r\n \"VM Name\": \"dev01testing\",\r\n \"Backup Size\": \"9 MB\"\r\n },\r\n \"ProgressPercentage\": null,\r\n \"DynamicErrorMessage\": \"The following set of VSS writers failed during snapshot - \",\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Backup\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-12T06:04:16.0408261Z\",\r\n \"EndTimestamp\": \"2015-06-12T06:20:47.6056381Z\",\r\n \"Duration\": \"00:16:31.5648120\",\r\n \"EntityFriendlyName\": \"dev01testing\",\r\n \"ActionsInfo\": [\r\n 1\r\n ],\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"6d7f50ad-47de-4ac6-986c-7a1d3dddb04e\",\r\n \"Name\": \"job_dev01testing_6d7f50ad-47de-4ac6-986c-7a1d3dddb04e\",\r\n \"OperationInProgress\": false\r\n}", - "ResponseHeaders": { - "Content-Length": [ - "969" - ], - "Content-Type": [ - "application/json" - ], - "Expires": [ - "-1" - ], - "Pragma": [ - "no-cache" - ], - "x-ms-request-id": [ - "53a6389e-a242-4380-98d3-02484f0384b4" - ], - "x-ms-client-request-id": [ - "0149c2e6-0a83-4419-aebf-e4e8858a38b5-2015-06-17 09:37:46Z-PS", - "0149c2e6-0a83-4419-aebf-e4e8858a38b5-2015-06-17 09:37:46Z-PS" - ], - "Strict-Transport-Security": [ - "max-age=31536000; includeSubDomains" - ], - "x-ms-ratelimit-remaining-subscription-reads": [ - "14850" - ], - "x-ms-correlation-request-id": [ - "53a6389e-a242-4380-98d3-02484f0384b4" - ], - "x-ms-routing-request-id": [ - "CENTRALUS:20150617T093747Z:53a6389e-a242-4380-98d3-02484f0384b4" - ], - "Cache-Control": [ - "no-cache" - ], - "Date": [ - "Wed, 17 Jun 2015 09:37:46 GMT" - ], - "Server": [ - "Microsoft-IIS/8.0" - ], - "X-Powered-By": [ - "ASP.NET" - ] - }, - "StatusCode": 200 - }, - { - "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/jobs/8895837a-24f9-4f8e-bdfd-b4fe9cb34b18/jobdetails?api-version=2014-09-01", - "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vam9icy84ODk1ODM3YS0yNGY5LTRmOGUtYmRmZC1iNGZlOWNiMzRiMTgvam9iZGV0YWlscz9hcGktdmVyc2lvbj0yMDE0LTA5LTAx", - "RequestMethod": "GET", - "RequestBody": "", - "RequestHeaders": { - "Accept-Language": [ - "en-us" - ], - "x-ms-client-request-id": [ - "a1d6be41-1eac-4949-8e59-1b38d9006c74-2015-06-17 09:37:47Z-PS" - ], - "User-Agent": [ - "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" - ] - }, - "ResponseBody": "{\r\n \"TasksList\": [],\r\n \"PropertyBag\": {\r\n \"VM Name\": \"dev01Testing\",\r\n \"Delete Backup Data\": \"False\"\r\n },\r\n \"ProgressPercentage\": null,\r\n \"DynamicErrorMessage\": null,\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Unprotect\",\r\n \"Status\": \"Failed\",\r\n \"StartTimestamp\": \"2015-06-12T06:00:56.3011566Z\",\r\n \"EndTimestamp\": \"2015-06-12T06:00:59.2507661Z\",\r\n \"Duration\": \"00:00:02.9496095\",\r\n \"EntityFriendlyName\": \"dev01Testing\",\r\n \"ActionsInfo\": null,\r\n \"ErrorDetails\": [\r\n {\r\n \"ErrorCode\": 1073871825,\r\n \"ErrorTitle\": \"\",\r\n \"ErrorString\": \"Microsoft Azure Backup encountered an internal error.\",\r\n \"Recommendations\": [\r\n \"Wait for a few minutes and then try the operation again. If the issue persists, contact Microsoft Support.\"\r\n ]\r\n }\r\n ],\r\n \"InstanceId\": \"8895837a-24f9-4f8e-bdfd-b4fe9cb34b18\",\r\n \"Name\": \"8895837a-24f9-4f8e-bdfd-b4fe9cb34b18\",\r\n \"OperationInProgress\": false\r\n}", - "ResponseHeaders": { - "Content-Length": [ - "755" - ], - "Content-Type": [ - "application/json" - ], - "Expires": [ - "-1" - ], - "Pragma": [ - "no-cache" - ], - "x-ms-request-id": [ - "072f6549-b7f7-4a84-bfba-73c9d7b9dfb3" - ], - "x-ms-client-request-id": [ - "a1d6be41-1eac-4949-8e59-1b38d9006c74-2015-06-17 09:37:47Z-PS", - "a1d6be41-1eac-4949-8e59-1b38d9006c74-2015-06-17 09:37:47Z-PS" - ], - "Strict-Transport-Security": [ - "max-age=31536000; includeSubDomains" - ], - "x-ms-ratelimit-remaining-subscription-reads": [ - "14849" - ], - "x-ms-correlation-request-id": [ - "072f6549-b7f7-4a84-bfba-73c9d7b9dfb3" - ], - "x-ms-routing-request-id": [ - "CENTRALUS:20150617T093748Z:072f6549-b7f7-4a84-bfba-73c9d7b9dfb3" - ], - "Cache-Control": [ - "no-cache" - ], - "Date": [ - "Wed, 17 Jun 2015 09:37:48 GMT" - ], - "Server": [ - "Microsoft-IIS/8.0" - ], - "X-Powered-By": [ - "ASP.NET" - ] - }, - "StatusCode": 200 - }, - { - "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/jobs/ff7a8b35-2e59-4ae1-b651-1964ac2b8b2e/jobdetails?api-version=2014-09-01", - "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vam9icy9mZjdhOGIzNS0yZTU5LTRhZTEtYjY1MS0xOTY0YWMyYjhiMmUvam9iZGV0YWlscz9hcGktdmVyc2lvbj0yMDE0LTA5LTAx", - "RequestMethod": "GET", - "RequestBody": "", - "RequestHeaders": { - "Accept-Language": [ - "en-us" - ], - "x-ms-client-request-id": [ - "32a452f7-2430-494e-a283-3c20fbed0bcb-2015-06-17 09:37:48Z-PS" - ], - "User-Agent": [ - "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" - ] - }, - "ResponseBody": "{\r\n \"TasksList\": [\r\n {\r\n \"TaskId\": \"Take Snapshot\",\r\n \"StartTime\": null,\r\n \"EndTime\": null,\r\n \"Duration\": \"00:00:00\",\r\n \"Status\": \"Failed\",\r\n \"ProgressPercentage\": null,\r\n \"InstanceId\": null,\r\n \"Name\": null,\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"TaskId\": \"Transfer data to Backup vault\",\r\n \"StartTime\": null,\r\n \"EndTime\": null,\r\n \"Duration\": \"00:00:00\",\r\n \"Status\": \"NotStarted\",\r\n \"ProgressPercentage\": null,\r\n \"InstanceId\": null,\r\n \"Name\": null,\r\n \"OperationInProgress\": false\r\n }\r\n ],\r\n \"PropertyBag\": {\r\n \"VM Name\": \"dev01testing\",\r\n \"Backup Size\": \"0 MB\"\r\n },\r\n \"ProgressPercentage\": null,\r\n \"DynamicErrorMessage\": null,\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Backup\",\r\n \"Status\": \"Failed\",\r\n \"StartTimestamp\": \"2015-06-12T05:55:13.8165598Z\",\r\n \"EndTimestamp\": \"2015-06-12T05:55:14.4292176Z\",\r\n \"Duration\": \"00:00:00.6126578\",\r\n \"EntityFriendlyName\": \"dev01testing\",\r\n \"ActionsInfo\": [\r\n 1\r\n ],\r\n \"ErrorDetails\": [\r\n {\r\n \"ErrorCode\": 400001,\r\n \"ErrorTitle\": \"\",\r\n \"ErrorString\": \"Command execution failed.\",\r\n \"Recommendations\": [\r\n \"Another operation is currently in progress on this item. Please wait until the previous operation is completed, and then retry.\"\r\n ]\r\n }\r\n ],\r\n \"InstanceId\": \"ff7a8b35-2e59-4ae1-b651-1964ac2b8b2e\",\r\n \"Name\": \"job_dev01testing_ff7a8b35-2e59-4ae1-b651-1964ac2b8b2e\",\r\n \"OperationInProgress\": false\r\n}", - "ResponseHeaders": { - "Content-Length": [ - "1134" - ], - "Content-Type": [ - "application/json" - ], - "Expires": [ - "-1" - ], - "Pragma": [ - "no-cache" - ], - "x-ms-request-id": [ - "abc988a5-2d6b-4cd8-bfe6-c7fccc4360ec" - ], - "x-ms-client-request-id": [ - "32a452f7-2430-494e-a283-3c20fbed0bcb-2015-06-17 09:37:48Z-PS", - "32a452f7-2430-494e-a283-3c20fbed0bcb-2015-06-17 09:37:48Z-PS" - ], - "Strict-Transport-Security": [ - "max-age=31536000; includeSubDomains" - ], - "x-ms-ratelimit-remaining-subscription-reads": [ - "14848" - ], - "x-ms-correlation-request-id": [ - "abc988a5-2d6b-4cd8-bfe6-c7fccc4360ec" - ], - "x-ms-routing-request-id": [ - "CENTRALUS:20150617T093749Z:abc988a5-2d6b-4cd8-bfe6-c7fccc4360ec" - ], - "Cache-Control": [ - "no-cache" - ], - "Date": [ - "Wed, 17 Jun 2015 09:37:49 GMT" - ], - "Server": [ - "Microsoft-IIS/8.0" - ], - "X-Powered-By": [ - "ASP.NET" - ] - }, - "StatusCode": 200 - }, - { - "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/jobs/c018eb3b-0ac8-4ce7-818f-317f9497c39d/jobdetails?api-version=2014-09-01", - "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vam9icy9jMDE4ZWIzYi0wYWM4LTRjZTctODE4Zi0zMTdmOTQ5N2MzOWQvam9iZGV0YWlscz9hcGktdmVyc2lvbj0yMDE0LTA5LTAx", - "RequestMethod": "GET", - "RequestBody": "", - "RequestHeaders": { - "Accept-Language": [ - "en-us" - ], - "x-ms-client-request-id": [ - "bfcd4704-df61-4364-937b-e9af9760a381-2015-06-17 09:37:49Z-PS" - ], - "User-Agent": [ - "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" - ] - }, - "ResponseBody": "{\r\n \"TasksList\": [\r\n {\r\n \"TaskId\": \"Take Snapshot\",\r\n \"StartTime\": null,\r\n \"EndTime\": null,\r\n \"Duration\": \"00:00:00\",\r\n \"Status\": \"Failed\",\r\n \"ProgressPercentage\": null,\r\n \"InstanceId\": null,\r\n \"Name\": null,\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"TaskId\": \"Transfer data to Backup vault\",\r\n \"StartTime\": null,\r\n \"EndTime\": null,\r\n \"Duration\": \"00:00:00\",\r\n \"Status\": \"NotStarted\",\r\n \"ProgressPercentage\": null,\r\n \"InstanceId\": null,\r\n \"Name\": null,\r\n \"OperationInProgress\": false\r\n }\r\n ],\r\n \"PropertyBag\": {\r\n \"VM Name\": \"dev01testing\",\r\n \"Backup Size\": \"0 MB\"\r\n },\r\n \"ProgressPercentage\": null,\r\n \"DynamicErrorMessage\": null,\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Backup\",\r\n \"Status\": \"Failed\",\r\n \"StartTimestamp\": \"2015-06-12T05:52:27.5199152Z\",\r\n \"EndTimestamp\": \"2015-06-12T05:52:27.8532247Z\",\r\n \"Duration\": \"00:00:00.3333095\",\r\n \"EntityFriendlyName\": \"dev01testing\",\r\n \"ActionsInfo\": [\r\n 1\r\n ],\r\n \"ErrorDetails\": [\r\n {\r\n \"ErrorCode\": 400001,\r\n \"ErrorTitle\": \"\",\r\n \"ErrorString\": \"Command execution failed.\",\r\n \"Recommendations\": [\r\n \"Another operation is currently in progress on this item. Please wait until the previous operation is completed, and then retry.\"\r\n ]\r\n }\r\n ],\r\n \"InstanceId\": \"c018eb3b-0ac8-4ce7-818f-317f9497c39d\",\r\n \"Name\": \"job_dev01testing_c018eb3b-0ac8-4ce7-818f-317f9497c39d\",\r\n \"OperationInProgress\": false\r\n}", - "ResponseHeaders": { - "Content-Length": [ - "1134" - ], - "Content-Type": [ - "application/json" - ], - "Expires": [ - "-1" - ], - "Pragma": [ - "no-cache" - ], - "x-ms-request-id": [ - "5f429097-a152-463f-80cc-f97b5b64efa3" - ], - "x-ms-client-request-id": [ - "bfcd4704-df61-4364-937b-e9af9760a381-2015-06-17 09:37:49Z-PS", - "bfcd4704-df61-4364-937b-e9af9760a381-2015-06-17 09:37:49Z-PS" - ], - "Strict-Transport-Security": [ - "max-age=31536000; includeSubDomains" - ], - "x-ms-ratelimit-remaining-subscription-reads": [ - "14847" - ], - "x-ms-correlation-request-id": [ - "5f429097-a152-463f-80cc-f97b5b64efa3" - ], - "x-ms-routing-request-id": [ - "CENTRALUS:20150617T093749Z:5f429097-a152-463f-80cc-f97b5b64efa3" - ], - "Cache-Control": [ - "no-cache" - ], - "Date": [ - "Wed, 17 Jun 2015 09:37:49 GMT" - ], - "Server": [ - "Microsoft-IIS/8.0" - ], - "X-Powered-By": [ - "ASP.NET" - ] - }, - "StatusCode": 200 - }, - { - "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/jobs/9dcf0b48-c568-466f-8349-972489591bd0/jobdetails?api-version=2014-09-01", - "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vam9icy85ZGNmMGI0OC1jNTY4LTQ2NmYtODM0OS05NzI0ODk1OTFiZDAvam9iZGV0YWlscz9hcGktdmVyc2lvbj0yMDE0LTA5LTAx", - "RequestMethod": "GET", - "RequestBody": "", - "RequestHeaders": { - "Accept-Language": [ - "en-us" - ], - "x-ms-client-request-id": [ - "18cd985d-caef-4fbc-92ce-a53c59ccd323-2015-06-17 09:37:50Z-PS" - ], - "User-Agent": [ - "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" - ] - }, - "ResponseBody": "{\r\n \"TasksList\": [\r\n {\r\n \"TaskId\": \"Take Snapshot\",\r\n \"StartTime\": null,\r\n \"EndTime\": null,\r\n \"Duration\": \"00:00:00\",\r\n \"Status\": \"Failed\",\r\n \"ProgressPercentage\": null,\r\n \"InstanceId\": null,\r\n \"Name\": null,\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"TaskId\": \"Transfer data to Backup vault\",\r\n \"StartTime\": null,\r\n \"EndTime\": null,\r\n \"Duration\": \"00:00:00\",\r\n \"Status\": \"NotStarted\",\r\n \"ProgressPercentage\": null,\r\n \"InstanceId\": null,\r\n \"Name\": null,\r\n \"OperationInProgress\": false\r\n }\r\n ],\r\n \"PropertyBag\": {\r\n \"VM Name\": \"dev01testing\",\r\n \"Backup Size\": \"0 MB\"\r\n },\r\n \"ProgressPercentage\": null,\r\n \"DynamicErrorMessage\": null,\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Backup\",\r\n \"Status\": \"Failed\",\r\n \"StartTimestamp\": \"2015-06-12T05:49:41.2528257Z\",\r\n \"EndTimestamp\": \"2015-06-12T05:49:42.0260934Z\",\r\n \"Duration\": \"00:00:00.7732677\",\r\n \"EntityFriendlyName\": \"dev01testing\",\r\n \"ActionsInfo\": [\r\n 1\r\n ],\r\n \"ErrorDetails\": [\r\n {\r\n \"ErrorCode\": 400001,\r\n \"ErrorTitle\": \"\",\r\n \"ErrorString\": \"Command execution failed.\",\r\n \"Recommendations\": [\r\n \"Another operation is currently in progress on this item. Please wait until the previous operation is completed, and then retry.\"\r\n ]\r\n }\r\n ],\r\n \"InstanceId\": \"9dcf0b48-c568-466f-8349-972489591bd0\",\r\n \"Name\": \"job_dev01testing_9dcf0b48-c568-466f-8349-972489591bd0\",\r\n \"OperationInProgress\": false\r\n}", - "ResponseHeaders": { - "Content-Length": [ - "1134" - ], - "Content-Type": [ - "application/json" - ], - "Expires": [ - "-1" - ], - "Pragma": [ - "no-cache" - ], - "x-ms-request-id": [ - "3f2adaae-6e95-48a9-8ea6-274a3a23d39e" - ], - "x-ms-client-request-id": [ - "18cd985d-caef-4fbc-92ce-a53c59ccd323-2015-06-17 09:37:50Z-PS", - "18cd985d-caef-4fbc-92ce-a53c59ccd323-2015-06-17 09:37:50Z-PS" - ], - "Strict-Transport-Security": [ - "max-age=31536000; includeSubDomains" - ], - "x-ms-ratelimit-remaining-subscription-reads": [ - "14846" - ], - "x-ms-correlation-request-id": [ - "3f2adaae-6e95-48a9-8ea6-274a3a23d39e" - ], - "x-ms-routing-request-id": [ - "CENTRALUS:20150617T093750Z:3f2adaae-6e95-48a9-8ea6-274a3a23d39e" - ], - "Cache-Control": [ - "no-cache" - ], - "Date": [ - "Wed, 17 Jun 2015 09:37:50 GMT" - ], - "Server": [ - "Microsoft-IIS/8.0" - ], - "X-Powered-By": [ - "ASP.NET" - ] - }, - "StatusCode": 200 - }, - { - "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/jobs/f971ef4c-15b0-40e2-baf2-8fafa209ff4f/jobdetails?api-version=2014-09-01", - "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vam9icy9mOTcxZWY0Yy0xNWIwLTQwZTItYmFmMi04ZmFmYTIwOWZmNGYvam9iZGV0YWlscz9hcGktdmVyc2lvbj0yMDE0LTA5LTAx", - "RequestMethod": "GET", - "RequestBody": "", - "RequestHeaders": { - "Accept-Language": [ - "en-us" - ], - "x-ms-client-request-id": [ - "96f7b6a7-780b-4ec4-b1a3-9ad9ea26d6ca-2015-06-17 09:37:51Z-PS" - ], - "User-Agent": [ - "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" - ] - }, - "ResponseBody": "{\r\n \"TasksList\": [\r\n {\r\n \"TaskId\": \"Take Snapshot\",\r\n \"StartTime\": null,\r\n \"EndTime\": null,\r\n \"Duration\": \"00:00:00\",\r\n \"Status\": \"Completed\",\r\n \"ProgressPercentage\": null,\r\n \"InstanceId\": null,\r\n \"Name\": null,\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"TaskId\": \"Transfer data to Backup vault\",\r\n \"StartTime\": null,\r\n \"EndTime\": null,\r\n \"Duration\": \"00:00:00\",\r\n \"Status\": \"Completed\",\r\n \"ProgressPercentage\": null,\r\n \"InstanceId\": null,\r\n \"Name\": null,\r\n \"OperationInProgress\": false\r\n }\r\n ],\r\n \"PropertyBag\": {\r\n \"VM Name\": \"dev01testing\",\r\n \"Backup Size\": \"7 MB\"\r\n },\r\n \"ProgressPercentage\": null,\r\n \"DynamicErrorMessage\": \"The following set of VSS writers failed during snapshot - \",\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Backup\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-12T05:48:05.5977628Z\",\r\n \"EndTimestamp\": \"2015-06-12T06:03:53.0005467Z\",\r\n \"Duration\": \"00:15:47.4027839\",\r\n \"EntityFriendlyName\": \"dev01testing\",\r\n \"ActionsInfo\": [\r\n 1\r\n ],\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"f971ef4c-15b0-40e2-baf2-8fafa209ff4f\",\r\n \"Name\": \"job_dev01testing_f971ef4c-15b0-40e2-baf2-8fafa209ff4f\",\r\n \"OperationInProgress\": false\r\n}", - "ResponseHeaders": { - "Content-Length": [ - "969" - ], - "Content-Type": [ - "application/json" - ], - "Expires": [ - "-1" - ], - "Pragma": [ - "no-cache" - ], - "x-ms-request-id": [ - "ddd1b356-e1b9-44d7-bafb-661f6117f06d" - ], - "x-ms-client-request-id": [ - "96f7b6a7-780b-4ec4-b1a3-9ad9ea26d6ca-2015-06-17 09:37:51Z-PS", - "96f7b6a7-780b-4ec4-b1a3-9ad9ea26d6ca-2015-06-17 09:37:51Z-PS" - ], - "Strict-Transport-Security": [ - "max-age=31536000; includeSubDomains" - ], - "x-ms-ratelimit-remaining-subscription-reads": [ - "14845" - ], - "x-ms-correlation-request-id": [ - "ddd1b356-e1b9-44d7-bafb-661f6117f06d" - ], - "x-ms-routing-request-id": [ - "CENTRALUS:20150617T093751Z:ddd1b356-e1b9-44d7-bafb-661f6117f06d" - ], - "Cache-Control": [ - "no-cache" - ], - "Date": [ - "Wed, 17 Jun 2015 09:37:51 GMT" - ], - "Server": [ - "Microsoft-IIS/8.0" - ], - "X-Powered-By": [ - "ASP.NET" - ] - }, - "StatusCode": 200 - }, - { - "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/jobs/d3138b4d-abc3-4ff1-924d-55f6d2b8f56b/jobdetails?api-version=2014-09-01", - "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vam9icy9kMzEzOGI0ZC1hYmMzLTRmZjEtOTI0ZC01NWY2ZDJiOGY1NmIvam9iZGV0YWlscz9hcGktdmVyc2lvbj0yMDE0LTA5LTAx", - "RequestMethod": "GET", - "RequestBody": "", - "RequestHeaders": { - "Accept-Language": [ - "en-us" - ], - "x-ms-client-request-id": [ - "a92387c3-46ec-4e9d-8cfd-2392eea7833e-2015-06-17 09:37:51Z-PS" - ], - "User-Agent": [ - "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" - ] - }, - "ResponseBody": "{\r\n \"TasksList\": [\r\n {\r\n \"TaskId\": \"Take Snapshot\",\r\n \"StartTime\": null,\r\n \"EndTime\": null,\r\n \"Duration\": \"00:00:00\",\r\n \"Status\": \"Failed\",\r\n \"ProgressPercentage\": null,\r\n \"InstanceId\": null,\r\n \"Name\": null,\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"TaskId\": \"Transfer data to Backup vault\",\r\n \"StartTime\": null,\r\n \"EndTime\": null,\r\n \"Duration\": \"00:00:00\",\r\n \"Status\": \"NotStarted\",\r\n \"ProgressPercentage\": null,\r\n \"InstanceId\": null,\r\n \"Name\": null,\r\n \"OperationInProgress\": false\r\n }\r\n ],\r\n \"PropertyBag\": {\r\n \"VM Name\": \"dev01testing\",\r\n \"Backup Size\": \"0 MB\"\r\n },\r\n \"ProgressPercentage\": null,\r\n \"DynamicErrorMessage\": null,\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Backup\",\r\n \"Status\": \"Failed\",\r\n \"StartTimestamp\": \"2015-06-12T05:33:10.1328152Z\",\r\n \"EndTimestamp\": \"2015-06-12T05:33:10.3967166Z\",\r\n \"Duration\": \"00:00:00.2639014\",\r\n \"EntityFriendlyName\": \"dev01testing\",\r\n \"ActionsInfo\": [\r\n 1\r\n ],\r\n \"ErrorDetails\": [\r\n {\r\n \"ErrorCode\": 400001,\r\n \"ErrorTitle\": \"\",\r\n \"ErrorString\": \"Command execution failed.\",\r\n \"Recommendations\": [\r\n \"Another operation is currently in progress on this item. Please wait until the previous operation is completed, and then retry.\"\r\n ]\r\n }\r\n ],\r\n \"InstanceId\": \"d3138b4d-abc3-4ff1-924d-55f6d2b8f56b\",\r\n \"Name\": \"job_dev01testing_d3138b4d-abc3-4ff1-924d-55f6d2b8f56b\",\r\n \"OperationInProgress\": false\r\n}", - "ResponseHeaders": { - "Content-Length": [ - "1134" - ], - "Content-Type": [ - "application/json" - ], - "Expires": [ - "-1" - ], - "Pragma": [ - "no-cache" - ], - "x-ms-request-id": [ - "3adefae0-85b4-4ca8-98ee-28398ccfc3ff" - ], - "x-ms-client-request-id": [ - "a92387c3-46ec-4e9d-8cfd-2392eea7833e-2015-06-17 09:37:51Z-PS", - "a92387c3-46ec-4e9d-8cfd-2392eea7833e-2015-06-17 09:37:51Z-PS" - ], - "Strict-Transport-Security": [ - "max-age=31536000; includeSubDomains" - ], - "x-ms-ratelimit-remaining-subscription-reads": [ - "14844" - ], - "x-ms-correlation-request-id": [ - "3adefae0-85b4-4ca8-98ee-28398ccfc3ff" - ], - "x-ms-routing-request-id": [ - "CENTRALUS:20150617T093752Z:3adefae0-85b4-4ca8-98ee-28398ccfc3ff" - ], - "Cache-Control": [ - "no-cache" - ], - "Date": [ - "Wed, 17 Jun 2015 09:37:51 GMT" - ], - "Server": [ - "Microsoft-IIS/8.0" - ], - "X-Powered-By": [ - "ASP.NET" - ] - }, - "StatusCode": 200 - }, - { - "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/jobs/f0171b4a-9c09-4771-bf94-3590a65c27ce/jobdetails?api-version=2014-09-01", - "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vam9icy9mMDE3MWI0YS05YzA5LTQ3NzEtYmY5NC0zNTkwYTY1YzI3Y2Uvam9iZGV0YWlscz9hcGktdmVyc2lvbj0yMDE0LTA5LTAx", - "RequestMethod": "GET", - "RequestBody": "", - "RequestHeaders": { - "Accept-Language": [ - "en-us" - ], - "x-ms-client-request-id": [ - "d784b142-4022-41ce-b100-47e9da7c2ca8-2015-06-17 09:37:52Z-PS" - ], - "User-Agent": [ - "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" - ] - }, - "ResponseBody": "{\r\n \"TasksList\": [\r\n {\r\n \"TaskId\": \"Take Snapshot\",\r\n \"StartTime\": null,\r\n \"EndTime\": null,\r\n \"Duration\": \"00:00:00\",\r\n \"Status\": \"Completed\",\r\n \"ProgressPercentage\": null,\r\n \"InstanceId\": null,\r\n \"Name\": null,\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"TaskId\": \"Transfer data to Backup vault\",\r\n \"StartTime\": null,\r\n \"EndTime\": null,\r\n \"Duration\": \"00:00:00\",\r\n \"Status\": \"Cancelled\",\r\n \"ProgressPercentage\": null,\r\n \"InstanceId\": null,\r\n \"Name\": null,\r\n \"OperationInProgress\": false\r\n }\r\n ],\r\n \"PropertyBag\": {\r\n \"VM Name\": \"dev01testing\",\r\n \"Backup Size\": \"0 MB\"\r\n },\r\n \"ProgressPercentage\": null,\r\n \"DynamicErrorMessage\": \"The following set of VSS writers failed during snapshot - \",\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Backup\",\r\n \"Status\": \"Cancelled\",\r\n \"StartTimestamp\": \"2015-06-12T05:31:10.6490225Z\",\r\n \"EndTimestamp\": \"2015-06-12T05:45:19.308969Z\",\r\n \"Duration\": \"00:14:08.6599465\",\r\n \"EntityFriendlyName\": \"dev01testing\",\r\n \"ActionsInfo\": [\r\n 1\r\n ],\r\n \"ErrorDetails\": [\r\n {\r\n \"ErrorCode\": 400057,\r\n \"ErrorTitle\": \"\",\r\n \"ErrorString\": \"Job is successfully cancelled.\",\r\n \"Recommendations\": []\r\n }\r\n ],\r\n \"InstanceId\": \"f0171b4a-9c09-4771-bf94-3590a65c27ce\",\r\n \"Name\": \"job_dev01testing_f0171b4a-9c09-4771-bf94-3590a65c27ce\",\r\n \"OperationInProgress\": false\r\n}", - "ResponseHeaders": { - "Content-Length": [ - "1070" - ], - "Content-Type": [ - "application/json" - ], - "Expires": [ - "-1" - ], - "Pragma": [ - "no-cache" - ], - "x-ms-request-id": [ - "3dd35270-bd34-4292-81b2-78f9b9045bc2" - ], - "x-ms-client-request-id": [ - "d784b142-4022-41ce-b100-47e9da7c2ca8-2015-06-17 09:37:52Z-PS", - "d784b142-4022-41ce-b100-47e9da7c2ca8-2015-06-17 09:37:52Z-PS" - ], - "Strict-Transport-Security": [ - "max-age=31536000; includeSubDomains" - ], - "x-ms-ratelimit-remaining-subscription-reads": [ - "14843" - ], - "x-ms-correlation-request-id": [ - "3dd35270-bd34-4292-81b2-78f9b9045bc2" - ], - "x-ms-routing-request-id": [ - "CENTRALUS:20150617T093753Z:3dd35270-bd34-4292-81b2-78f9b9045bc2" - ], - "Cache-Control": [ - "no-cache" - ], - "Date": [ - "Wed, 17 Jun 2015 09:37:53 GMT" - ], - "Server": [ - "Microsoft-IIS/8.0" - ], - "X-Powered-By": [ - "ASP.NET" - ] - }, - "StatusCode": 200 - }, - { - "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/jobs/a30d2af5-22a6-480e-83bc-fc5c1698c021/jobdetails?api-version=2014-09-01", - "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vam9icy9hMzBkMmFmNS0yMmE2LTQ4MGUtODNiYy1mYzVjMTY5OGMwMjEvam9iZGV0YWlscz9hcGktdmVyc2lvbj0yMDE0LTA5LTAx", - "RequestMethod": "GET", - "RequestBody": "", - "RequestHeaders": { - "Accept-Language": [ - "en-us" - ], - "x-ms-client-request-id": [ - "1deb4e33-ca00-4fd5-b499-0f3c2621c604-2015-06-17 09:37:53Z-PS" - ], - "User-Agent": [ - "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" - ] - }, - "ResponseBody": "{\r\n \"TasksList\": [\r\n {\r\n \"TaskId\": \"Take Snapshot\",\r\n \"StartTime\": null,\r\n \"EndTime\": null,\r\n \"Duration\": \"00:00:00\",\r\n \"Status\": \"Completed\",\r\n \"ProgressPercentage\": null,\r\n \"InstanceId\": null,\r\n \"Name\": null,\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"TaskId\": \"Transfer data to Backup vault\",\r\n \"StartTime\": null,\r\n \"EndTime\": null,\r\n \"Duration\": \"00:00:00\",\r\n \"Status\": \"Completed\",\r\n \"ProgressPercentage\": null,\r\n \"InstanceId\": null,\r\n \"Name\": null,\r\n \"OperationInProgress\": false\r\n }\r\n ],\r\n \"PropertyBag\": {\r\n \"VM Name\": \"dev01testing\",\r\n \"Backup Size\": \"22 MB\"\r\n },\r\n \"ProgressPercentage\": null,\r\n \"DynamicErrorMessage\": \"The following set of VSS writers failed during snapshot - \",\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Backup\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-11T14:39:31.0489015Z\",\r\n \"EndTimestamp\": \"2015-06-11T14:56:15.3054685Z\",\r\n \"Duration\": \"00:16:44.2565670\",\r\n \"EntityFriendlyName\": \"dev01testing\",\r\n \"ActionsInfo\": [\r\n 1\r\n ],\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"a30d2af5-22a6-480e-83bc-fc5c1698c021\",\r\n \"Name\": \"job_dev01testing_a30d2af5-22a6-480e-83bc-fc5c1698c021\",\r\n \"OperationInProgress\": false\r\n}", - "ResponseHeaders": { - "Content-Length": [ - "970" - ], - "Content-Type": [ - "application/json" - ], - "Expires": [ - "-1" - ], - "Pragma": [ - "no-cache" - ], - "x-ms-request-id": [ - "45d5089e-e49b-4724-a5e0-b3385394692b" - ], - "x-ms-client-request-id": [ - "1deb4e33-ca00-4fd5-b499-0f3c2621c604-2015-06-17 09:37:53Z-PS", - "1deb4e33-ca00-4fd5-b499-0f3c2621c604-2015-06-17 09:37:53Z-PS" - ], - "Strict-Transport-Security": [ - "max-age=31536000; includeSubDomains" - ], - "x-ms-ratelimit-remaining-subscription-reads": [ - "14842" - ], - "x-ms-correlation-request-id": [ - "45d5089e-e49b-4724-a5e0-b3385394692b" - ], - "x-ms-routing-request-id": [ - "CENTRALUS:20150617T093753Z:45d5089e-e49b-4724-a5e0-b3385394692b" - ], - "Cache-Control": [ - "no-cache" - ], - "Date": [ - "Wed, 17 Jun 2015 09:37:53 GMT" - ], - "Server": [ - "Microsoft-IIS/8.0" - ], - "X-Powered-By": [ - "ASP.NET" - ] - }, - "StatusCode": 200 - }, - { - "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/jobs/f53d089a-0dc7-44a4-8062-61c3c126c3c4/jobdetails?api-version=2014-09-01", - "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vam9icy9mNTNkMDg5YS0wZGM3LTQ0YTQtODA2Mi02MWMzYzEyNmMzYzQvam9iZGV0YWlscz9hcGktdmVyc2lvbj0yMDE0LTA5LTAx", - "RequestMethod": "GET", - "RequestBody": "", - "RequestHeaders": { - "Accept-Language": [ - "en-us" - ], - "x-ms-client-request-id": [ - "e9c7bda2-128c-43b4-afe4-cd4d06023608-2015-06-17 09:37:54Z-PS" - ], - "User-Agent": [ - "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" - ] - }, - "ResponseBody": "{\r\n \"TasksList\": [\r\n {\r\n \"TaskId\": \"Take Snapshot\",\r\n \"StartTime\": null,\r\n \"EndTime\": null,\r\n \"Duration\": \"00:00:00\",\r\n \"Status\": \"Completed\",\r\n \"ProgressPercentage\": null,\r\n \"InstanceId\": null,\r\n \"Name\": null,\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"TaskId\": \"Transfer data to Backup vault\",\r\n \"StartTime\": null,\r\n \"EndTime\": null,\r\n \"Duration\": \"00:00:00\",\r\n \"Status\": \"Completed\",\r\n \"ProgressPercentage\": null,\r\n \"InstanceId\": null,\r\n \"Name\": null,\r\n \"OperationInProgress\": false\r\n }\r\n ],\r\n \"PropertyBag\": {\r\n \"VM Name\": \"dev01testing\",\r\n \"Backup Size\": \"9874 MB\"\r\n },\r\n \"ProgressPercentage\": null,\r\n \"DynamicErrorMessage\": \"The following set of VSS writers failed during snapshot - \",\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Backup\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-11T10:50:40.341267Z\",\r\n \"EndTimestamp\": \"2015-06-11T11:19:16.627226Z\",\r\n \"Duration\": \"00:28:36.2859590\",\r\n \"EntityFriendlyName\": \"dev01testing\",\r\n \"ActionsInfo\": [\r\n 1\r\n ],\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"f53d089a-0dc7-44a4-8062-61c3c126c3c4\",\r\n \"Name\": \"job_dev01testing_f53d089a-0dc7-44a4-8062-61c3c126c3c4\",\r\n \"OperationInProgress\": false\r\n}", - "ResponseHeaders": { - "Content-Length": [ - "970" - ], - "Content-Type": [ - "application/json" - ], - "Expires": [ - "-1" - ], - "Pragma": [ - "no-cache" - ], - "x-ms-request-id": [ - "3f7fd44a-f6ea-4d3e-8f25-aca8a0213ae2" - ], - "x-ms-client-request-id": [ - "e9c7bda2-128c-43b4-afe4-cd4d06023608-2015-06-17 09:37:54Z-PS", - "e9c7bda2-128c-43b4-afe4-cd4d06023608-2015-06-17 09:37:54Z-PS" - ], - "Strict-Transport-Security": [ - "max-age=31536000; includeSubDomains" - ], - "x-ms-ratelimit-remaining-subscription-reads": [ - "14841" - ], - "x-ms-correlation-request-id": [ - "3f7fd44a-f6ea-4d3e-8f25-aca8a0213ae2" - ], - "x-ms-routing-request-id": [ - "CENTRALUS:20150617T093754Z:3f7fd44a-f6ea-4d3e-8f25-aca8a0213ae2" - ], - "Cache-Control": [ - "no-cache" - ], - "Date": [ - "Wed, 17 Jun 2015 09:37:54 GMT" - ], - "Server": [ - "Microsoft-IIS/8.0" - ], - "X-Powered-By": [ - "ASP.NET" - ] - }, - "StatusCode": 200 - }, - { - "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/jobs/e06bdcf6-fe89-4957-9663-b16b74114c56/jobdetails?api-version=2014-09-01", - "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vam9icy9lMDZiZGNmNi1mZTg5LTQ5NTctOTY2My1iMTZiNzQxMTRjNTYvam9iZGV0YWlscz9hcGktdmVyc2lvbj0yMDE0LTA5LTAx", - "RequestMethod": "GET", - "RequestBody": "", - "RequestHeaders": { - "Accept-Language": [ - "en-us" - ], - "x-ms-client-request-id": [ - "22210a84-4ead-4439-8169-783d0eed3b8f-2015-06-17 09:37:54Z-PS" - ], - "User-Agent": [ - "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" - ] - }, - "ResponseBody": "{\r\n \"TasksList\": [],\r\n \"PropertyBag\": {\r\n \"VM Name\": \"dev01Testing\",\r\n \"Policy Name\": \"Policy9\"\r\n },\r\n \"ProgressPercentage\": null,\r\n \"DynamicErrorMessage\": null,\r\n \"Type\": \"VM\",\r\n \"Operation\": \"ConfigureBackup\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-11T10:39:07.2611805Z\",\r\n \"EndTimestamp\": \"2015-06-11T10:39:12.0730178Z\",\r\n \"Duration\": \"00:00:04.8118373\",\r\n \"EntityFriendlyName\": \"dev01Testing\",\r\n \"ActionsInfo\": null,\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"e06bdcf6-fe89-4957-9663-b16b74114c56\",\r\n \"Name\": \"e06bdcf6-fe89-4957-9663-b16b74114c56\",\r\n \"OperationInProgress\": false\r\n}", - "ResponseHeaders": { - "Content-Length": [ - "522" - ], - "Content-Type": [ - "application/json" - ], - "Expires": [ - "-1" - ], - "Pragma": [ - "no-cache" - ], - "x-ms-request-id": [ - "f7998742-10e9-4f65-8ed6-bcbb6956ff35" - ], - "x-ms-client-request-id": [ - "22210a84-4ead-4439-8169-783d0eed3b8f-2015-06-17 09:37:54Z-PS", - "22210a84-4ead-4439-8169-783d0eed3b8f-2015-06-17 09:37:54Z-PS" - ], - "Strict-Transport-Security": [ - "max-age=31536000; includeSubDomains" - ], - "x-ms-ratelimit-remaining-subscription-reads": [ - "14840" - ], - "x-ms-correlation-request-id": [ - "f7998742-10e9-4f65-8ed6-bcbb6956ff35" - ], - "x-ms-routing-request-id": [ - "CENTRALUS:20150617T093755Z:f7998742-10e9-4f65-8ed6-bcbb6956ff35" - ], - "Cache-Control": [ - "no-cache" - ], - "Date": [ - "Wed, 17 Jun 2015 09:37:55 GMT" - ], - "Server": [ - "Microsoft-IIS/8.0" - ], - "X-Powered-By": [ - "ASP.NET" - ] - }, - "StatusCode": 200 - }, - { - "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/jobs/d72c6b83-0247-4d19-96f6-cf499f5146e2/jobdetails?api-version=2014-09-01", - "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vam9icy9kNzJjNmI4My0wMjQ3LTRkMTktOTZmNi1jZjQ5OWY1MTQ2ZTIvam9iZGV0YWlscz9hcGktdmVyc2lvbj0yMDE0LTA5LTAx", - "RequestMethod": "GET", - "RequestBody": "", - "RequestHeaders": { - "Accept-Language": [ - "en-us" - ], - "x-ms-client-request-id": [ - "b3205a5c-0bd1-40d5-a791-d3ff06ceccf9-2015-06-17 09:37:55Z-PS" - ], - "User-Agent": [ - "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" - ] - }, - "ResponseBody": "{\r\n \"TasksList\": [],\r\n \"PropertyBag\": {\r\n \"VM Name\": \"dev01Testing\",\r\n \"Cloud Service\": \"dev01Testing\"\r\n },\r\n \"ProgressPercentage\": null,\r\n \"DynamicErrorMessage\": null,\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Register\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-11T10:14:34.0042559Z\",\r\n \"EndTimestamp\": \"2015-06-11T10:15:49.014085Z\",\r\n \"Duration\": \"00:01:15.0098291\",\r\n \"EntityFriendlyName\": \"dev01Testing\",\r\n \"ActionsInfo\": null,\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"d72c6b83-0247-4d19-96f6-cf499f5146e2\",\r\n \"Name\": \"iaasvmcontainer;dev01testing;dev01testing\",\r\n \"OperationInProgress\": false\r\n}", - "ResponseHeaders": { - "Content-Length": [ - "526" - ], - "Content-Type": [ - "application/json" - ], - "Expires": [ - "-1" - ], - "Pragma": [ - "no-cache" - ], - "x-ms-request-id": [ - "091ac7e1-0538-47e4-98eb-3dcff5839598" - ], - "x-ms-client-request-id": [ - "b3205a5c-0bd1-40d5-a791-d3ff06ceccf9-2015-06-17 09:37:55Z-PS", - "b3205a5c-0bd1-40d5-a791-d3ff06ceccf9-2015-06-17 09:37:55Z-PS" - ], - "Strict-Transport-Security": [ - "max-age=31536000; includeSubDomains" - ], - "x-ms-ratelimit-remaining-subscription-reads": [ - "14839" - ], - "x-ms-correlation-request-id": [ - "091ac7e1-0538-47e4-98eb-3dcff5839598" - ], - "x-ms-routing-request-id": [ - "CENTRALUS:20150617T093756Z:091ac7e1-0538-47e4-98eb-3dcff5839598" - ], - "Cache-Control": [ - "no-cache" - ], - "Date": [ - "Wed, 17 Jun 2015 09:37:55 GMT" - ], - "Server": [ - "Microsoft-IIS/8.0" - ], - "X-Powered-By": [ - "ASP.NET" - ] - }, - "StatusCode": 200 - }, - { - "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/jobs/546ed062-5cd5-49c6-b453-b4446b878e19/jobdetails?api-version=2014-09-01", - "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vam9icy81NDZlZDA2Mi01Y2Q1LTQ5YzYtYjQ1My1iNDQ0NmI4NzhlMTkvam9iZGV0YWlscz9hcGktdmVyc2lvbj0yMDE0LTA5LTAx", - "RequestMethod": "GET", - "RequestBody": "", - "RequestHeaders": { - "Accept-Language": [ - "en-us" - ], - "x-ms-client-request-id": [ - "286f7220-9e1b-4167-94f6-d6eb8d2b6ff4-2015-06-17 09:37:56Z-PS" - ], - "User-Agent": [ - "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" - ] - }, - "ResponseBody": "{\r\n \"TasksList\": [],\r\n \"PropertyBag\": {\r\n \"VM Name\": \"dev01Testing\",\r\n \"Cloud Service\": \"dev01Testing\"\r\n },\r\n \"ProgressPercentage\": null,\r\n \"DynamicErrorMessage\": null,\r\n \"Type\": \"VM\",\r\n \"Operation\": \"Register\",\r\n \"Status\": \"Completed\",\r\n \"StartTimestamp\": \"2015-06-11T09:57:23.6745962Z\",\r\n \"EndTimestamp\": \"2015-06-11T10:02:09.5201069Z\",\r\n \"Duration\": \"00:04:45.8455107\",\r\n \"EntityFriendlyName\": \"dev01Testing\",\r\n \"ActionsInfo\": null,\r\n \"ErrorDetails\": null,\r\n \"InstanceId\": \"546ed062-5cd5-49c6-b453-b4446b878e19\",\r\n \"Name\": \"iaasvmcontainer;dev01testing;dev01testing\",\r\n \"OperationInProgress\": false\r\n}", - "ResponseHeaders": { - "Content-Length": [ - "527" - ], - "Content-Type": [ - "application/json" - ], - "Expires": [ - "-1" - ], - "Pragma": [ - "no-cache" - ], - "x-ms-request-id": [ - "1c5551d0-5553-4c28-a96a-db6780a5d1e0" - ], - "x-ms-client-request-id": [ - "286f7220-9e1b-4167-94f6-d6eb8d2b6ff4-2015-06-17 09:37:56Z-PS", - "286f7220-9e1b-4167-94f6-d6eb8d2b6ff4-2015-06-17 09:37:56Z-PS" - ], - "Strict-Transport-Security": [ - "max-age=31536000; includeSubDomains" - ], - "x-ms-ratelimit-remaining-subscription-reads": [ - "14838" - ], - "x-ms-correlation-request-id": [ - "1c5551d0-5553-4c28-a96a-db6780a5d1e0" - ], - "x-ms-routing-request-id": [ - "CENTRALUS:20150617T093757Z:1c5551d0-5553-4c28-a96a-db6780a5d1e0" - ], - "Cache-Control": [ - "no-cache" - ], - "Date": [ - "Wed, 17 Jun 2015 09:37:56 GMT" - ], - "Server": [ - "Microsoft-IIS/8.0" - ], - "X-Powered-By": [ - "ASP.NET" - ] - }, - "StatusCode": 200 - } - ], - "Names": {}, - "Variables": { - "SubscriptionId": "f5303a0b-fae4-4cdb-b44d-0e4c032dde26" - } -} \ No newline at end of file diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupPolicyTests/ListProtectionPolicyByNameTests.json b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupPolicyTests/ListProtectionPolicyByNameTests.json deleted file mode 100644 index cf7d1a640424..000000000000 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupPolicyTests/ListProtectionPolicyByNameTests.json +++ /dev/null @@ -1,72 +0,0 @@ -{ - "Entries": [ - { - "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/protectionpolicies?api-version=2014-09-01", - "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vcHJvdGVjdGlvbnBvbGljaWVzP2FwaS12ZXJzaW9uPTIwMTQtMDktMDE=", - "RequestMethod": "GET", - "RequestBody": "", - "RequestHeaders": { - "Accept-Language": [ - "en-us" - ], - "x-ms-client-request-id": [ - "fb9a6698-7ee6-4772-8a5b-1f5c5d5f360f-2015-06-18 09:52:11Z-PS" - ], - "User-Agent": [ - "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" - ] - }, - "ResponseBody": "{\r\n \"Objects\": [\r\n {\r\n \"WorkloadType\": \"VM\",\r\n \"Schedule\": {\r\n \"BackupType\": \"Full\",\r\n \"ScheduleRun\": \"Daily\",\r\n \"ScheduleStartTime\": \"0001-01-01T00:00:00\",\r\n \"ScheduleRunDays\": null,\r\n \"ScheduleRunTimes\": [\r\n \"2015-06-18T17:30:00\"\r\n ],\r\n \"RetentionPolicy\": {\r\n \"RetentionType\": 1,\r\n \"RetentionDuration\": 30\r\n }\r\n },\r\n \"InstanceId\": \"40716838-2fa2-453b-8901-3f16ecb5359b\",\r\n \"Name\": \"DefaultPolicy\",\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"WorkloadType\": \"VM\",\r\n \"Schedule\": {\r\n \"BackupType\": \"Full\",\r\n \"ScheduleRun\": \"Daily\",\r\n \"ScheduleStartTime\": \"0001-01-01T00:00:00\",\r\n \"ScheduleRunDays\": null,\r\n \"ScheduleRunTimes\": [\r\n \"2015-06-11T14:39:04.6630584Z\"\r\n ],\r\n \"RetentionPolicy\": {\r\n \"RetentionType\": 1,\r\n \"RetentionDuration\": 2\r\n }\r\n },\r\n \"InstanceId\": \"c87bbada-6e1b-4db2-b76c-9062d28959a4\",\r\n \"Name\": \"Policy9\",\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"WorkloadType\": \"VM\",\r\n \"Schedule\": {\r\n \"BackupType\": \"Full\",\r\n \"ScheduleRun\": \"Daily\",\r\n \"ScheduleStartTime\": \"0001-01-01T00:00:00\",\r\n \"ScheduleRunDays\": null,\r\n \"ScheduleRunTimes\": [\r\n \"2015-12-06T19:30:00\"\r\n ],\r\n \"RetentionPolicy\": {\r\n \"RetentionType\": 1,\r\n \"RetentionDuration\": 30\r\n }\r\n },\r\n \"InstanceId\": \"f9e9691b-e05e-45ee-a273-e39e40216a04\",\r\n \"Name\": \"ProtPolicy01_updated\",\r\n \"OperationInProgress\": false\r\n }\r\n ],\r\n \"ResultCount\": 3,\r\n \"Skiptoken\": null\r\n}", - "ResponseHeaders": { - "Content-Length": [ - "1102" - ], - "Content-Type": [ - "application/json" - ], - "Expires": [ - "-1" - ], - "Pragma": [ - "no-cache" - ], - "x-ms-request-id": [ - "93887f1f-d2ed-459f-aa32-8add084e206e" - ], - "x-ms-client-request-id": [ - "fb9a6698-7ee6-4772-8a5b-1f5c5d5f360f-2015-06-18 09:52:11Z-PS", - "fb9a6698-7ee6-4772-8a5b-1f5c5d5f360f-2015-06-18 09:52:11Z-PS" - ], - "Strict-Transport-Security": [ - "max-age=31536000; includeSubDomains" - ], - "x-ms-ratelimit-remaining-subscription-reads": [ - "14998" - ], - "x-ms-correlation-request-id": [ - "93887f1f-d2ed-459f-aa32-8add084e206e" - ], - "x-ms-routing-request-id": [ - "CENTRALUS:20150618T095214Z:93887f1f-d2ed-459f-aa32-8add084e206e" - ], - "Cache-Control": [ - "no-cache" - ], - "Date": [ - "Thu, 18 Jun 2015 09:52:14 GMT" - ], - "Server": [ - "Microsoft-IIS/8.0" - ], - "X-Powered-By": [ - "ASP.NET" - ] - }, - "StatusCode": 200 - } - ], - "Names": {}, - "Variables": { - "SubscriptionId": "f5303a0b-fae4-4cdb-b44d-0e4c032dde26" - } -} \ No newline at end of file diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupPolicyTests/ListProtectionPolicyTests.json b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupPolicyTests/ListProtectionPolicyTests.json deleted file mode 100644 index 204c5b230857..000000000000 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupPolicyTests/ListProtectionPolicyTests.json +++ /dev/null @@ -1,72 +0,0 @@ -{ - "Entries": [ - { - "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/protectionpolicies?api-version=2014-09-01", - "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vcHJvdGVjdGlvbnBvbGljaWVzP2FwaS12ZXJzaW9uPTIwMTQtMDktMDE=", - "RequestMethod": "GET", - "RequestBody": "", - "RequestHeaders": { - "Accept-Language": [ - "en-us" - ], - "x-ms-client-request-id": [ - "8f0e14ea-9791-460a-b345-15de9ae18756-2015-06-18 10:29:32Z-PS" - ], - "User-Agent": [ - "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" - ] - }, - "ResponseBody": "{\r\n \"Objects\": [\r\n {\r\n \"WorkloadType\": \"VM\",\r\n \"Schedule\": {\r\n \"BackupType\": \"Full\",\r\n \"ScheduleRun\": \"Daily\",\r\n \"ScheduleStartTime\": \"0001-01-01T00:00:00\",\r\n \"ScheduleRunDays\": null,\r\n \"ScheduleRunTimes\": [\r\n \"2015-06-18T17:30:00\"\r\n ],\r\n \"RetentionPolicy\": {\r\n \"RetentionType\": 1,\r\n \"RetentionDuration\": 30\r\n }\r\n },\r\n \"InstanceId\": \"40716838-2fa2-453b-8901-3f16ecb5359b\",\r\n \"Name\": \"DefaultPolicy\",\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"WorkloadType\": \"VM\",\r\n \"Schedule\": {\r\n \"BackupType\": \"Full\",\r\n \"ScheduleRun\": \"Daily\",\r\n \"ScheduleStartTime\": \"0001-01-01T00:00:00\",\r\n \"ScheduleRunDays\": null,\r\n \"ScheduleRunTimes\": [\r\n \"2015-06-11T14:39:04.6630584Z\"\r\n ],\r\n \"RetentionPolicy\": {\r\n \"RetentionType\": 1,\r\n \"RetentionDuration\": 2\r\n }\r\n },\r\n \"InstanceId\": \"c87bbada-6e1b-4db2-b76c-9062d28959a4\",\r\n \"Name\": \"Policy9\",\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"WorkloadType\": \"VM\",\r\n \"Schedule\": {\r\n \"BackupType\": \"Full\",\r\n \"ScheduleRun\": \"Daily\",\r\n \"ScheduleStartTime\": \"0001-01-01T00:00:00\",\r\n \"ScheduleRunDays\": null,\r\n \"ScheduleRunTimes\": [\r\n \"2015-12-06T19:30:00\"\r\n ],\r\n \"RetentionPolicy\": {\r\n \"RetentionType\": 1,\r\n \"RetentionDuration\": 30\r\n }\r\n },\r\n \"InstanceId\": \"f9e9691b-e05e-45ee-a273-e39e40216a04\",\r\n \"Name\": \"ProtPolicy01_updated\",\r\n \"OperationInProgress\": false\r\n }\r\n ],\r\n \"ResultCount\": 3,\r\n \"Skiptoken\": null\r\n}", - "ResponseHeaders": { - "Content-Length": [ - "1102" - ], - "Content-Type": [ - "application/json" - ], - "Expires": [ - "-1" - ], - "Pragma": [ - "no-cache" - ], - "x-ms-request-id": [ - "a026a048-9c9a-4083-8b22-275bbf4b16e5" - ], - "x-ms-client-request-id": [ - "8f0e14ea-9791-460a-b345-15de9ae18756-2015-06-18 10:29:32Z-PS", - "8f0e14ea-9791-460a-b345-15de9ae18756-2015-06-18 10:29:32Z-PS" - ], - "Strict-Transport-Security": [ - "max-age=31536000; includeSubDomains" - ], - "x-ms-ratelimit-remaining-subscription-reads": [ - "14995" - ], - "x-ms-correlation-request-id": [ - "a026a048-9c9a-4083-8b22-275bbf4b16e5" - ], - "x-ms-routing-request-id": [ - "CENTRALUS:20150618T102935Z:a026a048-9c9a-4083-8b22-275bbf4b16e5" - ], - "Cache-Control": [ - "no-cache" - ], - "Date": [ - "Thu, 18 Jun 2015 10:29:34 GMT" - ], - "Server": [ - "Microsoft-IIS/8.0" - ], - "X-Powered-By": [ - "ASP.NET" - ] - }, - "StatusCode": 200 - } - ], - "Names": {}, - "Variables": { - "SubscriptionId": "f5303a0b-fae4-4cdb-b44d-0e4c032dde26" - } -} \ No newline at end of file diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupPolicyTests/NewProtectionPolicyTests.json b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupPolicyTests/NewProtectionPolicyTests.json deleted file mode 100644 index 79e6438dd231..000000000000 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupPolicyTests/NewProtectionPolicyTests.json +++ /dev/null @@ -1,142 +0,0 @@ -{ - "Entries": [ - { - "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/protectionpolicies?api-version=2014-09-01", - "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vcHJvdGVjdGlvbnBvbGljaWVzP2FwaS12ZXJzaW9uPTIwMTQtMDktMDE=", - "RequestMethod": "POST", - "RequestBody": "{\r\n \"workloadtype\": \"VM\",\r\n \"policyname\": \"Policy10\",\r\n \"schedule\": {\r\n \"BackupType\": \"Full\",\r\n \"ScheduleRun\": \"Daily\",\r\n \"ScheduleStartTime\": \"0001-01-01T00:00:00\",\r\n \"ScheduleRunDays\": [],\r\n \"ScheduleRunTimes\": [\r\n \"2015-06-13T15:00:00\"\r\n ],\r\n \"RetentionPolicy\": {\r\n \"RetentionType\": \"Days\",\r\n \"RetentionDuration\": 30\r\n }\r\n }\r\n}", - "RequestHeaders": { - "Content-Type": [ - "application/json" - ], - "Content-Length": [ - "373" - ], - "Accept-Language": [ - "en-us" - ], - "x-ms-client-request-id": [ - "98e2d3dc-c532-4f21-b386-0f2d221e653c-2015-06-18 10:30:08Z-PS" - ], - "User-Agent": [ - "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" - ] - }, - "ResponseBody": "\"00000000-0000-0000-0000-000000000000\"", - "ResponseHeaders": { - "Content-Length": [ - "38" - ], - "Content-Type": [ - "application/json" - ], - "Expires": [ - "-1" - ], - "Pragma": [ - "no-cache" - ], - "x-ms-request-id": [ - "42a191c6-8ab9-484c-b049-324776a14245" - ], - "x-ms-client-request-id": [ - "98e2d3dc-c532-4f21-b386-0f2d221e653c-2015-06-18 10:30:08Z-PS", - "98e2d3dc-c532-4f21-b386-0f2d221e653c-2015-06-18 10:30:08Z-PS" - ], - "Strict-Transport-Security": [ - "max-age=31536000; includeSubDomains" - ], - "x-ms-ratelimit-remaining-subscription-writes": [ - "1196" - ], - "x-ms-correlation-request-id": [ - "42a191c6-8ab9-484c-b049-324776a14245" - ], - "x-ms-routing-request-id": [ - "CENTRALUS:20150618T103011Z:42a191c6-8ab9-484c-b049-324776a14245" - ], - "Cache-Control": [ - "no-cache" - ], - "Date": [ - "Thu, 18 Jun 2015 10:30:11 GMT" - ], - "Server": [ - "Microsoft-IIS/8.0" - ], - "X-Powered-By": [ - "ASP.NET" - ] - }, - "StatusCode": 200 - }, - { - "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/protectionpolicies?api-version=2014-09-01", - "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vcHJvdGVjdGlvbnBvbGljaWVzP2FwaS12ZXJzaW9uPTIwMTQtMDktMDE=", - "RequestMethod": "GET", - "RequestBody": "", - "RequestHeaders": { - "Accept-Language": [ - "en-us" - ], - "x-ms-client-request-id": [ - "98e2d3dc-c532-4f21-b386-0f2d221e653c-2015-06-18 10:30:08Z-PS" - ], - "User-Agent": [ - "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" - ] - }, - "ResponseBody": "{\r\n \"Objects\": [\r\n {\r\n \"WorkloadType\": \"VM\",\r\n \"Schedule\": {\r\n \"BackupType\": \"Full\",\r\n \"ScheduleRun\": \"Daily\",\r\n \"ScheduleStartTime\": \"0001-01-01T00:00:00\",\r\n \"ScheduleRunDays\": null,\r\n \"ScheduleRunTimes\": [\r\n \"2015-06-18T17:30:00\"\r\n ],\r\n \"RetentionPolicy\": {\r\n \"RetentionType\": 1,\r\n \"RetentionDuration\": 30\r\n }\r\n },\r\n \"InstanceId\": \"40716838-2fa2-453b-8901-3f16ecb5359b\",\r\n \"Name\": \"DefaultPolicy\",\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"WorkloadType\": \"VM\",\r\n \"Schedule\": {\r\n \"BackupType\": \"Full\",\r\n \"ScheduleRun\": \"Daily\",\r\n \"ScheduleStartTime\": \"0001-01-01T00:00:00\",\r\n \"ScheduleRunDays\": null,\r\n \"ScheduleRunTimes\": [\r\n \"2015-06-13T15:00:00\"\r\n ],\r\n \"RetentionPolicy\": {\r\n \"RetentionType\": 1,\r\n \"RetentionDuration\": 30\r\n }\r\n },\r\n \"InstanceId\": \"b612df34-b1c0-4099-b32c-52a42ba69203\",\r\n \"Name\": \"Policy10\",\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"WorkloadType\": \"VM\",\r\n \"Schedule\": {\r\n \"BackupType\": \"Full\",\r\n \"ScheduleRun\": \"Daily\",\r\n \"ScheduleStartTime\": \"0001-01-01T00:00:00\",\r\n \"ScheduleRunDays\": null,\r\n \"ScheduleRunTimes\": [\r\n \"2015-06-11T14:39:04.6630584Z\"\r\n ],\r\n \"RetentionPolicy\": {\r\n \"RetentionType\": 1,\r\n \"RetentionDuration\": 2\r\n }\r\n },\r\n \"InstanceId\": \"c87bbada-6e1b-4db2-b76c-9062d28959a4\",\r\n \"Name\": \"Policy9\",\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"WorkloadType\": \"VM\",\r\n \"Schedule\": {\r\n \"BackupType\": \"Full\",\r\n \"ScheduleRun\": \"Daily\",\r\n \"ScheduleStartTime\": \"0001-01-01T00:00:00\",\r\n \"ScheduleRunDays\": null,\r\n \"ScheduleRunTimes\": [\r\n \"2015-12-06T19:30:00\"\r\n ],\r\n \"RetentionPolicy\": {\r\n \"RetentionType\": 1,\r\n \"RetentionDuration\": 30\r\n }\r\n },\r\n \"InstanceId\": \"f9e9691b-e05e-45ee-a273-e39e40216a04\",\r\n \"Name\": \"ProtPolicy01_updated\",\r\n \"OperationInProgress\": false\r\n }\r\n ],\r\n \"ResultCount\": 4,\r\n \"Skiptoken\": null\r\n}", - "ResponseHeaders": { - "Content-Length": [ - "1446" - ], - "Content-Type": [ - "application/json" - ], - "Expires": [ - "-1" - ], - "Pragma": [ - "no-cache" - ], - "x-ms-request-id": [ - "cd1d9dc9-6a97-4863-bad3-4a2572e67089" - ], - "x-ms-client-request-id": [ - "98e2d3dc-c532-4f21-b386-0f2d221e653c-2015-06-18 10:30:08Z-PS", - "98e2d3dc-c532-4f21-b386-0f2d221e653c-2015-06-18 10:30:08Z-PS" - ], - "Strict-Transport-Security": [ - "max-age=31536000; includeSubDomains" - ], - "x-ms-ratelimit-remaining-subscription-reads": [ - "14997" - ], - "x-ms-correlation-request-id": [ - "cd1d9dc9-6a97-4863-bad3-4a2572e67089" - ], - "x-ms-routing-request-id": [ - "CENTRALUS:20150618T103012Z:cd1d9dc9-6a97-4863-bad3-4a2572e67089" - ], - "Cache-Control": [ - "no-cache" - ], - "Date": [ - "Thu, 18 Jun 2015 10:30:11 GMT" - ], - "Server": [ - "Microsoft-IIS/8.0" - ], - "X-Powered-By": [ - "ASP.NET" - ] - }, - "StatusCode": 200 - } - ], - "Names": {}, - "Variables": { - "SubscriptionId": "f5303a0b-fae4-4cdb-b44d-0e4c032dde26" - } -} \ No newline at end of file diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupPolicyTests/RemoveProtectionPolicyTests.json b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupPolicyTests/RemoveProtectionPolicyTests.json deleted file mode 100644 index c4efc276b944..000000000000 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupPolicyTests/RemoveProtectionPolicyTests.json +++ /dev/null @@ -1,72 +0,0 @@ -{ - "Entries": [ - { - "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/protectionpolicies?api-version=2014-09-01", - "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vcHJvdGVjdGlvbnBvbGljaWVzP2FwaS12ZXJzaW9uPTIwMTQtMDktMDE=", - "RequestMethod": "GET", - "RequestBody": "", - "RequestHeaders": { - "Accept-Language": [ - "en-us" - ], - "x-ms-client-request-id": [ - "43ff4d15-6f28-418f-9a1a-cf05ee68a15e-2015-06-18 09:51:33Z-PS" - ], - "User-Agent": [ - "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" - ] - }, - "ResponseBody": "{\r\n \"Objects\": [\r\n {\r\n \"WorkloadType\": \"VM\",\r\n \"Schedule\": {\r\n \"BackupType\": \"Full\",\r\n \"ScheduleRun\": \"Daily\",\r\n \"ScheduleStartTime\": \"0001-01-01T00:00:00\",\r\n \"ScheduleRunDays\": null,\r\n \"ScheduleRunTimes\": [\r\n \"2015-06-18T17:30:00\"\r\n ],\r\n \"RetentionPolicy\": {\r\n \"RetentionType\": 1,\r\n \"RetentionDuration\": 30\r\n }\r\n },\r\n \"InstanceId\": \"40716838-2fa2-453b-8901-3f16ecb5359b\",\r\n \"Name\": \"DefaultPolicy\",\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"WorkloadType\": \"VM\",\r\n \"Schedule\": {\r\n \"BackupType\": \"Full\",\r\n \"ScheduleRun\": \"Daily\",\r\n \"ScheduleStartTime\": \"0001-01-01T00:00:00\",\r\n \"ScheduleRunDays\": null,\r\n \"ScheduleRunTimes\": [\r\n \"2015-06-11T14:39:04.6630584Z\"\r\n ],\r\n \"RetentionPolicy\": {\r\n \"RetentionType\": 1,\r\n \"RetentionDuration\": 2\r\n }\r\n },\r\n \"InstanceId\": \"c87bbada-6e1b-4db2-b76c-9062d28959a4\",\r\n \"Name\": \"Policy9\",\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"WorkloadType\": \"VM\",\r\n \"Schedule\": {\r\n \"BackupType\": \"Full\",\r\n \"ScheduleRun\": \"Daily\",\r\n \"ScheduleStartTime\": \"0001-01-01T00:00:00\",\r\n \"ScheduleRunDays\": null,\r\n \"ScheduleRunTimes\": [\r\n \"2015-12-06T19:30:00\"\r\n ],\r\n \"RetentionPolicy\": {\r\n \"RetentionType\": 1,\r\n \"RetentionDuration\": 30\r\n }\r\n },\r\n \"InstanceId\": \"f9e9691b-e05e-45ee-a273-e39e40216a04\",\r\n \"Name\": \"ProtPolicy01_updated\",\r\n \"OperationInProgress\": false\r\n }\r\n ],\r\n \"ResultCount\": 3,\r\n \"Skiptoken\": null\r\n}", - "ResponseHeaders": { - "Content-Length": [ - "1102" - ], - "Content-Type": [ - "application/json" - ], - "Expires": [ - "-1" - ], - "Pragma": [ - "no-cache" - ], - "x-ms-request-id": [ - "e412c33e-32ea-42c6-998e-40666d34d391" - ], - "x-ms-client-request-id": [ - "43ff4d15-6f28-418f-9a1a-cf05ee68a15e-2015-06-18 09:51:33Z-PS", - "43ff4d15-6f28-418f-9a1a-cf05ee68a15e-2015-06-18 09:51:33Z-PS" - ], - "Strict-Transport-Security": [ - "max-age=31536000; includeSubDomains" - ], - "x-ms-ratelimit-remaining-subscription-reads": [ - "14996" - ], - "x-ms-correlation-request-id": [ - "e412c33e-32ea-42c6-998e-40666d34d391" - ], - "x-ms-routing-request-id": [ - "CENTRALUS:20150618T095136Z:e412c33e-32ea-42c6-998e-40666d34d391" - ], - "Cache-Control": [ - "no-cache" - ], - "Date": [ - "Thu, 18 Jun 2015 09:51:36 GMT" - ], - "Server": [ - "Microsoft-IIS/8.0" - ], - "X-Powered-By": [ - "ASP.NET" - ] - }, - "StatusCode": 200 - } - ], - "Names": {}, - "Variables": { - "SubscriptionId": "f5303a0b-fae4-4cdb-b44d-0e4c032dde26" - } -} \ No newline at end of file diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupTests/ListProtectionPolicyTests.json b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupTests/ListProtectionPolicyTests.json deleted file mode 100644 index 6c48ba467daf..000000000000 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupTests/ListProtectionPolicyTests.json +++ /dev/null @@ -1,72 +0,0 @@ -{ - "Entries": [ - { - "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/protectionpolicies?api-version=2014-09-01", - "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vcHJvdGVjdGlvbnBvbGljaWVzP2FwaS12ZXJzaW9uPTIwMTQtMDktMDE=", - "RequestMethod": "GET", - "RequestBody": "", - "RequestHeaders": { - "Accept-Language": [ - "en-us" - ], - "x-ms-client-request-id": [ - "82155929-734c-45a3-a1b8-540c0988e087-2015-06-17 09:38:26Z-PS" - ], - "User-Agent": [ - "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" - ] - }, - "ResponseBody": "{\r\n \"Objects\": [\r\n {\r\n \"WorkloadType\": \"VM\",\r\n \"Schedule\": {\r\n \"BackupType\": \"Full\",\r\n \"ScheduleRun\": \"Daily\",\r\n \"ScheduleStartTime\": \"0001-01-01T00:00:00\",\r\n \"ScheduleRunDays\": null,\r\n \"ScheduleRunTimes\": [\r\n \"2015-06-17T19:30:00\"\r\n ],\r\n \"RetentionPolicy\": {\r\n \"RetentionType\": 1,\r\n \"RetentionDuration\": 30\r\n }\r\n },\r\n \"InstanceId\": \"40716838-2fa2-453b-8901-3f16ecb5359b\",\r\n \"Name\": \"DefaultPolicy\",\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"WorkloadType\": \"VM\",\r\n \"Schedule\": {\r\n \"BackupType\": \"Full\",\r\n \"ScheduleRun\": \"Daily\",\r\n \"ScheduleStartTime\": \"0001-01-01T00:00:00\",\r\n \"ScheduleRunDays\": null,\r\n \"ScheduleRunTimes\": [\r\n \"2015-06-11T14:39:04.6630584Z\"\r\n ],\r\n \"RetentionPolicy\": {\r\n \"RetentionType\": 1,\r\n \"RetentionDuration\": 2\r\n }\r\n },\r\n \"InstanceId\": \"c87bbada-6e1b-4db2-b76c-9062d28959a4\",\r\n \"Name\": \"Policy9\",\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"WorkloadType\": \"VM\",\r\n \"Schedule\": {\r\n \"BackupType\": \"Full\",\r\n \"ScheduleRun\": \"Daily\",\r\n \"ScheduleStartTime\": \"0001-01-01T00:00:00\",\r\n \"ScheduleRunDays\": null,\r\n \"ScheduleRunTimes\": [\r\n \"2015-12-06T19:30:00\"\r\n ],\r\n \"RetentionPolicy\": {\r\n \"RetentionType\": 1,\r\n \"RetentionDuration\": 30\r\n }\r\n },\r\n \"InstanceId\": \"f9e9691b-e05e-45ee-a273-e39e40216a04\",\r\n \"Name\": \"ProtPolicy01_updated\",\r\n \"OperationInProgress\": false\r\n }\r\n ],\r\n \"ResultCount\": 3,\r\n \"Skiptoken\": null\r\n}", - "ResponseHeaders": { - "Content-Length": [ - "1102" - ], - "Content-Type": [ - "application/json" - ], - "Expires": [ - "-1" - ], - "Pragma": [ - "no-cache" - ], - "x-ms-request-id": [ - "4cd437a8-5c9d-4a6d-85db-10e056055b25" - ], - "x-ms-client-request-id": [ - "82155929-734c-45a3-a1b8-540c0988e087-2015-06-17 09:38:26Z-PS", - "82155929-734c-45a3-a1b8-540c0988e087-2015-06-17 09:38:26Z-PS" - ], - "Strict-Transport-Security": [ - "max-age=31536000; includeSubDomains" - ], - "x-ms-ratelimit-remaining-subscription-reads": [ - "14996" - ], - "x-ms-correlation-request-id": [ - "4cd437a8-5c9d-4a6d-85db-10e056055b25" - ], - "x-ms-routing-request-id": [ - "CENTRALUS:20150617T093829Z:4cd437a8-5c9d-4a6d-85db-10e056055b25" - ], - "Cache-Control": [ - "no-cache" - ], - "Date": [ - "Wed, 17 Jun 2015 09:38:28 GMT" - ], - "Server": [ - "Microsoft-IIS/8.0" - ], - "X-Powered-By": [ - "ASP.NET" - ] - }, - "StatusCode": 200 - } - ], - "Names": {}, - "Variables": { - "SubscriptionId": "f5303a0b-fae4-4cdb-b44d-0e4c032dde26" - } -} \ No newline at end of file diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupVaultTests/GetAzureBackupVaultCredentialsTests.json b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupVaultTests/GetAzureBackupVaultCredentialsTests.json index ecffd4ab1460..ee0e24d33742 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupVaultTests/GetAzureBackupVaultCredentialsTests.json +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupVaultTests/GetAzureBackupVaultCredentialsTests.json @@ -1,10 +1,125 @@ { "Entries": [ + { + "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resources?$filter=resourceType%20eq%20'Microsoft.Backupseadev01/BackupVault'&$top=100&api-version=2013-03-01", + "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlcz8kZmlsdGVyPXJlc291cmNlVHlwZSUyMGVxJTIwJ01pY3Jvc29mdC5CYWNrdXBzZWFkZXYwMS9CYWNrdXBWYXVsdCcmJHRvcD0xMDAmYXBpLXZlcnNpb249MjAxMy0wMy0wMQ==", + "RequestMethod": "GET", + "RequestBody": "", + "RequestHeaders": { + "Accept-Language": [ + "en-us" + ], + "x-ms-client-request-id": [ + "63831bb9-3e67-4beb-b001-056e728a94f1-2015-07-01 19:30:45Z-PS" + ], + "User-Agent": [ + "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" + ] + }, + "ResponseBody": "{\r\n \"value\": [\r\n {\r\n \"id\": \"/subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn\",\r\n \"name\": \"backuprn\",\r\n \"type\": \"Microsoft.Backupseadev01/BackupVault\",\r\n \"location\": \"westus\",\r\n \"tags\": {\r\n \"department\": \"finance\"\r\n }\r\n },\r\n {\r\n \"id\": \"/subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/endtoendrn\",\r\n \"name\": \"endtoendrn\",\r\n \"type\": \"Microsoft.Backupseadev01/BackupVault\",\r\n \"location\": \"westus\",\r\n \"tags\": {}\r\n },\r\n {\r\n \"id\": \"/subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/storagetestrn\",\r\n \"name\": \"storagetestrn\",\r\n \"type\": \"Microsoft.Backupseadev01/BackupVault\",\r\n \"location\": \"westus\",\r\n \"tags\": {}\r\n },\r\n {\r\n \"id\": \"/subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/storagetestrn1\",\r\n \"name\": \"storagetestrn1\",\r\n \"type\": \"Microsoft.Backupseadev01/BackupVault\",\r\n \"location\": \"westus\",\r\n \"tags\": {}\r\n },\r\n {\r\n \"id\": \"/subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/storagetestrn2\",\r\n \"name\": \"storagetestrn2\",\r\n \"type\": \"Microsoft.Backupseadev01/BackupVault\",\r\n \"location\": \"westus\",\r\n \"tags\": {}\r\n },\r\n {\r\n \"id\": \"/subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/trialrn\",\r\n \"name\": \"trialrn\",\r\n \"type\": \"Microsoft.Backupseadev01/BackupVault\",\r\n \"location\": \"westus\",\r\n \"tags\": {}\r\n },\r\n {\r\n \"id\": \"/subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/mkheranivault/providers/Microsoft.Backupseadev01/BackupVault/mkheranivault\",\r\n \"name\": \"mkheranivault\",\r\n \"type\": \"Microsoft.Backupseadev01/BackupVault\",\r\n \"location\": \"westus\",\r\n \"tags\": {}\r\n },\r\n {\r\n \"id\": \"/subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/pragrawa-rg2/providers/Microsoft.Backupseadev01/BackupVault/pragrawa-rn2\",\r\n \"name\": \"pragrawa-rn2\",\r\n \"type\": \"Microsoft.Backupseadev01/BackupVault\",\r\n \"location\": \"westus\",\r\n \"tags\": {\r\n \"department\": \"finance\"\r\n }\r\n },\r\n {\r\n \"id\": \"/subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/swatirg1/providers/Microsoft.Backupseadev01/BackupVault/swatirn1\",\r\n \"name\": \"swatirn1\",\r\n \"type\": \"Microsoft.Backupseadev01/BackupVault\",\r\n \"location\": \"westus\",\r\n \"tags\": {\r\n \"department\": \"finance\"\r\n }\r\n },\r\n {\r\n \"id\": \"/subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/swatirg2/providers/Microsoft.Backupseadev01/BackupVault/swatirn2\",\r\n \"name\": \"swatirn2\",\r\n \"type\": \"Microsoft.Backupseadev01/BackupVault\",\r\n \"location\": \"westus\",\r\n \"tags\": {\r\n \"department\": \"finance\"\r\n }\r\n },\r\n {\r\n \"id\": \"/subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/TestRG17/providers/Microsoft.Backupseadev01/BackupVault/SwatiResource\",\r\n \"name\": \"SwatiResource\",\r\n \"type\": \"Microsoft.Backupseadev01/BackupVault\",\r\n \"location\": \"westus\",\r\n \"tags\": {\r\n \"department\": \"finance\"\r\n }\r\n },\r\n {\r\n \"id\": \"/subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/TestRG17/providers/Microsoft.Backupseadev01/BackupVault/TestResource13\",\r\n \"name\": \"TestResource13\",\r\n \"type\": \"Microsoft.Backupseadev01/BackupVault\",\r\n \"location\": \"westus\",\r\n \"tags\": {\r\n \"department\": \"finance\"\r\n }\r\n },\r\n {\r\n \"id\": \"/subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/TestRG17/providers/Microsoft.Backupseadev01/BackupVault/TestResource14\",\r\n \"name\": \"TestResource14\",\r\n \"type\": \"Microsoft.Backupseadev01/BackupVault\",\r\n \"location\": \"westus\",\r\n \"tags\": {}\r\n }\r\n ]\r\n}", + "ResponseHeaders": { + "Content-Length": [ + "3295" + ], + "Content-Type": [ + "application/json; charset=utf-8" + ], + "Expires": [ + "-1" + ], + "Pragma": [ + "no-cache" + ], + "x-ms-ratelimit-remaining-subscription-reads": [ + "14999" + ], + "x-ms-request-id": [ + "c7401106-3388-4428-a472-29f77a0ccb58" + ], + "x-ms-correlation-request-id": [ + "c7401106-3388-4428-a472-29f77a0ccb58" + ], + "x-ms-routing-request-id": [ + "CENTRALUS:20150701T193046Z:c7401106-3388-4428-a472-29f77a0ccb58" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Wed, 01 Jul 2015 19:30:45 GMT" + ] + }, + "StatusCode": 200 + }, + { + "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/storageconfig/vaultstorageconfig?api-version=2015-03-15", + "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vc3RvcmFnZWNvbmZpZy92YXVsdHN0b3JhZ2Vjb25maWc/YXBpLXZlcnNpb249MjAxNS0wMy0xNQ==", + "RequestMethod": "GET", + "RequestBody": "", + "RequestHeaders": { + "Accept-Language": [ + "en-us" + ], + "x-ms-client-request-id": [ + "63831bb9-3e67-4beb-b001-056e728a94f1-2015-07-01 19:30:45Z-PS" + ], + "User-Agent": [ + "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" + ] + }, + "ResponseBody": "{\r\n \"resourceId\": 3420983535961922368,\r\n \"properties\": {\r\n \"storageType\": \"GeoRedundant\",\r\n \"storageTypeState\": \"Locked\"\r\n }\r\n}", + "ResponseHeaders": { + "Content-Length": [ + "106" + ], + "Content-Type": [ + "application/json" + ], + "Expires": [ + "-1" + ], + "Pragma": [ + "no-cache" + ], + "x-ms-request-id": [ + "ae950d89-395d-45ac-83ac-16a9bb43a6ff" + ], + "x-ms-client-request-id": [ + "63831bb9-3e67-4beb-b001-056e728a94f1-2015-07-01 19:30:45Z-PS", + "63831bb9-3e67-4beb-b001-056e728a94f1-2015-07-01 19:30:45Z-PS" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "x-ms-ratelimit-remaining-subscription-reads": [ + "14998" + ], + "x-ms-correlation-request-id": [ + "ae950d89-395d-45ac-83ac-16a9bb43a6ff" + ], + "x-ms-routing-request-id": [ + "CENTRALUS:20150701T193049Z:ae950d89-395d-45ac-83ac-16a9bb43a6ff" + ], + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Wed, 01 Jul 2015 19:30:49 GMT" + ], + "Server": [ + "Microsoft-IIS/8.0" + ] + }, + "StatusCode": 200 + }, { "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/certificates/IdMgmtInternalCert?api-version=2015-03-15", "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vY2VydGlmaWNhdGVzL0lkTWdtdEludGVybmFsQ2VydD9hcGktdmVyc2lvbj0yMDE1LTAzLTE1", "RequestMethod": "PUT", - "RequestBody": "{\r\n \"properties\": {\r\n \"certificate\": \"MIIC3TCCAcWgAwIBAgIQaa4WR+3Ra7pPjIzudnuuQTANBgkqhkiG9w0BAQUFADAeMRwwGgYDVQQDExNXaW5kb3dzIEF6dXJlIFRvb2xzMB4XDTE1MDYxNzE3MDAwM1oXDTE1MDYxOTE3MTAwM1owHjEcMBoGA1UEAxMTV2luZG93cyBBenVyZSBUb29sczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJhjKYhKBkE9TN6WLn8mlvkg3nCgbYwWJSuyMpcE2NH3B/rxndF1a/Mz3MJ5s3+EB9FJpuh5W2ZoqcZ2fpA3nSd+L1zrXY9gOqKqrLmRI3TwSF8X4UVXlA3eFu2QV18FfaNyDE6eBX9Rf0cDTWvNraCW/31fVGs+66d1qDhiEevPo6B9JXXauAN4NgA6uI8rwY/UOQY+3hIVjWJ/FZOAgN/T6Jb/hglCqVcyBn5bxJa3Zz49P3YSBwauf2uyiJlU64B3xmrT75Qo/+cRk5BpkWsBh57PxZhfgwL6IXSezcGTEBl5S3LEMeo+T0To6d+f/F38g2PLqteWHrtTWu+SGYkCAwEAAaMXMBUwEwYDVR0lBAwwCgYIKwYBBQUHAwIwDQYJKoZIhvcNAQEFBQADggEBAEspmwyUvBmbX97gwA3mMFiHyZXFL5MgcA0qjZWy7tUS3gcrLZRSv8SMmX8Yv9F4wMy1oe/H4PxCM2IX8cuQLZ2NfAo2sGVlmhdP12ksW/rKimHpnUTfSnslzqFg4sExu4WIkRn6AJMeqAjOul+A1a6UWKa+RRoRQc6MU/tvBAiEnlRAzFpv/4Ri3yS+KXD0gkOMpoJABkOEtdrgbyFICjfsaku4q1q8LycusFpbE+GEL5TWbUG9wwLZl/IPoy8NBtrv/7Dz8t8a6j/LUxvcChNSj4sID98uasBzOJ8I65xixv+XZXl76a0Q2J4icGkmomktz3TCd7yTVykjgyAbP8c=\"\r\n }\r\n}", + "RequestBody": "{\r\n \"properties\": {\r\n \"certificate\": \"MIIC3TCCAcWgAwIBAgIQe1D4O/pu/o1HJeWwD9iRGDANBgkqhkiG9w0BAQUFADAeMRwwGgYDVQQDExNXaW5kb3dzIEF6dXJlIFRvb2xzMB4XDTE1MDcwMTE5MjA0OVoXDTE1MDcwMzE5MzA0OVowHjEcMBoGA1UEAxMTV2luZG93cyBBenVyZSBUb29sczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAIv4q9u54n1SjANXzveleeklAyHPlWRpzWqcxafrg4fjzIaWfEVnixUzrbcuqLOJy8ErXgr2e5wKadg2dRgsMusnrczTbjRHN7LuNjcFH9LCWbMiSMLNH6T3TJ6vGSY1SP2SooE5Ika/hxDc9duTPuWAI351g0W3U9Jzj8enp27Qr92B4R3qn7McTNNCGbmVLR4DkEG45liqGISq+cNxcwQPnuXrgHGgAW4bfPwMfLoJALIs6dCa2Q1paObIGASe4TP4kJe9IS0QZR1nQwASf+tLUJMAdoSf5TZzaLAR1Io5W0lQVj3oARWwgoVavWcEIqEVY/caGdNFUuSSeDnG/v8CAwEAAaMXMBUwEwYDVR0lBAwwCgYIKwYBBQUHAwIwDQYJKoZIhvcNAQEFBQADggEBADxbX6YbKwmF/458o9W34xDmlpT6wQtDepHtVTAc2Haw04vEbCmZjF5qMxc7plUUJZD+e7WZHHlmxmV7SxYDJ+K1y333UHx1bhaoX6xsATCKNIEcmEtQjjpxlU+ZP+YIIWar7WHKbr6W2df8WHzYz5IxCJIVLx5A8VPyeYsjQPwnBqS0bJYl6zW80tk5VdjpCwDuJwiK5gBG7NGAVorp+FMOsbzzPzQncOto+4YUxs0BdDgPC6UAUzQwjKSxD8Lm0ljCXuYIz1pxgFtZ2seK0364cbVW/KwvqrSrGqBbNg6Ow7L0fWGTOktotDX+YfsVqCSDIHO3Ri1q5LDUQSlZOxQ=\"\r\n }\r\n}", "RequestHeaders": { "Content-Type": [ "application/json" @@ -22,10 +137,10 @@ "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" ] }, - "ResponseBody": "{\r\n \"properties\": {\r\n \"certificate\": \"MIIC3TCCAcWgAwIBAgIQaa4WR+3Ra7pPjIzudnuuQTANBgkqhkiG9w0BAQUFADAeMRwwGgYDVQQDExNXaW5kb3dzIEF6dXJlIFRvb2xzMB4XDTE1MDYxNzE3MDAwM1oXDTE1MDYxOTE3MTAwM1owHjEcMBoGA1UEAxMTV2luZG93cyBBenVyZSBUb29sczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJhjKYhKBkE9TN6WLn8mlvkg3nCgbYwWJSuyMpcE2NH3B/rxndF1a/Mz3MJ5s3+EB9FJpuh5W2ZoqcZ2fpA3nSd+L1zrXY9gOqKqrLmRI3TwSF8X4UVXlA3eFu2QV18FfaNyDE6eBX9Rf0cDTWvNraCW/31fVGs+66d1qDhiEevPo6B9JXXauAN4NgA6uI8rwY/UOQY+3hIVjWJ/FZOAgN/T6Jb/hglCqVcyBn5bxJa3Zz49P3YSBwauf2uyiJlU64B3xmrT75Qo/+cRk5BpkWsBh57PxZhfgwL6IXSezcGTEBl5S3LEMeo+T0To6d+f/F38g2PLqteWHrtTWu+SGYkCAwEAAaMXMBUwEwYDVR0lBAwwCgYIKwYBBQUHAwIwDQYJKoZIhvcNAQEFBQADggEBAEspmwyUvBmbX97gwA3mMFiHyZXFL5MgcA0qjZWy7tUS3gcrLZRSv8SMmX8Yv9F4wMy1oe/H4PxCM2IX8cuQLZ2NfAo2sGVlmhdP12ksW/rKimHpnUTfSnslzqFg4sExu4WIkRn6AJMeqAjOul+A1a6UWKa+RRoRQc6MU/tvBAiEnlRAzFpv/4Ri3yS+KXD0gkOMpoJABkOEtdrgbyFICjfsaku4q1q8LycusFpbE+GEL5TWbUG9wwLZl/IPoy8NBtrv/7Dz8t8a6j/LUxvcChNSj4sID98uasBzOJ8I65xixv+XZXl76a0Q2J4icGkmomktz3TCd7yTVykjgyAbP8c=\",\r\n \"resourceId\": 3420983535961922368,\r\n \"globalAcsNamespace\": \"seadev01rp1users\",\r\n \"globalAcsHostName\": \"accesscontrol.windows.net\",\r\n \"globalAcsRPRealm\": \"http://windowscloudbackup/m3\",\r\n \"subject\": \"CN=Windows Azure Tools\",\r\n \"validFrom\": \"2015-06-17T22:30:03+05:30\",\r\n \"validTo\": \"2015-06-19T22:40:03+05:30\",\r\n \"thumbprint\": \"39D0915AC95DFD234575A54502AEBC78E344B3E8\",\r\n \"friendlyName\": \"\",\r\n \"issuer\": \"CN=Windows Azure Tools\"\r\n }\r\n}", + "ResponseBody": "{\r\n \"properties\": {\r\n \"certificate\": \"MIIC3TCCAcWgAwIBAgIQe1D4O/pu/o1HJeWwD9iRGDANBgkqhkiG9w0BAQUFADAeMRwwGgYDVQQDExNXaW5kb3dzIEF6dXJlIFRvb2xzMB4XDTE1MDcwMTE5MjA0OVoXDTE1MDcwMzE5MzA0OVowHjEcMBoGA1UEAxMTV2luZG93cyBBenVyZSBUb29sczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAIv4q9u54n1SjANXzveleeklAyHPlWRpzWqcxafrg4fjzIaWfEVnixUzrbcuqLOJy8ErXgr2e5wKadg2dRgsMusnrczTbjRHN7LuNjcFH9LCWbMiSMLNH6T3TJ6vGSY1SP2SooE5Ika/hxDc9duTPuWAI351g0W3U9Jzj8enp27Qr92B4R3qn7McTNNCGbmVLR4DkEG45liqGISq+cNxcwQPnuXrgHGgAW4bfPwMfLoJALIs6dCa2Q1paObIGASe4TP4kJe9IS0QZR1nQwASf+tLUJMAdoSf5TZzaLAR1Io5W0lQVj3oARWwgoVavWcEIqEVY/caGdNFUuSSeDnG/v8CAwEAAaMXMBUwEwYDVR0lBAwwCgYIKwYBBQUHAwIwDQYJKoZIhvcNAQEFBQADggEBADxbX6YbKwmF/458o9W34xDmlpT6wQtDepHtVTAc2Haw04vEbCmZjF5qMxc7plUUJZD+e7WZHHlmxmV7SxYDJ+K1y333UHx1bhaoX6xsATCKNIEcmEtQjjpxlU+ZP+YIIWar7WHKbr6W2df8WHzYz5IxCJIVLx5A8VPyeYsjQPwnBqS0bJYl6zW80tk5VdjpCwDuJwiK5gBG7NGAVorp+FMOsbzzPzQncOto+4YUxs0BdDgPC6UAUzQwjKSxD8Lm0ljCXuYIz1pxgFtZ2seK0364cbVW/KwvqrSrGqBbNg6Ow7L0fWGTOktotDX+YfsVqCSDIHO3Ri1q5LDUQSlZOxQ=\",\r\n \"resourceId\": 3420983535961922368,\r\n \"globalAcsNamespace\": \"seadev01rrp1users\",\r\n \"globalAcsHostName\": \"accesscontrol.windows.net\",\r\n \"globalAcsRPRealm\": \"http://windowscloudbackup/m3\",\r\n \"subject\": \"CN=Windows Azure Tools\",\r\n \"validFrom\": \"2015-07-02T00:50:49+05:30\",\r\n \"validTo\": \"2015-07-04T01:00:49+05:30\",\r\n \"thumbprint\": \"0BF0D16B9999BCE0DD856C3A53162A270AB6EEE2\",\r\n \"friendlyName\": \"\",\r\n \"issuer\": \"CN=Windows Azure Tools\"\r\n }\r\n}", "ResponseHeaders": { "Content-Length": [ - "1409" + "1410" ], "Content-Type": [ "application/json" @@ -37,29 +152,29 @@ "no-cache" ], "x-ms-request-id": [ - "c66c0373-80b0-43ff-8089-8075e57913e9" + "22d65ab8-04a4-4cda-a623-7f26321eb185" ], "x-ms-client-request-id": [ - "773dc534-8d14-4812-912f-d2834a9e8c05", - "773dc534-8d14-4812-912f-d2834a9e8c05" + "5ab36f49-b786-4974-8cd7-1808d5d371ae", + "5ab36f49-b786-4974-8cd7-1808d5d371ae" ], "Strict-Transport-Security": [ "max-age=31536000; includeSubDomains" ], "x-ms-ratelimit-remaining-subscription-writes": [ - "1198" + "1199" ], "x-ms-correlation-request-id": [ - "c66c0373-80b0-43ff-8089-8075e57913e9" + "22d65ab8-04a4-4cda-a623-7f26321eb185" ], "x-ms-routing-request-id": [ - "CENTRALUS:20150617T171018Z:c66c0373-80b0-43ff-8089-8075e57913e9" + "CENTRALUS:20150701T193052Z:22d65ab8-04a4-4cda-a623-7f26321eb185" ], "Cache-Control": [ "no-cache" ], "Date": [ - "Wed, 17 Jun 2015 17:10:17 GMT" + "Wed, 01 Jul 2015 19:30:52 GMT" ], "Server": [ "Microsoft-IIS/8.0" diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.BackupItemTests/BackUpAzureBackUpItem.json b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.BackupItemTests/BackUpAzureBackUpItem.json deleted file mode 100644 index f56e56edab1a..000000000000 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.BackupItemTests/BackUpAzureBackUpItem.json +++ /dev/null @@ -1,69 +0,0 @@ -{ - "Entries": [ - { - "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/containers/iaasvmcontainer%3Bdev01testing%3Bdev01testing/datasources/VM/17593283453810/backup?api-version=2014-09-01", - "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vY29udGFpbmVycy9pYWFzdm1jb250YWluZXIlM0JkZXYwMXRlc3RpbmclM0JkZXYwMXRlc3RpbmcvZGF0YXNvdXJjZXMvVk0vMTc1OTMyODM0NTM4MTAvYmFja3VwP2FwaS12ZXJzaW9uPTIwMTQtMDktMDE=", - "RequestMethod": "POST", - "RequestBody": "", - "RequestHeaders": { - "Accept-Language": [ - "en-us" - ], - "User-Agent": [ - "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" - ] - }, - "ResponseBody": "\"2e830380-e33a-4f0e-b765-d5ed21eb9b60\"", - "ResponseHeaders": { - "Content-Length": [ - "38" - ], - "Content-Type": [ - "application/json" - ], - "Expires": [ - "-1" - ], - "Pragma": [ - "no-cache" - ], - "x-ms-request-id": [ - "83616393-ec00-4f86-b9c9-6f0e576424f3" - ], - "x-ms-client-request-id": [ - "2787c1c1-5afb-468b-93c3-ca0296a1a1fd", - "2787c1c1-5afb-468b-93c3-ca0296a1a1fd" - ], - "Strict-Transport-Security": [ - "max-age=31536000; includeSubDomains" - ], - "x-ms-ratelimit-remaining-subscription-writes": [ - "1196" - ], - "x-ms-correlation-request-id": [ - "83616393-ec00-4f86-b9c9-6f0e576424f3" - ], - "x-ms-routing-request-id": [ - "CENTRALUS:20150617T093900Z:83616393-ec00-4f86-b9c9-6f0e576424f3" - ], - "Cache-Control": [ - "no-cache" - ], - "Date": [ - "Wed, 17 Jun 2015 09:39:00 GMT" - ], - "Server": [ - "Microsoft-IIS/8.0" - ], - "X-Powered-By": [ - "ASP.NET" - ] - }, - "StatusCode": 202 - } - ], - "Names": {}, - "Variables": { - "SubscriptionId": "f5303a0b-fae4-4cdb-b44d-0e4c032dde26" - } -} \ No newline at end of file diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.RecoveryPointTests/GetRecoveryPointTests.json b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.RecoveryPointTests/GetRecoveryPointTests.json deleted file mode 100644 index 7b56a7e45ccc..000000000000 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.RecoveryPointTests/GetRecoveryPointTests.json +++ /dev/null @@ -1,69 +0,0 @@ -{ - "Entries": [ - { - "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/containers/iaasvmcontainer%3Bdev01testing%3Bdev01testing/datasources/VM/17593283453810/recoverypoints?api-version=2014-09-01", - "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vY29udGFpbmVycy9pYWFzdm1jb250YWluZXIlM0JkZXYwMXRlc3RpbmclM0JkZXYwMXRlc3RpbmcvZGF0YXNvdXJjZXMvVk0vMTc1OTMyODM0NTM4MTAvcmVjb3Zlcnlwb2ludHM/YXBpLXZlcnNpb249MjAxNC0wOS0wMQ==", - "RequestMethod": "GET", - "RequestBody": "", - "RequestHeaders": { - "Accept-Language": [ - "en-us" - ], - "User-Agent": [ - "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" - ] - }, - "ResponseBody": "{\r\n \"Objects\": [\r\n {\r\n \"RecoveryPointType\": \"AppConsistent\",\r\n \"RecoveryPointTime\": \"2015-06-17T08:38:51.5793413Z\",\r\n \"RecoveryPointAdditionalInfo\": \"\",\r\n \"InstanceId\": \"17845881712136\",\r\n \"Name\": null,\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"RecoveryPointType\": \"AppConsistent\",\r\n \"RecoveryPointTime\": \"2015-06-12T14:37:10.7780467Z\",\r\n \"RecoveryPointAdditionalInfo\": \"\",\r\n \"InstanceId\": \"19404752991554\",\r\n \"Name\": null,\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"RecoveryPointType\": \"AppConsistent\",\r\n \"RecoveryPointTime\": \"2015-06-11T10:52:30.0345282Z\",\r\n \"RecoveryPointAdditionalInfo\": \"\",\r\n \"InstanceId\": \"19591702463836\",\r\n \"Name\": null,\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"RecoveryPointType\": \"AppConsistent\",\r\n \"RecoveryPointTime\": \"2015-06-12T06:05:46.9189974Z\",\r\n \"RecoveryPointAdditionalInfo\": \"\",\r\n \"InstanceId\": \"20483888156836\",\r\n \"Name\": null,\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"RecoveryPointType\": \"AppConsistent\",\r\n \"RecoveryPointTime\": \"2015-06-12T05:49:51.2034409Z\",\r\n \"RecoveryPointAdditionalInfo\": \"\",\r\n \"InstanceId\": \"20920255378610\",\r\n \"Name\": null,\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"RecoveryPointType\": \"AppConsistent\",\r\n \"RecoveryPointTime\": \"2015-06-13T20:32:53.114913Z\",\r\n \"RecoveryPointAdditionalInfo\": \"\",\r\n \"InstanceId\": \"21428490254558\",\r\n \"Name\": null,\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"RecoveryPointType\": \"AppConsistent\",\r\n \"RecoveryPointTime\": \"2015-06-14T20:31:45.7443624Z\",\r\n \"RecoveryPointAdditionalInfo\": \"\",\r\n \"InstanceId\": \"22454774268892\",\r\n \"Name\": null,\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"RecoveryPointType\": \"AppConsistent\",\r\n \"RecoveryPointTime\": \"2015-06-13T14:44:36.4839382Z\",\r\n \"RecoveryPointAdditionalInfo\": \"\",\r\n \"InstanceId\": \"22858334479018\",\r\n \"Name\": null,\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"RecoveryPointType\": \"AppConsistent\",\r\n \"RecoveryPointTime\": \"2015-06-15T17:38:00.3816293Z\",\r\n \"RecoveryPointAdditionalInfo\": \"\",\r\n \"InstanceId\": \"23250438297653\",\r\n \"Name\": null,\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"RecoveryPointType\": \"AppConsistent\",\r\n \"RecoveryPointTime\": \"2015-06-16T19:32:43.9310734Z\",\r\n \"RecoveryPointAdditionalInfo\": \"\",\r\n \"InstanceId\": \"24972585524123\",\r\n \"Name\": null,\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"RecoveryPointType\": \"AppConsistent\",\r\n \"RecoveryPointTime\": \"2015-06-12T06:24:33.0768703Z\",\r\n \"RecoveryPointAdditionalInfo\": \"\",\r\n \"InstanceId\": \"26453384139263\",\r\n \"Name\": null,\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"RecoveryPointType\": \"AppConsistent\",\r\n \"RecoveryPointTime\": \"2015-06-15T11:12:50.8577407Z\",\r\n \"RecoveryPointAdditionalInfo\": \"\",\r\n \"InstanceId\": \"27692400690050\",\r\n \"Name\": null,\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"RecoveryPointType\": \"AppConsistent\",\r\n \"RecoveryPointTime\": \"2015-06-17T08:23:20.8583076Z\",\r\n \"RecoveryPointAdditionalInfo\": \"\",\r\n \"InstanceId\": \"28054591996663\",\r\n \"Name\": null,\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"RecoveryPointType\": \"AppConsistent\",\r\n \"RecoveryPointTime\": \"2015-06-17T09:25:09.6146705Z\",\r\n \"RecoveryPointAdditionalInfo\": \"\",\r\n \"InstanceId\": \"30159220037616\",\r\n \"Name\": null,\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"RecoveryPointType\": \"AppConsistent\",\r\n \"RecoveryPointTime\": \"2015-06-12T14:58:53.0078718Z\",\r\n \"RecoveryPointAdditionalInfo\": \"\",\r\n \"InstanceId\": \"30273063703570\",\r\n \"Name\": null,\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"RecoveryPointType\": \"AppConsistent\",\r\n \"RecoveryPointTime\": \"2015-06-11T14:41:46.0950893Z\",\r\n \"RecoveryPointAdditionalInfo\": \"\",\r\n \"InstanceId\": \"32528401668178\",\r\n \"Name\": null,\r\n \"OperationInProgress\": false\r\n },\r\n {\r\n \"RecoveryPointType\": \"AppConsistent\",\r\n \"RecoveryPointTime\": \"2015-06-12T15:32:19.7649004Z\",\r\n \"RecoveryPointAdditionalInfo\": \"\",\r\n \"InstanceId\": \"33472577556162\",\r\n \"Name\": null,\r\n \"OperationInProgress\": false\r\n }\r\n ],\r\n \"ResultCount\": 17,\r\n \"Skiptoken\": null\r\n}", - "ResponseHeaders": { - "Content-Length": [ - "3310" - ], - "Content-Type": [ - "application/json" - ], - "Expires": [ - "-1" - ], - "Pragma": [ - "no-cache" - ], - "x-ms-request-id": [ - "c2e92714-e196-4d6e-b73f-9f5ef3556578" - ], - "x-ms-client-request-id": [ - "67678cc4-2baf-4756-9ac5-7da40f2cea77", - "67678cc4-2baf-4756-9ac5-7da40f2cea77" - ], - "Strict-Transport-Security": [ - "max-age=31536000; includeSubDomains" - ], - "x-ms-ratelimit-remaining-subscription-reads": [ - "14995" - ], - "x-ms-correlation-request-id": [ - "c2e92714-e196-4d6e-b73f-9f5ef3556578" - ], - "x-ms-routing-request-id": [ - "CENTRALUS:20150617T093941Z:c2e92714-e196-4d6e-b73f-9f5ef3556578" - ], - "Cache-Control": [ - "no-cache" - ], - "Date": [ - "Wed, 17 Jun 2015 09:39:41 GMT" - ], - "Server": [ - "Microsoft-IIS/8.0" - ], - "X-Powered-By": [ - "ASP.NET" - ] - }, - "StatusCode": 200 - } - ], - "Names": {}, - "Variables": { - "SubscriptionId": "f5303a0b-fae4-4cdb-b44d-0e4c032dde26" - } -} \ No newline at end of file diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupClientAdapter/ContainerAdapter.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupClientAdapter/ContainerAdapter.cs deleted file mode 100644 index ac13b989177e..000000000000 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupClientAdapter/ContainerAdapter.cs +++ /dev/null @@ -1,78 +0,0 @@ -// ---------------------------------------------------------------------------------- -// -// Copyright Microsoft Corporation -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// http://www.apache.org/licenses/LICENSE-2.0 -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// ---------------------------------------------------------------------------------- - -using System; -using System.Management.Automation; -using System.Collections.Generic; -using System.Xml; -using Microsoft.WindowsAzure.Commands.Utilities.Common; -using Microsoft.Azure.Common.Authentication; -using Microsoft.Azure.Common.Authentication.Models; -using System.Threading; -using Hyak.Common; -using Microsoft.Azure.Commands.AzureBackup.Properties; -using System.Net; -using System.Linq; -using Microsoft.WindowsAzure.Management.Scheduler; -using Microsoft.Azure.Management.BackupServices; -using Microsoft.Azure.Management.BackupServices.Models; - -namespace Microsoft.Azure.Commands.AzureBackup.ClientAdapter -{ - public partial class AzureBackupClientAdapter - { - /// - /// Gets all containers in the vault - /// - /// - /// - public IEnumerable ListContainers(string filter) - { - var listResponse = AzureBackupClient.Container.ListAsync(filter, GetCustomRequestHeaders(), CmdletCancellationToken).Result; - return listResponse.Objects; - } - - /// - /// Register container - /// - /// - /// - public Guid RegisterContainer(RegisterContainerRequestInput request) - { - var response = AzureBackupClient.Container.RegisterAsync(request, GetCustomRequestHeaders(), CmdletCancellationToken).Result; - return response.OperationId; - } - - /// - /// UnRegister container - /// - /// - /// - public Guid UnRegisterContainer(UnregisterContainerRequestInput request) - { - var response = AzureBackupClient.Container.UnregisterAsync(request, GetCustomRequestHeaders(), CmdletCancellationToken).Result; - return response.OperationId; - } - - /// - /// Refresh container list in service - /// - /// - public Guid RefreshContainers() - { - var response = AzureBackupClient.Container.RefreshAsync(GetCustomRequestHeaders(), CmdletCancellationToken).Result; - return response.OperationId; - } - } -} \ No newline at end of file diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupClientAdapter/ItemAdapter.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupClientAdapter/ItemAdapter.cs deleted file mode 100644 index 193114bb179b..000000000000 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupClientAdapter/ItemAdapter.cs +++ /dev/null @@ -1,107 +0,0 @@ -// ---------------------------------------------------------------------------------- -// -// Copyright Microsoft Corporation -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// http://www.apache.org/licenses/LICENSE-2.0 -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// ---------------------------------------------------------------------------------- - -using System; -using System.Management.Automation; -using System.Collections.Generic; -using System.Xml; -using Microsoft.WindowsAzure.Commands.Utilities.Common; -using Microsoft.Azure.Common.Authentication; -using Microsoft.Azure.Common.Authentication.Models; -using System.Threading; -using Hyak.Common; -using Microsoft.Azure.Commands.AzureBackup.Properties; -using System.Net; -using Microsoft.WindowsAzure.Management.Scheduler; -using Microsoft.Azure.Management.BackupServices; -using Microsoft.Azure.Management.BackupServices.Models; - -namespace Microsoft.Azure.Commands.AzureBackup.ClientAdapter -{ - public partial class AzureBackupClientAdapter - { - /// - /// Lists datasources in the vault - /// - /// - /// - public IEnumerable ListDataSources(DataSourceQueryParameter query) - { - var response = AzureBackupClient.DataSource.ListAsync(query, GetCustomRequestHeaders(), CmdletCancellationToken).Result; - return (response != null) ? response.DataSources.Objects : null; - } - - /// - /// Lists protectable objects in the vault - /// - /// - /// - public IEnumerable ListProtectableObjects(POQueryParameter query) - { - var response = AzureBackupClient.ProtectableObject.ListAsync(query, GetCustomRequestHeaders(), CmdletCancellationToken).Result; - return (response != null) ? response.ProtectableObject.Objects : null; - } - - /// - /// Dsiable protection - /// - /// - /// - /// - /// - /// - public Guid DisableProtection(string containerName, string dsType, string dsId, RemoveProtectionRequestInput request) - { - var response = AzureBackupClient.DataSource.DisableProtectionAsync(GetCustomRequestHeaders(), containerName, dsType, dsId, request, CmdletCancellationToken).Result; - return response.OperationId; - } - - /// - /// Enable Protection - /// - /// - /// - public Guid EnableProtection(SetProtectionRequestInput request) - { - var response = AzureBackupClient.DataSource.EnableProtectionAsync(GetCustomRequestHeaders(), request, CmdletCancellationToken).Result; - return response.OperationId; - } - - /// - /// Trigger backup on a DS - /// - /// - /// - /// - /// - public Guid TriggerBackup(string containerName, string dsType, string dsId) - { - var response = AzureBackupClient.BackUp.TriggerBackUpAsync(GetCustomRequestHeaders(), containerName, dsType, dsId, CmdletCancellationToken).Result; - return response.OperationId; - } - - /// - /// Lists recovery points for specified item - /// - /// - /// - /// - /// - public IEnumerable ListRecoveryPoints(string containerName, string dsType, string dsId) - { - var response = AzureBackupClient.RecoveryPoint.ListAsync(GetCustomRequestHeaders(), containerName, dsType, dsId, CmdletCancellationToken).Result; - return (response != null) ? response.RecoveryPoints.Objects : null; - } - } -} \ No newline at end of file diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupClientAdapter/JobAdapter.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupClientAdapter/JobAdapter.cs deleted file mode 100644 index 2bea279711f0..000000000000 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupClientAdapter/JobAdapter.cs +++ /dev/null @@ -1,53 +0,0 @@ -// ---------------------------------------------------------------------------------- -// -// Copyright Microsoft Corporation -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// http://www.apache.org/licenses/LICENSE-2.0 -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// ---------------------------------------------------------------------------------- - -using System; -using System.Management.Automation; -using System.Collections.Generic; -using System.Xml; -using Microsoft.WindowsAzure.Commands.Utilities.Common; -using Microsoft.Azure.Common.Authentication; -using Microsoft.Azure.Common.Authentication.Models; -using System.Threading; -using Hyak.Common; -using Microsoft.Azure.Commands.AzureBackup.Properties; -using System.Net; -using Microsoft.WindowsAzure.Management.Scheduler; -using Microsoft.Azure.Management.BackupServices; -using Microsoft.Azure.Management.BackupServices.Models; -using Mgmt = Microsoft.Azure.Management.BackupServices.Models; - -namespace Microsoft.Azure.Commands.AzureBackup.ClientAdapter -{ - public partial class AzureBackupClientAdapter - { - public IEnumerable ListJobs(JobQueryParameter queryParams) - { - var response = AzureBackupClient.Job.ListAsync(queryParams, GetCustomRequestHeaders(), CmdletCancellationToken).Result; - return response.Jobs.Objects; - } - - public Mgmt.JobByIdResponse GetJobDetails(string jobId) - { - var response = AzureBackupClient.Job.GetAsync(jobId, GetCustomRequestHeaders(), CmdletCancellationToken).Result; - return response; - } - - public Guid TriggerCancelJob(string jobId) - { - var response = AzureBackupClient.Job.StopAsync(jobId, GetCustomRequestHeaders(), CmdletCancellationToken).Result.OperationId; - return response; - } - } -} \ No newline at end of file diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupClientAdapter/OperationStatusAdapter.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupClientAdapter/OperationStatusAdapter.cs deleted file mode 100644 index 6d4c63dc7aa3..000000000000 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupClientAdapter/OperationStatusAdapter.cs +++ /dev/null @@ -1,39 +0,0 @@ -// ---------------------------------------------------------------------------------- -// -// Copyright Microsoft Corporation -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// http://www.apache.org/licenses/LICENSE-2.0 -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// ---------------------------------------------------------------------------------- - -using System; -using System.Management.Automation; -using System.Collections.Generic; -using System.Xml; -using Microsoft.WindowsAzure.Commands.Utilities.Common; -using Microsoft.Azure.Common.Authentication; -using Microsoft.Azure.Common.Authentication.Models; -using System.Threading; -using Hyak.Common; -using Microsoft.Azure.Commands.AzureBackup.Properties; -using System.Net; -using Microsoft.WindowsAzure.Management.Scheduler; -using Microsoft.Azure.Management.BackupServices; -using Microsoft.Azure.Management.BackupServices.Models; - -namespace Microsoft.Azure.Commands.AzureBackup.ClientAdapter -{ - public partial class AzureBackupClientAdapter - { - public OperationResultResponse GetOperationStatus(string operationId) - { - return AzureBackupClient.OperationStatus.GetAsync(operationId, GetCustomRequestHeaders(), CmdletCancellationToken).Result; - } - } -} \ No newline at end of file diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupClientAdapter/PolicyAdapter.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupClientAdapter/PolicyAdapter.cs deleted file mode 100644 index 4db1e2ba2cc7..000000000000 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupClientAdapter/PolicyAdapter.cs +++ /dev/null @@ -1,87 +0,0 @@ -// ---------------------------------------------------------------------------------- -// -// Copyright Microsoft Corporation -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// http://www.apache.org/licenses/LICENSE-2.0 -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// ---------------------------------------------------------------------------------- - -using System; -using System.Management.Automation; -using System.Collections.Generic; -using System.Xml; -using Microsoft.WindowsAzure.Commands.Utilities.Common; -using Microsoft.Azure.Common.Authentication; -using Microsoft.Azure.Common.Authentication.Models; -using System.Threading; -using Hyak.Common; -using Microsoft.Azure.Commands.AzureBackup.Properties; -using System.Net; -using System.Linq; -using Microsoft.WindowsAzure.Management.Scheduler; -using Microsoft.Azure.Management.BackupServices; -using Microsoft.Azure.Management.BackupServices.Models; - -namespace Microsoft.Azure.Commands.AzureBackup.ClientAdapter -{ - public partial class AzureBackupClientAdapter - { - /// - /// Gets protection policies of matching name - /// - /// - /// - public ProtectionPolicyInfo GetProtectionPolicyByName(string name) - { - var policyList = ListProtectionPolicies(); - - var filteredList = policyList.Where(x => x.Name.Equals(name, System.StringComparison.InvariantCultureIgnoreCase)); - return filteredList.FirstOrDefault(); - } - - /// - /// Gets all policies in the vault - /// - /// - public IEnumerable ListProtectionPolicies() - { - var listResponse = AzureBackupClient.ProtectionPolicy.ListAsync(GetCustomRequestHeaders(), CmdletCancellationToken).Result; - return listResponse.ProtectionPolicies.Objects; - } - - /// - /// Add protection policy - /// - /// - public void AddProtectionPolicy(AddProtectionPolicyRequest request) - { - AzureBackupClient.ProtectionPolicy.AddAsync(request, GetCustomRequestHeaders(), CmdletCancellationToken).Wait(); - } - - /// - /// Delete protection policy - /// - /// - public void DeleteProtectionPolicy(string policyId) - { - AzureBackupClient.ProtectionPolicy.DeleteAsync(policyId, GetCustomRequestHeaders(), CmdletCancellationToken).Wait(); - } - - /// - /// Update specified protection policy - /// - /// - /// - public Guid UpdateProtectionPolicy(string policyId, UpdateProtectionPolicyRequest request) - { - var response = AzureBackupClient.ProtectionPolicy.UpdateAsync(policyId, request, GetCustomRequestHeaders(), CmdletCancellationToken).Result; - return response.OperationId; - } - } -} \ No newline at end of file diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupCmdletBase.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupCmdletBase.cs index a6bcd6b9ea93..8240e88beb94 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupCmdletBase.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupCmdletBase.cs @@ -142,54 +142,54 @@ private void HandleException(Exception exception) } } - /// - /// Get status of long running operation - /// - /// - /// - internal OperationResultResponse GetOperationStatus(Guid operationId) - { - return AzureBackupClient.GetOperationStatus(operationId.ToString()); - } - - private const int defaultOperationStatusRetryTimeInMilliSec = 10 * 1000; // 10 sec - - /// - /// Track completion of long running operation - /// - /// - /// In Millisec - /// - internal OperationResultResponse TrackOperation(Guid operationId, int checkFrequency = defaultOperationStatusRetryTimeInMilliSec) - { - OperationResultResponse response = null; - - while (true) - { - response = GetOperationStatus(operationId); - - if (response.OperationStatus == AzureBackupOperationStatus.Completed.ToString()) - { - break; - } - - Thread.Sleep(checkFrequency); - } - - return response; - } - - internal IList GetCreatedJobs(AzurePSBackupVault vault, IList jobIds) - { - IList jobs = new List(); - - foreach(string jobId in jobIds) - { - jobs.Add(new AzureBackupJob(vault, AzureBackupClient.GetJobDetails(jobId).Job)); - } - - return jobs; - } + ///// + ///// Get status of long running operation + ///// + ///// + ///// + //internal OperationResultResponse GetOperationStatus(Guid operationId) + //{ + // return AzureBackupClient.GetOperationStatus(operationId.ToString()); + //} + + //private const int defaultOperationStatusRetryTimeInMilliSec = 10 * 1000; // 10 sec + + ///// + ///// Track completion of long running operation + ///// + ///// + ///// In Millisec + ///// + //internal OperationResultResponse TrackOperation(Guid operationId, int checkFrequency = defaultOperationStatusRetryTimeInMilliSec) + //{ + // OperationResultResponse response = null; + + // while (true) + // { + // response = GetOperationStatus(operationId); + + // if (response.OperationStatus == AzureBackupOperationStatus.Completed.ToString()) + // { + // break; + // } + + // Thread.Sleep(checkFrequency); + // } + + // return response; + //} + + //internal IList GetCreatedJobs(AzurePSBackupVault vault, IList jobIds) + //{ + // IList jobs = new List(); + + // foreach(string jobId in jobIds) + // { + // jobs.Add(new AzureBackupJob(vault, AzureBackupClient.GetJobDetails(jobId).Job)); + // } + + // return jobs; + //} } } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupCmdletHelpMessage.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupCmdletHelpMessage.cs index bb2050b1fdd7..f42ef3b4586c 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupCmdletHelpMessage.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupCmdletHelpMessage.cs @@ -17,67 +17,67 @@ namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets internal static class AzureBackupCmdletHelpMessage { public const string Vault = "The vault details"; - public const string PolicyName = "The protection policy name."; + //public const string PolicyName = "The protection policy name."; public const string ResourceGroupName = "The ResourceGroup name."; public const string ResourceName = "The Resource name."; public const string Location = "The resource location."; public const string Sku = "The SKU of the backup vault instance."; - public const string ResourceTags = "A hash table which represents resource tags."; + //public const string ResourceTags = "A hash table which represents resource tags."; public const string TargetLocation = "The directory where the credentials file will be saved. This must be an absolute path."; - public const string ManagedResourceName = "The resource name of the resource being managed by the Azure Backup service (ex: resource name of the VM)."; - public const string ContainerId = "The container ID."; - public const string ContainerRegistrationStatus = "The container registration status."; - public const string ContainerType = "The container type."; + //public const string ManagedResourceName = "The resource name of the resource being managed by the Azure Backup service (ex: resource name of the VM)."; + //public const string ContainerId = "The container ID."; + //public const string ContainerRegistrationStatus = "The container registration status."; + //public const string ContainerType = "The container type."; - public const string JobFilterJobIdHelpMessage = "The job ID to filter jobs"; - public const string JobFilterJobHelpMessage = "The job for filtering"; - public const string JobFilterStartTimeHelpMessage = "The start time of query range"; - public const string JobFilterEndTimeHelpMessage = "The end time of query range"; - public const string JobFilterOperationHelpMessage = "The operation for filtering jos"; - public const string JobFilterStatusHelpMessage = "The status for filtering jobs"; - public const string JobFitlerVaultHelpMessage = "The vault of which jobs have to be filtered"; - public const string JobFilterTypeHelpMessage = "The type of workload whose jobs have to be filtered"; + //public const string JobFilterJobIdHelpMessage = "The job ID to filter jobs"; + //public const string JobFilterJobHelpMessage = "The job for filtering"; + //public const string JobFilterStartTimeHelpMessage = "The start time of query range"; + //public const string JobFilterEndTimeHelpMessage = "The end time of query range"; + //public const string JobFilterOperationHelpMessage = "The operation for filtering jos"; + //public const string JobFilterStatusHelpMessage = "The status for filtering jobs"; + //public const string JobFitlerVaultHelpMessage = "The vault of which jobs have to be filtered"; + //public const string JobFilterTypeHelpMessage = "The type of workload whose jobs have to be filtered"; - public const string JobDetailsFilterJobIdHelpMessage = "The job ID to get details"; - public const string JobDetailsFilterVaultHelpMessage = "The vault of which job details should be fetched"; - public const string JobDetailsFilterJobHelpMessage = "The job whose full details should be fetched"; + //public const string JobDetailsFilterJobIdHelpMessage = "The job ID to get details"; + //public const string JobDetailsFilterVaultHelpMessage = "The vault of which job details should be fetched"; + //public const string JobDetailsFilterJobHelpMessage = "The job whose full details should be fetched"; - public const string StopJobFilterJobIdHelpMessage = "The job ID to stop job"; - public const string StopJobFilterVaultHelpMessage = "The vault of which a job has to be stopped"; - public const string StopJobFilterJobHelpMessage = "The job which should be stopped"; + //public const string StopJobFilterJobIdHelpMessage = "The job ID to stop job"; + //public const string StopJobFilterVaultHelpMessage = "The vault of which a job has to be stopped"; + //public const string StopJobFilterJobHelpMessage = "The job which should be stopped"; - public const string WaitJobFilterJobIdHelpMessage = "The job ID to stop job"; - public const string WaitJobFilterVaultHelpMessage = "The vault of which a job has to be stopped"; - public const string WaitJobFilterJobHelpMessage = "The job which should be stopped"; - public const string WaitJobFilterTimeoutHelpMessage = "Maximum number of seconds for which cmdlet should wait before job(s) complete running."; + //public const string WaitJobFilterJobIdHelpMessage = "The job ID to stop job"; + //public const string WaitJobFilterVaultHelpMessage = "The vault of which a job has to be stopped"; + //public const string WaitJobFilterJobHelpMessage = "The job which should be stopped"; + //public const string WaitJobFilterTimeoutHelpMessage = "Maximum number of seconds for which cmdlet should wait before job(s) complete running."; - public const string VirtualMachine = "Virtual Machine."; - public const string ManagedResourceGroupName = "The resource group name of the resource being managed by the Azure Backup service (ex: resource group name of the VM)."; - public const string ProtectionStatus = "Protection Status of the azure backup item."; - public const string AzureBackUpItem = "Azure BackUp Item."; - public const string RecoveryPointId = "Recovery Point Id."; + //public const string VirtualMachine = "Virtual Machine."; + //public const string ManagedResourceGroupName = "The resource group name of the resource being managed by the Azure Backup service (ex: resource group name of the VM)."; + //public const string ProtectionStatus = "Protection Status of the azure backup item."; + //public const string AzureBackUpItem = "Azure BackUp Item."; + //public const string RecoveryPointId = "Recovery Point Id."; public const string StorageType = "The vault back-end storage type."; - public const string Type = "Type of Azure Backup Item."; - public const string Status = "Status of Azure Backup Item"; - public const string AzureBackupContainer = "Azure Backup Container for Azure Backup Item."; - public const string AzureBackupItem = "Azure Backup Item for enabling protection"; - public const string RemoveProtectionOption = "Remove Protection Option"; - public const string Reason = "Reson for removing protection"; - public const string Comments = "Comments for for removing protection"; - public const string WorkloadType = "Workload type for which the policy is defined."; - public const string BackupType = "Type of backup."; - public const string DailyScheduleType = "Switch parameter for daily backup schedule."; - public const string WeeklyScheduleType = "Switch parameter for weekly backup schedule."; - public const string ScheduleRunDays = "Days of week for running backup, required for weekly schedule."; - public const string ScheduleRunTimes = "Times of day in UTC for running backup."; - public const string RetentionType = "Unit of retention for the recovery point."; - public const string RententionDuration = "Duration of retention for the recovery point in units specified by RetentionType."; - public const string PolicyNewName = "Policy new name"; - public const string AzureBackupPolicy = "Azure Backup protection policy"; - public const string VMName = "Azure VM name to be register"; - public const string ServiceName = "Cloud service name of Azure VM to be register"; - public const string RGName = "Resource Group name of Azure VM to be register"; - public const string AzureBackupContainerToUnregister = "Azure Backup Container tobe unregister."; + //public const string Type = "Type of Azure Backup Item."; + //public const string Status = "Status of Azure Backup Item"; + //public const string AzureBackupContainer = "Azure Backup Container for Azure Backup Item."; + //public const string AzureBackupItem = "Azure Backup Item for enabling protection"; + //public const string RemoveProtectionOption = "Remove Protection Option"; + //public const string Reason = "Reson for removing protection"; + //public const string Comments = "Comments for for removing protection"; + //public const string WorkloadType = "Workload type for which the policy is defined."; + //public const string BackupType = "Type of backup."; + //public const string DailyScheduleType = "Switch parameter for daily backup schedule."; + //public const string WeeklyScheduleType = "Switch parameter for weekly backup schedule."; + //public const string ScheduleRunDays = "Days of week for running backup, required for weekly schedule."; + //public const string ScheduleRunTimes = "Times of day in UTC for running backup."; + //public const string RetentionType = "Unit of retention for the recovery point."; + //public const string RententionDuration = "Duration of retention for the recovery point in units specified by RetentionType."; + //public const string PolicyNewName = "Policy new name"; + //public const string AzureBackupPolicy = "Azure Backup protection policy"; + //public const string VMName = "Azure VM name to be register"; + //public const string ServiceName = "Cloud service name of Azure VM to be register"; + //public const string RGName = "Resource Group name of Azure VM to be register"; + //public const string AzureBackupContainerToUnregister = "Azure Backup Container tobe unregister."; } } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupContainerCmdletBase.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupContainerCmdletBase.cs deleted file mode 100644 index 6018452616e5..000000000000 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupContainerCmdletBase.cs +++ /dev/null @@ -1,45 +0,0 @@ -// ---------------------------------------------------------------------------------- -// -// Copyright Microsoft Corporation -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// http://www.apache.org/licenses/LICENSE-2.0 -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// ---------------------------------------------------------------------------------- - -using System; -using System.Management.Automation; -using System.Collections.Generic; -using System.Xml; -using Microsoft.WindowsAzure.Commands.Utilities.Common; -using Microsoft.Azure.Common.Authentication; -using Microsoft.Azure.Common.Authentication.Models; -using System.Threading; -using Hyak.Common; -using Microsoft.Azure.Commands.AzureBackup.Properties; -using System.Net; -using Microsoft.Azure.Commands.AzureBackup.Models; - -namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets -{ - public abstract class AzureBackupContainerCmdletBase : AzureBackupCmdletBase - { - [Parameter(Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.AzureBackupContainer, ValueFromPipeline = true)] - [ValidateNotNullOrEmpty] - public AzureBackupContainer Container { get; set; } - - public override void ExecuteCmdlet() - { - base.ExecuteCmdlet(); - - WriteDebug(String.Format("Cmdlet called for ResourceGroupName: {0}, ResourceName: {1}, Location: {2}", Container.ResourceGroupName, Container.ResourceName, Container.Location)); - - InitializeAzureBackupCmdlet(Container.ResourceGroupName, Container.ResourceName); - } - } -} \ No newline at end of file diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupDSCmdletBase.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupDSCmdletBase.cs deleted file mode 100644 index aec5d07b3836..000000000000 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupDSCmdletBase.cs +++ /dev/null @@ -1,46 +0,0 @@ -// ---------------------------------------------------------------------------------- -// -// Copyright Microsoft Corporation -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// http://www.apache.org/licenses/LICENSE-2.0 -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// ---------------------------------------------------------------------------------- - -using System; -using System.Management.Automation; -using System.Collections.Generic; -using System.Xml; -using Microsoft.WindowsAzure.Commands.Utilities.Common; -using Microsoft.Azure.Common.Authentication; -using Microsoft.Azure.Common.Authentication.Models; -using System.Threading; -using Hyak.Common; -using Microsoft.Azure.Commands.AzureBackup.Properties; -using System.Net; -using Microsoft.Azure.Commands.AzureBackup.Models; - -namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets -{ - public abstract class AzureBackupDSCmdletBase : AzureBackupCmdletBase - { - [Parameter(Position = 0, Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.AzureBackUpItem, ValueFromPipeline = true)] - [ValidateNotNullOrEmpty] - public AzureBackupItem Item { get; set; } - - public override void ExecuteCmdlet() - { - base.ExecuteCmdlet(); - - WriteDebug(String.Format("Cmdlet called for ResourceGroupName: {0}, ResourceName: {1}", Item.ResourceGroupName, Item.ResourceName)); - - InitializeAzureBackupCmdlet(Item.ResourceGroupName, Item.ResourceName); - } - } -} - diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupItemCmdletBase.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupItemCmdletBase.cs deleted file mode 100644 index a08fe6208834..000000000000 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupItemCmdletBase.cs +++ /dev/null @@ -1,44 +0,0 @@ -// ---------------------------------------------------------------------------------- -// -// Copyright Microsoft Corporation -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// http://www.apache.org/licenses/LICENSE-2.0 -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// ---------------------------------------------------------------------------------- - -using System; -using System.Management.Automation; -using System.Collections.Generic; -using System.Xml; -using Microsoft.WindowsAzure.Commands.Utilities.Common; -using Microsoft.Azure.Common.Authentication; -using Microsoft.Azure.Common.Authentication.Models; -using System.Threading; -using Hyak.Common; -using Microsoft.Azure.Commands.AzureBackup.Properties; -using System.Net; -using Microsoft.Azure.Commands.AzureBackup.Models; - -namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets -{ - public abstract class AzureBackupItemCmdletBase : AzureBackupCmdletBase - { - [Parameter(Position = 0, Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.AzureBackupItem, ValueFromPipeline = true)] - [ValidateNotNullOrEmpty] - public AzureBackupContainerContextObject Item { get; set; } - - public override void ExecuteCmdlet() - { - base.ExecuteCmdlet(); - WriteDebug(String.Format("Cmdlet called for ResourceGroupName: {0}, ResourceName: {1}, Location: {2}", Item.ResourceGroupName, Item.ResourceName, Item.Location)); - InitializeAzureBackupCmdlet(Item.ResourceGroupName, Item.ResourceName); - } - } -} - diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupPolicyCmdletBase.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupPolicyCmdletBase.cs deleted file mode 100644 index 46823713a2ff..000000000000 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupPolicyCmdletBase.cs +++ /dev/null @@ -1,49 +0,0 @@ -// ---------------------------------------------------------------------------------- -// -// Copyright Microsoft Corporation -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// http://www.apache.org/licenses/LICENSE-2.0 -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// ---------------------------------------------------------------------------------- - -using System; -using System.Management.Automation; -using System.Collections.Generic; -using System.Xml; -using Microsoft.WindowsAzure.Commands.Utilities.Common; -using Microsoft.Azure.Common.Authentication; -using Microsoft.Azure.Common.Authentication.Models; -using System.Threading; -using Hyak.Common; -using Microsoft.Azure.Commands.AzureBackup.Properties; -using System.Net; -using Microsoft.Azure.Management.BackupServices.Models; -using Microsoft.Azure.Commands.AzureBackup.Models; - -namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets -{ - public abstract class AzureBackupPolicyCmdletBase : AzureBackupCmdletBase - { - // ToDO: - // Correct Help message and other attributes related to paameters - [Parameter(Position = 0, Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.AzureBackupPolicy, ValueFromPipeline = true)] - [ValidateNotNullOrEmpty] - public AzureBackupProtectionPolicy ProtectionPolicy { get; set; } - - public override void ExecuteCmdlet() - { - base.ExecuteCmdlet(); - - WriteDebug(String.Format("Cmdlet called for ResourceGroupName: {0}, ResourceName: {1}, Location: {2}", - ProtectionPolicy.ResourceGroupName, ProtectionPolicy.ResourceName, ProtectionPolicy.Location)); - - InitializeAzureBackupCmdlet(ProtectionPolicy.ResourceGroupName, ProtectionPolicy.ResourceName); - } - } -} \ No newline at end of file diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/BackUp/TriggerBackUp.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/BackUp/TriggerBackUp.cs deleted file mode 100644 index 6f567814cc6d..000000000000 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/BackUp/TriggerBackUp.cs +++ /dev/null @@ -1,53 +0,0 @@ -// ---------------------------------------------------------------------------------- -// -// Copyright Microsoft Corporation -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// http://www.apache.org/licenses/LICENSE-2.0 -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// ---------------------------------------------------------------------------------- - -using System; -using System.Management.Automation; -using System.Collections.Generic; -using System.Xml; -using System.Linq; -using Microsoft.Azure.Management.BackupServices.Models; -using MBS = Microsoft.Azure.Management.BackupServices; - -namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets -{ - // ToDo: - // Correct the Commandlet - // Correct the OperationResponse - // Get Tracking API from Piyush and Get JobResponse - // Get JobResponse Object from Aditya - - /// - /// Get list of containers - /// - [Cmdlet(VerbsData.Backup, "AzureBackupItem"), OutputType(typeof(Guid))] - public class TriggerAzureBackup : AzureBackupDSCmdletBase - { - public override void ExecuteCmdlet() - { - ExecutionBlock(() => - { - base.ExecuteCmdlet(); - - WriteDebug("Making client call"); - Guid operationId = AzureBackupClient.TriggerBackup(Item.ContainerUniqueName, Item.Type, Item.DataSourceId); - - WriteDebug("Triggered backup. Converting response"); - - var operationStatus = TrackOperation(operationId); - WriteObject(GetCreatedJobs(new Models.AzurePSBackupVault(Item.ResourceGroupName, Item.ResourceName, Item.Location), operationStatus.Jobs).FirstOrDefault()); - }); - } - } -} diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/GetAzureBackupContainer.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/GetAzureBackupContainer.cs deleted file mode 100644 index c7d6bddb8400..000000000000 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/GetAzureBackupContainer.cs +++ /dev/null @@ -1,131 +0,0 @@ -// ---------------------------------------------------------------------------------- -// -// Copyright Microsoft Corporation -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// http://www.apache.org/licenses/LICENSE-2.0 -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// ---------------------------------------------------------------------------------- - -using Microsoft.Azure.Commands.AzureBackup.Helpers; -using Microsoft.Azure.Commands.AzureBackup.Library; -using Microsoft.Azure.Commands.AzureBackup.Models; -using Microsoft.Azure.Management.BackupServices.Models; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Management.Automation; -using System.Text; -using System.Threading.Tasks; - -namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets -{ - /// - /// Get list of containers - /// - [Cmdlet(VerbsCommon.Get, "AzureBackupContainer"), OutputType(typeof(AzureBackupContainer), typeof(List))] - public class GetAzureBackupContainer : AzureBackupVaultCmdletBase - { - [Parameter(Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.ManagedResourceGroupName)] - [ValidateNotNullOrEmpty] - public string ManagedResourceGroupName { get; set; } - - [Parameter(Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.ManagedResourceName)] - [ValidateNotNullOrEmpty] - public string ManagedResourceName { get; set; } - - [Parameter(Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.ContainerRegistrationStatus)] - [ValidateNotNullOrEmpty] - public AzureBackupContainerStatusInput Status { get; set; } - - [Parameter(Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.ContainerType)] - [ValidateNotNullOrEmpty] - public AzureBackupContainerTypeInput Type { get; set; } - - public override void ExecuteCmdlet() - { - ExecutionBlock(() => - { - base.ExecuteCmdlet(); - - string queryFilterString = string.Empty; - queryFilterString = ConstructQueryFilterString(); - var containerList = AzureBackupClient.ListContainers(queryFilterString); - - WriteDebug(string.Format("Fetched {0} containers", containerList.Count())); - - List containerInfos = containerList.ToList(); - - // When resource group name is specified, remove all containers whose resource group name - // doesn't match the given resource group name - if (!string.IsNullOrEmpty(ManagedResourceGroupName)) - { - containerInfos.RemoveAll(containerInfo => - { - return containerInfo.ParentContainerName != ManagedResourceGroupName; - }); - WriteDebug(string.Format("Count of containers after resource group filter = {0}", containerInfos.Count)); - } - - // TODO: Container friendly name is not captures in Container response - // BUG: Friendly name was previously assigned to ResourceName (vault name) - List containers = containerInfos.ConvertAll(containerInfo => - { - return new AzureBackupContainer(Vault, containerInfo); - }); - - // When container resource name and container resource group name are specified, this parameter set - // identifies a container uniquely. Thus, we return just one container instead of a list. - if (!string.IsNullOrEmpty(ManagedResourceName) & !string.IsNullOrEmpty(ManagedResourceGroupName)) - { - if (containers.Any()) - { - WriteObject(containers.First()); - } - } - else - { - WriteObject(containers); - } - }); - } - - private string ConstructQueryFilterString() - { - var containerQueryObject = new ListContainerQueryParameter(); - - switch (Type) - { - case AzureBackupContainerTypeInput.AzureVirtualMachine: - containerQueryObject.ContainerTypeField = AzureBackupContainerType.IaasVMContainer.ToString(); - break; - default: - break; - } - - switch (Status) - { - case AzureBackupContainerStatusInput.Registered: - containerQueryObject.ContainerStatusField = AzureBackupContainerRegistrationStatus.Registered.ToString(); - break; - case AzureBackupContainerStatusInput.Registering: - containerQueryObject.ContainerStatusField = AzureBackupContainerRegistrationStatus.Registering.ToString(); - break; - default: - break; - } - - if (!string.IsNullOrEmpty(ManagedResourceName)) - { - containerQueryObject.ContainerFriendlyNameField = ManagedResourceName; - } - - return ContainerHelpers.GetQueryFilter(containerQueryObject); - } - } -} diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/RegisterAzureBackupContainer.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/RegisterAzureBackupContainer.cs deleted file mode 100644 index b4edbe2df201..000000000000 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/RegisterAzureBackupContainer.cs +++ /dev/null @@ -1,194 +0,0 @@ -// ---------------------------------------------------------------------------------- -// -// Copyright Microsoft Corporation -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// http://www.apache.org/licenses/LICENSE-2.0 -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// ---------------------------------------------------------------------------------- - -using System; -using System.Web; -using System.Collections.Generic; -using System.Collections.Specialized; -using System.Linq; -using System.Management.Automation; -using System.Text; -using System.Threading.Tasks; -using Microsoft.Azure.Management.BackupServices.Models; -using MBS = Microsoft.Azure.Management.BackupServices; -using Microsoft.WindowsAzure.Commands.ServiceManagement.Model; -using Microsoft.Azure.Commands.AzureBackup.Properties; -using Microsoft.Azure.Commands.AzureBackup.Models; -using Microsoft.Azure.Commands.AzureBackup.Helpers; -using Microsoft.Azure.Management.BackupServices; - -namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets -{ - /// - /// Get list of containers - /// - [Cmdlet(VerbsLifecycle.Register, "AzureBackupContainer", DefaultParameterSetName = V1VMParameterSet), OutputType(typeof(string))] - public class RegisterAzureBackupContainer : AzureBackupVaultCmdletBase - { - internal const string V1VMParameterSet = "V1VM"; - internal const string V2VMParameterSet = "V2VM"; - - [Parameter(Mandatory = true, ValueFromPipelineByPropertyName = true, ParameterSetName = V1VMParameterSet, HelpMessage = AzureBackupCmdletHelpMessage.VMName)] - [Parameter(Mandatory = true, ValueFromPipelineByPropertyName = true, ParameterSetName = V2VMParameterSet, HelpMessage = AzureBackupCmdletHelpMessage.VMName)] - public string Name { get; set; } - - [Parameter(Mandatory = true, ValueFromPipelineByPropertyName = true, ParameterSetName = V1VMParameterSet, HelpMessage = AzureBackupCmdletHelpMessage.ServiceName)] - public string ServiceName { get; set; } - - [Parameter(Mandatory = true, ValueFromPipelineByPropertyName = true, ParameterSetName = V2VMParameterSet, HelpMessage = AzureBackupCmdletHelpMessage.RGName)] - public string ResourceGroupName { get; set; } - - - public override void ExecuteCmdlet() - { - ExecutionBlock(() => - { - base.ExecuteCmdlet(); - - 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 = ResourceGroupName; - 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; - - ContainerInfo container = null; - 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 - 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); - ThrowTerminatingError(new ErrorRecord(new Exception(Resources.AzureVMNotFound), string.Empty, ErrorCategory.InvalidArgument, null)); - } - } - - //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()); - var operationId = AzureBackupClient.RegisterContainer(registrationRequest); - - var operationStatus = GetOperationStatus(operationId); - WriteObject(GetCreatedJobs(Vault, operationStatus.Jobs).FirstOrDefault()); - }); - } - - private void RefreshContainer() - { - bool isRetryNeeded = true; - int retryCount = 1; - bool isDiscoverySuccessful = false; - string errorMessage = string.Empty; - while (isRetryNeeded && retryCount <= 3) - { - var operationId = AzureBackupClient.RefreshContainers(); - - //Now wait for the operation to Complete - isRetryNeeded = WaitForDiscoveryToComplete(operationId, out isDiscoverySuccessful, out errorMessage); - retryCount++; - } - - if (!isDiscoverySuccessful) - { - ThrowTerminatingError(new ErrorRecord(new Exception(errorMessage), string.Empty, ErrorCategory.InvalidArgument, null)); - } - } - - private bool WaitForDiscoveryToComplete(Guid operationId, out bool isDiscoverySuccessful, out string errorMessage) - { - bool isRetryNeeded = false; - var status = TrackOperation(operationId); - errorMessage = String.Empty; - - isDiscoverySuccessful = true; - //If operation fails check if retry is needed or not - if (status.OperationResult != AzureBackupOperationResult.Succeeded.ToString()) - { - isDiscoverySuccessful = false; - errorMessage = status.Message; - WriteDebug(String.Format("Discovery operation failed with 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; - } - - private bool IsDiscoveryNeeded(string vmName, string rgName, out ContainerInfo container) - { - bool isDiscoveryNeed = false; - //First check if container is discoverd or not - ListContainerQueryParameter queryParams = new ListContainerQueryParameter(); - queryParams.ContainerTypeField = AzureBackupContainerType.IaasVMContainer.ToString(); - queryParams.ContainerStatusField = String.Empty; - queryParams.ContainerFriendlyNameField = vmName; - string queryString = ContainerHelpers.GetQueryFilter(queryParams); - - var containers = AzureBackupClient.ListContainers(queryString); - WriteDebug(String.Format("Container count returned from service: {0}.", containers.Count())); - if (containers.Count() == 0) - { - //Container is not discover - WriteDebug("Container is not discovered"); - container = null; - isDiscoveryNeed = true; - } - - else - { - //We can have multiple container with same friendly name. - //Look for resourceGroup name in the container unoque name - container = containers.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; - } - } - return isDiscoveryNeed; - } - } -} diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/UnregisterAzureBackupContainer.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/UnregisterAzureBackupContainer.cs deleted file mode 100644 index b3ee567b2e5e..000000000000 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Container/UnregisterAzureBackupContainer.cs +++ /dev/null @@ -1,53 +0,0 @@ -// ---------------------------------------------------------------------------------- -// -// Copyright Microsoft Corporation -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// http://www.apache.org/licenses/LICENSE-2.0 -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// ---------------------------------------------------------------------------------- - -using System; -using System.Web; -using System.Collections.Generic; -using System.Collections.Specialized; -using System.Linq; -using System.Management.Automation; -using System.Text; -using System.Threading.Tasks; -using Microsoft.Azure.Management.BackupServices.Models; -using MBS = Microsoft.Azure.Management.BackupServices; -using Microsoft.Azure.Commands.AzureBackup.Models; - -namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets -{ - /// - /// Get list of containers - /// - [Cmdlet(VerbsLifecycle.Unregister, "AzureBackupContainer"), OutputType(typeof(string))] - public class UnregisterAzureBackupContainer : AzureBackupVaultCmdletBase - { - [Parameter(Position = 1, Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.AzureBackupContainerToUnregister, ValueFromPipeline = true)] - [ValidateNotNullOrEmpty] - public AzureBackupContainer AzureBackupContainer { get; set; } - - public override void ExecuteCmdlet() - { - ExecutionBlock(() => - { - base.ExecuteCmdlet(); - - string containerUniqueName = AzureBackupContainer.ContainerUniqueName; - UnregisterContainerRequestInput unregRequest = new UnregisterContainerRequestInput(containerUniqueName, AzureBackupContainerType.IaasVMContainer.ToString()); - var operationId = AzureBackupClient.UnRegisterContainer(unregRequest); - - WriteObject(GetCreatedJobs(Vault, GetOperationStatus(operationId).Jobs).FirstOrDefault()); - }); - } - } -} diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Item/Disable-AzureBackupProtection .cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Item/Disable-AzureBackupProtection .cs deleted file mode 100644 index 7025084e97a2..000000000000 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Item/Disable-AzureBackupProtection .cs +++ /dev/null @@ -1,79 +0,0 @@ -// ---------------------------------------------------------------------------------- -// -// Copyright Microsoft Corporation -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// http://www.apache.org/licenses/LICENSE-2.0 -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// ---------------------------------------------------------------------------------- - -using Microsoft.Azure.Management.BackupServices; -using Microsoft.Azure.Management.BackupServices.Models; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Management.Automation; -using System.Runtime.Serialization; -using System.Text; -using System.Threading.Tasks; - -namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets.DataSource -{ - /// - /// Disable Azure Backup protection - /// - [Cmdlet(VerbsLifecycle.Disable, "AzureBackupProtection"), OutputType(typeof(string))] - public class DisableAzureBackupProtection : AzureBackupDSCmdletBase - { - [Parameter(Position = 1, Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.RemoveProtectionOption)] - public SwitchParameter RemoveRecoveryPoints - { - get { return DeleteBackupData; } - set { DeleteBackupData = value; } - } - private bool DeleteBackupData; - - [Parameter(Position = 2, Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.Reason)] - public string Reason { get; set; } - - [Parameter(Position = 3, Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.Comments)] - public string Comments { get; set; } - - public override void ExecuteCmdlet() - { - ExecutionBlock(() => - { - base.ExecuteCmdlet(); - - WriteDebug("Making client call"); - RemoveProtectionRequestInput input = new RemoveProtectionRequestInput() - { - RemoveProtectionOption = this.DeleteBackupData ? RemoveProtectionOptions.DeleteBackupData.ToString() : RemoveProtectionOptions.RetainBackupData.ToString(), - Reason = this.Reason != null ? this.Reason : String.Empty, - Comments = this.Comments != null ? this.Comments : String.Empty, - }; - - WriteDebug("RemoveProtectionOption is = " + input.RemoveProtectionOption); - var operationId = AzureBackupClient.DisableProtection(Item.ContainerUniqueName, Item.Type, Item.DataSourceId, input); - - WriteDebug("Received disable azure backup protection response"); - var operationStatus = GetOperationStatus(operationId); - this.WriteObject(GetCreatedJobs(new Models.AzurePSBackupVault(Item.ResourceGroupName, Item.ResourceName, Item.Location), operationStatus.Jobs).FirstOrDefault()); - }); - } - - public enum RemoveProtectionOptions - { - [EnumMember] - DeleteBackupData, - - [EnumMember] - RetainBackupData - }; - } -} diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Item/Enable-AzureBackupProtection .cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Item/Enable-AzureBackupProtection .cs deleted file mode 100644 index 8ab6eaeca410..000000000000 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Item/Enable-AzureBackupProtection .cs +++ /dev/null @@ -1,79 +0,0 @@ -// ---------------------------------------------------------------------------------- -// -// Copyright Microsoft Corporation -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// http://www.apache.org/licenses/LICENSE-2.0 -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// ---------------------------------------------------------------------------------- - -using System; -using System.Management.Automation; -using System.Collections.Generic; -using System.Xml; -using System.Linq; -using Microsoft.Azure.Management.BackupServices.Models; -using MBS = Microsoft.Azure.Management.BackupServices; -using System.Runtime.Serialization; -using Microsoft.Azure.Management.BackupServices; -using Microsoft.Azure.Commands.AzureBackup.Models; - -namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets -{ - /// - /// Enable Azure Backup protection - /// - [Cmdlet(VerbsLifecycle.Enable, "AzureBackupProtection"), OutputType(typeof(string))] - public class EnableAzureBackupProtection : AzureBackupItemCmdletBase - { - [Parameter(Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.PolicyName)] - [ValidateNotNullOrEmpty] - public AzureBackupProtectionPolicy Policy { get; set; } - - public override void ExecuteCmdlet() - { - ExecutionBlock(() => - { - base.ExecuteCmdlet(); - - WriteDebug("Making client call"); - SetProtectionRequestInput input = new SetProtectionRequestInput(); - input.PolicyId = Policy.InstanceId; - if (Item.GetType() == typeof(AzureBackupItem)) - { - input.ProtectableObjectType = (Item as AzureBackupItem).Type; - input.ProtectableObjects.Add((Item as AzureBackupItem).Name); - } - else if (Item.GetType() == typeof(AzureBackupContainer)) - { - WriteDebug("Input is container Type = " + Item.GetType()); - if ((Item as AzureBackupContainer).ContainerType == AzureBackupContainerType.IaasVMContainer.ToString()) - { - WriteDebug("container Type = " + (Item as AzureBackupContainer).ContainerType); - input.ProtectableObjectType = DataSourceType.VM.ToString(); - input.ProtectableObjects.Add((Item as AzureBackupContainer).ContainerUniqueName); - } - else - { - throw new Exception("Uknown item type"); - } - } - else - { - throw new Exception("Uknown item type"); - } - - var operationId = AzureBackupClient.EnableProtection(input); - WriteDebug("Received enable azure backup protection response"); - - var operationStatus = GetOperationStatus(operationId); - this.WriteObject(GetCreatedJobs(new Models.AzurePSBackupVault(Item.ResourceGroupName, Item.ResourceName, Item.Location), operationStatus.Jobs).FirstOrDefault()); - }); - } - } -} diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Item/GetAzureBackupItem.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Item/GetAzureBackupItem.cs deleted file mode 100644 index 8c964328bf15..000000000000 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Item/GetAzureBackupItem.cs +++ /dev/null @@ -1,121 +0,0 @@ -// ---------------------------------------------------------------------------------- -// -// Copyright Microsoft Corporation -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// http://www.apache.org/licenses/LICENSE-2.0 -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// ---------------------------------------------------------------------------------- - -using System; -using System.Management.Automation; -using System.Collections.Generic; -using System.Xml; -using System.Linq; -using Microsoft.Azure.Management.BackupServices.Models; -using System.Runtime.Serialization; -using System.Collections.Specialized; -using Microsoft.Azure.Common.OData; -using Microsoft.Azure.Commands.AzureBackup.Models; - -namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets -{ - /// - /// Get list of azure backup items - /// - [Cmdlet(VerbsCommon.Get, "AzureBackupItem"), OutputType(typeof(AzureBackupItem), typeof(List))] - public class GetAzureBackupItem : AzureBackupContainerCmdletBase - { - [Parameter(Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.ProtectionStatus)] - [ValidateSet("Protected","Protecting","NotProtected")] - public string ProtectionStatus { get; set; } - - [Parameter(Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.Status)] - [ValidateSet("IRPending", "ProtectionStopped", "ProtectionError", "Protected")] - public string Status { get; set; } - - [Parameter(Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.Type)] - [ValidateSet("VM")] - public string Type { get; set; } - - public override void ExecuteCmdlet() - { - ExecutionBlock(() => - { - base.ExecuteCmdlet(); - - List azureBackupDatasourceObjects = null; - List azureBackupPOObjects = null; - - WriteDebug("Making client call"); - DataSourceQueryParameter DSQueryParam = new DataSourceQueryParameter() - { - ProtectionStatus = this.ProtectionStatus, - Status = this.Status, - Type = this.Type - }; - - POQueryParameter POQueryParam = new POQueryParameter() - { - Status = this.ProtectionStatus, - Type = this.Type - }; - - var azureBackupDatasourceListResponse = AzureBackupClient.ListDataSources(DSQueryParam); - azureBackupDatasourceObjects = azureBackupDatasourceListResponse.Where(x => x.ContainerName.Equals(Container.ContainerUniqueName, System.StringComparison.InvariantCultureIgnoreCase)).ToList(); - - if (this.Status == null) - { - var azureBackupPOListResponse = AzureBackupClient.ListProtectableObjects(POQueryParam); - azureBackupPOObjects = azureBackupPOListResponse.Where(x => x.ContainerName.Equals(Container.ContainerUniqueName, System.StringComparison.InvariantCultureIgnoreCase)).ToList(); - } - - WriteDebug("Received azure backup item response"); - WriteAzureBackupItem(azureBackupDatasourceObjects, azureBackupPOObjects, Container); - }); - } - - public void WriteAzureBackupItem(DataSourceInfo sourceItem, AzureBackupContainer azureBackupItem) - { - this.WriteObject(new AzureBackupItem(sourceItem, azureBackupItem)); - } - - public void WriteAzureBackupItem(List sourceDataSourceList, List sourcePOList, AzureBackupContainer azureBackupContainer) - { - List targetList = new List(); - - foreach (var item in sourceDataSourceList) - { - targetList.Add(new AzureBackupItem(item, azureBackupContainer)); - } - - if (sourcePOList != null) - { - foreach (var item in sourcePOList) - { - //If user has stopped protection for some datasoure then we will have duplicate items(po and ds). - //So in this case removing poitems from the list. - if (targetList.FindIndex(element => element.Name == item.Name) < 0) - { - targetList.Add(new AzureBackupItem(item, azureBackupContainer)); - } - } - } - - if (targetList.Count() == 1) - { - this.WriteObject(targetList.First(), true); - } - else - { - this.WriteObject(targetList, true); - } - } - - } -} diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Jobs/AzureBackupJobHelper.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Jobs/AzureBackupJobHelper.cs deleted file mode 100644 index f014ad459864..000000000000 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Jobs/AzureBackupJobHelper.cs +++ /dev/null @@ -1,88 +0,0 @@ -// ---------------------------------------------------------------------------------- -// -// Copyright Microsoft Corporation -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// http://www.apache.org/licenses/LICENSE-2.0 -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// ---------------------------------------------------------------------------------- - -using System; -using System.Management.Automation; -using System.Collections.Generic; -using System.Xml; -using System.Linq; -using Mgmt = Microsoft.Azure.Management.BackupServices.Models; - - -namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets -{ - public enum JobStatus - { - Invalid = 0, - - InProgress, - - Completed, - - Failed, - - CompletedWithWarnings, - - Cancelled, - - Cancelling - } - - public enum JobOperationType - { - Invalid = 0, - - Register, - - ConfigureBackup, - - Backup, - - Restore, - - UnProtect, - - DeleteBackupData, - - Unregister - } - - public static class AzureBackupJobHelper - { - public static bool IsValidStatus(string inputStatus) - { - JobStatus status; - if(!Enum.TryParse(inputStatus, out status) || status == JobStatus.Invalid) - { - return false; - } - return true; - } - - public static bool IsValidOperationType(string inputOperationType) - { - JobOperationType operationType; - if(!Enum.TryParse(inputOperationType, out operationType) || operationType == JobOperationType.Invalid) - { - return false; - } - return true; - } - - public static bool IsJobRunning(string status) - { - return ((status.CompareTo("InProgress") == 0) || (status.CompareTo("Cancelling") == 0)); - } - } -} diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Jobs/GetAzureBackupJob.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Jobs/GetAzureBackupJob.cs deleted file mode 100644 index edabda56a508..000000000000 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Jobs/GetAzureBackupJob.cs +++ /dev/null @@ -1,161 +0,0 @@ -// ---------------------------------------------------------------------------------- -// -// Copyright Microsoft Corporation -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// http://www.apache.org/licenses/LICENSE-2.0 -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// ---------------------------------------------------------------------------------- - -using System; -using System.Management.Automation; -using System.Collections.Generic; -using System.Xml; -using System.Linq; -using System.Web; -using Microsoft.Azure.Management.BackupServices; -using Mgmt = Microsoft.Azure.Management.BackupServices.Models; -using Microsoft.Azure.Commands.AzureBackup.Models; - -namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets -{ - /// - /// Get list of jobs pertaining to the filters specified. Gets list of all jobs created in the last 24 hours if no filters are specified. - /// - [Cmdlet(VerbsCommon.Get, "AzureBackupJob", DefaultParameterSetName = "FiltersSet"), OutputType(typeof(List), typeof(Mgmt.Job))] - public class GetAzureBackupJob : AzureBackupCmdletBase - { - [Parameter(Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.Vault, ParameterSetName = "FiltersSet", ValueFromPipeline = true)] - [ValidateNotNull] - public AzurePSBackupVault Vault { get; set; } - - [Parameter(Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.JobFilterJobIdHelpMessage, ParameterSetName = "FiltersSet")] - [ValidateNotNullOrEmpty] - public string JobId { get; set; } - - [Parameter(Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.JobFilterJobHelpMessage, ParameterSetName = "JobsListFilter")] - [ValidateNotNull] - public AzureBackupJob Job { get; set; } - - [Parameter(Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.JobFilterStartTimeHelpMessage, ParameterSetName = "FiltersSet")] - [ValidateNotNull] - public DateTime? From { get; set; } - - [Parameter(Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.JobFilterEndTimeHelpMessage, ParameterSetName = "FiltersSet")] - [ValidateNotNull] - public DateTime? To { get; set; } - - [Parameter(Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.JobFilterStatusHelpMessage, ParameterSetName = "FiltersSet")] - [ValidateSet("Cancelled", "Cancelling", "Completed", "CompletedWithWarnings", "Failed", "InProgress")] - public string Status { get; set; } - - [Parameter(Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.JobFilterTypeHelpMessage, ParameterSetName = "FiltersSet")] - [ValidateSet("VM")] - public string Type { get; set; } - - [Parameter(Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.JobFilterOperationHelpMessage, ParameterSetName = "FiltersSet")] - [ValidateSet("Backup", "ConfigureBackup", "DeleteBackupData", "Register", "Restore", "UnProtect", "Unregister")] - public string Operation { get; set; } - - public override void ExecuteCmdlet() - { - ExecutionBlock(() => - { - if (Job != null) - { - Vault = new AzurePSBackupVault(Job.ResourceGroupName, Job.ResourceName, Job.Location); - } - - InitializeAzureBackupCmdlet(Vault); - - if (Job != null) - { - JobId = Job.InstanceId; - } - - // validations - if (!From.HasValue) - { - WriteDebug("Setting StartTime to min value."); - From = new DateTime(); - From = DateTime.MinValue; - } - - if (To.HasValue && To.Value <= From.Value) - { - throw new Exception("StartTime should be greater than EndTime."); - } - else - { - if (From != DateTime.MinValue) - { - WriteDebug("End time not set. Setting it to current time."); - To = DateTime.Now; - } - else - { - WriteDebug("Setting EndTime to min value."); - To = new DateTime(); - To = DateTime.MinValue; - } - } - - From = TimeZoneInfo.ConvertTimeToUtc(From.Value); - To = TimeZoneInfo.ConvertTimeToUtc(To.Value); - - // if user hasn't specified any filters, then default filter fetches - // all jobs that were created in last 24 hours. - if (From == DateTime.MinValue && To == DateTime.MinValue && - Operation == string.Empty && Status == string.Empty && - Type == string.Empty && JobId == string.Empty) - { - From = DateTime.UtcNow.AddDays(-1); - To = DateTime.UtcNow; - } - - WriteDebug("StartTime filter is: " + System.Uri.EscapeDataString(From.Value.ToString("yyyy-MM-dd hh:mm:ss tt"))); - WriteDebug("EndTime filter is: " + System.Uri.EscapeDataString(To.Value.ToString("yyyy-MM-dd hh:mm:ss tt"))); - WriteDebug("Operation filter is: " + Operation); - WriteDebug("Status filter is: " + Status); - WriteDebug("Type filter is: " + Type); - WriteDebug("JobID filter is: " + JobId); - - JobQueryParameter queryParams = new JobQueryParameter() - { - StartTime = From.Value.ToString("yyyy-MM-dd hh:mm:ss tt"), - EndTime = To.Value.ToString("yyyy-MM-dd hh:mm:ss tt"), - Operation = Operation, - Status = Status, - Type = Type, - JobId = JobId - }; - - var jobsList = AzureBackupClient.ListJobs(queryParams); - List retrievedJobs = new List(); - - foreach (Mgmt.Job serviceJob in jobsList) - { - // TODO: Initialize vault from Job object when vault is made optional - retrievedJobs.Add(new AzureBackupJob(Vault, serviceJob)); - } - - WriteDebug("Successfully retrieved all jobs. Number of jobs retrieved: " + retrievedJobs.Count()); - - if (retrievedJobs.Count == 1) - { - WriteObject(retrievedJobs.First()); - } - else - { - WriteObject(retrievedJobs); - } - }); - } - } -} - diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Jobs/GetAzureBackupJobDetails.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Jobs/GetAzureBackupJobDetails.cs deleted file mode 100644 index 12b88e1bf33c..000000000000 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Jobs/GetAzureBackupJobDetails.cs +++ /dev/null @@ -1,68 +0,0 @@ -// ---------------------------------------------------------------------------------- -// -// Copyright Microsoft Corporation -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// http://www.apache.org/licenses/LICENSE-2.0 -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// ---------------------------------------------------------------------------------- - -using System; -using System.Management.Automation; -using System.Collections.Generic; -using System.Xml; -using System.Linq; -using Mgmt = Microsoft.Azure.Management.BackupServices.Models; -using Microsoft.Azure.Commands.AzureBackup.Models; - -namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets -{ - /// - /// Get full details of a job - /// - [Cmdlet(VerbsCommon.Get, "AzureBackupJobDetails", DefaultParameterSetName = "IdFiltersSet"), OutputType(typeof(Mgmt.JobProperties))] - public class GetAzureBackupJobDetils : AzureBackupCmdletBase - { - [Parameter(Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.Vault, ParameterSetName = "IdFiltersSet")] - [ValidateNotNull] - public AzurePSBackupVault Vault { get; set; } - - [Parameter(Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.JobDetailsFilterJobIdHelpMessage, ParameterSetName = "IdFiltersSet")] - [ValidateNotNullOrEmpty] - public string JobID { get; set; } - - [Parameter(Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.JobDetailsFilterJobHelpMessage, ParameterSetName = "JobsFiltersSet")] - [ValidateNotNull] - public AzureBackupJob Job { get; set; } - - public override void ExecuteCmdlet() - { - if (Job != null) - { - Vault = new AzurePSBackupVault(Job.ResourceGroupName, Job.ResourceName, Job.Location); - } - InitializeAzureBackupCmdlet(Vault); - - ExecutionBlock(() => - { - if (Job != null) - { - JobID = Job.InstanceId; - } - - WriteDebug("JobID filter is: " + JobID); - - Mgmt.JobProperties serviceJobProperties = AzureBackupClient.GetJobDetails(JobID).Job; - AzureBackupJobDetails jobDetails = new AzureBackupJobDetails(Vault, serviceJobProperties); - - WriteDebug("Retrieved JobDetails from service."); - WriteObject(jobDetails); - }); - } - } -} \ No newline at end of file diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Jobs/StopAzureBackukpJob.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Jobs/StopAzureBackukpJob.cs deleted file mode 100644 index 11deb9fe87a4..000000000000 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Jobs/StopAzureBackukpJob.cs +++ /dev/null @@ -1,76 +0,0 @@ -// ---------------------------------------------------------------------------------- -// -// Copyright Microsoft Corporation -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// http://www.apache.org/licenses/LICENSE-2.0 -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// ---------------------------------------------------------------------------------- - -using System; -using System.Management.Automation; -using System.Collections.Generic; -using System.Xml; -using System.Linq; -using Microsoft.Azure.Management.BackupServices; -using System.Threading.Tasks; -using Mgmt = Microsoft.Azure.Management.BackupServices.Models; -using Microsoft.Azure.Commands.AzureBackup.Models; - -namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets -{ - /// - /// Stop a running cancellable job - /// - [Cmdlet("Stop", "AzureBackupJob"), OutputType(typeof(Mgmt.Job))] - public class StopAzureBackupJob : AzureBackupCmdletBase - { - [Parameter(Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.Vault, ParameterSetName = "IdFiltersSet")] - [ValidateNotNull] - public AzurePSBackupVault Vault { get; set; } - - [Parameter(Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.StopJobFilterJobIdHelpMessage, ParameterSetName = "IdFiltersSet")] - [ValidateNotNullOrEmpty] - public string JobID { get; set; } - - [Parameter(Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.StopJobFilterJobHelpMessage, ParameterSetName = "JobFiltersSet", ValueFromPipeline = true)] - [ValidateNotNull] - public AzureBackupJob Job { get; set; } - - public override void ExecuteCmdlet() - { - if (Job != null) - { - Vault = new AzurePSBackupVault(Job.ResourceGroupName, Job.ResourceName, Job.Location); - } - - InitializeAzureBackupCmdlet(Vault); - - ExecutionBlock(() => - { - if (Job != null) - { - JobID = Job.InstanceId; - } - - WriteDebug("JobID is: " + JobID); - Guid cancelTaskId = AzureBackupClient.TriggerCancelJob(JobID); - OperationResultResponse opResponse = TrackOperation(cancelTaskId); - - if (opResponse.OperationResult == AzureBackupOperationResult.Succeeded.ToString()) - { - WriteDebug("Triggered cancellation of job with JobID: " + JobID); - } - else - { - throw new Exception("Stop Job failed with ErrorCode: " + opResponse.ErrorCode); - } - }); - } - } -} \ No newline at end of file diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Jobs/WaitAzureBackupJob.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Jobs/WaitAzureBackupJob.cs deleted file mode 100644 index ac1f24099490..000000000000 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Jobs/WaitAzureBackupJob.cs +++ /dev/null @@ -1,155 +0,0 @@ -// ---------------------------------------------------------------------------------- -// -// Copyright Microsoft Corporation -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// http://www.apache.org/licenses/LICENSE-2.0 -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// ---------------------------------------------------------------------------------- - -using System; -using System.Management.Automation; -using System.Collections.Generic; -using System.Xml; -using System.Linq; -using Mgmt = Microsoft.Azure.Management.BackupServices.Models; -using Microsoft.Azure.Commands.AzureBackup.Models; - -namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets -{ - [Cmdlet("Wait", "AzureBackupJob"), OutputType(typeof(Mgmt.Job))] - public class WaitAzureBackupJob : AzureBackupCmdletBase - { - [Parameter(Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.WaitJobFilterJobHelpMessage, ValueFromPipeline = true)] - [ValidateNotNullOrEmpty] - public object Job { get; set; } - - [Parameter(Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.WaitJobFilterTimeoutHelpMessage)] - [ValidateRange(1, Int64.MaxValue)] - public long? TimeOut { get; set; } - - public override void ExecuteCmdlet() - { - List specifiedJobs = new List(); - AzurePSBackupVault Vault = null; - - if (Job != null) - { - if ((Job is PSObject) && (((PSObject)Job).ImmediateBaseObject is List)) - { - foreach (AzureBackupJob jobToWait in (((PSObject)Job).ImmediateBaseObject as List)) - { - Vault = new AzurePSBackupVault(jobToWait.ResourceGroupName, jobToWait.ResourceName, jobToWait.Location); - specifiedJobs.Add(jobToWait.InstanceId); - } - } - else if (Job is List) - { - WriteDebug("Type of input paramter is List second case"); - foreach (AzureBackupJob jobToWait in (Job as List)) - { - Vault = new AzurePSBackupVault(jobToWait.ResourceGroupName, jobToWait.ResourceName, jobToWait.Location); - specifiedJobs.Add(jobToWait.InstanceId); - } - } - else if ((Job is PSObject) && (((PSObject)Job).ImmediateBaseObject is AzureBackupJob)) - { - AzureBackupJob azureJob = ((Job as PSObject).ImmediateBaseObject as AzureBackupJob); - Vault = new AzurePSBackupVault(azureJob.ResourceGroupName, azureJob.ResourceName, azureJob.Location); - specifiedJobs.Add(azureJob.InstanceId); - } - else if (Job is AzureBackupJob) - { - Vault = new AzurePSBackupVault((Job as AzureBackupJob).ResourceGroupName, (Job as AzureBackupJob).ResourceName, (Job as AzureBackupJob).Location); - specifiedJobs.Add((Job as AzureBackupJob).InstanceId); - } - else if ((Job is PSObject) && (((PSObject)Job).ImmediateBaseObject is AzureBackupJobDetails)) - { - AzureBackupJob azureJob = ((Job as PSObject).ImmediateBaseObject as AzureBackupJobDetails); - Vault = new AzurePSBackupVault(azureJob.ResourceGroupName, azureJob.ResourceName, azureJob.Location); - specifiedJobs.Add(azureJob.InstanceId); - } - else if (Job is AzureBackupJobDetails) - { - Vault = new AzurePSBackupVault((Job as AzureBackupJobDetails).ResourceGroupName, (Job as AzureBackupJobDetails).ResourceName, (Job as AzureBackupJobDetails).Location); - specifiedJobs.Add((Job as AzureBackupJobDetails).InstanceId); - } - } - - WriteDebug("Number of jobs to wait on: " + specifiedJobs.Count); - - if (specifiedJobs.Count == 0) - { - WriteDebug("No jobs to wait on. Quitting."); - return; - } - - InitializeAzureBackupCmdlet(Vault); - - ExecutionBlock(() => - { - if (!TimeOut.HasValue) - { - TimeOut = new long(); - TimeOut = Int64.MaxValue; - } - - List pendingJobs = new List(specifiedJobs); - DateTime waitingStartTime = DateTime.UtcNow; - - while (true) - { - WriteDebug("In loop querying jobs"); - - if (DateTime.UtcNow.Subtract(waitingStartTime).TotalSeconds >= TimeOut) - { - WriteDebug("Exiting due to timeout."); - break; - } - - bool areJobsRunning = false; - - for (int i = 0; i < pendingJobs.Count; i++) - { - Mgmt.Job retrievedJob = AzureBackupClient.GetJobDetails(pendingJobs[i]).Job; - if (AzureBackupJobHelper.IsJobRunning(retrievedJob.Status)) - areJobsRunning = true; - else - { - pendingJobs.RemoveAt(i); - i--; - } - } - - if (!areJobsRunning) - { - WriteDebug("Exiting because all jobs have finished running."); - break; - } - - System.Threading.Thread.Sleep(30 * 1000); - } - - IList finalJobs = new List(); - foreach(string jobId in specifiedJobs) - { - finalJobs.Add(new AzureBackupJob(Vault, AzureBackupClient.GetJobDetails(jobId).Job)); - } - - if (finalJobs.Count == 1) - { - WriteObject(finalJobs.First()); - } - else - { - WriteObject(finalJobs); - } - }); - } - } -} \ No newline at end of file diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/GetAzureBackupProtectionPolicy.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/GetAzureBackupProtectionPolicy.cs deleted file mode 100644 index 94822c26fee1..000000000000 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/GetAzureBackupProtectionPolicy.cs +++ /dev/null @@ -1,56 +0,0 @@ -// ---------------------------------------------------------------------------------- -// -// Copyright Microsoft Corporation -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// http://www.apache.org/licenses/LICENSE-2.0 -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// ---------------------------------------------------------------------------------- - -using System; -using System.Management.Automation; -using System.Collections.Generic; -using System.Xml; -using System.Linq; -using Microsoft.Azure.Management.BackupServices.Models; -using Microsoft.Azure.Commands.AzureBackup.Models; -using Microsoft.Azure.Commands.AzureBackup.Helpers; - -namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets -{ - /// - /// Get list of protection policies - /// - [Cmdlet(VerbsCommon.Get, "AzureBackupProtectionPolicy"), OutputType(typeof(AzureBackupProtectionPolicy), typeof(List))] - public class GetAzureBackupProtectionPolicy : AzureBackupVaultCmdletBase - { - [Parameter(Position = 3, Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.PolicyName)] - [ValidateNotNullOrEmpty] - public string Name { get; set; } - - public override void ExecuteCmdlet() - { - ExecutionBlock(() => - { - base.ExecuteCmdlet(); - - if (Name != null) - { - var policyInfo = AzureBackupClient.GetProtectionPolicyByName(Name); - WriteObject(ProtectionPolicyHelpers.GetCmdletPolicy(Vault, policyInfo)); - } - else - { - var policyObjects = AzureBackupClient.ListProtectionPolicies(); - WriteObject(ProtectionPolicyHelpers.GetCmdletPolicies(Vault, policyObjects)); - } - }); - } - } -} - diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/NewAzureBackupProtectionPolicy.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/NewAzureBackupProtectionPolicy.cs deleted file mode 100644 index 9df08fd14854..000000000000 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/NewAzureBackupProtectionPolicy.cs +++ /dev/null @@ -1,110 +0,0 @@ -// ---------------------------------------------------------------------------------- -// -// Copyright Microsoft Corporation -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// http://www.apache.org/licenses/LICENSE-2.0 -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// ---------------------------------------------------------------------------------- - -using System; -using System.Management.Automation; -using System.Collections.Generic; -using System.Xml; -using System.Linq; -using Microsoft.Azure.Management.BackupServices.Models; -using Microsoft.Azure.Commands.AzureBackup.Helpers; -using Microsoft.Azure.Commands.AzureBackup.Models; - -namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets -{ - /// - /// Create new protection policy - /// - [Cmdlet(VerbsCommon.New, "AzureBackupProtectionPolicy", DefaultParameterSetName = NoScheduleParamSet), OutputType(typeof(AzureBackupProtectionPolicy))] - public class NewAzureBackupProtectionPolicy : AzureBackupVaultCmdletBase - { - protected const string WeeklyScheduleParamSet = "WeeklyScheduleParamSet"; - protected const string DailyScheduleParamSet = "DailyScheduleParamSet"; - protected const string NoScheduleParamSet = "DailyScheduleParamSet"; - - [Parameter(Position = 3, Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.PolicyName)] - [ValidateNotNullOrEmpty] - public string Name { get; set; } - - [Parameter(Position = 4, Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.WorkloadType, ValueFromPipelineByPropertyName = true)] - [ValidateSet("VM", IgnoreCase = true)] - public string WorkloadType { get; set; } - - [Parameter(Position = 5, Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.BackupType, ValueFromPipelineByPropertyName = true)] - [ValidateSet("Full", IgnoreCase = true)] - public string BackupType { get; set; } - - [Parameter(ParameterSetName = DailyScheduleParamSet, Position = 6, Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.DailyScheduleType)] - public SwitchParameter Daily { get; set; } - - [Parameter(ParameterSetName = WeeklyScheduleParamSet, Position = 7, Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.WeeklyScheduleType)] - public SwitchParameter Weekly { get; set; } - - [Parameter(Position = 8, Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.ScheduleRunTimes, ValueFromPipelineByPropertyName = true)] - public DateTime ScheduleRunTimes { get; set; } - - [Parameter(Position = 9, Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.RetentionType, ValueFromPipelineByPropertyName = true)] - [ValidateSet("Days", "Weeks", IgnoreCase = true)] - public string RetentionType { get; set; } - - [Parameter(Position = 10, Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.RententionDuration, ValueFromPipelineByPropertyName = true)] - public int RetentionDuration { get; set; } - - [Parameter(ParameterSetName = WeeklyScheduleParamSet, Position = 11, Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.ScheduleRunDays, ValueFromPipelineByPropertyName = true)] - [Parameter(ParameterSetName = NoScheduleParamSet, Position = 11, Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.ScheduleRunDays, ValueFromPipelineByPropertyName = true)] - [AllowEmptyCollection] - [ValidateSet("Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday", IgnoreCase = true)] - public string[] ScheduleRunDays { get; set; } - - public override void ExecuteCmdlet() - { - ExecutionBlock(() => - { - base.ExecuteCmdlet(); - WriteDebug("Making client call"); - - var ScheduleType = GetScheduleType(ScheduleRunDays); - - var backupSchedule = ProtectionPolicyHelpers.FillBackupSchedule(BackupType, ScheduleType, ScheduleRunTimes, - RetentionType, RetentionDuration, ScheduleRunDays); - - var addProtectionPolicyRequest = new AddProtectionPolicyRequest(); - addProtectionPolicyRequest.PolicyName = this.Name; - addProtectionPolicyRequest.Schedule = backupSchedule; - addProtectionPolicyRequest.WorkloadType = Enum.Parse(typeof(WorkloadType), this.WorkloadType, true).ToString(); - - AzureBackupClient.AddProtectionPolicy(addProtectionPolicyRequest); - WriteDebug("Protection policy created successfully"); - - var policyInfo = AzureBackupClient.GetProtectionPolicyByName(Name); - WriteObject(ProtectionPolicyHelpers.GetCmdletPolicy(Vault, policyInfo)); - }); - } - - private string GetScheduleType(string[] ScheduleRunDays) - { - WriteDebug("ParameterSetName = " + this.ParameterSetName.ToString()); - - if (ScheduleRunDays != null && ScheduleRunDays.Length > 0) - { - return ScheduleType.Weekly.ToString(); - } - else - { - return ScheduleType.Daily.ToString(); - } - } - } -} - diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/RemoveAzureBackupProtectionPolicy.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/RemoveAzureBackupProtectionPolicy.cs deleted file mode 100644 index 8b907ed2381e..000000000000 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/RemoveAzureBackupProtectionPolicy.cs +++ /dev/null @@ -1,53 +0,0 @@ -// ---------------------------------------------------------------------------------- -// -// Copyright Microsoft Corporation -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// http://www.apache.org/licenses/LICENSE-2.0 -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// ---------------------------------------------------------------------------------- - -using System; -using System.Management.Automation; -using System.Collections.Generic; -using System.Xml; -using System.Linq; -using Microsoft.Azure.Management.BackupServices.Models; -using Microsoft.Azure.Commands.AzureBackup.Models; - -namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets -{ - /// - /// Remove a protection policy - /// - [Cmdlet(VerbsCommon.Remove, "AzureBackupProtectionPolicy")] - public class RemoveAzureBackupProtectionPolicy : AzureBackupPolicyCmdletBase - { - public override void ExecuteCmdlet() - { - ExecutionBlock(() => - { - base.ExecuteCmdlet(); - - WriteDebug("Making client call"); - - var policyInfo = AzureBackupClient.GetProtectionPolicyByName(ProtectionPolicy.Name); - if (policyInfo != null) - { - AzureBackupClient.DeleteProtectionPolicy(policyInfo.InstanceId); - WriteVerbose("Successfully deleted policy"); - } - else - { - WriteVerbose("Policy Not Found"); - } - }); - } - } -} - diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/SetAzureBackupProtectionPolicy.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/SetAzureBackupProtectionPolicy.cs deleted file mode 100644 index 5b33b7f0d435..000000000000 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/SetAzureBackupProtectionPolicy.cs +++ /dev/null @@ -1,154 +0,0 @@ -// ---------------------------------------------------------------------------------- -// -// Copyright Microsoft Corporation -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// http://www.apache.org/licenses/LICENSE-2.0 -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// ---------------------------------------------------------------------------------- - -using System; -using System.Management.Automation; -using System.Collections.Generic; -using System.Xml; -using System.Linq; -using Microsoft.Azure.Management.BackupServices.Models; -using Microsoft.Azure.Commands.AzureBackup.Helpers; -using Microsoft.Azure.Commands.AzureBackup.Models; -using CmdletModel = Microsoft.Azure.Commands.AzureBackup.Models; - -namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets -{ - /// - /// Update existing protection policy - /// - [Cmdlet(VerbsCommon.Set, "AzureBackupProtectionPolicy", DefaultParameterSetName = NoScheduleParamSet), OutputType(typeof(AzureBackupProtectionPolicy))] - public class SetAzureBackupProtectionPolicy : AzureBackupPolicyCmdletBase - { - protected const string WeeklyScheduleParamSet = "WeeklyScheduleParamSet"; - protected const string DailyScheduleParamSet = "DailyScheduleParamSet"; - protected const string NoScheduleParamSet = "NoScheduleParamSet"; - - [Parameter(Position = 1, Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.PolicyNewName)] - [ValidateNotNullOrEmpty] - public string NewName { get; set; } - - [Parameter(Position = 2, Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.BackupType)] - [ValidateSet("Full", IgnoreCase = true)] - public string BackupType { get; set; } - - [Parameter(ParameterSetName = DailyScheduleParamSet, Position = 3, Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.DailyScheduleType)] - public SwitchParameter Daily { get; set; } - - [Parameter(ParameterSetName = WeeklyScheduleParamSet, Position = 4, Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.WeeklyScheduleType)] - public SwitchParameter Weekly { get; set; } - - [Parameter(Position = 5, Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.ScheduleRunTimes)] - public DateTime ScheduleRunTimes { get; set; } - - [Parameter(Position = 6, Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.RetentionType)] - [ValidateSet("Days", "Weeks", IgnoreCase = true)] - public string RetentionType { get; set; } - - [Parameter(Position = 7, Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.RententionDuration)] - public int RetentionDuration { get; set; } - - [Parameter(ParameterSetName = WeeklyScheduleParamSet, Position = 8, Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.ScheduleRunDays)] - [ValidateSet("Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday", IgnoreCase = true)] - public string[] ScheduleRunDays { get; set; } - - public override void ExecuteCmdlet() - { - ExecutionBlock(() => - { - base.ExecuteCmdlet(); - WriteDebug("Making client call"); - - var response = AzureBackupClient.GetProtectionPolicyByName(ProtectionPolicy.Name); - var vault = new CmdletModel.AzurePSBackupVault(ProtectionPolicy.ResourceGroupName, ProtectionPolicy.Name, ProtectionPolicy.Location); - - var policyInfo = ProtectionPolicyHelpers.GetCmdletPolicy(vault, response); - - // TODO: Make the below function work with AzureBackupProtectionPolicy - FillRemainingValuesForSetPolicyRequest(policyInfo); - - var backupSchedule = ProtectionPolicyHelpers.FillBackupSchedule(BackupType, policyInfo.ScheduleType, ScheduleRunTimes, - RetentionType, RetentionDuration, policyInfo.ScheduleRunDays.ToArray()); - - NewName = (string.IsNullOrEmpty(NewName) ? policyInfo.Name : NewName); - var updateProtectionPolicyRequest = new UpdateProtectionPolicyRequest(); - updateProtectionPolicyRequest.PolicyName = this.NewName; - updateProtectionPolicyRequest.Schedule = backupSchedule; - - if (policyInfo != null) - { - // TODO: Add Async handling - // BUG: Update API in hydra doesn't return OperationResponse rather than AzureOperationResponse - var operationId = AzureBackupClient.UpdateProtectionPolicy(policyInfo.InstanceId, updateProtectionPolicyRequest); - - if(operationId != Guid.Empty) - { - var operationStatus = GetOperationStatus(operationId); - WriteDebug("Protection Policy successfully updated and created job(s) to re-configure protection on associated items"); - WriteObject(operationStatus.Jobs); - } - - else - { - WriteDebug("Protection Policy successfully updated"); - } - - } - else - { - // TODO: Validate proper error message is delivered to user. - throw new ArgumentException(String.Format("Protection policy {0} not found", ProtectionPolicy.Name)); - } - }); - } - - private void FillRemainingValuesForSetPolicyRequest(AzureBackupProtectionPolicy policy) - { - if(string.IsNullOrEmpty(BackupType)) - { - BackupType = policy.BackupType; - } - - if (ScheduleRunTimes == null || ScheduleRunTimes == DateTime.MinValue) - { - ScheduleRunTimes = policy.ScheduleRunTimes; - } - - if (string.IsNullOrEmpty(RetentionType)) - { - RetentionType = policy.RetentionType; - } - - if (RetentionDuration == 0) - { - RetentionDuration = policy.RetentionDuration; - } - - if (this.ParameterSetName != NoScheduleParamSet ) - { - if (ScheduleRunDays != null && ScheduleRunDays.Length > 0) - { - policy.ScheduleType = ScheduleType.Weekly.ToString(); - policy.ScheduleRunDays = ScheduleRunDays.ToList(); - } - else - { - policy.ScheduleType = ScheduleType.Daily.ToString(); - policy.ScheduleRunDays = new List(); - } - - } - } - } -} - diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/RecoveryPoint/GetAzureBackupRecoveryPoint.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/RecoveryPoint/GetAzureBackupRecoveryPoint.cs deleted file mode 100644 index e9b48b9c8ac4..000000000000 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/RecoveryPoint/GetAzureBackupRecoveryPoint.cs +++ /dev/null @@ -1,90 +0,0 @@ -// ---------------------------------------------------------------------------------- -// -// Copyright Microsoft Corporation -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// http://www.apache.org/licenses/LICENSE-2.0 -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// ---------------------------------------------------------------------------------- - -using System; -using System.Management.Automation; -using System.Collections.Generic; -using System.Xml; -using System.Linq; -using Microsoft.Azure.Management.BackupServices.Models; -using Microsoft.Azure.Commands.AzureBackup.Models; - -namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets -{ - /// - /// Get list of containers - /// - [Cmdlet(VerbsCommon.Get, "AzureBackupRecoveryPoint"), OutputType(typeof(AzureBackupRecoveryPoint), typeof(List))] - public class GetAzureBackupRecoveryPoint : AzureBackupDSCmdletBase - { - [Parameter(Position = 1, Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.RecoveryPointId)] - [ValidateNotNullOrEmpty] - public string Id { get; set; } - - public override void ExecuteCmdlet() - { - base.ExecuteCmdlet(); - - ExecutionBlock(() => - { - WriteDebug("Making client call"); - - var recoveryPointListResponse = AzureBackupClient.ListRecoveryPoints(Item.ContainerUniqueName, Item.Type, Item.DataSourceId); - - WriteDebug("Received recovery point response"); - - IEnumerable recoveryPointObjects = null; - if (Id != null) - { - RecoveryPointInfo recoveryPointObject = null; - recoveryPointObjects = recoveryPointListResponse.Where(x => x.InstanceId.Equals(Id, System.StringComparison.InvariantCultureIgnoreCase)); - if (recoveryPointObjects != null && recoveryPointObjects.Any()) - { - WriteDebug("Converting response"); - recoveryPointObject = recoveryPointObjects.FirstOrDefault(); - WriteAzureBackupRecoveryPoint(recoveryPointObject, Item); - } - else - { - WriteDebug(string.Format("{0}{1}", "No recovery point exist with Id := ", Id)); - } - } - else - { - WriteDebug("Converting response"); - recoveryPointObjects = recoveryPointListResponse.OrderByDescending(x => x.RecoveryPointTime); - WriteAzureBackupRecoveryPoint(recoveryPointObjects, Item); - } - }); - } - - public void WriteAzureBackupRecoveryPoint(RecoveryPointInfo sourceRecoverPoint, AzureBackupItem azureBackupItem) - { - this.WriteObject(new AzureBackupRecoveryPoint(sourceRecoverPoint, azureBackupItem)); - } - - public void WriteAzureBackupRecoveryPoint(IEnumerable sourceRecoverPointList, AzureBackupItem azureBackupItem) - { - List targetList = new List(); - - foreach (var sourceRecoverPoint in sourceRecoverPointList) - { - targetList.Add(new AzureBackupRecoveryPoint(sourceRecoverPoint, azureBackupItem)); - } - - this.WriteObject(targetList, true); - } - } -} - diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/GetAzureBackupVaultCredentials/AcsNamespace.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/GetAzureBackupVaultCredentials/AcsNamespace.cs deleted file mode 100644 index 873419510e8a..000000000000 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/GetAzureBackupVaultCredentials/AcsNamespace.cs +++ /dev/null @@ -1,61 +0,0 @@ -// ---------------------------------------------------------------------------------- -// -// Copyright Microsoft Corporation -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// http://www.apache.org/licenses/LICENSE-2.0 -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// ---------------------------------------------------------------------------------- - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets -{ - /// - /// AcsNamespace is where the certificate is uploaded into - /// - public class AcsNamespace - { - /// - /// Gets or sets the key name for HostName entry - /// - public string HostName { get; set; } - - /// - /// Gets or sets the key name for Namespace entry - /// - public string Namespace { get; set; } - - /// - /// Gets or sets the value for ResourceProviderRealm entry - /// - public string ResourceProviderRealm { get; set; } - - /// - /// Initializes a new instance of the AcsNamespace class - /// - public AcsNamespace() { } - - /// - /// Initializes a new instance of the AcsNamespace class. - /// - /// host name - /// acs namespace - /// rp realm - public AcsNamespace(string hostName, string acsNmespace, string resourceProviderRealm) - { - this.HostName = hostName; - this.Namespace = acsNmespace; - this.ResourceProviderRealm = resourceProviderRealm; - } - } -} diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/GetAzureBackupVaultCredentials/CertUtils.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/GetAzureBackupVaultCredentials/CertUtils.cs deleted file mode 100644 index 9bcde86a6431..000000000000 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/GetAzureBackupVaultCredentials/CertUtils.cs +++ /dev/null @@ -1,131 +0,0 @@ -// ---------------------------------------------------------------------------------- -// -// Copyright Microsoft Corporation -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// http://www.apache.org/licenses/LICENSE-2.0 -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// ---------------------------------------------------------------------------------- - -using Microsoft.WindowsAzure.Management; -using Microsoft.WindowsAzure.Management.EventSources; -using Security.Cryptography; -using Security.Cryptography.X509Certificates; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Security.Cryptography; -using System.Security.Cryptography.X509Certificates; -using System.Text; -using System.Threading.Tasks; - -namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets -{ - /// - /// Certificate utility methods - /// - public class CertUtils - { - public const string MsEnhancedProv = "Microsoft Enhanced Cryptographic Provider v1.0"; - public const string DefaultIssuer = "CN=Windows Azure Tools"; - - public const string DefaultPassword = ""; - public const string OIDClientAuthValue = "1.3.6.1.5.5.7.3.2"; - public const string OIDClientAuthFriendlyName = "Client Authentication"; - public const int KeySize2048 = 2048; - - /// - /// Windows Azure Service Management API requires 2048bit RSA keys. - /// The private key needs to be exportable so we can save it to .pfx for sharing with team members. - /// - /// A 2048 bit RSA key - private static CngKey Create2048RsaKey() - { - var keyCreationParameters = new CngKeyCreationParameters - { - ExportPolicy = CngExportPolicies.AllowExport, - KeyCreationOptions = CngKeyCreationOptions.None, - KeyUsage = CngKeyUsages.AllUsages, - Provider = new CngProvider(MsEnhancedProv) - }; - - keyCreationParameters.Parameters.Add(new CngProperty("Length", BitConverter.GetBytes(KeySize2048), CngPropertyOptions.None)); - - return CngKey.Create(CngAlgorithm2.Rsa, null, keyCreationParameters); - } - - /// - /// Creates a new self-signed X509 certificate - /// - /// The certificate issuer - /// Human readable name - /// The certificate's password - /// Certificate creation date & time - /// Certificate expiry date & time - /// An X509Certificate2 - public static X509Certificate2 CreateSelfSignedCert(string issuer, string friendlyName, string password, DateTime startTime, DateTime endTime) - { - string distinguishedNameString = issuer; - var key = Create2048RsaKey(); - - var creationParams = new X509CertificateCreationParameters(new X500DistinguishedName(distinguishedNameString)) - { - TakeOwnershipOfKey = true, - StartTime = startTime, - EndTime = endTime - }; - - // adding client authentication, -eku = 1.3.6.1.5.5.7.3.2, - // This is mandatory for the upload to be successful - OidCollection oidCollection = new OidCollection(); - oidCollection.Add(new Oid(OIDClientAuthValue, OIDClientAuthFriendlyName)); - creationParams.Extensions.Add(new X509EnhancedKeyUsageExtension(oidCollection, false)); - - // Documentation of CreateSelfSignedCertificate states: - // If creationParameters have TakeOwnershipOfKey set to true, the certificate - // generated will own the key and the input CngKey will be disposed to ensure - // that the caller doesn't accidentally use it beyond its lifetime (which is - // now controlled by the certificate object). - // We don't dispose it ourselves in this case. - var cert = key.CreateSelfSignedCertificate(creationParams); - key = null; - cert.FriendlyName = friendlyName; - - // X509 certificate needs PersistKeySet flag set. - // Reload a new X509Certificate2 instance from exported bytes in order to set the PersistKeySet flag. - var bytes = cert.Export(X509ContentType.Pfx, password); - - // NOTE: PfxValidation is not done here because these are newly created certs and assumed valid. - - ICommonEventSource evtSource = null; - return X509Certificate2Helper.NewX509Certificate2(bytes, password, X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.Exportable, evtSource, doPfxValidation: false); - } - - /// - /// Returns serialized certificate - Base64 encoded based on the content type - /// - /// The certificate provided - /// Cert content type - /// The serialized cert value in string - public static string SerializeCert(X509Certificate2 cert, X509ContentType contentType) - { - return Convert.ToBase64String(cert.Export(contentType)); - } - - /// - /// Generates friendly name - /// - /// Subscription id - /// Prefix, likely resource name - /// Friendly name - public static string GenerateCertFriendlyName(string subscriptionId, string prefix = "") - { - return string.Format("{0}{1}-{2}-vaultcredentials", prefix, subscriptionId, DateTime.Now.ToString("M-d-yyyy")); - } - } -} diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/GetAzureBackupVaultCredentials/Constants.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/GetAzureBackupVaultCredentials/Constants.cs deleted file mode 100644 index f22d134b53b6..000000000000 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/GetAzureBackupVaultCredentials/Constants.cs +++ /dev/null @@ -1,27 +0,0 @@ -// ---------------------------------------------------------------------------------- -// -// Copyright Microsoft Corporation -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// http://www.apache.org/licenses/LICENSE-2.0 -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// ---------------------------------------------------------------------------------- - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets -{ - public class Constants - { - public const int VaultCertificateExpiryInHoursForBackup = 48; - } -} diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/GetAzureBackupVaultCredentials/GetAzureBackupVaultCredentials.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/GetAzureBackupVaultCredentials/GetAzureBackupVaultCredentials.cs deleted file mode 100644 index dd7605f44565..000000000000 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/GetAzureBackupVaultCredentials/GetAzureBackupVaultCredentials.cs +++ /dev/null @@ -1,211 +0,0 @@ -// ---------------------------------------------------------------------------------- -// -// Copyright Microsoft Corporation -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// http://www.apache.org/licenses/LICENSE-2.0 -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// ---------------------------------------------------------------------------------- - -using Microsoft.Azure.Management.BackupServices.Models; -using Newtonsoft.Json; -using System; -using System.Collections.Generic; -using System.Globalization; -using System.IO; -using System.Linq; -using System.Management.Automation; -using System.Net; -using System.Runtime.Serialization; -using System.Security.Cryptography.X509Certificates; -using System.Text; -using System.Threading.Tasks; -using System.Xml; - -namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets -{ - /// - /// API to download the azure backup vault's credentials. - /// - [Cmdlet(VerbsCommon.Get, "AzureBackupVaultCredentials"), OutputType(typeof(string))] - public class GetAzureBackupVaultCredentials : AzureBackupVaultCmdletBase - { - [Parameter(Position = 2, Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.TargetLocation)] - [ValidateNotNullOrEmpty] - public string TargetLocation { get; set; } - - public override void ExecuteCmdlet() - { - base.ExecuteCmdlet(); - - ExecutionBlock(() => - { - if (!Directory.Exists(TargetLocation)) - { - throw new ArgumentException("The target location provided is not a directory. Please provide a directory."); - } - - string subscriptionId = Profile.DefaultSubscription.Id.ToString(); - string resourceType = "resourceType"; - string displayName = subscriptionId + "_" + ResourceGroupName + "_" + ResourceName; - - WriteDebug(string.Format(CultureInfo.InvariantCulture, - "Executing cmdlet with SubscriptionId = {0}, ResourceGroupName = {1}, ResourceName = {2}, TargetLocation = {3}", - subscriptionId, ResourceGroupName, ResourceName, TargetLocation)); - - X509Certificate2 cert = CertUtils.CreateSelfSignedCert(CertUtils.DefaultIssuer, - CertUtils.GenerateCertFriendlyName(subscriptionId, ResourceName), - CertUtils.DefaultPassword, - DateTime.UtcNow.AddMinutes(-10), - DateTime.UtcNow.AddHours(this.GetCertificateExpiryInHours())); - - AcsNamespace acsNamespace = new AcsNamespace(); - string channelIntegrityKey = string.Empty; - try - { - // Upload cert into ID Mgmt - WriteDebug(string.Format(CultureInfo.InvariantCulture, "RecoveryService - Going to upload the certificate")); - acsNamespace = UploadCert(cert, subscriptionId, ResourceName, resourceType, ResourceGroupName); - WriteDebug(string.Format(CultureInfo.InvariantCulture, "RecoveryService - Successfully uploaded the certificate")); - } - catch (Exception exception) - { - throw exception; - } - - // generate vault credentials - string vaultCredsFileContent = GenerateVaultCreds(cert, subscriptionId, resourceType, acsNamespace); - - // prepare for download - string fileName = string.Format("{0}_{1}.VaultCredentials", displayName, DateTime.UtcNow.ToString("yyyy-dd-M--HH-mm-ss")); - string directoryPath = Path.GetDirectoryName(TargetLocation); - if (directoryPath == null) - { - // TargetLocation is a root path - directoryPath = TargetLocation; - } - string filePath = Path.Combine(directoryPath, fileName); - WriteDebug(string.Format("Saving Vault Credentials to file : {0}", filePath)); - - File.WriteAllBytes(filePath, Encoding.UTF8.GetBytes(vaultCredsFileContent)); - - // Output filename back to user - WriteObject(fileName); - }); - } - - /// - /// Method to return the Certificate Expiry time in hours - /// - /// - /// - private int GetCertificateExpiryInHours(string resourceType = null) - { - return Constants.VaultCertificateExpiryInHoursForBackup; - } - - /// - /// Upload certificate - /// - /// management certificate - /// subscription Id - /// resource name - /// resource type - /// resource group name - /// acs namespace of the uploaded cert - private AcsNamespace UploadCert(X509Certificate2 cert, string subscriptionId, string resourceName, string resourceType, string resourceGroupName) - { - string rawCertDataString = Convert.ToBase64String(cert.RawData); - VaultCredUploadCertRequest vaultCredUploadCertRequest = new VaultCredUploadCertRequest() - { - RawCertificateData = new RawCertificateData() - { - Certificate = rawCertDataString, - }, - }; - - string response = string.Empty; - VaultCredUploadCertResponse vaultCredUploadCertResponse = - AzureBackupClient.Vault.UploadCertificateAsync( - "IdMgmtInternalCert", - vaultCredUploadCertRequest, - GetCustomRequestHeaders(), - CmdletCancellationToken).Result; - - return new AcsNamespace(vaultCredUploadCertResponse.ResourceCertificateAndACSDetails.GlobalAcsHostName, - vaultCredUploadCertResponse.ResourceCertificateAndACSDetails.GlobalAcsNamespace, - vaultCredUploadCertResponse.ResourceCertificateAndACSDetails.GlobalAcsRPRealm); - } - - /// - /// Generates vault creds file - /// - /// management certificate - /// subscription Id - /// resource type - /// display name - /// acs namespace - /// xml file in string format - private string GenerateVaultCreds(X509Certificate2 cert, string subscriptionId, string resourceType, AcsNamespace acsNamespace) - { - try - { - return GenerateVaultCredsForBackup(cert, subscriptionId, resourceType, acsNamespace); - } - catch (Exception exception) - { - throw exception; - } - } - - /// - /// Generates vault creds file content for backup Vault - /// - /// management certificate - /// subscription Id - /// resource type - /// display name - /// acs namespace - /// xml file in string format - private string GenerateVaultCredsForBackup(X509Certificate2 cert, string subscriptionId, string resourceType, AcsNamespace acsNamespace) - { - using (var output = new MemoryStream()) - { - using (var writer = XmlWriter.Create(output, GetXmlWriterSettings())) - { - BackupVaultCreds backupVaultCreds = new BackupVaultCreds(subscriptionId, - resourceType, - ResourceName, - CertUtils.SerializeCert(cert, X509ContentType.Pfx), - acsNamespace); - - DataContractSerializer serializer = new DataContractSerializer(typeof(BackupVaultCreds)); - serializer.WriteObject(writer, backupVaultCreds); - - WriteDebug(string.Format(CultureInfo.InvariantCulture, "RecoveryService - Backup Vault - Successfully serialized the file content")); - } - - return Encoding.UTF8.GetString(output.ToArray()); - } - } - - /// - /// A set of XmlWriterSettings to use for the publishing profile - /// - /// The XmlWriterSettings set - private XmlWriterSettings GetXmlWriterSettings() - { - return new XmlWriterSettings - { - Encoding = new UTF8Encoding(false), - Indent = true, - NewLineOnAttributes = true - }; - } - } -} diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/GetAzureBackupVaultCredentials/VaultCredentials.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/GetAzureBackupVaultCredentials/VaultCredentials.cs deleted file mode 100644 index cc5c1bdc17a7..000000000000 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/GetAzureBackupVaultCredentials/VaultCredentials.cs +++ /dev/null @@ -1,127 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.Linq; -using System.Runtime.Serialization; -using System.Text; -using System.Threading.Tasks; - -namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets -{ - /// - /// Class to define vault credentials - /// - [DataContract] - public class VaultCreds - { - #region Properties - - /// - /// Gets or sets the key name for SubscriptionId entry - /// - [DataMember(Order = 0)] - public string SubscriptionId { get; set; } - - /// - /// Gets or sets the key name for ResourceType entry - /// - [DataMember(Order = 1)] - public string ResourceType { get; set; } - - /// - /// Gets or sets the key name for ResourceName entry - /// - [DataMember(Order = 2)] - public string ResourceName { get; set; } - - /// - /// Gets or sets the key name for ManagementCert entry - /// - [DataMember(Order = 3)] - public string ManagementCert { get; set; } - - /// - /// Gets or sets the key name for AcsNamespace entry - /// - [DataMember(Order = 4)] - public AcsNamespace AcsNamespace { get; set; } - - #endregion - - #region Constructors - - /// - /// Initializes a new instance of the VaultCreds class - /// - public VaultCreds() { } - - /// - /// Initializes a new instance of the VaultCreds class - /// - /// subscription id - /// resource type - /// resource name - /// management cert - /// acs namespace - public VaultCreds(string subscriptionId, string resourceType, string resourceName, string managementCert, AcsNamespace acsNamespace) - { - SubscriptionId = subscriptionId; - ResourceType = resourceType; - ResourceName = resourceName; - ManagementCert = managementCert; - AcsNamespace = acsNamespace; - } - - #endregion - } - - /// - /// Class to define backup vault credentials - /// - [SuppressMessage("Microsoft.StyleCop.CSharp.MaintainabilityRules", "SA1402:FileMayOnlyContainASingleClass", Justification = "Grouping classes based on entity")] - public class BackupVaultCreds : VaultCreds - { - /// - /// Gets or sets the agent links - /// - [DataMember(Order = 0)] - public string AgentLinks { get; set; } - - #region Constructors - - /// - /// Initializes a new instance of the BackupVaultCreds class - /// - public BackupVaultCreds() - { - } - - /// - /// Initializes a new instance of the BackupVaultCreds class - /// - /// subscription Id - /// resource type - /// resource name - /// management cert - /// acs namespace - public BackupVaultCreds(string subscriptionId, string resourceType, string resourceName, string managementCert, AcsNamespace acsNamespace) - : base(subscriptionId, resourceType, resourceName, managementCert, acsNamespace) { } - - /// - /// Initializes a new instance of the BackupVaultCreds class - /// - /// subscription Id - /// resource type - /// resource name - /// management cert - /// acs namespace - /// agent links - public BackupVaultCreds(string subscriptionId, string resourceType, string resourceName, string managementCert, AcsNamespace acsNamespace, string agentLinks) - : this(subscriptionId, resourceType, resourceName, managementCert, acsNamespace) - { - AgentLinks = agentLinks; - } - - #endregion - } -} diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj index cb2bf8a12631..c61824daf125 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj @@ -56,6 +56,10 @@ ..\..\..\packages\Microsoft.Azure.Common.2.1.0\lib\net45\Microsoft.Azure.Common.NetFramework.dll + + False + Resources\Microsoft.Azure.Management.BackupServicesManagement.dll + ..\..\..\packages\Microsoft.IdentityModel.Clients.ActiveDirectory.2.14.201151115\lib\net45\Microsoft.IdentityModel.Clients.ActiveDirectory.dll @@ -74,11 +78,6 @@ ..\..\..\packages\Microsoft.WindowsAzure.Management.4.1.1\lib\net40\Microsoft.WindowsAzure.Management.dll - - False - ..\..\..\..\..\azure-sdk-for-net\src\ResourceManagement\AzureBackup\BackupServicesManagment\bin\Net45-Release\Microsoft.WindowsAzure.Management.BackupServicesManagment.dll - - False Cmdlets\VaultCredentials\Microsoft.WindowsAzure.Management.Common.dll @@ -117,55 +116,21 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - True @@ -174,16 +139,6 @@ - - - {5ee72c53-1720-4309-b54b-5fb79703195f} - Commands.Common - - - {52643bd5-6378-49bd-9f6e-dac9dd8a867b} - Commands.Compute - - Always @@ -204,11 +159,16 @@ - + - + + + {5ee72c53-1720-4309-b54b-5fb79703195f} + Commands.Common + + diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Helpers/ContainerHelpers.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Helpers/ContainerHelpers.cs deleted file mode 100644 index a898af793140..000000000000 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Helpers/ContainerHelpers.cs +++ /dev/null @@ -1,67 +0,0 @@ -// ---------------------------------------------------------------------------------- -// -// Copyright Microsoft Corporation -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// http://www.apache.org/licenses/LICENSE-2.0 -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// ---------------------------------------------------------------------------------- - -using System; -using System.Management.Automation; -using System.Collections.Generic; -using System.Xml; -using Microsoft.WindowsAzure.Commands.Utilities.Common; -using Microsoft.Azure.Common.Authentication; -using Microsoft.Azure.Common.Authentication.Models; -using System.Threading; -using Hyak.Common; -using Microsoft.Azure.Commands.AzureBackup.Properties; -using System.Net; -using Microsoft.Azure.Management.BackupServices.Models; -using Microsoft.Azure.Commands.AzureBackup.Cmdlets; -using System.Linq; -using Microsoft.Azure.Commands.AzureBackup.Models; -using CmdletModel = Microsoft.Azure.Commands.AzureBackup.Models; -using System.Collections.Specialized; -using System.Web; - -namespace Microsoft.Azure.Commands.AzureBackup.Helpers -{ - internal class ContainerHelpers - { - internal static string GetQueryFilter(ListContainerQueryParameter queryParams) - { - NameValueCollection collection = new NameValueCollection(); - if (!String.IsNullOrEmpty(queryParams.ContainerTypeField)) - { - collection.Add("ContainerType", queryParams.ContainerTypeField); - } - - if (!String.IsNullOrEmpty(queryParams.ContainerStatusField)) - { - collection.Add("ContainerStatus", queryParams.ContainerStatusField); - } - - if (!String.IsNullOrEmpty(queryParams.ContainerFriendlyNameField)) - { - collection.Add("FriendlyName", queryParams.ContainerFriendlyNameField); - } - - if (collection == null || collection.Count == 0) - { - return String.Empty; - } - - var httpValueCollection = HttpUtility.ParseQueryString(String.Empty); - httpValueCollection.Add(collection); - - return "&" + httpValueCollection.ToString(); - } - } -} diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Helpers/ProtectionPolicyHelpers.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Helpers/ProtectionPolicyHelpers.cs deleted file mode 100644 index 6430c26ed5be..000000000000 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Helpers/ProtectionPolicyHelpers.cs +++ /dev/null @@ -1,169 +0,0 @@ -// ---------------------------------------------------------------------------------- -// -// Copyright Microsoft Corporation -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// http://www.apache.org/licenses/LICENSE-2.0 -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// ---------------------------------------------------------------------------------- - -using System; -using System.Management.Automation; -using System.Collections.Generic; -using System.Xml; -using Microsoft.WindowsAzure.Commands.Utilities.Common; -using Microsoft.Azure.Common.Authentication; -using Microsoft.Azure.Common.Authentication.Models; -using System.Threading; -using Hyak.Common; -using Microsoft.Azure.Commands.AzureBackup.Properties; -using System.Net; -using Microsoft.Azure.Management.BackupServices.Models; -using Microsoft.Azure.Commands.AzureBackup.Cmdlets; -using System.Linq; -using Microsoft.Azure.Commands.AzureBackup.Models; -using CmdletModel = Microsoft.Azure.Commands.AzureBackup.Models; -using System.Collections.Specialized; -using System.Web; - -namespace Microsoft.Azure.Commands.AzureBackup.Helpers -{ - public static class ProtectionPolicyHelpers - { - public const int MinRetentionInDays = 7; - public const int MaxRetentionInDays = 30; - public const int MinRetentionInWeeks = 1; - public const int MaxRetentionInWeeks = 4; - - public static AzureBackupProtectionPolicy GetCmdletPolicy(CmdletModel.AzurePSBackupVault vault, ProtectionPolicyInfo sourcePolicy) - { - if (sourcePolicy == null) - { - return null; - } - - return new AzureBackupProtectionPolicy(vault, sourcePolicy); - } - - public static List GetCmdletPolicies(CmdletModel.AzurePSBackupVault vault, IEnumerable sourcePolicyList) - { - if (sourcePolicyList == null) - { - return null; - } - - List targetList = new List(); - - foreach (var sourcePolicy in sourcePolicyList) - { - targetList.Add(GetCmdletPolicy(vault, sourcePolicy)); - } - - return targetList; - } - - public static BackupSchedule FillBackupSchedule(string backupType, string scheduleType, DateTime scheduleStartTime, - string retentionType, int retentionDuration, string[] scheduleRunDays) - { - var backupSchedule = new BackupSchedule(); - - backupSchedule.BackupType = Enum.Parse(typeof(BackupType), backupType, true).ToString(); - backupSchedule.RetentionPolicy = FillRetentionPolicy(retentionType, retentionDuration); - - scheduleType = FillScheduleType(scheduleType, scheduleRunDays); - backupSchedule.ScheduleRun = scheduleType; - - if (string.Compare(scheduleType, ScheduleType.Weekly.ToString(), true) == 0) - { - backupSchedule.ScheduleRunDays = ParseScheduleRunDays(scheduleRunDays); - } - - DateTime scheduleRunTime = ParseScheduleRunTime(scheduleStartTime); - - backupSchedule.ScheduleRunTimes = new List { scheduleRunTime }; - - return backupSchedule; - } - - private static RetentionPolicy FillRetentionPolicy(string retentionType, int retentionDuration) - { - ValidateRetentionRange(retentionType, retentionDuration); - var retentionPolicy = new RetentionPolicy - { - RetentionType = (RetentionDurationType)Enum.Parse(typeof(RetentionDurationType), retentionType, true), - RetentionDuration = retentionDuration - }; - - return retentionPolicy; - } - - private static void ValidateRetentionRange(string retentionType, int retentionDuration) - { - if(retentionType == RetentionDurationType.Days.ToString() && (retentionDuration < MinRetentionInDays - || retentionDuration > MaxRetentionInDays)) - { - var exception = new ArgumentException("For Retention in days , valid values of retention duration are 7 to 30."); - throw exception; - } - - if (retentionType == RetentionDurationType.Weeks.ToString() && (retentionDuration < MinRetentionInWeeks - || retentionDuration > MaxRetentionInWeeks)) - { - var exception = new ArgumentException("For Retention in weeks , valid values of retention duration are 1 to 4."); - throw exception; - } - - } - - private static string FillScheduleType(string scheduleType, string[] scheduleRunDays) - { - if (scheduleType == ScheduleType.Daily.ToString() && scheduleRunDays != null && scheduleRunDays.Length > 0) - { - return ScheduleType.Weekly.ToString(); - } - - else - { - return Enum.Parse(typeof(ScheduleType), scheduleType, true).ToString(); - } - } - - private static IList ParseScheduleRunDays(string[] scheduleRunDays) - { - if (scheduleRunDays == null || scheduleRunDays.Length <= 0) - { - var exception = new ArgumentException("For weekly scheduletype , ScheduleRunDays should not be empty."); - throw exception; - } - - IList ListofWeekDays = new List(); - - foreach (var dayOfWeek in scheduleRunDays) - { - DayOfWeek item = (DayOfWeek)Enum.Parse(typeof(DayOfWeek), dayOfWeek, true); - if (!ListofWeekDays.Contains(item)) - { - ListofWeekDays.Add(item); - } - } - - return ListofWeekDays; - } - - private static DateTime ParseScheduleRunTime(DateTime scheduleStartTime) - { - if (scheduleStartTime.Kind == DateTimeKind.Local) - { - scheduleStartTime = scheduleStartTime.ToUniversalTime(); - } - DateTime scheduleRunTime = new DateTime(scheduleStartTime.Year, scheduleStartTime.Month, - scheduleStartTime.Day, scheduleStartTime.Hour, scheduleStartTime.Minute - (scheduleStartTime.Minute % 30), 0); - return scheduleRunTime; - } - } -} diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupBaseObjects.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupBaseObjects.cs index 7e484ae475ab..f3df03069b6c 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupBaseObjects.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupBaseObjects.cs @@ -49,84 +49,84 @@ public AzureBackupVaultContextObject(AzurePSBackupVault vault) : this(vault.Reso } } - /// - /// This class encapsulates all the properties of the container object - /// that are needed by higher level objects (data source, recovery point etc). - /// - public class AzureBackupContainerContextObject : AzureBackupVaultContextObject - { - /// - /// Type of the Azure Backup container - /// - public string ContainerType { get; set; } - - /// - /// Unique name of the Azure Backup Container - /// - public string ContainerUniqueName { get; set; } - - public AzureBackupContainerContextObject() - : base() - { - } - - public AzureBackupContainerContextObject(AzureBackupContainerContextObject azureBackupContainerContextObject) - : base(azureBackupContainerContextObject.ResourceGroupName, azureBackupContainerContextObject.ResourceName, azureBackupContainerContextObject.Location) - { - ContainerType = azureBackupContainerContextObject.ContainerType; - ContainerUniqueName = azureBackupContainerContextObject.ContainerUniqueName; - } - public AzureBackupContainerContextObject(AzureBackupContainer azureBackupContainer) - : base(azureBackupContainer.ResourceGroupName, azureBackupContainer.ResourceName, azureBackupContainer.Location) - { - ContainerType = azureBackupContainer.ContainerType; - ContainerUniqueName = azureBackupContainer.ContainerUniqueName; - } - - public AzureBackupContainerContextObject(AzurePSBackupVault vault, ContainerInfo containerInfo) - : base(vault.ResourceGroupName, vault.Name, vault.Region) - { - ContainerType = containerInfo.ContainerType; - ContainerUniqueName = containerInfo.Name; - } - } - - public class AzureBackupItemContextObject : AzureBackupContainerContextObject - { - /// - /// DataSourceId of Azure Backup Item - /// - public string DataSourceId { get; set; } - - /// - /// DataSourceId of Azure Backup Item - /// - public string Type { get; set; } - - public AzureBackupItemContextObject() - : base() - { - } - - public AzureBackupItemContextObject(AzureBackupItemContextObject azureBackupItemContextObject) - : base(azureBackupItemContextObject) - { - DataSourceId = azureBackupItemContextObject.DataSourceId; - Type = azureBackupItemContextObject.Type; - } - - public AzureBackupItemContextObject(DataSourceInfo item, AzureBackupContainer azureBackupContainer) - : base(azureBackupContainer) - { - DataSourceId = item.InstanceId; - Type = item.Type; - } - - public AzureBackupItemContextObject(ProtectableObjectInfo item, AzureBackupContainer azureBackupContainer) - : base(azureBackupContainer) - { - DataSourceId = "-1"; - Type = item.Type; - } - } + ///// + ///// This class encapsulates all the properties of the container object + ///// that are needed by higher level objects (data source, recovery point etc). + ///// + //public class AzureBackupContainerContextObject : AzureBackupVaultContextObject + //{ + // /// + // /// Type of the Azure Backup container + // /// + // public string ContainerType { get; set; } + + // /// + // /// Unique name of the Azure Backup Container + // /// + // public string ContainerUniqueName { get; set; } + + // public AzureBackupContainerContextObject() + // : base() + // { + // } + + // public AzureBackupContainerContextObject(AzureBackupContainerContextObject azureBackupContainerContextObject) + // : base(azureBackupContainerContextObject.ResourceGroupName, azureBackupContainerContextObject.ResourceName, azureBackupContainerContextObject.Location) + // { + // ContainerType = azureBackupContainerContextObject.ContainerType; + // ContainerUniqueName = azureBackupContainerContextObject.ContainerUniqueName; + // } + // public AzureBackupContainerContextObject(AzureBackupContainer azureBackupContainer) + // : base(azureBackupContainer.ResourceGroupName, azureBackupContainer.ResourceName, azureBackupContainer.Location) + // { + // ContainerType = azureBackupContainer.ContainerType; + // ContainerUniqueName = azureBackupContainer.ContainerUniqueName; + // } + + // public AzureBackupContainerContextObject(AzurePSBackupVault vault, ContainerInfo containerInfo) + // : base(vault.ResourceGroupName, vault.Name, vault.Region) + // { + // ContainerType = containerInfo.ContainerType; + // ContainerUniqueName = containerInfo.Name; + // } + //} + + //public class AzureBackupItemContextObject : AzureBackupContainerContextObject + //{ + // /// + // /// DataSourceId of Azure Backup Item + // /// + // public string DataSourceId { get; set; } + + // /// + // /// DataSourceId of Azure Backup Item + // /// + // public string Type { get; set; } + + // public AzureBackupItemContextObject() + // : base() + // { + // } + + // public AzureBackupItemContextObject(AzureBackupItemContextObject azureBackupItemContextObject) + // : base(azureBackupItemContextObject) + // { + // DataSourceId = azureBackupItemContextObject.DataSourceId; + // Type = azureBackupItemContextObject.Type; + // } + + // public AzureBackupItemContextObject(DataSourceInfo item, AzureBackupContainer azureBackupContainer) + // : base(azureBackupContainer) + // { + // DataSourceId = item.InstanceId; + // Type = item.Type; + // } + + // public AzureBackupItemContextObject(ProtectableObjectInfo item, AzureBackupContainer azureBackupContainer) + // : base(azureBackupContainer) + // { + // DataSourceId = "-1"; + // Type = item.Type; + // } + //} } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupContainer.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupContainer.cs deleted file mode 100644 index 1aa5cb29615c..000000000000 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupContainer.cs +++ /dev/null @@ -1,60 +0,0 @@ -// ---------------------------------------------------------------------------------- -// -// Copyright Microsoft Corporation -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// http://www.apache.org/licenses/LICENSE-2.0 -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// ---------------------------------------------------------------------------------- - -using Microsoft.Azure.Management.BackupServices.Models; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace Microsoft.Azure.Commands.AzureBackup.Models -{ - /// - /// Represents Azure Backup Container - /// - public class AzureBackupContainer : AzureBackupContainerContextObject - { - /// - /// Resource group name of the resource (ex: resource group name of the VM) being managed by Azure Backup service. - /// - public string ManagedResourceGroupName { get; set; } - - /// - /// Resource name of the resource (ex: resource name of the VM) being managed by the Azure Backup service. - /// - public string ManagedResourceName { get; set; } - - /// - /// Status of health of the Azure Backup container - /// - public string HealthStatus { get; set; } - - /// - /// Status of registration of the container - /// - public string RegistrationStatus { get; set; } - - public AzureBackupContainer() : base() { } - - public AzureBackupContainer(AzurePSBackupVault vault, ContainerInfo containerInfo) - : base(vault, containerInfo) - { - ManagedResourceGroupName = containerInfo.ParentContainerFriendlyName; - ManagedResourceName = containerInfo.FriendlyName; - HealthStatus = containerInfo.HealthStatus; - RegistrationStatus = containerInfo.RegistrationStatus; - } - } -} diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupEnums.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupEnums.cs index 842b7c73d05e..938a48c76ff5 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupEnums.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupEnums.cs @@ -21,78 +21,78 @@ namespace Microsoft.Azure.Commands.AzureBackup.Models { - public enum AzureBackupContainerTypeInput - { - AzureVirtualMachine = 1, - } + //public enum AzureBackupContainerTypeInput + //{ + // AzureVirtualMachine = 1, + //} - public enum AzureBackupContainerStatusInput - { - Registering = 1, - Registered, - } + //public enum AzureBackupContainerStatusInput + //{ + // Registering = 1, + // Registered, + //} - public enum AzureBackupContainerType - { - Invalid = 0, + //public enum AzureBackupContainerType + //{ + // Invalid = 0, - Unknown, + // Unknown, - // used by fabric adapter to populate discovered VMs - IaasVMContainer, + // // used by fabric adapter to populate discovered VMs + // IaasVMContainer, - // used by fabric adapter to populate discovered services - // VMs are child containers of services they belong to - IaasVMServiceContainer - } + // // used by fabric adapter to populate discovered services + // // VMs are child containers of services they belong to + // IaasVMServiceContainer + //} - public enum DataSourceType - { - Invalid = 0, + //public enum DataSourceType + //{ + // Invalid = 0, - VM - } + // VM + //} - public enum AzureBackupContainerRegistrationStatus - { - Invalid = 0, + //public enum AzureBackupContainerRegistrationStatus + //{ + // Invalid = 0, - Unknown, + // Unknown, - NotRegistered, + // NotRegistered, - Registered, + // Registered, - Registering, - } + // Registering, + //} - internal enum AzureBackupOperationStatus - { - Invalid = 0, + //internal enum AzureBackupOperationStatus + //{ + // Invalid = 0, - InProgress, + // InProgress, - Completed - } + // Completed + //} - internal enum AzureBackupOperationResult - { - Invalid = 0, + //internal enum AzureBackupOperationResult + //{ + // Invalid = 0, - Cancelled, + // Cancelled, - Succeeded, + // Succeeded, - Failed, + // Failed, - PartialSuccess - } + // PartialSuccess + //} - public enum AzureBackupOperationErrorCode - { - BMSUserErrorObjectLocked = 390026, - DiscoveryInProgress = 410002, - } + //public enum AzureBackupOperationErrorCode + //{ + // BMSUserErrorObjectLocked = 390026, + // DiscoveryInProgress = 410002, + //} public enum AzureBackupVaultStorageType { @@ -100,29 +100,29 @@ public enum AzureBackupVaultStorageType LocallyRedundant, } - public enum ScheduleType - { - Invalid = 0, - Daily = 1, - Weekly = 2 - } - - public enum RetentionType - { - Invalid = 0, - Days = 1, - Weeks = 2 - } - - public enum WorkloadType - { - Invalid = 0, - VM = 1 - } - - public enum BackupType - { - Invalid = 0, - Full = 1 - } + //public enum ScheduleType + //{ + // Invalid = 0, + // Daily = 1, + // Weekly = 2 + //} + + //public enum RetentionType + //{ + // Invalid = 0, + // Days = 1, + // Weeks = 2 + //} + + //public enum WorkloadType + //{ + // Invalid = 0, + // VM = 1 + //} + + //public enum BackupType + //{ + // Invalid = 0, + // Full = 1 + //} } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupItem.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupItem.cs deleted file mode 100644 index 8dd3912938d1..000000000000 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupItem.cs +++ /dev/null @@ -1,82 +0,0 @@ -// ---------------------------------------------------------------------------------- -// -// Copyright Microsoft Corporation -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// http://www.apache.org/licenses/LICENSE-2.0 -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// ---------------------------------------------------------------------------------- - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Microsoft.Azure.Management.BackupServices.Models; - -namespace Microsoft.Azure.Commands.AzureBackup.Models -{ - /// - /// Represents Azure Backup Item - /// - public class AzureBackupItem : AzureBackupItemContextObject - { - /// - /// Status for the Azure Backup Item - /// - public string DataSourceStatus { get; set; } - - /// - /// Protection Status for the Azure Backup Item - /// - public string ProtectionStatus { get; set; } - - /// - /// Protectable Object Name for the Azure Backup Item - /// - public string Name { get; set; } - - /// - /// Protection Policy Name for the Azure Backup Item - /// - public string ProtectionPolicyName { get; set; } - - /// - /// Protection Policy Id for the Azure Backup Item - /// - public string ProtectionPolicyId { get; set; } - - /// - /// Recovery Points Count for the Azure Backup Item - /// - public int RecoveryPointsCount { get; set; } - - public AzureBackupItem() - : base() - { - } - - public AzureBackupItem(DataSourceInfo datasource, AzureBackupContainer azureBackupContainer) - : base(datasource, azureBackupContainer) - { - DataSourceStatus = datasource.Status; - ProtectionStatus = datasource.ProtectionStatus; - Name = datasource.Name; - ProtectionPolicyName = datasource.ProtectionPolicyName; - ProtectionPolicyId = datasource.ProtectionPolicyId; - RecoveryPointsCount = datasource.RecoveryPointsCount; - } - - public AzureBackupItem(ProtectableObjectInfo pPOItem, AzureBackupContainer azureBackupContainer) - : base(pPOItem, azureBackupContainer) - { - ProtectionStatus = pPOItem.ProtectionStatus; - Name = pPOItem.Name; - } - } -} \ No newline at end of file diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupRecoveryPoint.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupRecoveryPoint.cs deleted file mode 100644 index 1ad78baf3177..000000000000 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupRecoveryPoint.cs +++ /dev/null @@ -1,70 +0,0 @@ -// ---------------------------------------------------------------------------------- -// -// Copyright Microsoft Corporation -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// http://www.apache.org/licenses/LICENSE-2.0 -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// ---------------------------------------------------------------------------------- - -using Microsoft.Azure.Management.BackupServices.Models; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace Microsoft.Azure.Commands.AzureBackup.Models -{ - public class AzureBackupRecoveryPointContextObject : AzureBackupItemContextObject - { - /// - /// RecoveryPointId of Azure Backup Item - /// - public string RecoveryPointId { get; set; } - - public AzureBackupRecoveryPointContextObject() - : base() - { - } - - public AzureBackupRecoveryPointContextObject(RecoveryPointInfo recoveryPointInfo, AzureBackupItem azureBackupItem) - : base(azureBackupItem) - { - RecoveryPointId = recoveryPointInfo.InstanceId; - } - } - - /// - /// Represents Azure Backup Container - /// - public class AzureBackupRecoveryPoint : AzureBackupRecoveryPointContextObject - { - /// - /// Last Recovery Point for the Azure Backup Item - /// - public DateTime RecoveryPointTime { get; set; } - - /// - /// DataSourceId of Azure Backup Item - /// - public string RecoveryPointType { get; set; } - - public AzureBackupRecoveryPoint() - : base() - { - } - - public AzureBackupRecoveryPoint(RecoveryPointInfo recoveryPointInfo, AzureBackupItem azureBackupItem) - : base(recoveryPointInfo, azureBackupItem) - { - RecoveryPointTime = recoveryPointInfo.RecoveryPointTime; - RecoveryPointType = recoveryPointInfo.RecoveryPointType; - } - } -} \ No newline at end of file diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/JobObjects.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/JobObjects.cs deleted file mode 100644 index 993447cacf5b..000000000000 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/JobObjects.cs +++ /dev/null @@ -1,148 +0,0 @@ -// ---------------------------------------------------------------------------------- -// -// Copyright Microsoft Corporation -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// http://www.apache.org/licenses/LICENSE-2.0 -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// ---------------------------------------------------------------------------------- - -using System; -using System.Management.Automation; -using System.Collections.Generic; -using System.Xml; -using System.Linq; -using System.Web; -using Microsoft.Azure.Management.BackupServices; -using Microsoft.Azure.Management.BackupServices; -using Mgmt = Microsoft.Azure.Management.BackupServices.Models; - -namespace Microsoft.Azure.Commands.AzureBackup.Models -{ - public class AzureBackupJob : AzureBackupVaultContextObject - { - public string InstanceId { get; private set; } - - public string WorkloadType { get; set; } - - public string Operation { get; set; } - - public string Status { get; set; } - - public string WorkloadName { get; set; } - - public TimeSpan Duration { get; set; } - - public DateTime StartTime { get; set; } - - public DateTime? EndTime { get; set; } - - public bool IsCancellable { get; private set; } - - public bool IsRetriable { get; private set; } - - public List ErrorDetails { get; set; } - - public AzureBackupJob(AzurePSBackupVault vault, Mgmt.Job serviceJob) - : base(vault) - { - this.InstanceId = serviceJob.InstanceId; - this.WorkloadType = serviceJob.Type; - this.WorkloadName = serviceJob.EntityFriendlyName; - this.Operation = serviceJob.Operation; - this.Status = serviceJob.Status; - this.Duration = serviceJob.Duration; - this.StartTime = serviceJob.StartTimestamp; - this.EndTime = serviceJob.EndTimestamp; - this.ErrorDetails = new List(); - - if (serviceJob.ErrorDetails != null) - { - foreach (Mgmt.ErrorInfo error in serviceJob.ErrorDetails) - { - this.ErrorDetails.Add(new ErrorInfo(error)); - } - } - - this.IsRetriable = this.IsCancellable = false; - - if (serviceJob.ActionsInfo != null) - { - for (int i = 0; i < serviceJob.ActionsInfo.Count; i++) - { - if (serviceJob.ActionsInfo[i] == Mgmt.JobSupportedAction.Cancellable) - this.IsCancellable = true; - else if (serviceJob.ActionsInfo[i] == Mgmt.JobSupportedAction.Retriable) - this.IsRetriable = true; - } - } - } - } - - public class ErrorInfo - { - public int ErrorCode { get; set; } - - public string ErrorMessage { get; set; } - - // Not including ErrorTitle because we are not filling anything in it. - - public List Recommendations { get; set; } - - public ErrorInfo(Mgmt.ErrorInfo serviceErrorInfo) - { - this.ErrorCode = serviceErrorInfo.ErrorCode; - this.ErrorMessage = serviceErrorInfo.ErrorString; - this.Recommendations = new List(); - foreach(string recommendation in serviceErrorInfo.Recommendations) - { - this.Recommendations.Add(recommendation); - } - } - } - - public class AzureBackupJobDetails : AzureBackupJob - { - public Dictionary Properties { get; set; } - - public List SubTasks { get; set; } - - public AzureBackupJobDetails(AzurePSBackupVault vault, Mgmt.JobProperties serviceJobProperties) - : base(vault, serviceJobProperties) - { - if (serviceJobProperties.PropertyBag != null) - this.Properties = new Dictionary(serviceJobProperties.PropertyBag); - else - this.Properties = new Dictionary(); - - this.SubTasks = new List(); - if(serviceJobProperties.TasksList != null) - { - foreach (Mgmt.JobTaskDetails serviceSubTask in serviceJobProperties.TasksList) - { - this.SubTasks.Add(new AzureBackupJobSubTask(serviceSubTask)); - } - } - } - } - - public class AzureBackupJobSubTask - { - public string Name { get; set; } - - public string Status { get; set; } - - // Not adding other fields because service is not filling them today. - - public AzureBackupJobSubTask(Mgmt.JobTaskDetails serviceTask) - { - this.Name = serviceTask.TaskId; - this.Status = serviceTask.Status; - } - } -} \ No newline at end of file diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/ListContainerQueryParameter.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/ListContainerQueryParameter.cs deleted file mode 100644 index 08de6d174ffe..000000000000 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/ListContainerQueryParameter.cs +++ /dev/null @@ -1,41 +0,0 @@ -// ---------------------------------------------------------------------------------- -// -// Copyright Microsoft Corporation -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// http://www.apache.org/licenses/LICENSE-2.0 -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// ---------------------------------------------------------------------------------- - -using Microsoft.Azure.Management.BackupServices.Models; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace Microsoft.Azure.Commands.AzureBackup.Models -{ - internal class ListContainerQueryParameter : ManagementBaseObject - { - /// - ///Containers information for registration - /// - public string ContainerTypeField { get; set; } - - /// - ///Containers status information - /// - public string ContainerStatusField { get; set; } - - /// - ///Containers status information - /// - public string ContainerFriendlyNameField { get; set; } - } -} diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/ProtectionPolicy.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/ProtectionPolicy.cs deleted file mode 100644 index 3553ccd653b2..000000000000 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/ProtectionPolicy.cs +++ /dev/null @@ -1,89 +0,0 @@ -// ---------------------------------------------------------------------------------- -// -// Copyright Microsoft Corporation -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// http://www.apache.org/licenses/LICENSE-2.0 -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// ---------------------------------------------------------------------------------- - -using Microsoft.Azure.Management.BackupServices.Models; -using System; -using System.Collections.Generic; - -namespace Microsoft.Azure.Commands.AzureBackup.Models -{ - /// - /// Represents ProtectionPolicy object - /// - public class AzureBackupProtectionPolicy : AzureBackupVaultContextObject - { - /// - /// InstanceId of the azurebackup object - /// - public string InstanceId { get; set; } - - /// - /// Name of the azurebackup object - /// - public string Name { get; set; } - - public string WorkloadType { get; set; } - - public string BackupType { get; set; } - - public string ScheduleType { get; set; } - - public List ScheduleRunDays { get; set; } - - public DateTime ScheduleRunTimes { get; set; } - - public string RetentionType { get; set; } - - public int RetentionDuration { get; set; } - - public AzureBackupProtectionPolicy() - { - } - - public AzureBackupProtectionPolicy(AzurePSBackupVault vault, ProtectionPolicyInfo sourcePolicy) - : base(vault) - { - InstanceId = sourcePolicy.InstanceId; - Name = sourcePolicy.Name; - WorkloadType = sourcePolicy.WorkloadType; - - BackupType = sourcePolicy.Schedule.BackupType; - ScheduleType = sourcePolicy.Schedule.ScheduleRun; - ScheduleRunTimes = ConvertScheduleRunTimes(sourcePolicy.Schedule.ScheduleRunTimes); - ScheduleRunDays = ConvertScheduleRunDays(sourcePolicy.Schedule.ScheduleRunDays); - - RetentionType = sourcePolicy.Schedule.RetentionPolicy.RetentionType.ToString(); - RetentionDuration = sourcePolicy.Schedule.RetentionPolicy.RetentionDuration; - } - - private List ConvertScheduleRunDays(IList weekDaysList) - { - List scheduelRunDays = new List(); - - foreach(object item in weekDaysList) - { - scheduelRunDays.Add(item.ToString()); - } - - return scheduelRunDays; - } - - private DateTime ConvertScheduleRunTimes(IList scheduleRunTimeList) - { - IEnumerator scheduleEnumerator = scheduleRunTimeList.GetEnumerator(); - scheduleEnumerator.MoveNext(); - return scheduleEnumerator.Current; - } - } -} diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/RegisterContainer/RegisterContainer.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/RegisterContainer/RegisterContainer.cs deleted file mode 100644 index 398e51f55688..000000000000 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/RegisterContainer/RegisterContainer.cs +++ /dev/null @@ -1,66 +0,0 @@ -// ---------------------------------------------------------------------------------- -// -// Copyright Microsoft Corporation -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// http://www.apache.org/licenses/LICENSE-2.0 -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// ---------------------------------------------------------------------------------- - -using Microsoft.Azure.Management.BackupServices.Models; -using System; -using System.Collections.Generic; -namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets -{ - /// - /// Represents ProtectionPolicy object - /// - public class AzureBackupRegisterContainer : AzureBackupVaultContextObject - { - /// - /// InstanceId of the azurebackup object - /// - public string InstanceId { get; set; } - - /// - /// Name of the azurebackup object - /// - public string Name { get; set; } - - public string WorkloadType { get; set; } - - public string BackupType { get; set; } - - public DateTime ScheduleStartTime { get; set; } - - public IList ScheduleRunTimes { get; set; } - - public string RetentionType { get; set; } - - public int RetentionDuration { get; set; } - - public AzureBackupRegisterContainer() - { - } - - public AzureBackupRegisterContainer(string resourceGroupName, string resourceName, ProtectionPolicyInfo sourcePolicy) - : base(resourceGroupName, resourceName, "") - { - InstanceId = sourcePolicy.InstanceId; - Name = sourcePolicy.Name; - WorkloadType = sourcePolicy.WorkloadType; - - BackupType = sourcePolicy.Schedule.BackupType; - ScheduleStartTime = sourcePolicy.Schedule.ScheduleStartTime; - ScheduleRunTimes = sourcePolicy.Schedule.ScheduleRunTimes; - - RetentionType = sourcePolicy.Schedule.RetentionPolicy.RetentionType.ToString(); - RetentionDuration = sourcePolicy.Schedule.RetentionPolicy.RetentionDuration; - } - } -} diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Resources/Microsoft.Azure.Management.BackupServicesManagement.dll b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Resources/Microsoft.Azure.Management.BackupServicesManagement.dll new file mode 100644 index 0000000000000000000000000000000000000000..11ab9c84a47a391bbf3d9b2cc7279c789850f645 GIT binary patch literal 56832 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 J-~WFa_}?w2H(LMz literal 0 HcmV?d00001 diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Resources/Microsoft.WindowsAzure.Management.BackupServicesManagment.dll b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Resources/Microsoft.WindowsAzure.Management.BackupServicesManagment.dll deleted file mode 100644 index 3d16ad367de06d36c1539691f208cdf4931229f4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 152576 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 From 0aa198056262c573d3431e5da247e54c534254e7 Mon Sep 17 00:00:00 2001 From: dragonfly91 Date: Thu, 2 Jul 2015 14:22:26 +0530 Subject: [PATCH 127/155] 1. Removed unnecessary comments 2. Removed unused usings 3. Refactored code formatting. --- .../AzureBackupClientAdapter.cs | 16 +-- .../AzureBackupClientAdapter/VaultAdapter.cs | 21 +--- .../AzureBackupCmdletBase.cs | 71 ++---------- .../AzureBackupCmdletHelpMessage.cs | 56 --------- .../AzureBackupVaultCmdletBase.cs | 12 +- .../Cmdlets/Vault/GetAzureBackupVault.cs | 12 +- .../Cmdlets/Vault/NewAzureBackupVault.cs | 13 --- .../Cmdlets/Vault/RemoveAzureBackupVault.cs | 15 --- .../Cmdlets/Vault/SetAzureBackupVault.cs | 13 --- .../Vault/SetAzureBackupVaultStorageType.cs | 5 - .../GetAzureBackupVaultCredentials.cs | 9 +- .../Helpers/VaultHelpers.cs | 13 +-- .../Commands.AzureBackup/Library/CertUtils.cs | 4 - .../Models/AzureBackupBaseObjects.cs | 94 +--------------- .../Models/AzureBackupEnums.cs | 106 ------------------ .../Models/AzurePSBackupVault.cs | 6 - .../Models/VaultCredentials.cs | 23 ++-- 17 files changed, 42 insertions(+), 447 deletions(-) diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupClientAdapter/AzureBackupClientAdapter.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupClientAdapter/AzureBackupClientAdapter.cs index 7640563f086b..13879cdb935c 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupClientAdapter/AzureBackupClientAdapter.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupClientAdapter/AzureBackupClientAdapter.cs @@ -12,20 +12,12 @@ // limitations under the License. // ---------------------------------------------------------------------------------- -using System; -using System.Management.Automation; -using System.Collections.Generic; -using System.Xml; -using Microsoft.WindowsAzure.Commands.Utilities.Common; using Microsoft.Azure.Common.Authentication; -using Microsoft.Azure.Common.Authentication.Models; -using System.Threading; -using Hyak.Common; -using Microsoft.Azure.Commands.AzureBackup.Properties; -using System.Net; -using Microsoft.WindowsAzure.Management.Scheduler; using Microsoft.Azure.Management.BackupServices; using Microsoft.Azure.Management.BackupServices.Models; +using System; +using System.Net; +using System.Threading; namespace Microsoft.Azure.Commands.AzureBackup.ClientAdapter { @@ -91,7 +83,7 @@ public AzureBackupClientAdapter(SubscriptionCloudCredentials creds, Uri baseUri, resourceName = rName; RefreshClientRequestId(); - + // Temp code to be able to test internal env. ServicePointManager.ServerCertificateValidationCallback = delegate { return true; }; } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupClientAdapter/VaultAdapter.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupClientAdapter/VaultAdapter.cs index b9e1ccb75354..d0ecc0ef3ecd 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupClientAdapter/VaultAdapter.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupClientAdapter/VaultAdapter.cs @@ -12,20 +12,9 @@ // limitations under the License. // ---------------------------------------------------------------------------------- +using Microsoft.Azure.Management.BackupServices.Models; using System; -using System.Management.Automation; using System.Collections.Generic; -using System.Xml; -using Microsoft.WindowsAzure.Commands.Utilities.Common; -using Microsoft.Azure.Common.Authentication; -using Microsoft.Azure.Common.Authentication.Models; -using System.Threading; -using Hyak.Common; -using Microsoft.Azure.Commands.AzureBackup.Properties; -using System.Net; -using Microsoft.WindowsAzure.Management.Scheduler; -using Microsoft.Azure.Management.BackupServices; -using Microsoft.Azure.Management.BackupServices.Models; namespace Microsoft.Azure.Commands.AzureBackup.ClientAdapter { @@ -70,7 +59,7 @@ public void UpdateStorageType(string storageType) StorageModelType = storageType, }, }; - + AzureBackupClient.Vault.UpdateStorageTypeAsync(updateVaultStorageTypeRequest, GetCustomRequestHeaders(), CmdletCancellationToken).Wait(); } @@ -86,10 +75,8 @@ public string GetStorageTypeDetails(string resourceGroupName, string vaultName) var response = AzureBackupClient.Vault.GetResourceStorageConfigAsync(resourceGroupName, vaultName, GetCustomRequestHeaders(), CmdletCancellationToken).Result; storageType = (response != null) ? response.StorageDetails.StorageType : null; } - catch(Exception) - { - } - + catch (Exception) { } + return storageType; } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupCmdletBase.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupCmdletBase.cs index 8240e88beb94..68e8ea0d1955 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupCmdletBase.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupCmdletBase.cs @@ -12,22 +12,16 @@ // limitations under the License. // ---------------------------------------------------------------------------------- -using System; -using System.Management.Automation; -using System.Collections.Generic; -using System.Xml; -using Microsoft.WindowsAzure.Commands.Utilities.Common; -using Microsoft.Azure.Common.Authentication; -using Microsoft.Azure.Common.Authentication.Models; -using System.Threading; using Hyak.Common; +using Microsoft.Azure.Commands.AzureBackup.ClientAdapter; using Microsoft.Azure.Commands.AzureBackup.Properties; -using System.Net; +using Microsoft.Azure.Common.Authentication; +using Microsoft.Azure.Common.Authentication.Models; +using Microsoft.WindowsAzure.Commands.Utilities.Common; using Microsoft.WindowsAzure.Management.Scheduler; -using Microsoft.Azure.Management.BackupServices; -using Microsoft.Azure.Management.BackupServices.Models; -using Microsoft.Azure.Commands.AzureBackup.ClientAdapter; -using Microsoft.Azure.Commands.AzureBackup.Models; +using System; +using System.Management.Automation; +using System.Net; using CmdletModel = Microsoft.Azure.Commands.AzureBackup.Models; namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets @@ -38,7 +32,7 @@ public abstract class AzureBackupCmdletBase : AzurePSCmdlet /// Azure backup client. /// private AzureBackupClientAdapter azureBackupClientAdapter; - + /// /// Get Azure backup client. /// @@ -141,55 +135,6 @@ private void HandleException(Exception exception) WriteError(errorRecord); } } - - ///// - ///// Get status of long running operation - ///// - ///// - ///// - //internal OperationResultResponse GetOperationStatus(Guid operationId) - //{ - // return AzureBackupClient.GetOperationStatus(operationId.ToString()); - //} - - //private const int defaultOperationStatusRetryTimeInMilliSec = 10 * 1000; // 10 sec - - ///// - ///// Track completion of long running operation - ///// - ///// - ///// In Millisec - ///// - //internal OperationResultResponse TrackOperation(Guid operationId, int checkFrequency = defaultOperationStatusRetryTimeInMilliSec) - //{ - // OperationResultResponse response = null; - - // while (true) - // { - // response = GetOperationStatus(operationId); - - // if (response.OperationStatus == AzureBackupOperationStatus.Completed.ToString()) - // { - // break; - // } - - // Thread.Sleep(checkFrequency); - // } - - // return response; - //} - - //internal IList GetCreatedJobs(AzurePSBackupVault vault, IList jobIds) - //{ - // IList jobs = new List(); - - // foreach(string jobId in jobIds) - // { - // jobs.Add(new AzureBackupJob(vault, AzureBackupClient.GetJobDetails(jobId).Job)); - // } - - // return jobs; - //} } } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupCmdletHelpMessage.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupCmdletHelpMessage.cs index f42ef3b4586c..a3c522538fd1 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupCmdletHelpMessage.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupCmdletHelpMessage.cs @@ -17,67 +17,11 @@ namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets internal static class AzureBackupCmdletHelpMessage { public const string Vault = "The vault details"; - //public const string PolicyName = "The protection policy name."; public const string ResourceGroupName = "The ResourceGroup name."; public const string ResourceName = "The Resource name."; public const string Location = "The resource location."; public const string Sku = "The SKU of the backup vault instance."; - //public const string ResourceTags = "A hash table which represents resource tags."; public const string TargetLocation = "The directory where the credentials file will be saved. This must be an absolute path."; - //public const string ManagedResourceName = "The resource name of the resource being managed by the Azure Backup service (ex: resource name of the VM)."; - //public const string ContainerId = "The container ID."; - //public const string ContainerRegistrationStatus = "The container registration status."; - //public const string ContainerType = "The container type."; - - //public const string JobFilterJobIdHelpMessage = "The job ID to filter jobs"; - //public const string JobFilterJobHelpMessage = "The job for filtering"; - //public const string JobFilterStartTimeHelpMessage = "The start time of query range"; - //public const string JobFilterEndTimeHelpMessage = "The end time of query range"; - //public const string JobFilterOperationHelpMessage = "The operation for filtering jos"; - //public const string JobFilterStatusHelpMessage = "The status for filtering jobs"; - //public const string JobFitlerVaultHelpMessage = "The vault of which jobs have to be filtered"; - //public const string JobFilterTypeHelpMessage = "The type of workload whose jobs have to be filtered"; - - //public const string JobDetailsFilterJobIdHelpMessage = "The job ID to get details"; - //public const string JobDetailsFilterVaultHelpMessage = "The vault of which job details should be fetched"; - //public const string JobDetailsFilterJobHelpMessage = "The job whose full details should be fetched"; - - //public const string StopJobFilterJobIdHelpMessage = "The job ID to stop job"; - //public const string StopJobFilterVaultHelpMessage = "The vault of which a job has to be stopped"; - //public const string StopJobFilterJobHelpMessage = "The job which should be stopped"; - - //public const string WaitJobFilterJobIdHelpMessage = "The job ID to stop job"; - //public const string WaitJobFilterVaultHelpMessage = "The vault of which a job has to be stopped"; - //public const string WaitJobFilterJobHelpMessage = "The job which should be stopped"; - //public const string WaitJobFilterTimeoutHelpMessage = "Maximum number of seconds for which cmdlet should wait before job(s) complete running."; - - //public const string VirtualMachine = "Virtual Machine."; - //public const string ManagedResourceGroupName = "The resource group name of the resource being managed by the Azure Backup service (ex: resource group name of the VM)."; - //public const string ProtectionStatus = "Protection Status of the azure backup item."; - //public const string AzureBackUpItem = "Azure BackUp Item."; - //public const string RecoveryPointId = "Recovery Point Id."; public const string StorageType = "The vault back-end storage type."; - //public const string Type = "Type of Azure Backup Item."; - //public const string Status = "Status of Azure Backup Item"; - //public const string AzureBackupContainer = "Azure Backup Container for Azure Backup Item."; - //public const string AzureBackupItem = "Azure Backup Item for enabling protection"; - //public const string RemoveProtectionOption = "Remove Protection Option"; - //public const string Reason = "Reson for removing protection"; - //public const string Comments = "Comments for for removing protection"; - //public const string WorkloadType = "Workload type for which the policy is defined."; - //public const string BackupType = "Type of backup."; - //public const string DailyScheduleType = "Switch parameter for daily backup schedule."; - //public const string WeeklyScheduleType = "Switch parameter for weekly backup schedule."; - //public const string ScheduleRunDays = "Days of week for running backup, required for weekly schedule."; - //public const string ScheduleRunTimes = "Times of day in UTC for running backup."; - //public const string RetentionType = "Unit of retention for the recovery point."; - //public const string RententionDuration = "Duration of retention for the recovery point in units specified by RetentionType."; - //public const string PolicyNewName = "Policy new name"; - //public const string AzureBackupPolicy = "Azure Backup protection policy"; - //public const string VMName = "Azure VM name to be register"; - //public const string ServiceName = "Cloud service name of Azure VM to be register"; - //public const string RGName = "Resource Group name of Azure VM to be register"; - //public const string AzureBackupContainerToUnregister = "Azure Backup Container tobe unregister."; - } } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupVaultCmdletBase.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupVaultCmdletBase.cs index c383b02fdc2b..9ceac2e2fe68 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupVaultCmdletBase.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupVaultCmdletBase.cs @@ -12,18 +12,8 @@ // limitations under the License. // ---------------------------------------------------------------------------------- -using System; -using System.Management.Automation; -using System.Collections.Generic; -using System.Xml; -using Microsoft.WindowsAzure.Commands.Utilities.Common; -using Microsoft.Azure.Common.Authentication; -using Microsoft.Azure.Common.Authentication.Models; -using System.Threading; -using Hyak.Common; -using Microsoft.Azure.Commands.AzureBackup.Properties; -using System.Net; using Microsoft.Azure.Commands.AzureBackup.Models; +using System.Management.Automation; namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets { diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/GetAzureBackupVault.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/GetAzureBackupVault.cs index 59cc803aecf3..3ed8b3e6a944 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/GetAzureBackupVault.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/GetAzureBackupVault.cs @@ -15,20 +15,10 @@ using Microsoft.Azure.Commands.AzureBackup.Helpers; using Microsoft.Azure.Commands.AzureBackup.Models; using Microsoft.Azure.Management.BackupServices.Models; -using Newtonsoft.Json; using System; -using System.Collections; using System.Collections.Generic; -using System.Globalization; -using System.IO; using System.Linq; using System.Management.Automation; -using System.Net; -using System.Runtime.Serialization; -using System.Security.Cryptography.X509Certificates; -using System.Text; -using System.Threading.Tasks; -using System.Xml; namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets { @@ -69,7 +59,7 @@ public override void ExecuteCmdlet() if (Name != null) { - backupVaults = backupVaults.Where(x => x.Name.Equals(Name, StringComparison.InvariantCultureIgnoreCase)); + backupVaults = backupVaults.Where(x => x.Name.Equals(Name, StringComparison.InvariantCultureIgnoreCase)); } WriteObject(GetCmdletVaults(backupVaults), true); } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/NewAzureBackupVault.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/NewAzureBackupVault.cs index de97d9dd4807..70fa61530ed1 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/NewAzureBackupVault.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/NewAzureBackupVault.cs @@ -14,21 +14,8 @@ using Microsoft.Azure.Commands.AzureBackup.Helpers; using Microsoft.Azure.Commands.AzureBackup.Models; -using Microsoft.Azure.Management.BackupServices.Models; -using Newtonsoft.Json; using System; -using System.Collections; -using System.Collections.Generic; -using System.Globalization; -using System.IO; -using System.Linq; using System.Management.Automation; -using System.Net; -using System.Runtime.Serialization; -using System.Security.Cryptography.X509Certificates; -using System.Text; -using System.Threading.Tasks; -using System.Xml; namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets { diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/RemoveAzureBackupVault.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/RemoveAzureBackupVault.cs index 11f3b19ed347..b46c01297f59 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/RemoveAzureBackupVault.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/RemoveAzureBackupVault.cs @@ -12,22 +12,7 @@ // limitations under the License. // ---------------------------------------------------------------------------------- -using Microsoft.Azure.Commands.AzureBackup.Helpers; -using Microsoft.Azure.Management.BackupServices.Models; -using Newtonsoft.Json; -using System; -using System.Collections; -using System.Collections.Generic; -using System.Globalization; -using System.IO; -using System.Linq; using System.Management.Automation; -using System.Net; -using System.Runtime.Serialization; -using System.Security.Cryptography.X509Certificates; -using System.Text; -using System.Threading.Tasks; -using System.Xml; namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets { diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/SetAzureBackupVault.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/SetAzureBackupVault.cs index a325fcceb084..2f8453a8e7ce 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/SetAzureBackupVault.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/SetAzureBackupVault.cs @@ -14,21 +14,8 @@ using Microsoft.Azure.Commands.AzureBackup.Helpers; using Microsoft.Azure.Commands.AzureBackup.Models; -using Microsoft.Azure.Management.BackupServices.Models; -using Newtonsoft.Json; using System; -using System.Collections; -using System.Collections.Generic; -using System.Globalization; -using System.IO; -using System.Linq; using System.Management.Automation; -using System.Net; -using System.Runtime.Serialization; -using System.Security.Cryptography.X509Certificates; -using System.Text; -using System.Threading.Tasks; -using System.Xml; using CmdletModel = Microsoft.Azure.Commands.AzureBackup.Models; namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/SetAzureBackupVaultStorageType.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/SetAzureBackupVaultStorageType.cs index c0f8da6fac4c..3553d084acca 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/SetAzureBackupVaultStorageType.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/SetAzureBackupVaultStorageType.cs @@ -13,13 +13,8 @@ // ---------------------------------------------------------------------------------- using Microsoft.Azure.Commands.AzureBackup.Models; -using Microsoft.Azure.Management.BackupServices.Models; using System; -using System.Collections.Generic; -using System.Linq; using System.Management.Automation; -using System.Text; -using System.Threading.Tasks; namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets { diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/VaultCredentials/GetAzureBackupVaultCredentials.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/VaultCredentials/GetAzureBackupVaultCredentials.cs index a62341720469..a0d3cdf7c47a 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/VaultCredentials/GetAzureBackupVaultCredentials.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/VaultCredentials/GetAzureBackupVaultCredentials.cs @@ -15,18 +15,13 @@ using Microsoft.Azure.Commands.AzureBackup.Library; using Microsoft.Azure.Commands.AzureBackup.Models; using Microsoft.Azure.Management.BackupServices.Models; -using Newtonsoft.Json; using System; -using System.Collections.Generic; using System.Globalization; using System.IO; -using System.Linq; using System.Management.Automation; -using System.Net; using System.Runtime.Serialization; using System.Security.Cryptography.X509Certificates; using System.Text; -using System.Threading.Tasks; using System.Xml; namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets @@ -84,6 +79,10 @@ public override void ExecuteCmdlet() // generate vault credentials string vaultCredsFileContent = GenerateVaultCreds(cert, subscriptionId, resourceType, acsNamespace); + + // NOTE: One of the scenarios for this cmdlet is to generate a file which will be an input to DPM servers. + // We found a bug in the DPM UI which is looking for a particular namespace in the input file. + // The below is a hack to circumvent this issue and this would be removed once the bug can be fixed. vaultCredsFileContent = vaultCredsFileContent.Replace("Microsoft.Azure.Commands.AzureBackup.Models", "Microsoft.Azure.Portal.RecoveryServices.Models.Common"); diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Helpers/VaultHelpers.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Helpers/VaultHelpers.cs index 19cb436a0f0b..9859cefbb0b9 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Helpers/VaultHelpers.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Helpers/VaultHelpers.cs @@ -13,22 +13,11 @@ // ---------------------------------------------------------------------------------- using System; -using System.Management.Automation; -using System.Collections.Generic; -using System.Xml; -using Microsoft.WindowsAzure.Commands.Utilities.Common; -using Microsoft.Azure.Common.Authentication; -using Microsoft.Azure.Common.Authentication.Models; -using System.Threading; -using Hyak.Common; -using Microsoft.Azure.Commands.AzureBackup.Properties; -using System.Net; using ClientModel = Microsoft.Azure.Management.BackupServices.Models; using CmdletModel = Microsoft.Azure.Commands.AzureBackup.Models; -using System.Linq; namespace Microsoft.Azure.Commands.AzureBackup.Helpers -{ +{ public static class VaultHelpers { /// diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Library/CertUtils.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Library/CertUtils.cs index 26a42dcc922d..0ed7a5d87e4a 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Library/CertUtils.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Library/CertUtils.cs @@ -17,12 +17,8 @@ using Security.Cryptography; using Security.Cryptography.X509Certificates; using System; -using System.Collections.Generic; -using System.Linq; using System.Security.Cryptography; using System.Security.Cryptography.X509Certificates; -using System.Text; -using System.Threading.Tasks; namespace Microsoft.Azure.Commands.AzureBackup.Library { diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupBaseObjects.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupBaseObjects.cs index f3df03069b6c..f427757a46b8 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupBaseObjects.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupBaseObjects.cs @@ -12,8 +12,6 @@ // limitations under the License. // ---------------------------------------------------------------------------------- -using Microsoft.Azure.Management.BackupServices.Models; - namespace Microsoft.Azure.Commands.AzureBackup.Models { public class AzureBackupVaultContextObject @@ -33,10 +31,8 @@ public class AzureBackupVaultContextObject /// public string Location { get; set; } - public AzureBackupVaultContextObject() - { - } - + public AzureBackupVaultContextObject() { } + public AzureBackupVaultContextObject(string resourceGroupName, string resourceName, string locationName) { ResourceGroupName = resourceGroupName; @@ -44,89 +40,7 @@ public AzureBackupVaultContextObject(string resourceGroupName, string resourceNa Location = locationName; } - public AzureBackupVaultContextObject(AzurePSBackupVault vault) : this(vault.ResourceGroupName, vault.Name, vault.Region) - { - } + public AzureBackupVaultContextObject(AzurePSBackupVault vault) + : this(vault.ResourceGroupName, vault.Name, vault.Region) { } } - - ///// - ///// This class encapsulates all the properties of the container object - ///// that are needed by higher level objects (data source, recovery point etc). - ///// - //public class AzureBackupContainerContextObject : AzureBackupVaultContextObject - //{ - // /// - // /// Type of the Azure Backup container - // /// - // public string ContainerType { get; set; } - - // /// - // /// Unique name of the Azure Backup Container - // /// - // public string ContainerUniqueName { get; set; } - - // public AzureBackupContainerContextObject() - // : base() - // { - // } - - // public AzureBackupContainerContextObject(AzureBackupContainerContextObject azureBackupContainerContextObject) - // : base(azureBackupContainerContextObject.ResourceGroupName, azureBackupContainerContextObject.ResourceName, azureBackupContainerContextObject.Location) - // { - // ContainerType = azureBackupContainerContextObject.ContainerType; - // ContainerUniqueName = azureBackupContainerContextObject.ContainerUniqueName; - // } - // public AzureBackupContainerContextObject(AzureBackupContainer azureBackupContainer) - // : base(azureBackupContainer.ResourceGroupName, azureBackupContainer.ResourceName, azureBackupContainer.Location) - // { - // ContainerType = azureBackupContainer.ContainerType; - // ContainerUniqueName = azureBackupContainer.ContainerUniqueName; - // } - - // public AzureBackupContainerContextObject(AzurePSBackupVault vault, ContainerInfo containerInfo) - // : base(vault.ResourceGroupName, vault.Name, vault.Region) - // { - // ContainerType = containerInfo.ContainerType; - // ContainerUniqueName = containerInfo.Name; - // } - //} - - //public class AzureBackupItemContextObject : AzureBackupContainerContextObject - //{ - // /// - // /// DataSourceId of Azure Backup Item - // /// - // public string DataSourceId { get; set; } - - // /// - // /// DataSourceId of Azure Backup Item - // /// - // public string Type { get; set; } - - // public AzureBackupItemContextObject() - // : base() - // { - // } - - // public AzureBackupItemContextObject(AzureBackupItemContextObject azureBackupItemContextObject) - // : base(azureBackupItemContextObject) - // { - // DataSourceId = azureBackupItemContextObject.DataSourceId; - // Type = azureBackupItemContextObject.Type; - // } - - // public AzureBackupItemContextObject(DataSourceInfo item, AzureBackupContainer azureBackupContainer) - // : base(azureBackupContainer) - // { - // DataSourceId = item.InstanceId; - // Type = item.Type; - // } - - // public AzureBackupItemContextObject(ProtectableObjectInfo item, AzureBackupContainer azureBackupContainer) - // : base(azureBackupContainer) - // { - // DataSourceId = "-1"; - // Type = item.Type; - // } - //} } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupEnums.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupEnums.cs index 938a48c76ff5..79cc0f9b20c0 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupEnums.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzureBackupEnums.cs @@ -12,117 +12,11 @@ // limitations under the License. // ---------------------------------------------------------------------------------- -using Microsoft.Azure.Management.BackupServices.Models; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - namespace Microsoft.Azure.Commands.AzureBackup.Models { - //public enum AzureBackupContainerTypeInput - //{ - // AzureVirtualMachine = 1, - //} - - //public enum AzureBackupContainerStatusInput - //{ - // Registering = 1, - // Registered, - //} - - //public enum AzureBackupContainerType - //{ - // Invalid = 0, - - // Unknown, - - // // used by fabric adapter to populate discovered VMs - // IaasVMContainer, - - // // used by fabric adapter to populate discovered services - // // VMs are child containers of services they belong to - // IaasVMServiceContainer - //} - - //public enum DataSourceType - //{ - // Invalid = 0, - - // VM - //} - - //public enum AzureBackupContainerRegistrationStatus - //{ - // Invalid = 0, - - // Unknown, - - // NotRegistered, - - // Registered, - - // Registering, - //} - - //internal enum AzureBackupOperationStatus - //{ - // Invalid = 0, - - // InProgress, - - // Completed - //} - - //internal enum AzureBackupOperationResult - //{ - // Invalid = 0, - - // Cancelled, - - // Succeeded, - - // Failed, - - // PartialSuccess - //} - - //public enum AzureBackupOperationErrorCode - //{ - // BMSUserErrorObjectLocked = 390026, - // DiscoveryInProgress = 410002, - //} - public enum AzureBackupVaultStorageType { GeoRedundant = 1, LocallyRedundant, } - - //public enum ScheduleType - //{ - // Invalid = 0, - // Daily = 1, - // Weekly = 2 - //} - - //public enum RetentionType - //{ - // Invalid = 0, - // Days = 1, - // Weeks = 2 - //} - - //public enum WorkloadType - //{ - // Invalid = 0, - // VM = 1 - //} - - //public enum BackupType - //{ - // Invalid = 0, - // Full = 1 - //} } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzurePSBackupVault.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzurePSBackupVault.cs index 4df37e0e4e25..3a8d43db0226 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzurePSBackupVault.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzurePSBackupVault.cs @@ -12,13 +12,7 @@ // limitations under the License. // ---------------------------------------------------------------------------------- -using Microsoft.Azure.Management.BackupServices.Models; using System; -using System.Collections; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; namespace Microsoft.Azure.Commands.AzureBackup.Models { diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/VaultCredentials.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/VaultCredentials.cs index 7c5eb0885b62..54b533565d1e 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/VaultCredentials.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/VaultCredentials.cs @@ -1,10 +1,19 @@ -using System; -using System.Collections.Generic; +// ---------------------------------------------------------------------------------- +// +// Copyright Microsoft Corporation +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// ---------------------------------------------------------------------------------- + using System.Diagnostics.CodeAnalysis; -using System.Linq; using System.Runtime.Serialization; -using System.Text; -using System.Threading.Tasks; namespace Microsoft.Azure.Commands.AzureBackup.Models { @@ -93,9 +102,7 @@ internal class BackupVaultCreds : VaultCreds /// /// Initializes a new instance of the BackupVaultCreds class /// - public BackupVaultCreds() - { - } + public BackupVaultCreds() { } /// /// Initializes a new instance of the BackupVaultCreds class From aa9b17ccc6dd89d054444e60881c6abafd2d67b9 Mon Sep 17 00:00:00 2001 From: dragonfly91 Date: Thu, 2 Jul 2015 14:26:42 +0530 Subject: [PATCH 128/155] PS Test 1. Removed unnecessary comments 2. Removed unused usings 3. Refactored code formatting. --- .../ScenarioTests/AzureBackupTestBase.cs | 12 ++++++------ .../ScenarioTests/AzureBackupVaultTests.cs | 7 ------- 2 files changed, 6 insertions(+), 13 deletions(-) diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupTestBase.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupTestBase.cs index d8cafcf029e9..b08ab4972c30 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupTestBase.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupTestBase.cs @@ -12,17 +12,17 @@ // limitations under the License. // ---------------------------------------------------------------------------------- +using Microsoft.Azure.Common.Authentication; +using Microsoft.Azure.Management.BackupServices; +using Microsoft.Azure.Test; +using Microsoft.Azure.Test.HttpRecorder; +using Microsoft.WindowsAzure.Commands.ScenarioTest; using System; using System.Configuration; using System.Net; using System.Net.Http; using System.Net.Security; using System.Reflection; -using Microsoft.Azure.Common.Authentication; -using Microsoft.Azure.Management.BackupServices; -using Microsoft.Azure.Test; -using Microsoft.Azure.Test.HttpRecorder; -using Microsoft.WindowsAzure.Commands.ScenarioTest; namespace Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests { @@ -30,7 +30,7 @@ public abstract class AzureBackupTestsBase { private CSMTestEnvironmentFactory csmTestFactory; private EnvironmentSetupHelper helper; - + public BackupServicesManagementClient BackupServicesMgmtClient { get; private set; } protected AzureBackupTestsBase() diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupVaultTests.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupVaultTests.cs index 4b8e75ab16da..fd99a904178e 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupVaultTests.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupVaultTests.cs @@ -12,11 +12,6 @@ // limitations under the License. // ---------------------------------------------------------------------------------- -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; using Xunit; namespace Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests @@ -32,8 +27,6 @@ public void GetAzureBackupVaultCredentialsTests() [Fact] public void SetAzureBackupVaultStorageTypeTests() { - //this.RunPowerShellTest("Test-SetAzureBackupVaultStorageTypeWithFreshResourceDoesNotThrowException"); - this.RunPowerShellTest("Test-SetAzureBackupVaultStorageTypeWithLockedResourceThrowsException"); } } From fe6780c7b748817a4c2b41e6e5fd39d5bfd55ef4 Mon Sep 17 00:00:00 2001 From: dragonfly91 Date: Thu, 2 Jul 2015 15:21:42 +0530 Subject: [PATCH 129/155] PS Tests 1. Updated the session records. 2. Removed unused tests. --- .../Commands.AzureBackup.Test.csproj | 1 + .../ScenarioTests/AzureBackupVaultTests.ps1 | 19 -- .../GetAzureBackupVaultCredentialsTests.json | 50 ++-- .../SetAzureBackupVaultStorageTypeTests.json | 269 ++++++++++++++++++ 4 files changed, 295 insertions(+), 44 deletions(-) create mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupVaultTests/SetAzureBackupVaultStorageTypeTests.json diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/Commands.AzureBackup.Test.csproj b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/Commands.AzureBackup.Test.csproj index d45f634e838d..3ab56e7184b0 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/Commands.AzureBackup.Test.csproj +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/Commands.AzureBackup.Test.csproj @@ -156,6 +156,7 @@ Always + diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupVaultTests.ps1 b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupVaultTests.ps1 index 6a890c0ab233..b469e1305f68 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupVaultTests.ps1 +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupVaultTests.ps1 @@ -26,25 +26,6 @@ function Test-GetAzureBackupVaultCredentialsReturnsFileNameAndDownloadsCert Assert-True {{ Test-Path $certFileFullPath }} } -function Test-SetAzureBackupVaultStorageTypeWithFreshResourceDoesNotThrowException -{ - $freshVaultName = "storagetestrn"; - - New-AzureBackupVault -ResourceGroupName $ResourceGroupName -Name $freshVaultName -Region $Location - - $freshVault = Get-AzureBackupVault -Name $freshVaultName; - - Set-AzureBackupVaultStorageType $freshVault -Type GeoRedundant - - Set-AzureBackupVaultStorageType $freshVault -Type LocallyRedundant - - Set-AzureBackupVaultStorageType $freshVault -Type GeoRedundant - - Set-AzureBackupVaultStorageType $freshVault -Type LocallyRedundant - - Remove-AzureBackupVault -vault $freshVault -} - function Test-SetAzureBackupVaultStorageTypeWithLockedResourceThrowsException { $vault = Get-AzureBackupVault -Name $ResourceName; diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupVaultTests/GetAzureBackupVaultCredentialsTests.json b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupVaultTests/GetAzureBackupVaultCredentialsTests.json index ee0e24d33742..929ff62a41ba 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupVaultTests/GetAzureBackupVaultCredentialsTests.json +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupVaultTests/GetAzureBackupVaultCredentialsTests.json @@ -10,16 +10,16 @@ "en-us" ], "x-ms-client-request-id": [ - "63831bb9-3e67-4beb-b001-056e728a94f1-2015-07-01 19:30:45Z-PS" + "ede7470a-27bb-43bc-a67a-4dc39ff35deb-2015-07-02 09:47:13Z-PS" ], "User-Agent": [ "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" ] }, - "ResponseBody": "{\r\n \"value\": [\r\n {\r\n \"id\": \"/subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn\",\r\n \"name\": \"backuprn\",\r\n \"type\": \"Microsoft.Backupseadev01/BackupVault\",\r\n \"location\": \"westus\",\r\n \"tags\": {\r\n \"department\": \"finance\"\r\n }\r\n },\r\n {\r\n \"id\": \"/subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/endtoendrn\",\r\n \"name\": \"endtoendrn\",\r\n \"type\": \"Microsoft.Backupseadev01/BackupVault\",\r\n \"location\": \"westus\",\r\n \"tags\": {}\r\n },\r\n {\r\n \"id\": \"/subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/storagetestrn\",\r\n \"name\": \"storagetestrn\",\r\n \"type\": \"Microsoft.Backupseadev01/BackupVault\",\r\n \"location\": \"westus\",\r\n \"tags\": {}\r\n },\r\n {\r\n \"id\": \"/subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/storagetestrn1\",\r\n \"name\": \"storagetestrn1\",\r\n \"type\": \"Microsoft.Backupseadev01/BackupVault\",\r\n \"location\": \"westus\",\r\n \"tags\": {}\r\n },\r\n {\r\n \"id\": \"/subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/storagetestrn2\",\r\n \"name\": \"storagetestrn2\",\r\n \"type\": \"Microsoft.Backupseadev01/BackupVault\",\r\n \"location\": \"westus\",\r\n \"tags\": {}\r\n },\r\n {\r\n \"id\": \"/subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/trialrn\",\r\n \"name\": \"trialrn\",\r\n \"type\": \"Microsoft.Backupseadev01/BackupVault\",\r\n \"location\": \"westus\",\r\n \"tags\": {}\r\n },\r\n {\r\n \"id\": \"/subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/mkheranivault/providers/Microsoft.Backupseadev01/BackupVault/mkheranivault\",\r\n \"name\": \"mkheranivault\",\r\n \"type\": \"Microsoft.Backupseadev01/BackupVault\",\r\n \"location\": \"westus\",\r\n \"tags\": {}\r\n },\r\n {\r\n \"id\": \"/subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/pragrawa-rg2/providers/Microsoft.Backupseadev01/BackupVault/pragrawa-rn2\",\r\n \"name\": \"pragrawa-rn2\",\r\n \"type\": \"Microsoft.Backupseadev01/BackupVault\",\r\n \"location\": \"westus\",\r\n \"tags\": {\r\n \"department\": \"finance\"\r\n }\r\n },\r\n {\r\n \"id\": \"/subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/swatirg1/providers/Microsoft.Backupseadev01/BackupVault/swatirn1\",\r\n \"name\": \"swatirn1\",\r\n \"type\": \"Microsoft.Backupseadev01/BackupVault\",\r\n \"location\": \"westus\",\r\n \"tags\": {\r\n \"department\": \"finance\"\r\n }\r\n },\r\n {\r\n \"id\": \"/subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/swatirg2/providers/Microsoft.Backupseadev01/BackupVault/swatirn2\",\r\n \"name\": \"swatirn2\",\r\n \"type\": \"Microsoft.Backupseadev01/BackupVault\",\r\n \"location\": \"westus\",\r\n \"tags\": {\r\n \"department\": \"finance\"\r\n }\r\n },\r\n {\r\n \"id\": \"/subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/TestRG17/providers/Microsoft.Backupseadev01/BackupVault/SwatiResource\",\r\n \"name\": \"SwatiResource\",\r\n \"type\": \"Microsoft.Backupseadev01/BackupVault\",\r\n \"location\": \"westus\",\r\n \"tags\": {\r\n \"department\": \"finance\"\r\n }\r\n },\r\n {\r\n \"id\": \"/subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/TestRG17/providers/Microsoft.Backupseadev01/BackupVault/TestResource13\",\r\n \"name\": \"TestResource13\",\r\n \"type\": \"Microsoft.Backupseadev01/BackupVault\",\r\n \"location\": \"westus\",\r\n \"tags\": {\r\n \"department\": \"finance\"\r\n }\r\n },\r\n {\r\n \"id\": \"/subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/TestRG17/providers/Microsoft.Backupseadev01/BackupVault/TestResource14\",\r\n \"name\": \"TestResource14\",\r\n \"type\": \"Microsoft.Backupseadev01/BackupVault\",\r\n \"location\": \"westus\",\r\n \"tags\": {}\r\n }\r\n ]\r\n}", + "ResponseBody": "{\r\n \"value\": [\r\n {\r\n \"id\": \"/subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn\",\r\n \"name\": \"backuprn\",\r\n \"type\": \"Microsoft.Backupseadev01/BackupVault\",\r\n \"location\": \"westus\",\r\n \"tags\": {\r\n \"department\": \"finance\"\r\n }\r\n },\r\n {\r\n \"id\": \"/subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/endtoendrn\",\r\n \"name\": \"endtoendrn\",\r\n \"type\": \"Microsoft.Backupseadev01/BackupVault\",\r\n \"location\": \"westus\",\r\n \"tags\": {}\r\n },\r\n {\r\n \"id\": \"/subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/storagetestrn1\",\r\n \"name\": \"storagetestrn1\",\r\n \"type\": \"Microsoft.Backupseadev01/BackupVault\",\r\n \"location\": \"westus\",\r\n \"tags\": {}\r\n },\r\n {\r\n \"id\": \"/subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/storagetestrn2\",\r\n \"name\": \"storagetestrn2\",\r\n \"type\": \"Microsoft.Backupseadev01/BackupVault\",\r\n \"location\": \"westus\",\r\n \"tags\": {}\r\n },\r\n {\r\n \"id\": \"/subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/trialrn\",\r\n \"name\": \"trialrn\",\r\n \"type\": \"Microsoft.Backupseadev01/BackupVault\",\r\n \"location\": \"westus\",\r\n \"tags\": {}\r\n },\r\n {\r\n \"id\": \"/subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/mkheranivault/providers/Microsoft.Backupseadev01/BackupVault/mkheranivault\",\r\n \"name\": \"mkheranivault\",\r\n \"type\": \"Microsoft.Backupseadev01/BackupVault\",\r\n \"location\": \"westus\",\r\n \"tags\": {}\r\n },\r\n {\r\n \"id\": \"/subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/pragrawa-rg2/providers/Microsoft.Backupseadev01/BackupVault/pragrawa-rn2\",\r\n \"name\": \"pragrawa-rn2\",\r\n \"type\": \"Microsoft.Backupseadev01/BackupVault\",\r\n \"location\": \"westus\",\r\n \"tags\": {\r\n \"department\": \"finance\"\r\n }\r\n },\r\n {\r\n \"id\": \"/subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/swatirg1/providers/Microsoft.Backupseadev01/BackupVault/swatirn1\",\r\n \"name\": \"swatirn1\",\r\n \"type\": \"Microsoft.Backupseadev01/BackupVault\",\r\n \"location\": \"westus\",\r\n \"tags\": {\r\n \"department\": \"finance\"\r\n }\r\n },\r\n {\r\n \"id\": \"/subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/swatirg2/providers/Microsoft.Backupseadev01/BackupVault/swatirn2\",\r\n \"name\": \"swatirn2\",\r\n \"type\": \"Microsoft.Backupseadev01/BackupVault\",\r\n \"location\": \"westus\",\r\n \"tags\": {\r\n \"department\": \"finance\"\r\n }\r\n },\r\n {\r\n \"id\": \"/subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/TestRG17/providers/Microsoft.Backupseadev01/BackupVault/SwatiResource\",\r\n \"name\": \"SwatiResource\",\r\n \"type\": \"Microsoft.Backupseadev01/BackupVault\",\r\n \"location\": \"westus\",\r\n \"tags\": {\r\n \"department\": \"finance\"\r\n }\r\n },\r\n {\r\n \"id\": \"/subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/TestRG17/providers/Microsoft.Backupseadev01/BackupVault/TestResource13\",\r\n \"name\": \"TestResource13\",\r\n \"type\": \"Microsoft.Backupseadev01/BackupVault\",\r\n \"location\": \"westus\",\r\n \"tags\": {\r\n \"department\": \"finance\"\r\n }\r\n },\r\n {\r\n \"id\": \"/subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/TestRG17/providers/Microsoft.Backupseadev01/BackupVault/TestResource14\",\r\n \"name\": \"TestResource14\",\r\n \"type\": \"Microsoft.Backupseadev01/BackupVault\",\r\n \"location\": \"westus\",\r\n \"tags\": {}\r\n }\r\n ]\r\n}", "ResponseHeaders": { "Content-Length": [ - "3295" + "3050" ], "Content-Type": [ "application/json; charset=utf-8" @@ -31,16 +31,16 @@ "no-cache" ], "x-ms-ratelimit-remaining-subscription-reads": [ - "14999" + "14995" ], "x-ms-request-id": [ - "c7401106-3388-4428-a472-29f77a0ccb58" + "aa627685-6762-44c4-ab93-d6cc09ec9ff7" ], "x-ms-correlation-request-id": [ - "c7401106-3388-4428-a472-29f77a0ccb58" + "aa627685-6762-44c4-ab93-d6cc09ec9ff7" ], "x-ms-routing-request-id": [ - "CENTRALUS:20150701T193046Z:c7401106-3388-4428-a472-29f77a0ccb58" + "CENTRALUS:20150702T094714Z:aa627685-6762-44c4-ab93-d6cc09ec9ff7" ], "Strict-Transport-Security": [ "max-age=31536000; includeSubDomains" @@ -49,7 +49,7 @@ "no-cache" ], "Date": [ - "Wed, 01 Jul 2015 19:30:45 GMT" + "Thu, 02 Jul 2015 09:47:13 GMT" ] }, "StatusCode": 200 @@ -64,7 +64,7 @@ "en-us" ], "x-ms-client-request-id": [ - "63831bb9-3e67-4beb-b001-056e728a94f1-2015-07-01 19:30:45Z-PS" + "ede7470a-27bb-43bc-a67a-4dc39ff35deb-2015-07-02 09:47:13Z-PS" ], "User-Agent": [ "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" @@ -85,29 +85,29 @@ "no-cache" ], "x-ms-request-id": [ - "ae950d89-395d-45ac-83ac-16a9bb43a6ff" + "c8405bdc-61db-4e8d-ae5d-f203c76d4c8a" ], "x-ms-client-request-id": [ - "63831bb9-3e67-4beb-b001-056e728a94f1-2015-07-01 19:30:45Z-PS", - "63831bb9-3e67-4beb-b001-056e728a94f1-2015-07-01 19:30:45Z-PS" + "ede7470a-27bb-43bc-a67a-4dc39ff35deb-2015-07-02 09:47:13Z-PS", + "ede7470a-27bb-43bc-a67a-4dc39ff35deb-2015-07-02 09:47:13Z-PS" ], "Strict-Transport-Security": [ "max-age=31536000; includeSubDomains" ], "x-ms-ratelimit-remaining-subscription-reads": [ - "14998" + "14994" ], "x-ms-correlation-request-id": [ - "ae950d89-395d-45ac-83ac-16a9bb43a6ff" + "c8405bdc-61db-4e8d-ae5d-f203c76d4c8a" ], "x-ms-routing-request-id": [ - "CENTRALUS:20150701T193049Z:ae950d89-395d-45ac-83ac-16a9bb43a6ff" + "CENTRALUS:20150702T094715Z:c8405bdc-61db-4e8d-ae5d-f203c76d4c8a" ], "Cache-Control": [ "no-cache" ], "Date": [ - "Wed, 01 Jul 2015 19:30:49 GMT" + "Thu, 02 Jul 2015 09:47:15 GMT" ], "Server": [ "Microsoft-IIS/8.0" @@ -119,7 +119,7 @@ "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/certificates/IdMgmtInternalCert?api-version=2015-03-15", "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vY2VydGlmaWNhdGVzL0lkTWdtdEludGVybmFsQ2VydD9hcGktdmVyc2lvbj0yMDE1LTAzLTE1", "RequestMethod": "PUT", - "RequestBody": "{\r\n \"properties\": {\r\n \"certificate\": \"MIIC3TCCAcWgAwIBAgIQe1D4O/pu/o1HJeWwD9iRGDANBgkqhkiG9w0BAQUFADAeMRwwGgYDVQQDExNXaW5kb3dzIEF6dXJlIFRvb2xzMB4XDTE1MDcwMTE5MjA0OVoXDTE1MDcwMzE5MzA0OVowHjEcMBoGA1UEAxMTV2luZG93cyBBenVyZSBUb29sczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAIv4q9u54n1SjANXzveleeklAyHPlWRpzWqcxafrg4fjzIaWfEVnixUzrbcuqLOJy8ErXgr2e5wKadg2dRgsMusnrczTbjRHN7LuNjcFH9LCWbMiSMLNH6T3TJ6vGSY1SP2SooE5Ika/hxDc9duTPuWAI351g0W3U9Jzj8enp27Qr92B4R3qn7McTNNCGbmVLR4DkEG45liqGISq+cNxcwQPnuXrgHGgAW4bfPwMfLoJALIs6dCa2Q1paObIGASe4TP4kJe9IS0QZR1nQwASf+tLUJMAdoSf5TZzaLAR1Io5W0lQVj3oARWwgoVavWcEIqEVY/caGdNFUuSSeDnG/v8CAwEAAaMXMBUwEwYDVR0lBAwwCgYIKwYBBQUHAwIwDQYJKoZIhvcNAQEFBQADggEBADxbX6YbKwmF/458o9W34xDmlpT6wQtDepHtVTAc2Haw04vEbCmZjF5qMxc7plUUJZD+e7WZHHlmxmV7SxYDJ+K1y333UHx1bhaoX6xsATCKNIEcmEtQjjpxlU+ZP+YIIWar7WHKbr6W2df8WHzYz5IxCJIVLx5A8VPyeYsjQPwnBqS0bJYl6zW80tk5VdjpCwDuJwiK5gBG7NGAVorp+FMOsbzzPzQncOto+4YUxs0BdDgPC6UAUzQwjKSxD8Lm0ljCXuYIz1pxgFtZ2seK0364cbVW/KwvqrSrGqBbNg6Ow7L0fWGTOktotDX+YfsVqCSDIHO3Ri1q5LDUQSlZOxQ=\"\r\n }\r\n}", + "RequestBody": "{\r\n \"properties\": {\r\n \"certificate\": \"MIIC3TCCAcWgAwIBAgIQTECWXuTfh4FJo2pyQqyEczANBgkqhkiG9w0BAQUFADAeMRwwGgYDVQQDExNXaW5kb3dzIEF6dXJlIFRvb2xzMB4XDTE1MDcwMjA5MzcxNVoXDTE1MDcwNDA5NDcxNVowHjEcMBoGA1UEAxMTV2luZG93cyBBenVyZSBUb29sczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAN0yF85/FGxqVzlE43DdaaOt7L+tZl7MTSM1c15RIrzzLEw4MNhCRFCklKR6iYUN2hnjO176fiSBSjZ5EdB9DRK2hvDVobOl4VNldWgbmkezl5qHAdGByiU8MDljnnoXvb6MY95b0DQJpWg/aLZtpVfPh7UE5vUvV3NfqqLVB4ETI96bYD/r9xC5yuiggFL8xuTeHJTrVHcESc+4dN0EA7wLP54FcabHt11mPFfsMrsFicD0e23JEQofpqki4JWswvFUlYaSy7i7dCUn+ag/PbUWD/a1Rm2MlzZul/E/UVodxenBbNmNshRTJRF1uio7Zr2uBvsxd+NkwD0zqhS7+fkCAwEAAaMXMBUwEwYDVR0lBAwwCgYIKwYBBQUHAwIwDQYJKoZIhvcNAQEFBQADggEBAEjpZ8iG2+DGB0AWWpRvzePXv3acrjPJpQSrESulp9XNpDonNBkvuSO80OkKxYpCCbG7H6au1gczcUgh3ICs7MSwSscIhhTdfnAgHxpRzYE6/BxwLSqhRpc4fpFLx9oq10MNbWVNQ7fqKun0cbex7AdLOJ5NWkEVrP8Bm2vlRfWehO84p1f9j7tD01mFN6ps3CENerNOJSyMfL5RxooIZm00QZ37xP+RCD86LVBN2/wH2ULn7Rzy8LaDTtZmkO31QSmqYaRCMr1eby9kXo8uqWD6aoPGrM2jc6nmDgX+KXGiQ9ilXCrjb+ZhFWVeAHbqWRPusCax2UnCSyE6l1h/Xns=\"\r\n }\r\n}", "RequestHeaders": { "Content-Type": [ "application/json" @@ -137,7 +137,7 @@ "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" ] }, - "ResponseBody": "{\r\n \"properties\": {\r\n \"certificate\": \"MIIC3TCCAcWgAwIBAgIQe1D4O/pu/o1HJeWwD9iRGDANBgkqhkiG9w0BAQUFADAeMRwwGgYDVQQDExNXaW5kb3dzIEF6dXJlIFRvb2xzMB4XDTE1MDcwMTE5MjA0OVoXDTE1MDcwMzE5MzA0OVowHjEcMBoGA1UEAxMTV2luZG93cyBBenVyZSBUb29sczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAIv4q9u54n1SjANXzveleeklAyHPlWRpzWqcxafrg4fjzIaWfEVnixUzrbcuqLOJy8ErXgr2e5wKadg2dRgsMusnrczTbjRHN7LuNjcFH9LCWbMiSMLNH6T3TJ6vGSY1SP2SooE5Ika/hxDc9duTPuWAI351g0W3U9Jzj8enp27Qr92B4R3qn7McTNNCGbmVLR4DkEG45liqGISq+cNxcwQPnuXrgHGgAW4bfPwMfLoJALIs6dCa2Q1paObIGASe4TP4kJe9IS0QZR1nQwASf+tLUJMAdoSf5TZzaLAR1Io5W0lQVj3oARWwgoVavWcEIqEVY/caGdNFUuSSeDnG/v8CAwEAAaMXMBUwEwYDVR0lBAwwCgYIKwYBBQUHAwIwDQYJKoZIhvcNAQEFBQADggEBADxbX6YbKwmF/458o9W34xDmlpT6wQtDepHtVTAc2Haw04vEbCmZjF5qMxc7plUUJZD+e7WZHHlmxmV7SxYDJ+K1y333UHx1bhaoX6xsATCKNIEcmEtQjjpxlU+ZP+YIIWar7WHKbr6W2df8WHzYz5IxCJIVLx5A8VPyeYsjQPwnBqS0bJYl6zW80tk5VdjpCwDuJwiK5gBG7NGAVorp+FMOsbzzPzQncOto+4YUxs0BdDgPC6UAUzQwjKSxD8Lm0ljCXuYIz1pxgFtZ2seK0364cbVW/KwvqrSrGqBbNg6Ow7L0fWGTOktotDX+YfsVqCSDIHO3Ri1q5LDUQSlZOxQ=\",\r\n \"resourceId\": 3420983535961922368,\r\n \"globalAcsNamespace\": \"seadev01rrp1users\",\r\n \"globalAcsHostName\": \"accesscontrol.windows.net\",\r\n \"globalAcsRPRealm\": \"http://windowscloudbackup/m3\",\r\n \"subject\": \"CN=Windows Azure Tools\",\r\n \"validFrom\": \"2015-07-02T00:50:49+05:30\",\r\n \"validTo\": \"2015-07-04T01:00:49+05:30\",\r\n \"thumbprint\": \"0BF0D16B9999BCE0DD856C3A53162A270AB6EEE2\",\r\n \"friendlyName\": \"\",\r\n \"issuer\": \"CN=Windows Azure Tools\"\r\n }\r\n}", + "ResponseBody": "{\r\n \"properties\": {\r\n \"certificate\": \"MIIC3TCCAcWgAwIBAgIQTECWXuTfh4FJo2pyQqyEczANBgkqhkiG9w0BAQUFADAeMRwwGgYDVQQDExNXaW5kb3dzIEF6dXJlIFRvb2xzMB4XDTE1MDcwMjA5MzcxNVoXDTE1MDcwNDA5NDcxNVowHjEcMBoGA1UEAxMTV2luZG93cyBBenVyZSBUb29sczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAN0yF85/FGxqVzlE43DdaaOt7L+tZl7MTSM1c15RIrzzLEw4MNhCRFCklKR6iYUN2hnjO176fiSBSjZ5EdB9DRK2hvDVobOl4VNldWgbmkezl5qHAdGByiU8MDljnnoXvb6MY95b0DQJpWg/aLZtpVfPh7UE5vUvV3NfqqLVB4ETI96bYD/r9xC5yuiggFL8xuTeHJTrVHcESc+4dN0EA7wLP54FcabHt11mPFfsMrsFicD0e23JEQofpqki4JWswvFUlYaSy7i7dCUn+ag/PbUWD/a1Rm2MlzZul/E/UVodxenBbNmNshRTJRF1uio7Zr2uBvsxd+NkwD0zqhS7+fkCAwEAAaMXMBUwEwYDVR0lBAwwCgYIKwYBBQUHAwIwDQYJKoZIhvcNAQEFBQADggEBAEjpZ8iG2+DGB0AWWpRvzePXv3acrjPJpQSrESulp9XNpDonNBkvuSO80OkKxYpCCbG7H6au1gczcUgh3ICs7MSwSscIhhTdfnAgHxpRzYE6/BxwLSqhRpc4fpFLx9oq10MNbWVNQ7fqKun0cbex7AdLOJ5NWkEVrP8Bm2vlRfWehO84p1f9j7tD01mFN6ps3CENerNOJSyMfL5RxooIZm00QZ37xP+RCD86LVBN2/wH2ULn7Rzy8LaDTtZmkO31QSmqYaRCMr1eby9kXo8uqWD6aoPGrM2jc6nmDgX+KXGiQ9ilXCrjb+ZhFWVeAHbqWRPusCax2UnCSyE6l1h/Xns=\",\r\n \"resourceId\": 3420983535961922368,\r\n \"globalAcsNamespace\": \"seadev01rrp1users\",\r\n \"globalAcsHostName\": \"accesscontrol.windows.net\",\r\n \"globalAcsRPRealm\": \"http://windowscloudbackup/m3\",\r\n \"subject\": \"CN=Windows Azure Tools\",\r\n \"validFrom\": \"2015-07-02T15:07:15+05:30\",\r\n \"validTo\": \"2015-07-04T15:17:15+05:30\",\r\n \"thumbprint\": \"478BF8B0D0F0AB869921297EE3A18A18043B9B09\",\r\n \"friendlyName\": \"\",\r\n \"issuer\": \"CN=Windows Azure Tools\"\r\n }\r\n}", "ResponseHeaders": { "Content-Length": [ "1410" @@ -152,29 +152,29 @@ "no-cache" ], "x-ms-request-id": [ - "22d65ab8-04a4-4cda-a623-7f26321eb185" + "4d6b78de-c27c-4d47-8b63-31a813389066" ], "x-ms-client-request-id": [ - "5ab36f49-b786-4974-8cd7-1808d5d371ae", - "5ab36f49-b786-4974-8cd7-1808d5d371ae" + "eb3055fc-e8a8-421b-b3a0-b175263c28db", + "eb3055fc-e8a8-421b-b3a0-b175263c28db" ], "Strict-Transport-Security": [ "max-age=31536000; includeSubDomains" ], "x-ms-ratelimit-remaining-subscription-writes": [ - "1199" + "1196" ], "x-ms-correlation-request-id": [ - "22d65ab8-04a4-4cda-a623-7f26321eb185" + "4d6b78de-c27c-4d47-8b63-31a813389066" ], "x-ms-routing-request-id": [ - "CENTRALUS:20150701T193052Z:22d65ab8-04a4-4cda-a623-7f26321eb185" + "CENTRALUS:20150702T094719Z:4d6b78de-c27c-4d47-8b63-31a813389066" ], "Cache-Control": [ "no-cache" ], "Date": [ - "Wed, 01 Jul 2015 19:30:52 GMT" + "Thu, 02 Jul 2015 09:47:19 GMT" ], "Server": [ "Microsoft-IIS/8.0" diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupVaultTests/SetAzureBackupVaultStorageTypeTests.json b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupVaultTests/SetAzureBackupVaultStorageTypeTests.json new file mode 100644 index 000000000000..dc7ea890b5a2 --- /dev/null +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupVaultTests/SetAzureBackupVaultStorageTypeTests.json @@ -0,0 +1,269 @@ +{ + "Entries": [ + { + "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resources?$filter=resourceType%20eq%20'Microsoft.Backupseadev01/BackupVault'&$top=100&api-version=2013-03-01", + "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlcz8kZmlsdGVyPXJlc291cmNlVHlwZSUyMGVxJTIwJ01pY3Jvc29mdC5CYWNrdXBzZWFkZXYwMS9CYWNrdXBWYXVsdCcmJHRvcD0xMDAmYXBpLXZlcnNpb249MjAxMy0wMy0wMQ==", + "RequestMethod": "GET", + "RequestBody": "", + "RequestHeaders": { + "Accept-Language": [ + "en-us" + ], + "x-ms-client-request-id": [ + "904b9d2b-eca0-4b1e-b381-eade67d644a1-2015-07-02 09:46:51Z-PS" + ], + "User-Agent": [ + "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" + ] + }, + "ResponseBody": "{\r\n \"value\": [\r\n {\r\n \"id\": \"/subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn\",\r\n \"name\": \"backuprn\",\r\n \"type\": \"Microsoft.Backupseadev01/BackupVault\",\r\n \"location\": \"westus\",\r\n \"tags\": {\r\n \"department\": \"finance\"\r\n }\r\n },\r\n {\r\n \"id\": \"/subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/endtoendrn\",\r\n \"name\": \"endtoendrn\",\r\n \"type\": \"Microsoft.Backupseadev01/BackupVault\",\r\n \"location\": \"westus\",\r\n \"tags\": {}\r\n },\r\n {\r\n \"id\": \"/subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/storagetestrn1\",\r\n \"name\": \"storagetestrn1\",\r\n \"type\": \"Microsoft.Backupseadev01/BackupVault\",\r\n \"location\": \"westus\",\r\n \"tags\": {}\r\n },\r\n {\r\n \"id\": \"/subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/storagetestrn2\",\r\n \"name\": \"storagetestrn2\",\r\n \"type\": \"Microsoft.Backupseadev01/BackupVault\",\r\n \"location\": \"westus\",\r\n \"tags\": {}\r\n },\r\n {\r\n \"id\": \"/subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/trialrn\",\r\n \"name\": \"trialrn\",\r\n \"type\": \"Microsoft.Backupseadev01/BackupVault\",\r\n \"location\": \"westus\",\r\n \"tags\": {}\r\n },\r\n {\r\n \"id\": \"/subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/mkheranivault/providers/Microsoft.Backupseadev01/BackupVault/mkheranivault\",\r\n \"name\": \"mkheranivault\",\r\n \"type\": \"Microsoft.Backupseadev01/BackupVault\",\r\n \"location\": \"westus\",\r\n \"tags\": {}\r\n },\r\n {\r\n \"id\": \"/subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/pragrawa-rg2/providers/Microsoft.Backupseadev01/BackupVault/pragrawa-rn2\",\r\n \"name\": \"pragrawa-rn2\",\r\n \"type\": \"Microsoft.Backupseadev01/BackupVault\",\r\n \"location\": \"westus\",\r\n \"tags\": {\r\n \"department\": \"finance\"\r\n }\r\n },\r\n {\r\n \"id\": \"/subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/swatirg1/providers/Microsoft.Backupseadev01/BackupVault/swatirn1\",\r\n \"name\": \"swatirn1\",\r\n \"type\": \"Microsoft.Backupseadev01/BackupVault\",\r\n \"location\": \"westus\",\r\n \"tags\": {\r\n \"department\": \"finance\"\r\n }\r\n },\r\n {\r\n \"id\": \"/subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/swatirg2/providers/Microsoft.Backupseadev01/BackupVault/swatirn2\",\r\n \"name\": \"swatirn2\",\r\n \"type\": \"Microsoft.Backupseadev01/BackupVault\",\r\n \"location\": \"westus\",\r\n \"tags\": {\r\n \"department\": \"finance\"\r\n }\r\n },\r\n {\r\n \"id\": \"/subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/TestRG17/providers/Microsoft.Backupseadev01/BackupVault/SwatiResource\",\r\n \"name\": \"SwatiResource\",\r\n \"type\": \"Microsoft.Backupseadev01/BackupVault\",\r\n \"location\": \"westus\",\r\n \"tags\": {\r\n \"department\": \"finance\"\r\n }\r\n },\r\n {\r\n \"id\": \"/subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/TestRG17/providers/Microsoft.Backupseadev01/BackupVault/TestResource13\",\r\n \"name\": \"TestResource13\",\r\n \"type\": \"Microsoft.Backupseadev01/BackupVault\",\r\n \"location\": \"westus\",\r\n \"tags\": {\r\n \"department\": \"finance\"\r\n }\r\n },\r\n {\r\n \"id\": \"/subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/TestRG17/providers/Microsoft.Backupseadev01/BackupVault/TestResource14\",\r\n \"name\": \"TestResource14\",\r\n \"type\": \"Microsoft.Backupseadev01/BackupVault\",\r\n \"location\": \"westus\",\r\n \"tags\": {}\r\n }\r\n ]\r\n}", + "ResponseHeaders": { + "Content-Length": [ + "3050" + ], + "Content-Type": [ + "application/json; charset=utf-8" + ], + "Expires": [ + "-1" + ], + "Pragma": [ + "no-cache" + ], + "x-ms-ratelimit-remaining-subscription-reads": [ + "14989" + ], + "x-ms-request-id": [ + "9baf01f3-d229-493a-891c-05fbd9dac5c7" + ], + "x-ms-correlation-request-id": [ + "9baf01f3-d229-493a-891c-05fbd9dac5c7" + ], + "x-ms-routing-request-id": [ + "CENTRALUS:20150702T094653Z:9baf01f3-d229-493a-891c-05fbd9dac5c7" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Thu, 02 Jul 2015 09:46:52 GMT" + ] + }, + "StatusCode": 200 + }, + { + "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/storageconfig/vaultstorageconfig?api-version=2015-03-15", + "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vc3RvcmFnZWNvbmZpZy92YXVsdHN0b3JhZ2Vjb25maWc/YXBpLXZlcnNpb249MjAxNS0wMy0xNQ==", + "RequestMethod": "GET", + "RequestBody": "", + "RequestHeaders": { + "Accept-Language": [ + "en-us" + ], + "x-ms-client-request-id": [ + "904b9d2b-eca0-4b1e-b381-eade67d644a1-2015-07-02 09:46:51Z-PS" + ], + "User-Agent": [ + "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" + ] + }, + "ResponseBody": "{\r\n \"resourceId\": 3420983535961922368,\r\n \"properties\": {\r\n \"storageType\": \"GeoRedundant\",\r\n \"storageTypeState\": \"Locked\"\r\n }\r\n}", + "ResponseHeaders": { + "Content-Length": [ + "106" + ], + "Content-Type": [ + "application/json" + ], + "Expires": [ + "-1" + ], + "Pragma": [ + "no-cache" + ], + "x-ms-request-id": [ + "7d95a336-0fc2-4783-b0c0-f4ba1994e58f" + ], + "x-ms-client-request-id": [ + "904b9d2b-eca0-4b1e-b381-eade67d644a1-2015-07-02 09:46:51Z-PS", + "904b9d2b-eca0-4b1e-b381-eade67d644a1-2015-07-02 09:46:51Z-PS" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "x-ms-ratelimit-remaining-subscription-reads": [ + "14988" + ], + "x-ms-correlation-request-id": [ + "7d95a336-0fc2-4783-b0c0-f4ba1994e58f" + ], + "x-ms-routing-request-id": [ + "CENTRALUS:20150702T094655Z:7d95a336-0fc2-4783-b0c0-f4ba1994e58f" + ], + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Thu, 02 Jul 2015 09:46:55 GMT" + ], + "Server": [ + "Microsoft-IIS/8.0" + ] + }, + "StatusCode": 200 + }, + { + "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/storageconfig/vaultstorageconfig?api-version=2015-03-15", + "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vc3RvcmFnZWNvbmZpZy92YXVsdHN0b3JhZ2Vjb25maWc/YXBpLXZlcnNpb249MjAxNS0wMy0xNQ==", + "RequestMethod": "PATCH", + "RequestBody": "{\r\n \"properties\": {\r\n \"storageModelType\": \"GeoRedundant\"\r\n }\r\n}", + "RequestHeaders": { + "Content-Type": [ + "application/json" + ], + "Content-Length": [ + "68" + ], + "Accept-Language": [ + "en-us" + ], + "x-ms-client-request-id": [ + "c3cbdb0a-07a1-4da8-9030-fd2e4a1cb8c8-2015-07-02 09:46:55Z-PS" + ], + "x-ms-version": [ + "2013-03-01" + ], + "User-Agent": [ + "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" + ] + }, + "ResponseBody": "{\r\n \"Error\": {\r\n \"Code\": \"StorageModelModifyError\",\r\n \"Message\": \"Storage Redundancy option is locked when the first machine is registered with the vault, and cannot be modified thereafter.\",\r\n \"Target\": null,\r\n \"Details\": null,\r\n \"InnerError\": null\r\n }\r\n}", + "ResponseHeaders": { + "Content-Length": [ + "227" + ], + "Content-Type": [ + "application/json" + ], + "Expires": [ + "-1" + ], + "Pragma": [ + "no-cache" + ], + "x-ms-request-id": [ + "fd723a8a-b129-4839-b8b4-ecd4932688ac" + ], + "x-ms-client-request-id": [ + "c3cbdb0a-07a1-4da8-9030-fd2e4a1cb8c8-2015-07-02 09:46:55Z-PS", + "c3cbdb0a-07a1-4da8-9030-fd2e4a1cb8c8-2015-07-02 09:46:55Z-PS" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "x-ms-ratelimit-remaining-subscription-writes": [ + "1199" + ], + "x-ms-correlation-request-id": [ + "fd723a8a-b129-4839-b8b4-ecd4932688ac" + ], + "x-ms-routing-request-id": [ + "CENTRALUS:20150702T094656Z:fd723a8a-b129-4839-b8b4-ecd4932688ac" + ], + "Connection": [ + "close" + ], + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Thu, 02 Jul 2015 09:46:56 GMT" + ], + "Server": [ + "Microsoft-IIS/8.0" + ] + }, + "StatusCode": 403 + }, + { + "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/storageconfig/vaultstorageconfig?api-version=2015-03-15", + "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vc3RvcmFnZWNvbmZpZy92YXVsdHN0b3JhZ2Vjb25maWc/YXBpLXZlcnNpb249MjAxNS0wMy0xNQ==", + "RequestMethod": "PATCH", + "RequestBody": "{\r\n \"properties\": {\r\n \"storageModelType\": \"LocallyRedundant\"\r\n }\r\n}", + "RequestHeaders": { + "Content-Type": [ + "application/json" + ], + "Content-Length": [ + "72" + ], + "Accept-Language": [ + "en-us" + ], + "x-ms-client-request-id": [ + "c9020526-b0e2-479d-b46e-4aba628b0227-2015-07-02 09:46:56Z-PS" + ], + "x-ms-version": [ + "2013-03-01" + ], + "User-Agent": [ + "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" + ] + }, + "ResponseBody": "{\r\n \"Error\": {\r\n \"Code\": \"StorageModelModifyError\",\r\n \"Message\": \"Storage Redundancy option is locked when the first machine is registered with the vault, and cannot be modified thereafter.\",\r\n \"Target\": null,\r\n \"Details\": null,\r\n \"InnerError\": null\r\n }\r\n}", + "ResponseHeaders": { + "Content-Length": [ + "227" + ], + "Content-Type": [ + "application/json" + ], + "Expires": [ + "-1" + ], + "Pragma": [ + "no-cache" + ], + "x-ms-request-id": [ + "60902c89-e785-4715-bab9-df78d3388245" + ], + "x-ms-client-request-id": [ + "c9020526-b0e2-479d-b46e-4aba628b0227-2015-07-02 09:46:56Z-PS", + "c9020526-b0e2-479d-b46e-4aba628b0227-2015-07-02 09:46:56Z-PS" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "x-ms-ratelimit-remaining-subscription-writes": [ + "1198" + ], + "x-ms-correlation-request-id": [ + "60902c89-e785-4715-bab9-df78d3388245" + ], + "x-ms-routing-request-id": [ + "CENTRALUS:20150702T094659Z:60902c89-e785-4715-bab9-df78d3388245" + ], + "Connection": [ + "close" + ], + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Thu, 02 Jul 2015 09:46:58 GMT" + ], + "Server": [ + "Microsoft-IIS/8.0" + ] + }, + "StatusCode": 403 + } + ], + "Names": {}, + "Variables": { + "SubscriptionId": "f5303a0b-fae4-4cdb-b44d-0e4c032dde26" + } +} \ No newline at end of file From 0e0d64fd13d2a871616ad566ae44d2d645b995af Mon Sep 17 00:00:00 2001 From: dragonfly91 Date: Thu, 2 Jul 2015 15:24:29 +0530 Subject: [PATCH 130/155] Updating hydra DLL to the latest --- ...re.Management.BackupServicesManagement.dll | Bin 56832 -> 56832 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Resources/Microsoft.Azure.Management.BackupServicesManagement.dll b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Resources/Microsoft.Azure.Management.BackupServicesManagement.dll index 11ab9c84a47a391bbf3d9b2cc7279c789850f645..19ae95856d579c69a01aefd4a23ab3c84768c4f0 100644 GIT binary patch delta 1735 zcmb7_ZA@Eb6vyv*E`1S23I)qs3uWVF3~&V;R653Z34;wO@=|bNyw1=f0g5rkMmCo% zzF?hrLNfd`J^+q6re1NGz{aL#?1Pb+4d#$xvzY00DjPA8FY`Q0BoGgl+26;q&S(-nHVDo{;wMZ!H+QqH}<{_qfR^+m<=a!B5;d*o-*tUcsKA2 zIPpVOqCkPe^_-w56crFc4c2`uPT zo1syiKi(J+X6!gf+-Z`e*YB4WEukN3jrm_RONQnttH}^<4H}-WAis-{~w+K8I z9SRz0DEhPvu3$wRuVaW0g}${b_d~ENK7pzX#CxmE#CxhVdaH1cs&M0}GLW#rRJBlo zXR2}&oBdd!h)MZcyp$YHvtTgma5Z@o&5AB1hsJeu9YGgGzf7qIixiRCAi@GV44ktg zjdSv=6OX1DK!az~qKR}q%}Xjz_mIBoCFLHGa^oSLPv3yl;X~S!5$VVF`Qcz|1deCz zhb~lEb=YoHpwSo#Z%bvy7a5$wFS64?!n@fA;WFAxNwA3hrbNib^QKr5<1)oTEh=_+ z>9+6i(7orS;~vp*u5IX$a`p3 z;KTe74q`UatUg!JO}%-n{HpvoFNV@U;V>7GyE`3*@a5f?NJM6FQoy1gHTq_Eqkn{h zCXIZA=VxPYF;_KK92Zb4dz3OlDQZ=sKq7{D-ugxoOFUY6)ZLlf^Q5hJ=CzUyw2o4q zr)L~{e6 z0KUWN+7`Afm*QVIDkHLw>$P~QUWGr@tHFx*>WkEB1>fM`^T&03S>*O~ENV!FZ}63d zJ3a^A4L2({J_nv})QRsjX0rzhyxjOKVX`K#5JM9e;%f2=Va*#X%z{_KxOB2P7$68I zTh`!X51bWgbhGst*hhQC$hIiaY}8_^Re>GW5LTwds~SBHTQ$&)=jndG68DDbF~X){ zLrQ#?+)A4U&f!ZoBfFx+C&KkOLxCmyi30y9F|y4<8@{`3Go4D<2btO;r_w zU%4Qt1oDfjiVMhwNC&$8OF)mEQ!&zssd5H&c>hA4R51OEsJg%SnQ7{)*K$88{X5fo z^Y=Q*^tCxCls-6B^rXP(9|eMNguXUMaPYbYWYW3o3J924;kVttTlno`&cy+4 WV=>Z`H&#XVSB4byw2wTL_!em|!BFOKC?k{;^5#IrrSt-}!v+ z@7&w2DXD8pdc8-gPI+^nH;RZ{rwZ%veX1pVrp4pN_zEv+*dustK*zL0u%5lu+XQ;c_1^4kKnyqCGU4aFtpYZi@C&giy>o4ii$WUg#Dc=@!PiAwn5;M&S^F{bBx~ zm){E;bBAxSC|cAp#Q4L|`Y3!qY>UxT6Q^4ihi0<0rhfFVx-sFZuCxY;D>T&2s zb%Pe0O-eMG{J|y{n4ae_i65sK;WNCOb{ZD3F+C2J@qBtL9K$Q=5zvhG^k_JR%DpbS zl)X;6*IabMBRXN6bjpk^=-${wH=aRsBkt>Tx3fE`$qeRH+C6Q87AJGGw43GRt(ld$ zmg7fpyV*p$`t1I8>dpQmHx(B|F{wQUHQhe31j6@8Jyp4k-CsG~E5=S`Z zBWB?^TIJ<2?LZdBs>j(9(Qoz=*Be!ritA#g)OB6hOOL}GW|kQqzcgkZslvXpaG00J z%e(N_wHu#P6u^i9j9RpuigbLV>_-7~E7!2fn>2if*q9O&=)(W4AFD zX(?h+M;KEx@^dYD`^hHDb?w{piKTTq+^e0{u_{(e<4LxQ8RY)yLQXyW>(%VXmLg~F zNa~)hzQX#d>4ITs+41f>f0W4~pPRk?=?}?5PiCCHA;8#0`Zv0W-SZj%**32PkKg|k h%Z|^#IJOWB_vN{TXplW`tx8 Date: Thu, 2 Jul 2015 19:37:20 +0530 Subject: [PATCH 131/155] Using positive scenarios for Set-StorageType cmdlet instead of the negative scenarios. --- .../Commands.AzureBackup.Test.csproj | 12 +- .../ScenarioTests/AzureBackupVaultTests.cs | 2 +- .../ScenarioTests/AzureBackupVaultTests.ps1 | 18 +- .../GetAzureBackupVaultCredentialsTests.json | 68 ++-- .../SetAzureBackupVaultStorageTypeTests.json | 352 +++++++++++++++--- 5 files changed, 349 insertions(+), 103 deletions(-) diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/Commands.AzureBackup.Test.csproj b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/Commands.AzureBackup.Test.csproj index 3ab56e7184b0..6d837763592d 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/Commands.AzureBackup.Test.csproj +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/Commands.AzureBackup.Test.csproj @@ -122,7 +122,9 @@ - + + Code + @@ -155,8 +157,12 @@ Always - - + + Always + + + Always + diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupVaultTests.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupVaultTests.cs index fd99a904178e..ea427f60ba02 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupVaultTests.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupVaultTests.cs @@ -27,7 +27,7 @@ public void GetAzureBackupVaultCredentialsTests() [Fact] public void SetAzureBackupVaultStorageTypeTests() { - this.RunPowerShellTest("Test-SetAzureBackupVaultStorageTypeWithLockedResourceThrowsException"); + this.RunPowerShellTest("Test-SetAzureBackupVaultStorageTypeWithFreshResourceDoesNotThrowException"); } } } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupVaultTests.ps1 b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupVaultTests.ps1 index b469e1305f68..7b371c74c5b6 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupVaultTests.ps1 +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupVaultTests.ps1 @@ -26,11 +26,21 @@ function Test-GetAzureBackupVaultCredentialsReturnsFileNameAndDownloadsCert Assert-True {{ Test-Path $certFileFullPath }} } -function Test-SetAzureBackupVaultStorageTypeWithLockedResourceThrowsException +function Test-SetAzureBackupVaultStorageTypeWithFreshResourceDoesNotThrowException { - $vault = Get-AzureBackupVault -Name $ResourceName; + $freshVaultName = "storagetestrn"; + + Assert-Throws { New-AzureBackupVault -ResourceGroupName $ResourceGroupName -Name $freshVaultName -Region $Location }; + + $freshVault = Get-AzureBackupVault -Name $freshVaultName; + + Set-AzureBackupVaultStorageType $freshVault -Type GeoRedundant + + Set-AzureBackupVaultStorageType $freshVault -Type LocallyRedundant + + Set-AzureBackupVaultStorageType $freshVault -Type GeoRedundant - Assert-Throws { Set-AzureBackupVaultStorageType $vault -Type GeoRedundant } + Set-AzureBackupVaultStorageType $freshVault -Type LocallyRedundant - Assert-Throws { Set-AzureBackupVaultStorageType $vault -Type LocallyRedundant } + Remove-AzureBackupVault -vault $freshVault } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupVaultTests/GetAzureBackupVaultCredentialsTests.json b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupVaultTests/GetAzureBackupVaultCredentialsTests.json index 929ff62a41ba..3cdbdcb2a55b 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupVaultTests/GetAzureBackupVaultCredentialsTests.json +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupVaultTests/GetAzureBackupVaultCredentialsTests.json @@ -1,8 +1,8 @@ { "Entries": [ { - "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resources?$filter=resourceType%20eq%20'Microsoft.Backupseadev01/BackupVault'&$top=100&api-version=2013-03-01", - "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlcz8kZmlsdGVyPXJlc291cmNlVHlwZSUyMGVxJTIwJ01pY3Jvc29mdC5CYWNrdXBzZWFkZXYwMS9CYWNrdXBWYXVsdCcmJHRvcD0xMDAmYXBpLXZlcnNpb249MjAxMy0wMy0wMQ==", + "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resources?$filter=resourceType%20eq%20'Microsoft.Backup/BackupVault'&$top=100&api-version=2013-03-01", + "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlcz8kZmlsdGVyPXJlc291cmNlVHlwZSUyMGVxJTIwJ01pY3Jvc29mdC5CYWNrdXAvQmFja3VwVmF1bHQnJiR0b3A9MTAwJmFwaS12ZXJzaW9uPTIwMTMtMDMtMDE=", "RequestMethod": "GET", "RequestBody": "", "RequestHeaders": { @@ -10,16 +10,16 @@ "en-us" ], "x-ms-client-request-id": [ - "ede7470a-27bb-43bc-a67a-4dc39ff35deb-2015-07-02 09:47:13Z-PS" + "fa9d0eb9-aec0-4246-9422-836ac9ff813d-2015-07-02 14:02:44Z-PS" ], "User-Agent": [ "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" ] }, - "ResponseBody": "{\r\n \"value\": [\r\n {\r\n \"id\": \"/subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn\",\r\n \"name\": \"backuprn\",\r\n \"type\": \"Microsoft.Backupseadev01/BackupVault\",\r\n \"location\": \"westus\",\r\n \"tags\": {\r\n \"department\": \"finance\"\r\n }\r\n },\r\n {\r\n \"id\": \"/subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/endtoendrn\",\r\n \"name\": \"endtoendrn\",\r\n \"type\": \"Microsoft.Backupseadev01/BackupVault\",\r\n \"location\": \"westus\",\r\n \"tags\": {}\r\n },\r\n {\r\n \"id\": \"/subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/storagetestrn1\",\r\n \"name\": \"storagetestrn1\",\r\n \"type\": \"Microsoft.Backupseadev01/BackupVault\",\r\n \"location\": \"westus\",\r\n \"tags\": {}\r\n },\r\n {\r\n \"id\": \"/subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/storagetestrn2\",\r\n \"name\": \"storagetestrn2\",\r\n \"type\": \"Microsoft.Backupseadev01/BackupVault\",\r\n \"location\": \"westus\",\r\n \"tags\": {}\r\n },\r\n {\r\n \"id\": \"/subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/trialrn\",\r\n \"name\": \"trialrn\",\r\n \"type\": \"Microsoft.Backupseadev01/BackupVault\",\r\n \"location\": \"westus\",\r\n \"tags\": {}\r\n },\r\n {\r\n \"id\": \"/subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/mkheranivault/providers/Microsoft.Backupseadev01/BackupVault/mkheranivault\",\r\n \"name\": \"mkheranivault\",\r\n \"type\": \"Microsoft.Backupseadev01/BackupVault\",\r\n \"location\": \"westus\",\r\n \"tags\": {}\r\n },\r\n {\r\n \"id\": \"/subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/pragrawa-rg2/providers/Microsoft.Backupseadev01/BackupVault/pragrawa-rn2\",\r\n \"name\": \"pragrawa-rn2\",\r\n \"type\": \"Microsoft.Backupseadev01/BackupVault\",\r\n \"location\": \"westus\",\r\n \"tags\": {\r\n \"department\": \"finance\"\r\n }\r\n },\r\n {\r\n \"id\": \"/subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/swatirg1/providers/Microsoft.Backupseadev01/BackupVault/swatirn1\",\r\n \"name\": \"swatirn1\",\r\n \"type\": \"Microsoft.Backupseadev01/BackupVault\",\r\n \"location\": \"westus\",\r\n \"tags\": {\r\n \"department\": \"finance\"\r\n }\r\n },\r\n {\r\n \"id\": \"/subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/swatirg2/providers/Microsoft.Backupseadev01/BackupVault/swatirn2\",\r\n \"name\": \"swatirn2\",\r\n \"type\": \"Microsoft.Backupseadev01/BackupVault\",\r\n \"location\": \"westus\",\r\n \"tags\": {\r\n \"department\": \"finance\"\r\n }\r\n },\r\n {\r\n \"id\": \"/subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/TestRG17/providers/Microsoft.Backupseadev01/BackupVault/SwatiResource\",\r\n \"name\": \"SwatiResource\",\r\n \"type\": \"Microsoft.Backupseadev01/BackupVault\",\r\n \"location\": \"westus\",\r\n \"tags\": {\r\n \"department\": \"finance\"\r\n }\r\n },\r\n {\r\n \"id\": \"/subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/TestRG17/providers/Microsoft.Backupseadev01/BackupVault/TestResource13\",\r\n \"name\": \"TestResource13\",\r\n \"type\": \"Microsoft.Backupseadev01/BackupVault\",\r\n \"location\": \"westus\",\r\n \"tags\": {\r\n \"department\": \"finance\"\r\n }\r\n },\r\n {\r\n \"id\": \"/subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/TestRG17/providers/Microsoft.Backupseadev01/BackupVault/TestResource14\",\r\n \"name\": \"TestResource14\",\r\n \"type\": \"Microsoft.Backupseadev01/BackupVault\",\r\n \"location\": \"westus\",\r\n \"tags\": {}\r\n }\r\n ]\r\n}", + "ResponseBody": "{\r\n \"value\": [\r\n {\r\n \"id\": \"/subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backup/BackupVault/backuprn\",\r\n \"name\": \"backuprn\",\r\n \"type\": \"Microsoft.Backup/BackupVault\",\r\n \"location\": \"westus\",\r\n \"tags\": {}\r\n }\r\n ]\r\n}", "ResponseHeaders": { "Content-Length": [ - "3050" + "230" ], "Content-Type": [ "application/json; charset=utf-8" @@ -31,16 +31,16 @@ "no-cache" ], "x-ms-ratelimit-remaining-subscription-reads": [ - "14995" + "14994" ], "x-ms-request-id": [ - "aa627685-6762-44c4-ab93-d6cc09ec9ff7" + "8a2f8dad-2ccc-4543-84da-3d0c0c56f064" ], "x-ms-correlation-request-id": [ - "aa627685-6762-44c4-ab93-d6cc09ec9ff7" + "8a2f8dad-2ccc-4543-84da-3d0c0c56f064" ], "x-ms-routing-request-id": [ - "CENTRALUS:20150702T094714Z:aa627685-6762-44c4-ab93-d6cc09ec9ff7" + "CENTRALUS:20150702T140245Z:8a2f8dad-2ccc-4543-84da-3d0c0c56f064" ], "Strict-Transport-Security": [ "max-age=31536000; includeSubDomains" @@ -49,14 +49,14 @@ "no-cache" ], "Date": [ - "Thu, 02 Jul 2015 09:47:13 GMT" + "Thu, 02 Jul 2015 14:02:45 GMT" ] }, "StatusCode": 200 }, { - "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/storageconfig/vaultstorageconfig?api-version=2015-03-15", - "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vc3RvcmFnZWNvbmZpZy92YXVsdHN0b3JhZ2Vjb25maWc/YXBpLXZlcnNpb249MjAxNS0wMy0xNQ==", + "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backup/BackupVault/backuprn/storageconfig/vaultstorageconfig?api-version=2015-03-15", + "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3VwL0JhY2t1cFZhdWx0L2JhY2t1cHJuL3N0b3JhZ2Vjb25maWcvdmF1bHRzdG9yYWdlY29uZmlnP2FwaS12ZXJzaW9uPTIwMTUtMDMtMTU=", "RequestMethod": "GET", "RequestBody": "", "RequestHeaders": { @@ -64,16 +64,16 @@ "en-us" ], "x-ms-client-request-id": [ - "ede7470a-27bb-43bc-a67a-4dc39ff35deb-2015-07-02 09:47:13Z-PS" + "fa9d0eb9-aec0-4246-9422-836ac9ff813d-2015-07-02 14:02:44Z-PS" ], "User-Agent": [ "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" ] }, - "ResponseBody": "{\r\n \"resourceId\": 3420983535961922368,\r\n \"properties\": {\r\n \"storageType\": \"GeoRedundant\",\r\n \"storageTypeState\": \"Locked\"\r\n }\r\n}", + "ResponseBody": "{\r\n \"resourceId\": 5089188015289137043,\r\n \"properties\": {\r\n \"storageType\": \"LocallyRedundant\",\r\n \"storageTypeState\": \"Unlocked\"\r\n }\r\n}", "ResponseHeaders": { "Content-Length": [ - "106" + "112" ], "Content-Type": [ "application/json" @@ -85,29 +85,29 @@ "no-cache" ], "x-ms-request-id": [ - "c8405bdc-61db-4e8d-ae5d-f203c76d4c8a" + "6c60134c-2c99-4893-a83b-f422d15d9e3d" ], "x-ms-client-request-id": [ - "ede7470a-27bb-43bc-a67a-4dc39ff35deb-2015-07-02 09:47:13Z-PS", - "ede7470a-27bb-43bc-a67a-4dc39ff35deb-2015-07-02 09:47:13Z-PS" + "fa9d0eb9-aec0-4246-9422-836ac9ff813d-2015-07-02 14:02:44Z-PS", + "fa9d0eb9-aec0-4246-9422-836ac9ff813d-2015-07-02 14:02:44Z-PS" ], "Strict-Transport-Security": [ "max-age=31536000; includeSubDomains" ], "x-ms-ratelimit-remaining-subscription-reads": [ - "14994" + "14993" ], "x-ms-correlation-request-id": [ - "c8405bdc-61db-4e8d-ae5d-f203c76d4c8a" + "6c60134c-2c99-4893-a83b-f422d15d9e3d" ], "x-ms-routing-request-id": [ - "CENTRALUS:20150702T094715Z:c8405bdc-61db-4e8d-ae5d-f203c76d4c8a" + "CENTRALUS:20150702T140246Z:6c60134c-2c99-4893-a83b-f422d15d9e3d" ], "Cache-Control": [ "no-cache" ], "Date": [ - "Thu, 02 Jul 2015 09:47:15 GMT" + "Thu, 02 Jul 2015 14:02:46 GMT" ], "Server": [ "Microsoft-IIS/8.0" @@ -116,10 +116,10 @@ "StatusCode": 200 }, { - "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/certificates/IdMgmtInternalCert?api-version=2015-03-15", - "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vY2VydGlmaWNhdGVzL0lkTWdtdEludGVybmFsQ2VydD9hcGktdmVyc2lvbj0yMDE1LTAzLTE1", + "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backup/BackupVault/backuprn/certificates/IdMgmtInternalCert?api-version=2015-03-15", + "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3VwL0JhY2t1cFZhdWx0L2JhY2t1cHJuL2NlcnRpZmljYXRlcy9JZE1nbXRJbnRlcm5hbENlcnQ/YXBpLXZlcnNpb249MjAxNS0wMy0xNQ==", "RequestMethod": "PUT", - "RequestBody": "{\r\n \"properties\": {\r\n \"certificate\": \"MIIC3TCCAcWgAwIBAgIQTECWXuTfh4FJo2pyQqyEczANBgkqhkiG9w0BAQUFADAeMRwwGgYDVQQDExNXaW5kb3dzIEF6dXJlIFRvb2xzMB4XDTE1MDcwMjA5MzcxNVoXDTE1MDcwNDA5NDcxNVowHjEcMBoGA1UEAxMTV2luZG93cyBBenVyZSBUb29sczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAN0yF85/FGxqVzlE43DdaaOt7L+tZl7MTSM1c15RIrzzLEw4MNhCRFCklKR6iYUN2hnjO176fiSBSjZ5EdB9DRK2hvDVobOl4VNldWgbmkezl5qHAdGByiU8MDljnnoXvb6MY95b0DQJpWg/aLZtpVfPh7UE5vUvV3NfqqLVB4ETI96bYD/r9xC5yuiggFL8xuTeHJTrVHcESc+4dN0EA7wLP54FcabHt11mPFfsMrsFicD0e23JEQofpqki4JWswvFUlYaSy7i7dCUn+ag/PbUWD/a1Rm2MlzZul/E/UVodxenBbNmNshRTJRF1uio7Zr2uBvsxd+NkwD0zqhS7+fkCAwEAAaMXMBUwEwYDVR0lBAwwCgYIKwYBBQUHAwIwDQYJKoZIhvcNAQEFBQADggEBAEjpZ8iG2+DGB0AWWpRvzePXv3acrjPJpQSrESulp9XNpDonNBkvuSO80OkKxYpCCbG7H6au1gczcUgh3ICs7MSwSscIhhTdfnAgHxpRzYE6/BxwLSqhRpc4fpFLx9oq10MNbWVNQ7fqKun0cbex7AdLOJ5NWkEVrP8Bm2vlRfWehO84p1f9j7tD01mFN6ps3CENerNOJSyMfL5RxooIZm00QZ37xP+RCD86LVBN2/wH2ULn7Rzy8LaDTtZmkO31QSmqYaRCMr1eby9kXo8uqWD6aoPGrM2jc6nmDgX+KXGiQ9ilXCrjb+ZhFWVeAHbqWRPusCax2UnCSyE6l1h/Xns=\"\r\n }\r\n}", + "RequestBody": "{\r\n \"properties\": {\r\n \"certificate\": \"MIIC3TCCAcWgAwIBAgIQXMd31PGqur9FPYhcZ9VWHjANBgkqhkiG9w0BAQUFADAeMRwwGgYDVQQDExNXaW5kb3dzIEF6dXJlIFRvb2xzMB4XDTE1MDcwMjEzNTI0NloXDTE1MDcwNDE0MDI0NlowHjEcMBoGA1UEAxMTV2luZG93cyBBenVyZSBUb29sczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM6IsWTthdf0DSH/SAx116/roRYQFTblI03QV8Gq2xMy56UQk8u6lANA0kQEx2vDXDAlsH8IkNmDqBCFLi/AUXRxLCDKPNUDolyULiNcZAV/DPxSNhp8ywBvF0NGKxTQjo1ZCO6xdzCp8H7f1YunL6K/fjWgS/r9Hy77mpQH0HfMsAwWt6XMg1sxnmWC9xx9i6k8IezpKOo2gMym6HvhHAQD3keaPocrXGMS0MjbKbFVVOYmHRaPMV59ThE53WOcNLAUYz90EEs5G5DfDa1s7C5e0ndV3ni0dMngFNCBsB4BeFClS/JA3je8K5l4V/BSAq/JAvPwYrm6HOauQXXiu4cCAwEAAaMXMBUwEwYDVR0lBAwwCgYIKwYBBQUHAwIwDQYJKoZIhvcNAQEFBQADggEBAFWexhqGMs0eEGA0a9BsPis3vuTz5AfElSapcdZlrDxrF4TN/knnCPY8PFudiWOKMGCGDhZ1yOUel87P9FHdjaVPg+PARTD0ScM1l2kaA2kmvXERwU3Ktp0PXa34cPjPYGp9v2N2X7UjF0kDQmOzqkuCWREUkRxwKIv4gzDthG0X8Kcth2iPZVc7QGU+Az6yIhViNyR4eVNo20Y5ss18PSg1Ec94ek/ytF/BEIrcyUClu4UZFVDUKdMYgWYNxspClIw8l1pDkmPa37yh/9Lz0czEDAIdZ8dPRBgO9/nO/EKHbHXtNb6iI6zdwp/tm9i1yX2TgXN3ACEm1BBKS8z72Hg=\"\r\n }\r\n}", "RequestHeaders": { "Content-Type": [ "application/json" @@ -137,10 +137,10 @@ "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" ] }, - "ResponseBody": "{\r\n \"properties\": {\r\n \"certificate\": \"MIIC3TCCAcWgAwIBAgIQTECWXuTfh4FJo2pyQqyEczANBgkqhkiG9w0BAQUFADAeMRwwGgYDVQQDExNXaW5kb3dzIEF6dXJlIFRvb2xzMB4XDTE1MDcwMjA5MzcxNVoXDTE1MDcwNDA5NDcxNVowHjEcMBoGA1UEAxMTV2luZG93cyBBenVyZSBUb29sczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAN0yF85/FGxqVzlE43DdaaOt7L+tZl7MTSM1c15RIrzzLEw4MNhCRFCklKR6iYUN2hnjO176fiSBSjZ5EdB9DRK2hvDVobOl4VNldWgbmkezl5qHAdGByiU8MDljnnoXvb6MY95b0DQJpWg/aLZtpVfPh7UE5vUvV3NfqqLVB4ETI96bYD/r9xC5yuiggFL8xuTeHJTrVHcESc+4dN0EA7wLP54FcabHt11mPFfsMrsFicD0e23JEQofpqki4JWswvFUlYaSy7i7dCUn+ag/PbUWD/a1Rm2MlzZul/E/UVodxenBbNmNshRTJRF1uio7Zr2uBvsxd+NkwD0zqhS7+fkCAwEAAaMXMBUwEwYDVR0lBAwwCgYIKwYBBQUHAwIwDQYJKoZIhvcNAQEFBQADggEBAEjpZ8iG2+DGB0AWWpRvzePXv3acrjPJpQSrESulp9XNpDonNBkvuSO80OkKxYpCCbG7H6au1gczcUgh3ICs7MSwSscIhhTdfnAgHxpRzYE6/BxwLSqhRpc4fpFLx9oq10MNbWVNQ7fqKun0cbex7AdLOJ5NWkEVrP8Bm2vlRfWehO84p1f9j7tD01mFN6ps3CENerNOJSyMfL5RxooIZm00QZ37xP+RCD86LVBN2/wH2ULn7Rzy8LaDTtZmkO31QSmqYaRCMr1eby9kXo8uqWD6aoPGrM2jc6nmDgX+KXGiQ9ilXCrjb+ZhFWVeAHbqWRPusCax2UnCSyE6l1h/Xns=\",\r\n \"resourceId\": 3420983535961922368,\r\n \"globalAcsNamespace\": \"seadev01rrp1users\",\r\n \"globalAcsHostName\": \"accesscontrol.windows.net\",\r\n \"globalAcsRPRealm\": \"http://windowscloudbackup/m3\",\r\n \"subject\": \"CN=Windows Azure Tools\",\r\n \"validFrom\": \"2015-07-02T15:07:15+05:30\",\r\n \"validTo\": \"2015-07-04T15:17:15+05:30\",\r\n \"thumbprint\": \"478BF8B0D0F0AB869921297EE3A18A18043B9B09\",\r\n \"friendlyName\": \"\",\r\n \"issuer\": \"CN=Windows Azure Tools\"\r\n }\r\n}", + "ResponseBody": "{\r\n \"properties\": {\r\n \"certificate\": \"MIIC3TCCAcWgAwIBAgIQXMd31PGqur9FPYhcZ9VWHjANBgkqhkiG9w0BAQUFADAeMRwwGgYDVQQDExNXaW5kb3dzIEF6dXJlIFRvb2xzMB4XDTE1MDcwMjEzNTI0NloXDTE1MDcwNDE0MDI0NlowHjEcMBoGA1UEAxMTV2luZG93cyBBenVyZSBUb29sczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM6IsWTthdf0DSH/SAx116/roRYQFTblI03QV8Gq2xMy56UQk8u6lANA0kQEx2vDXDAlsH8IkNmDqBCFLi/AUXRxLCDKPNUDolyULiNcZAV/DPxSNhp8ywBvF0NGKxTQjo1ZCO6xdzCp8H7f1YunL6K/fjWgS/r9Hy77mpQH0HfMsAwWt6XMg1sxnmWC9xx9i6k8IezpKOo2gMym6HvhHAQD3keaPocrXGMS0MjbKbFVVOYmHRaPMV59ThE53WOcNLAUYz90EEs5G5DfDa1s7C5e0ndV3ni0dMngFNCBsB4BeFClS/JA3je8K5l4V/BSAq/JAvPwYrm6HOauQXXiu4cCAwEAAaMXMBUwEwYDVR0lBAwwCgYIKwYBBQUHAwIwDQYJKoZIhvcNAQEFBQADggEBAFWexhqGMs0eEGA0a9BsPis3vuTz5AfElSapcdZlrDxrF4TN/knnCPY8PFudiWOKMGCGDhZ1yOUel87P9FHdjaVPg+PARTD0ScM1l2kaA2kmvXERwU3Ktp0PXa34cPjPYGp9v2N2X7UjF0kDQmOzqkuCWREUkRxwKIv4gzDthG0X8Kcth2iPZVc7QGU+Az6yIhViNyR4eVNo20Y5ss18PSg1Ec94ek/ytF/BEIrcyUClu4UZFVDUKdMYgWYNxspClIw8l1pDkmPa37yh/9Lz0czEDAIdZ8dPRBgO9/nO/EKHbHXtNb6iI6zdwp/tm9i1yX2TgXN3ACEm1BBKS8z72Hg=\",\r\n \"resourceId\": 5089188015289137043,\r\n \"globalAcsNamespace\": \"wusppe1rrp1users\",\r\n \"globalAcsHostName\": \"accesscontrol.windows.net\",\r\n \"globalAcsRPRealm\": \"http://windowscloudbackup/m3\",\r\n \"subject\": \"CN=Windows Azure Tools\",\r\n \"validFrom\": \"2015-07-02T19:22:46+05:30\",\r\n \"validTo\": \"2015-07-04T19:32:46+05:30\",\r\n \"thumbprint\": \"6D7D8481178C53FA8B08C657F14389DD33714FD7\",\r\n \"friendlyName\": \"\",\r\n \"issuer\": \"CN=Windows Azure Tools\"\r\n }\r\n}", "ResponseHeaders": { "Content-Length": [ - "1410" + "1409" ], "Content-Type": [ "application/json" @@ -152,29 +152,29 @@ "no-cache" ], "x-ms-request-id": [ - "4d6b78de-c27c-4d47-8b63-31a813389066" + "c34f8cc0-e568-4af6-850d-cb8bf220314f" ], "x-ms-client-request-id": [ - "eb3055fc-e8a8-421b-b3a0-b175263c28db", - "eb3055fc-e8a8-421b-b3a0-b175263c28db" + "9dc9788b-6508-4565-8d17-1523707cceca", + "9dc9788b-6508-4565-8d17-1523707cceca" ], "Strict-Transport-Security": [ "max-age=31536000; includeSubDomains" ], "x-ms-ratelimit-remaining-subscription-writes": [ - "1196" + "1198" ], "x-ms-correlation-request-id": [ - "4d6b78de-c27c-4d47-8b63-31a813389066" + "c34f8cc0-e568-4af6-850d-cb8bf220314f" ], "x-ms-routing-request-id": [ - "CENTRALUS:20150702T094719Z:4d6b78de-c27c-4d47-8b63-31a813389066" + "CENTRALUS:20150702T140250Z:c34f8cc0-e568-4af6-850d-cb8bf220314f" ], "Cache-Control": [ "no-cache" ], "Date": [ - "Thu, 02 Jul 2015 09:47:19 GMT" + "Thu, 02 Jul 2015 14:02:50 GMT" ], "Server": [ "Microsoft-IIS/8.0" diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupVaultTests/SetAzureBackupVaultStorageTypeTests.json b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupVaultTests/SetAzureBackupVaultStorageTypeTests.json index dc7ea890b5a2..d8c682d06d70 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupVaultTests/SetAzureBackupVaultStorageTypeTests.json +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupVaultTests/SetAzureBackupVaultStorageTypeTests.json @@ -1,8 +1,74 @@ { "Entries": [ { - "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resources?$filter=resourceType%20eq%20'Microsoft.Backupseadev01/BackupVault'&$top=100&api-version=2013-03-01", - "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlcz8kZmlsdGVyPXJlc291cmNlVHlwZSUyMGVxJTIwJ01pY3Jvc29mdC5CYWNrdXBzZWFkZXYwMS9CYWNrdXBWYXVsdCcmJHRvcD0xMDAmYXBpLXZlcnNpb249MjAxMy0wMy0wMQ==", + "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backup/BackupVault/storagetestrn?api-version=2015-03-15", + "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3VwL0JhY2t1cFZhdWx0L3N0b3JhZ2V0ZXN0cm4/YXBpLXZlcnNpb249MjAxNS0wMy0xNQ==", + "RequestMethod": "PUT", + "RequestBody": "{\r\n \"properties\": {\r\n \"sku\": {\r\n \"name\": \"standard\"\r\n }\r\n },\r\n \"location\": \"westus\",\r\n \"tags\": {}\r\n}", + "RequestHeaders": { + "Content-Type": [ + "application/json; charset=utf-8" + ], + "Content-Length": [ + "115" + ], + "Accept-Language": [ + "en-us" + ], + "x-ms-client-request-id": [ + "beb2ec4a-23e7-4984-a879-049dd3859fa4-2015-07-02 14:03:05Z-PS" + ], + "User-Agent": [ + "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" + ] + }, + "ResponseBody": "{\r\n \"Location\": \"westus\",\r\n \"Name\": \"storagetestrn\",\r\n \"ETag\": \"299f68b3-f5be-49b7-9e00-0d02f2b10f58\",\r\n \"Tags\": {},\r\n \"Properties\": {\r\n \"sku\": {\r\n \"name\": \"standard\"\r\n },\r\n \"ProvisioningState\": \"Succeeded\"\r\n },\r\n \"Id\": \"/subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backup/BackupVault/storagetestrn\",\r\n \"Type\": \"Microsoft.Backup/BackupVault\"\r\n}", + "ResponseHeaders": { + "Content-Length": [ + "347" + ], + "Content-Type": [ + "application/json" + ], + "Expires": [ + "-1" + ], + "Pragma": [ + "no-cache" + ], + "x-ms-request-id": [ + "b1d86279-9a36-46c6-be0d-12848efdeb2b" + ], + "x-ms-client-request-id": [ + "beb2ec4a-23e7-4984-a879-049dd3859fa4-2015-07-02 14:03:05Z-PS" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "x-ms-ratelimit-remaining-subscription-writes": [ + "1197" + ], + "x-ms-correlation-request-id": [ + "b1d86279-9a36-46c6-be0d-12848efdeb2b" + ], + "x-ms-routing-request-id": [ + "CENTRALUS:20150702T140309Z:b1d86279-9a36-46c6-be0d-12848efdeb2b" + ], + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Thu, 02 Jul 2015 14:03:08 GMT" + ], + "Server": [ + "Microsoft-IIS/8.0" + ] + }, + "StatusCode": 201 + }, + { + "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resources?$filter=resourceType%20eq%20'Microsoft.Backup/BackupVault'&$top=100&api-version=2013-03-01", + "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlcz8kZmlsdGVyPXJlc291cmNlVHlwZSUyMGVxJTIwJ01pY3Jvc29mdC5CYWNrdXAvQmFja3VwVmF1bHQnJiR0b3A9MTAwJmFwaS12ZXJzaW9uPTIwMTMtMDMtMDE=", "RequestMethod": "GET", "RequestBody": "", "RequestHeaders": { @@ -10,16 +76,16 @@ "en-us" ], "x-ms-client-request-id": [ - "904b9d2b-eca0-4b1e-b381-eade67d644a1-2015-07-02 09:46:51Z-PS" + "14ae0e10-95db-44f5-b5cc-2a71164172b8-2015-07-02 14:03:08Z-PS" ], "User-Agent": [ "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" ] }, - "ResponseBody": "{\r\n \"value\": [\r\n {\r\n \"id\": \"/subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn\",\r\n \"name\": \"backuprn\",\r\n \"type\": \"Microsoft.Backupseadev01/BackupVault\",\r\n \"location\": \"westus\",\r\n \"tags\": {\r\n \"department\": \"finance\"\r\n }\r\n },\r\n {\r\n \"id\": \"/subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/endtoendrn\",\r\n \"name\": \"endtoendrn\",\r\n \"type\": \"Microsoft.Backupseadev01/BackupVault\",\r\n \"location\": \"westus\",\r\n \"tags\": {}\r\n },\r\n {\r\n \"id\": \"/subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/storagetestrn1\",\r\n \"name\": \"storagetestrn1\",\r\n \"type\": \"Microsoft.Backupseadev01/BackupVault\",\r\n \"location\": \"westus\",\r\n \"tags\": {}\r\n },\r\n {\r\n \"id\": \"/subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/storagetestrn2\",\r\n \"name\": \"storagetestrn2\",\r\n \"type\": \"Microsoft.Backupseadev01/BackupVault\",\r\n \"location\": \"westus\",\r\n \"tags\": {}\r\n },\r\n {\r\n \"id\": \"/subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/trialrn\",\r\n \"name\": \"trialrn\",\r\n \"type\": \"Microsoft.Backupseadev01/BackupVault\",\r\n \"location\": \"westus\",\r\n \"tags\": {}\r\n },\r\n {\r\n \"id\": \"/subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/mkheranivault/providers/Microsoft.Backupseadev01/BackupVault/mkheranivault\",\r\n \"name\": \"mkheranivault\",\r\n \"type\": \"Microsoft.Backupseadev01/BackupVault\",\r\n \"location\": \"westus\",\r\n \"tags\": {}\r\n },\r\n {\r\n \"id\": \"/subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/pragrawa-rg2/providers/Microsoft.Backupseadev01/BackupVault/pragrawa-rn2\",\r\n \"name\": \"pragrawa-rn2\",\r\n \"type\": \"Microsoft.Backupseadev01/BackupVault\",\r\n \"location\": \"westus\",\r\n \"tags\": {\r\n \"department\": \"finance\"\r\n }\r\n },\r\n {\r\n \"id\": \"/subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/swatirg1/providers/Microsoft.Backupseadev01/BackupVault/swatirn1\",\r\n \"name\": \"swatirn1\",\r\n \"type\": \"Microsoft.Backupseadev01/BackupVault\",\r\n \"location\": \"westus\",\r\n \"tags\": {\r\n \"department\": \"finance\"\r\n }\r\n },\r\n {\r\n \"id\": \"/subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/swatirg2/providers/Microsoft.Backupseadev01/BackupVault/swatirn2\",\r\n \"name\": \"swatirn2\",\r\n \"type\": \"Microsoft.Backupseadev01/BackupVault\",\r\n \"location\": \"westus\",\r\n \"tags\": {\r\n \"department\": \"finance\"\r\n }\r\n },\r\n {\r\n \"id\": \"/subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/TestRG17/providers/Microsoft.Backupseadev01/BackupVault/SwatiResource\",\r\n \"name\": \"SwatiResource\",\r\n \"type\": \"Microsoft.Backupseadev01/BackupVault\",\r\n \"location\": \"westus\",\r\n \"tags\": {\r\n \"department\": \"finance\"\r\n }\r\n },\r\n {\r\n \"id\": \"/subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/TestRG17/providers/Microsoft.Backupseadev01/BackupVault/TestResource13\",\r\n \"name\": \"TestResource13\",\r\n \"type\": \"Microsoft.Backupseadev01/BackupVault\",\r\n \"location\": \"westus\",\r\n \"tags\": {\r\n \"department\": \"finance\"\r\n }\r\n },\r\n {\r\n \"id\": \"/subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/TestRG17/providers/Microsoft.Backupseadev01/BackupVault/TestResource14\",\r\n \"name\": \"TestResource14\",\r\n \"type\": \"Microsoft.Backupseadev01/BackupVault\",\r\n \"location\": \"westus\",\r\n \"tags\": {}\r\n }\r\n ]\r\n}", + "ResponseBody": "{\r\n \"value\": [\r\n {\r\n \"id\": \"/subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backup/BackupVault/backuprn\",\r\n \"name\": \"backuprn\",\r\n \"type\": \"Microsoft.Backup/BackupVault\",\r\n \"location\": \"westus\",\r\n \"tags\": {}\r\n },\r\n {\r\n \"id\": \"/subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backup/BackupVault/storagetestrn\",\r\n \"name\": \"storagetestrn\",\r\n \"type\": \"Microsoft.Backup/BackupVault\",\r\n \"location\": \"westus\",\r\n \"tags\": {}\r\n }\r\n ]\r\n}", "ResponseHeaders": { "Content-Length": [ - "3050" + "459" ], "Content-Type": [ "application/json; charset=utf-8" @@ -31,16 +97,16 @@ "no-cache" ], "x-ms-ratelimit-remaining-subscription-reads": [ - "14989" + "14992" ], "x-ms-request-id": [ - "9baf01f3-d229-493a-891c-05fbd9dac5c7" + "f5726a15-2fa9-406b-b78b-aec979d4b752" ], "x-ms-correlation-request-id": [ - "9baf01f3-d229-493a-891c-05fbd9dac5c7" + "f5726a15-2fa9-406b-b78b-aec979d4b752" ], "x-ms-routing-request-id": [ - "CENTRALUS:20150702T094653Z:9baf01f3-d229-493a-891c-05fbd9dac5c7" + "CENTRALUS:20150702T140309Z:f5726a15-2fa9-406b-b78b-aec979d4b752" ], "Strict-Transport-Security": [ "max-age=31536000; includeSubDomains" @@ -49,14 +115,14 @@ "no-cache" ], "Date": [ - "Thu, 02 Jul 2015 09:46:52 GMT" + "Thu, 02 Jul 2015 14:03:09 GMT" ] }, "StatusCode": 200 }, { - "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/storageconfig/vaultstorageconfig?api-version=2015-03-15", - "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vc3RvcmFnZWNvbmZpZy92YXVsdHN0b3JhZ2Vjb25maWc/YXBpLXZlcnNpb249MjAxNS0wMy0xNQ==", + "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backup/BackupVault/storagetestrn/storageconfig/vaultstorageconfig?api-version=2015-03-15", + "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3VwL0JhY2t1cFZhdWx0L3N0b3JhZ2V0ZXN0cm4vc3RvcmFnZWNvbmZpZy92YXVsdHN0b3JhZ2Vjb25maWc/YXBpLXZlcnNpb249MjAxNS0wMy0xNQ==", "RequestMethod": "GET", "RequestBody": "", "RequestHeaders": { @@ -64,16 +130,16 @@ "en-us" ], "x-ms-client-request-id": [ - "904b9d2b-eca0-4b1e-b381-eade67d644a1-2015-07-02 09:46:51Z-PS" + "14ae0e10-95db-44f5-b5cc-2a71164172b8-2015-07-02 14:03:08Z-PS" ], "User-Agent": [ "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" ] }, - "ResponseBody": "{\r\n \"resourceId\": 3420983535961922368,\r\n \"properties\": {\r\n \"storageType\": \"GeoRedundant\",\r\n \"storageTypeState\": \"Locked\"\r\n }\r\n}", + "ResponseBody": "{\r\n \"resourceId\": 4300944680085393101,\r\n \"properties\": {\r\n \"storageType\": \"GeoRedundant\",\r\n \"storageTypeState\": \"Unlocked\"\r\n }\r\n}", "ResponseHeaders": { "Content-Length": [ - "106" + "108" ], "Content-Type": [ "application/json" @@ -85,29 +151,29 @@ "no-cache" ], "x-ms-request-id": [ - "7d95a336-0fc2-4783-b0c0-f4ba1994e58f" + "8586b538-1c9c-4a1e-8746-b12099649084" ], "x-ms-client-request-id": [ - "904b9d2b-eca0-4b1e-b381-eade67d644a1-2015-07-02 09:46:51Z-PS", - "904b9d2b-eca0-4b1e-b381-eade67d644a1-2015-07-02 09:46:51Z-PS" + "14ae0e10-95db-44f5-b5cc-2a71164172b8-2015-07-02 14:03:08Z-PS", + "14ae0e10-95db-44f5-b5cc-2a71164172b8-2015-07-02 14:03:08Z-PS" ], "Strict-Transport-Security": [ "max-age=31536000; includeSubDomains" ], "x-ms-ratelimit-remaining-subscription-reads": [ - "14988" + "14991" ], "x-ms-correlation-request-id": [ - "7d95a336-0fc2-4783-b0c0-f4ba1994e58f" + "8586b538-1c9c-4a1e-8746-b12099649084" ], "x-ms-routing-request-id": [ - "CENTRALUS:20150702T094655Z:7d95a336-0fc2-4783-b0c0-f4ba1994e58f" + "CENTRALUS:20150702T140310Z:8586b538-1c9c-4a1e-8746-b12099649084" ], "Cache-Control": [ "no-cache" ], "Date": [ - "Thu, 02 Jul 2015 09:46:55 GMT" + "Thu, 02 Jul 2015 14:03:09 GMT" ], "Server": [ "Microsoft-IIS/8.0" @@ -116,8 +182,8 @@ "StatusCode": 200 }, { - "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/storageconfig/vaultstorageconfig?api-version=2015-03-15", - "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vc3RvcmFnZWNvbmZpZy92YXVsdHN0b3JhZ2Vjb25maWc/YXBpLXZlcnNpb249MjAxNS0wMy0xNQ==", + "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backup/BackupVault/backuprn/storageconfig/vaultstorageconfig?api-version=2015-03-15", + "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3VwL0JhY2t1cFZhdWx0L2JhY2t1cHJuL3N0b3JhZ2Vjb25maWcvdmF1bHRzdG9yYWdlY29uZmlnP2FwaS12ZXJzaW9uPTIwMTUtMDMtMTU=", "RequestMethod": "PATCH", "RequestBody": "{\r\n \"properties\": {\r\n \"storageModelType\": \"GeoRedundant\"\r\n }\r\n}", "RequestHeaders": { @@ -131,7 +197,7 @@ "en-us" ], "x-ms-client-request-id": [ - "c3cbdb0a-07a1-4da8-9030-fd2e4a1cb8c8-2015-07-02 09:46:55Z-PS" + "5563afaf-bd7e-4677-b985-cfbfc19715c9-2015-07-02 14:03:10Z-PS" ], "x-ms-version": [ "2013-03-01" @@ -140,13 +206,10 @@ "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" ] }, - "ResponseBody": "{\r\n \"Error\": {\r\n \"Code\": \"StorageModelModifyError\",\r\n \"Message\": \"Storage Redundancy option is locked when the first machine is registered with the vault, and cannot be modified thereafter.\",\r\n \"Target\": null,\r\n \"Details\": null,\r\n \"InnerError\": null\r\n }\r\n}", + "ResponseBody": "", "ResponseHeaders": { "Content-Length": [ - "227" - ], - "Content-Type": [ - "application/json" + "0" ], "Expires": [ "-1" @@ -155,42 +218,36 @@ "no-cache" ], "x-ms-request-id": [ - "fd723a8a-b129-4839-b8b4-ecd4932688ac" + "c4f2b466-63bc-4a2f-8915-4b7ce854c448" ], "x-ms-client-request-id": [ - "c3cbdb0a-07a1-4da8-9030-fd2e4a1cb8c8-2015-07-02 09:46:55Z-PS", - "c3cbdb0a-07a1-4da8-9030-fd2e4a1cb8c8-2015-07-02 09:46:55Z-PS" + "5563afaf-bd7e-4677-b985-cfbfc19715c9-2015-07-02 14:03:10Z-PS", + "5563afaf-bd7e-4677-b985-cfbfc19715c9-2015-07-02 14:03:10Z-PS" ], "Strict-Transport-Security": [ "max-age=31536000; includeSubDomains" ], "x-ms-ratelimit-remaining-subscription-writes": [ - "1199" + "1196" ], "x-ms-correlation-request-id": [ - "fd723a8a-b129-4839-b8b4-ecd4932688ac" + "c4f2b466-63bc-4a2f-8915-4b7ce854c448" ], "x-ms-routing-request-id": [ - "CENTRALUS:20150702T094656Z:fd723a8a-b129-4839-b8b4-ecd4932688ac" - ], - "Connection": [ - "close" + "CENTRALUS:20150702T140311Z:c4f2b466-63bc-4a2f-8915-4b7ce854c448" ], "Cache-Control": [ "no-cache" ], "Date": [ - "Thu, 02 Jul 2015 09:46:56 GMT" - ], - "Server": [ - "Microsoft-IIS/8.0" + "Thu, 02 Jul 2015 14:03:11 GMT" ] }, - "StatusCode": 403 + "StatusCode": 204 }, { - "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backupseadev01/BackupVault/backuprn/storageconfig/vaultstorageconfig?api-version=2015-03-15", - "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3Vwc2VhZGV2MDEvQmFja3VwVmF1bHQvYmFja3Vwcm4vc3RvcmFnZWNvbmZpZy92YXVsdHN0b3JhZ2Vjb25maWc/YXBpLXZlcnNpb249MjAxNS0wMy0xNQ==", + "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backup/BackupVault/backuprn/storageconfig/vaultstorageconfig?api-version=2015-03-15", + "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3VwL0JhY2t1cFZhdWx0L2JhY2t1cHJuL3N0b3JhZ2Vjb25maWcvdmF1bHRzdG9yYWdlY29uZmlnP2FwaS12ZXJzaW9uPTIwMTUtMDMtMTU=", "RequestMethod": "PATCH", "RequestBody": "{\r\n \"properties\": {\r\n \"storageModelType\": \"LocallyRedundant\"\r\n }\r\n}", "RequestHeaders": { @@ -204,7 +261,7 @@ "en-us" ], "x-ms-client-request-id": [ - "c9020526-b0e2-479d-b46e-4aba628b0227-2015-07-02 09:46:56Z-PS" + "886e1b73-c4a0-4efd-9c8e-f3a327e5c3e2-2015-07-02 14:03:11Z-PS" ], "x-ms-version": [ "2013-03-01" @@ -213,14 +270,75 @@ "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" ] }, - "ResponseBody": "{\r\n \"Error\": {\r\n \"Code\": \"StorageModelModifyError\",\r\n \"Message\": \"Storage Redundancy option is locked when the first machine is registered with the vault, and cannot be modified thereafter.\",\r\n \"Target\": null,\r\n \"Details\": null,\r\n \"InnerError\": null\r\n }\r\n}", + "ResponseBody": "", "ResponseHeaders": { "Content-Length": [ - "227" + "0" + ], + "Expires": [ + "-1" + ], + "Pragma": [ + "no-cache" + ], + "x-ms-request-id": [ + "6680b69b-50fb-4e39-b99d-c1ca73f9ce40" + ], + "x-ms-client-request-id": [ + "886e1b73-c4a0-4efd-9c8e-f3a327e5c3e2-2015-07-02 14:03:11Z-PS", + "886e1b73-c4a0-4efd-9c8e-f3a327e5c3e2-2015-07-02 14:03:11Z-PS" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "x-ms-ratelimit-remaining-subscription-writes": [ + "1195" + ], + "x-ms-correlation-request-id": [ + "6680b69b-50fb-4e39-b99d-c1ca73f9ce40" ], + "x-ms-routing-request-id": [ + "CENTRALUS:20150702T140313Z:6680b69b-50fb-4e39-b99d-c1ca73f9ce40" + ], + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Thu, 02 Jul 2015 14:03:13 GMT" + ] + }, + "StatusCode": 204 + }, + { + "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backup/BackupVault/backuprn/storageconfig/vaultstorageconfig?api-version=2015-03-15", + "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3VwL0JhY2t1cFZhdWx0L2JhY2t1cHJuL3N0b3JhZ2Vjb25maWcvdmF1bHRzdG9yYWdlY29uZmlnP2FwaS12ZXJzaW9uPTIwMTUtMDMtMTU=", + "RequestMethod": "PATCH", + "RequestBody": "{\r\n \"properties\": {\r\n \"storageModelType\": \"GeoRedundant\"\r\n }\r\n}", + "RequestHeaders": { "Content-Type": [ "application/json" ], + "Content-Length": [ + "68" + ], + "Accept-Language": [ + "en-us" + ], + "x-ms-client-request-id": [ + "b6cb7513-1e16-425f-b400-efbeaf66e3b7-2015-07-02 14:03:13Z-PS" + ], + "x-ms-version": [ + "2013-03-01" + ], + "User-Agent": [ + "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" + ] + }, + "ResponseBody": "", + "ResponseHeaders": { + "Content-Length": [ + "0" + ], "Expires": [ "-1" ], @@ -228,38 +346,150 @@ "no-cache" ], "x-ms-request-id": [ - "60902c89-e785-4715-bab9-df78d3388245" + "127a2430-226c-4d3e-8c06-b6da67c5e73d" ], "x-ms-client-request-id": [ - "c9020526-b0e2-479d-b46e-4aba628b0227-2015-07-02 09:46:56Z-PS", - "c9020526-b0e2-479d-b46e-4aba628b0227-2015-07-02 09:46:56Z-PS" + "b6cb7513-1e16-425f-b400-efbeaf66e3b7-2015-07-02 14:03:13Z-PS", + "b6cb7513-1e16-425f-b400-efbeaf66e3b7-2015-07-02 14:03:13Z-PS" ], "Strict-Transport-Security": [ "max-age=31536000; includeSubDomains" ], "x-ms-ratelimit-remaining-subscription-writes": [ - "1198" + "1194" ], "x-ms-correlation-request-id": [ - "60902c89-e785-4715-bab9-df78d3388245" + "127a2430-226c-4d3e-8c06-b6da67c5e73d" ], "x-ms-routing-request-id": [ - "CENTRALUS:20150702T094659Z:60902c89-e785-4715-bab9-df78d3388245" + "CENTRALUS:20150702T140314Z:127a2430-226c-4d3e-8c06-b6da67c5e73d" + ], + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Thu, 02 Jul 2015 14:03:14 GMT" + ] + }, + "StatusCode": 204 + }, + { + "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backup/BackupVault/backuprn/storageconfig/vaultstorageconfig?api-version=2015-03-15", + "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3VwL0JhY2t1cFZhdWx0L2JhY2t1cHJuL3N0b3JhZ2Vjb25maWcvdmF1bHRzdG9yYWdlY29uZmlnP2FwaS12ZXJzaW9uPTIwMTUtMDMtMTU=", + "RequestMethod": "PATCH", + "RequestBody": "{\r\n \"properties\": {\r\n \"storageModelType\": \"LocallyRedundant\"\r\n }\r\n}", + "RequestHeaders": { + "Content-Type": [ + "application/json" + ], + "Content-Length": [ + "72" + ], + "Accept-Language": [ + "en-us" + ], + "x-ms-client-request-id": [ + "2ffa60dd-7ecf-4ce7-ab69-6331c4d8ce36-2015-07-02 14:03:14Z-PS" + ], + "x-ms-version": [ + "2013-03-01" + ], + "User-Agent": [ + "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" + ] + }, + "ResponseBody": "", + "ResponseHeaders": { + "Content-Length": [ + "0" ], - "Connection": [ - "close" + "Expires": [ + "-1" + ], + "Pragma": [ + "no-cache" + ], + "x-ms-request-id": [ + "0253a3d9-d123-47a0-83fe-cad21fc6f343" + ], + "x-ms-client-request-id": [ + "2ffa60dd-7ecf-4ce7-ab69-6331c4d8ce36-2015-07-02 14:03:14Z-PS", + "2ffa60dd-7ecf-4ce7-ab69-6331c4d8ce36-2015-07-02 14:03:14Z-PS" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "x-ms-ratelimit-remaining-subscription-writes": [ + "1193" + ], + "x-ms-correlation-request-id": [ + "0253a3d9-d123-47a0-83fe-cad21fc6f343" + ], + "x-ms-routing-request-id": [ + "CENTRALUS:20150702T140315Z:0253a3d9-d123-47a0-83fe-cad21fc6f343" ], "Cache-Control": [ "no-cache" ], "Date": [ - "Thu, 02 Jul 2015 09:46:58 GMT" + "Thu, 02 Jul 2015 14:03:15 GMT" + ] + }, + "StatusCode": 204 + }, + { + "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backup/BackupVault/storagetestrn?api-version=2015-03-15", + "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3VwL0JhY2t1cFZhdWx0L3N0b3JhZ2V0ZXN0cm4/YXBpLXZlcnNpb249MjAxNS0wMy0xNQ==", + "RequestMethod": "DELETE", + "RequestBody": "", + "RequestHeaders": { + "Accept-Language": [ + "en-us" ], - "Server": [ - "Microsoft-IIS/8.0" + "x-ms-client-request-id": [ + "148d34fe-b827-479a-8141-bd29e82dbe91-2015-07-02 14:03:15Z-PS" + ], + "User-Agent": [ + "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" ] }, - "StatusCode": 403 + "ResponseBody": "", + "ResponseHeaders": { + "Content-Length": [ + "0" + ], + "Expires": [ + "-1" + ], + "Pragma": [ + "no-cache" + ], + "x-ms-request-id": [ + "d039d092-2eda-47cd-9d67-c8564fc97f64" + ], + "x-ms-client-request-id": [ + "148d34fe-b827-479a-8141-bd29e82dbe91-2015-07-02 14:03:15Z-PS" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "x-ms-ratelimit-remaining-subscription-writes": [ + "1192" + ], + "x-ms-correlation-request-id": [ + "d039d092-2eda-47cd-9d67-c8564fc97f64" + ], + "x-ms-routing-request-id": [ + "CENTRALUS:20150702T140317Z:d039d092-2eda-47cd-9d67-c8564fc97f64" + ], + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Thu, 02 Jul 2015 14:03:17 GMT" + ] + }, + "StatusCode": 200 } ], "Names": {}, From 2d57a340ce29ca3be755c0ce60f6565f1b62e5a2 Mon Sep 17 00:00:00 2001 From: dragonfly91 Date: Fri, 3 Jul 2015 16:45:43 +0530 Subject: [PATCH 132/155] Added validation to Set-AzureBackupVaultStorageType cmdlet test. --- .../ScenarioTests/AzureBackupVaultTests.ps1 | 20 +- .../SetAzureBackupVaultStorageTypeTests.json | 288 ++++++++---------- 2 files changed, 142 insertions(+), 166 deletions(-) diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupVaultTests.ps1 b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupVaultTests.ps1 index 7b371c74c5b6..a59a47e5b223 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupVaultTests.ps1 +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupVaultTests.ps1 @@ -28,19 +28,13 @@ function Test-GetAzureBackupVaultCredentialsReturnsFileNameAndDownloadsCert function Test-SetAzureBackupVaultStorageTypeWithFreshResourceDoesNotThrowException { - $freshVaultName = "storagetestrn"; - - Assert-Throws { New-AzureBackupVault -ResourceGroupName $ResourceGroupName -Name $freshVaultName -Region $Location }; - - $freshVault = Get-AzureBackupVault -Name $freshVaultName; + $vault = Get-AzureBackupVault -Name $ResourceName; - Set-AzureBackupVaultStorageType $freshVault -Type GeoRedundant - - Set-AzureBackupVaultStorageType $freshVault -Type LocallyRedundant - - Set-AzureBackupVaultStorageType $freshVault -Type GeoRedundant - - Set-AzureBackupVaultStorageType $freshVault -Type LocallyRedundant + Set-AzureBackupVaultStorageType -Vault $vault -Type "GeoRedundant"; + $vault = Get-AzureBackupVault -Name $ResourceName; + Assert-AreEqual $vault.Storage "GeoRedundant"; - Remove-AzureBackupVault -vault $freshVault + Set-AzureBackupVaultStorageType -Vault $vault -Type "LocallyRedundant"; + $vault = Get-AzureBackupVault -Name $ResourceName; + Assert-AreEqual $vault.Storage "LocallyRedundant"; } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupVaultTests/SetAzureBackupVaultStorageTypeTests.json b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupVaultTests/SetAzureBackupVaultStorageTypeTests.json index d8c682d06d70..eb2835b65786 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupVaultTests/SetAzureBackupVaultStorageTypeTests.json +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupVaultTests/SetAzureBackupVaultStorageTypeTests.json @@ -1,34 +1,28 @@ { "Entries": [ { - "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backup/BackupVault/storagetestrn?api-version=2015-03-15", - "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3VwL0JhY2t1cFZhdWx0L3N0b3JhZ2V0ZXN0cm4/YXBpLXZlcnNpb249MjAxNS0wMy0xNQ==", - "RequestMethod": "PUT", - "RequestBody": "{\r\n \"properties\": {\r\n \"sku\": {\r\n \"name\": \"standard\"\r\n }\r\n },\r\n \"location\": \"westus\",\r\n \"tags\": {}\r\n}", + "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resources?$filter=resourceType%20eq%20'Microsoft.Backup/BackupVault'&$top=100&api-version=2013-03-01", + "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlcz8kZmlsdGVyPXJlc291cmNlVHlwZSUyMGVxJTIwJ01pY3Jvc29mdC5CYWNrdXAvQmFja3VwVmF1bHQnJiR0b3A9MTAwJmFwaS12ZXJzaW9uPTIwMTMtMDMtMDE=", + "RequestMethod": "GET", + "RequestBody": "", "RequestHeaders": { - "Content-Type": [ - "application/json; charset=utf-8" - ], - "Content-Length": [ - "115" - ], "Accept-Language": [ "en-us" ], "x-ms-client-request-id": [ - "beb2ec4a-23e7-4984-a879-049dd3859fa4-2015-07-02 14:03:05Z-PS" + "872537bf-88e0-46ba-b0e7-5880e0b93b78-2015-07-03 11:08:00Z-PS" ], "User-Agent": [ "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" ] }, - "ResponseBody": "{\r\n \"Location\": \"westus\",\r\n \"Name\": \"storagetestrn\",\r\n \"ETag\": \"299f68b3-f5be-49b7-9e00-0d02f2b10f58\",\r\n \"Tags\": {},\r\n \"Properties\": {\r\n \"sku\": {\r\n \"name\": \"standard\"\r\n },\r\n \"ProvisioningState\": \"Succeeded\"\r\n },\r\n \"Id\": \"/subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backup/BackupVault/storagetestrn\",\r\n \"Type\": \"Microsoft.Backup/BackupVault\"\r\n}", + "ResponseBody": "{\r\n \"value\": [\r\n {\r\n \"id\": \"/subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backup/BackupVault/backuprn\",\r\n \"name\": \"backuprn\",\r\n \"type\": \"Microsoft.Backup/BackupVault\",\r\n \"location\": \"westus\",\r\n \"tags\": {}\r\n }\r\n ]\r\n}", "ResponseHeaders": { "Content-Length": [ - "347" + "230" ], "Content-Type": [ - "application/json" + "application/json; charset=utf-8" ], "Expires": [ "-1" @@ -36,35 +30,29 @@ "Pragma": [ "no-cache" ], - "x-ms-request-id": [ - "b1d86279-9a36-46c6-be0d-12848efdeb2b" - ], - "x-ms-client-request-id": [ - "beb2ec4a-23e7-4984-a879-049dd3859fa4-2015-07-02 14:03:05Z-PS" - ], - "Strict-Transport-Security": [ - "max-age=31536000; includeSubDomains" + "x-ms-ratelimit-remaining-subscription-reads": [ + "14990" ], - "x-ms-ratelimit-remaining-subscription-writes": [ - "1197" + "x-ms-request-id": [ + "b06dc45e-abd4-4c14-bcaa-45883b35b8d9" ], "x-ms-correlation-request-id": [ - "b1d86279-9a36-46c6-be0d-12848efdeb2b" + "b06dc45e-abd4-4c14-bcaa-45883b35b8d9" ], "x-ms-routing-request-id": [ - "CENTRALUS:20150702T140309Z:b1d86279-9a36-46c6-be0d-12848efdeb2b" + "CENTRALUS:20150703T110802Z:b06dc45e-abd4-4c14-bcaa-45883b35b8d9" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" ], "Cache-Control": [ "no-cache" ], "Date": [ - "Thu, 02 Jul 2015 14:03:08 GMT" - ], - "Server": [ - "Microsoft-IIS/8.0" + "Fri, 03 Jul 2015 11:08:02 GMT" ] }, - "StatusCode": 201 + "StatusCode": 200 }, { "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resources?$filter=resourceType%20eq%20'Microsoft.Backup/BackupVault'&$top=100&api-version=2013-03-01", @@ -76,16 +64,16 @@ "en-us" ], "x-ms-client-request-id": [ - "14ae0e10-95db-44f5-b5cc-2a71164172b8-2015-07-02 14:03:08Z-PS" + "491f85ea-bdc5-4f22-ba8e-debc7c2a2f6d-2015-07-03 11:08:03Z-PS" ], "User-Agent": [ "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" ] }, - "ResponseBody": "{\r\n \"value\": [\r\n {\r\n \"id\": \"/subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backup/BackupVault/backuprn\",\r\n \"name\": \"backuprn\",\r\n \"type\": \"Microsoft.Backup/BackupVault\",\r\n \"location\": \"westus\",\r\n \"tags\": {}\r\n },\r\n {\r\n \"id\": \"/subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backup/BackupVault/storagetestrn\",\r\n \"name\": \"storagetestrn\",\r\n \"type\": \"Microsoft.Backup/BackupVault\",\r\n \"location\": \"westus\",\r\n \"tags\": {}\r\n }\r\n ]\r\n}", + "ResponseBody": "{\r\n \"value\": [\r\n {\r\n \"id\": \"/subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backup/BackupVault/backuprn\",\r\n \"name\": \"backuprn\",\r\n \"type\": \"Microsoft.Backup/BackupVault\",\r\n \"location\": \"westus\",\r\n \"tags\": {}\r\n }\r\n ]\r\n}", "ResponseHeaders": { "Content-Length": [ - "459" + "230" ], "Content-Type": [ "application/json; charset=utf-8" @@ -97,16 +85,16 @@ "no-cache" ], "x-ms-ratelimit-remaining-subscription-reads": [ - "14992" + "14988" ], "x-ms-request-id": [ - "f5726a15-2fa9-406b-b78b-aec979d4b752" + "6971380e-7c18-45b3-aa45-e4e38a8cef8d" ], "x-ms-correlation-request-id": [ - "f5726a15-2fa9-406b-b78b-aec979d4b752" + "6971380e-7c18-45b3-aa45-e4e38a8cef8d" ], "x-ms-routing-request-id": [ - "CENTRALUS:20150702T140309Z:f5726a15-2fa9-406b-b78b-aec979d4b752" + "CENTRALUS:20150703T110804Z:6971380e-7c18-45b3-aa45-e4e38a8cef8d" ], "Strict-Transport-Security": [ "max-age=31536000; includeSubDomains" @@ -115,14 +103,14 @@ "no-cache" ], "Date": [ - "Thu, 02 Jul 2015 14:03:09 GMT" + "Fri, 03 Jul 2015 11:08:04 GMT" ] }, "StatusCode": 200 }, { - "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backup/BackupVault/storagetestrn/storageconfig/vaultstorageconfig?api-version=2015-03-15", - "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3VwL0JhY2t1cFZhdWx0L3N0b3JhZ2V0ZXN0cm4vc3RvcmFnZWNvbmZpZy92YXVsdHN0b3JhZ2Vjb25maWc/YXBpLXZlcnNpb249MjAxNS0wMy0xNQ==", + "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resources?$filter=resourceType%20eq%20'Microsoft.Backup/BackupVault'&$top=100&api-version=2013-03-01", + "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlcz8kZmlsdGVyPXJlc291cmNlVHlwZSUyMGVxJTIwJ01pY3Jvc29mdC5CYWNrdXAvQmFja3VwVmF1bHQnJiR0b3A9MTAwJmFwaS12ZXJzaW9uPTIwMTMtMDMtMDE=", "RequestMethod": "GET", "RequestBody": "", "RequestHeaders": { @@ -130,19 +118,19 @@ "en-us" ], "x-ms-client-request-id": [ - "14ae0e10-95db-44f5-b5cc-2a71164172b8-2015-07-02 14:03:08Z-PS" + "60ce1104-8270-44bf-acb7-115661d1a02d-2015-07-03 11:08:06Z-PS" ], "User-Agent": [ "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" ] }, - "ResponseBody": "{\r\n \"resourceId\": 4300944680085393101,\r\n \"properties\": {\r\n \"storageType\": \"GeoRedundant\",\r\n \"storageTypeState\": \"Unlocked\"\r\n }\r\n}", + "ResponseBody": "{\r\n \"value\": [\r\n {\r\n \"id\": \"/subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backup/BackupVault/backuprn\",\r\n \"name\": \"backuprn\",\r\n \"type\": \"Microsoft.Backup/BackupVault\",\r\n \"location\": \"westus\",\r\n \"tags\": {}\r\n }\r\n ]\r\n}", "ResponseHeaders": { "Content-Length": [ - "108" + "230" ], "Content-Type": [ - "application/json" + "application/json; charset=utf-8" ], "Expires": [ "-1" @@ -150,33 +138,26 @@ "Pragma": [ "no-cache" ], - "x-ms-request-id": [ - "8586b538-1c9c-4a1e-8746-b12099649084" - ], - "x-ms-client-request-id": [ - "14ae0e10-95db-44f5-b5cc-2a71164172b8-2015-07-02 14:03:08Z-PS", - "14ae0e10-95db-44f5-b5cc-2a71164172b8-2015-07-02 14:03:08Z-PS" - ], - "Strict-Transport-Security": [ - "max-age=31536000; includeSubDomains" - ], "x-ms-ratelimit-remaining-subscription-reads": [ - "14991" + "14986" + ], + "x-ms-request-id": [ + "7e89671e-c0f2-4d81-9a35-350fb3162e7f" ], "x-ms-correlation-request-id": [ - "8586b538-1c9c-4a1e-8746-b12099649084" + "7e89671e-c0f2-4d81-9a35-350fb3162e7f" ], "x-ms-routing-request-id": [ - "CENTRALUS:20150702T140310Z:8586b538-1c9c-4a1e-8746-b12099649084" + "CENTRALUS:20150703T110806Z:7e89671e-c0f2-4d81-9a35-350fb3162e7f" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" ], "Cache-Control": [ "no-cache" ], "Date": [ - "Thu, 02 Jul 2015 14:03:09 GMT" - ], - "Server": [ - "Microsoft-IIS/8.0" + "Fri, 03 Jul 2015 11:08:06 GMT" ] }, "StatusCode": 200 @@ -184,32 +165,26 @@ { "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backup/BackupVault/backuprn/storageconfig/vaultstorageconfig?api-version=2015-03-15", "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3VwL0JhY2t1cFZhdWx0L2JhY2t1cHJuL3N0b3JhZ2Vjb25maWcvdmF1bHRzdG9yYWdlY29uZmlnP2FwaS12ZXJzaW9uPTIwMTUtMDMtMTU=", - "RequestMethod": "PATCH", - "RequestBody": "{\r\n \"properties\": {\r\n \"storageModelType\": \"GeoRedundant\"\r\n }\r\n}", + "RequestMethod": "GET", + "RequestBody": "", "RequestHeaders": { - "Content-Type": [ - "application/json" - ], - "Content-Length": [ - "68" - ], "Accept-Language": [ "en-us" ], "x-ms-client-request-id": [ - "5563afaf-bd7e-4677-b985-cfbfc19715c9-2015-07-02 14:03:10Z-PS" - ], - "x-ms-version": [ - "2013-03-01" + "872537bf-88e0-46ba-b0e7-5880e0b93b78-2015-07-03 11:08:00Z-PS" ], "User-Agent": [ "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" ] }, - "ResponseBody": "", + "ResponseBody": "{\r\n \"resourceId\": 8420362025804603700,\r\n \"properties\": {\r\n \"storageType\": \"GeoRedundant\",\r\n \"storageTypeState\": \"Unlocked\"\r\n }\r\n}", "ResponseHeaders": { "Content-Length": [ - "0" + "108" + ], + "Content-Type": [ + "application/json" ], "Expires": [ "-1" @@ -218,62 +193,59 @@ "no-cache" ], "x-ms-request-id": [ - "c4f2b466-63bc-4a2f-8915-4b7ce854c448" + "dc34ea62-6546-48b8-909e-828c12892f07" ], "x-ms-client-request-id": [ - "5563afaf-bd7e-4677-b985-cfbfc19715c9-2015-07-02 14:03:10Z-PS", - "5563afaf-bd7e-4677-b985-cfbfc19715c9-2015-07-02 14:03:10Z-PS" + "872537bf-88e0-46ba-b0e7-5880e0b93b78-2015-07-03 11:08:00Z-PS", + "872537bf-88e0-46ba-b0e7-5880e0b93b78-2015-07-03 11:08:00Z-PS" ], "Strict-Transport-Security": [ "max-age=31536000; includeSubDomains" ], - "x-ms-ratelimit-remaining-subscription-writes": [ - "1196" + "x-ms-ratelimit-remaining-subscription-reads": [ + "14989" ], "x-ms-correlation-request-id": [ - "c4f2b466-63bc-4a2f-8915-4b7ce854c448" + "dc34ea62-6546-48b8-909e-828c12892f07" ], "x-ms-routing-request-id": [ - "CENTRALUS:20150702T140311Z:c4f2b466-63bc-4a2f-8915-4b7ce854c448" + "CENTRALUS:20150703T110803Z:dc34ea62-6546-48b8-909e-828c12892f07" ], "Cache-Control": [ "no-cache" ], "Date": [ - "Thu, 02 Jul 2015 14:03:11 GMT" + "Fri, 03 Jul 2015 11:08:02 GMT" + ], + "Server": [ + "Microsoft-IIS/8.0" ] }, - "StatusCode": 204 + "StatusCode": 200 }, { "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backup/BackupVault/backuprn/storageconfig/vaultstorageconfig?api-version=2015-03-15", "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3VwL0JhY2t1cFZhdWx0L2JhY2t1cHJuL3N0b3JhZ2Vjb25maWcvdmF1bHRzdG9yYWdlY29uZmlnP2FwaS12ZXJzaW9uPTIwMTUtMDMtMTU=", - "RequestMethod": "PATCH", - "RequestBody": "{\r\n \"properties\": {\r\n \"storageModelType\": \"LocallyRedundant\"\r\n }\r\n}", + "RequestMethod": "GET", + "RequestBody": "", "RequestHeaders": { - "Content-Type": [ - "application/json" - ], - "Content-Length": [ - "72" - ], "Accept-Language": [ "en-us" ], "x-ms-client-request-id": [ - "886e1b73-c4a0-4efd-9c8e-f3a327e5c3e2-2015-07-02 14:03:11Z-PS" - ], - "x-ms-version": [ - "2013-03-01" + "491f85ea-bdc5-4f22-ba8e-debc7c2a2f6d-2015-07-03 11:08:03Z-PS" ], "User-Agent": [ "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" ] }, - "ResponseBody": "", + "ResponseBody": "{\r\n \"resourceId\": 8420362025804603700,\r\n \"properties\": {\r\n \"storageType\": \"GeoRedundant\",\r\n \"storageTypeState\": \"Unlocked\"\r\n }\r\n}", "ResponseHeaders": { "Content-Length": [ - "0" + "108" + ], + "Content-Type": [ + "application/json" ], "Expires": [ "-1" @@ -282,62 +254,59 @@ "no-cache" ], "x-ms-request-id": [ - "6680b69b-50fb-4e39-b99d-c1ca73f9ce40" + "c22f27ba-e25d-461e-8b43-1739683f7aca" ], "x-ms-client-request-id": [ - "886e1b73-c4a0-4efd-9c8e-f3a327e5c3e2-2015-07-02 14:03:11Z-PS", - "886e1b73-c4a0-4efd-9c8e-f3a327e5c3e2-2015-07-02 14:03:11Z-PS" + "491f85ea-bdc5-4f22-ba8e-debc7c2a2f6d-2015-07-03 11:08:03Z-PS", + "491f85ea-bdc5-4f22-ba8e-debc7c2a2f6d-2015-07-03 11:08:03Z-PS" ], "Strict-Transport-Security": [ "max-age=31536000; includeSubDomains" ], - "x-ms-ratelimit-remaining-subscription-writes": [ - "1195" + "x-ms-ratelimit-remaining-subscription-reads": [ + "14987" ], "x-ms-correlation-request-id": [ - "6680b69b-50fb-4e39-b99d-c1ca73f9ce40" + "c22f27ba-e25d-461e-8b43-1739683f7aca" ], "x-ms-routing-request-id": [ - "CENTRALUS:20150702T140313Z:6680b69b-50fb-4e39-b99d-c1ca73f9ce40" + "CENTRALUS:20150703T110805Z:c22f27ba-e25d-461e-8b43-1739683f7aca" ], "Cache-Control": [ "no-cache" ], "Date": [ - "Thu, 02 Jul 2015 14:03:13 GMT" + "Fri, 03 Jul 2015 11:08:04 GMT" + ], + "Server": [ + "Microsoft-IIS/8.0" ] }, - "StatusCode": 204 + "StatusCode": 200 }, { "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backup/BackupVault/backuprn/storageconfig/vaultstorageconfig?api-version=2015-03-15", "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3VwL0JhY2t1cFZhdWx0L2JhY2t1cHJuL3N0b3JhZ2Vjb25maWcvdmF1bHRzdG9yYWdlY29uZmlnP2FwaS12ZXJzaW9uPTIwMTUtMDMtMTU=", - "RequestMethod": "PATCH", - "RequestBody": "{\r\n \"properties\": {\r\n \"storageModelType\": \"GeoRedundant\"\r\n }\r\n}", + "RequestMethod": "GET", + "RequestBody": "", "RequestHeaders": { - "Content-Type": [ - "application/json" - ], - "Content-Length": [ - "68" - ], "Accept-Language": [ "en-us" ], "x-ms-client-request-id": [ - "b6cb7513-1e16-425f-b400-efbeaf66e3b7-2015-07-02 14:03:13Z-PS" - ], - "x-ms-version": [ - "2013-03-01" + "60ce1104-8270-44bf-acb7-115661d1a02d-2015-07-03 11:08:06Z-PS" ], "User-Agent": [ "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" ] }, - "ResponseBody": "", + "ResponseBody": "{\r\n \"resourceId\": 8420362025804603700,\r\n \"properties\": {\r\n \"storageType\": \"LocallyRedundant\",\r\n \"storageTypeState\": \"Unlocked\"\r\n }\r\n}", "ResponseHeaders": { "Content-Length": [ - "0" + "112" + ], + "Content-Type": [ + "application/json" ], "Expires": [ "-1" @@ -346,50 +315,53 @@ "no-cache" ], "x-ms-request-id": [ - "127a2430-226c-4d3e-8c06-b6da67c5e73d" + "5a9c3ca4-18cb-4243-92a2-36846f007c4f" ], "x-ms-client-request-id": [ - "b6cb7513-1e16-425f-b400-efbeaf66e3b7-2015-07-02 14:03:13Z-PS", - "b6cb7513-1e16-425f-b400-efbeaf66e3b7-2015-07-02 14:03:13Z-PS" + "60ce1104-8270-44bf-acb7-115661d1a02d-2015-07-03 11:08:06Z-PS", + "60ce1104-8270-44bf-acb7-115661d1a02d-2015-07-03 11:08:06Z-PS" ], "Strict-Transport-Security": [ "max-age=31536000; includeSubDomains" ], - "x-ms-ratelimit-remaining-subscription-writes": [ - "1194" + "x-ms-ratelimit-remaining-subscription-reads": [ + "14985" ], "x-ms-correlation-request-id": [ - "127a2430-226c-4d3e-8c06-b6da67c5e73d" + "5a9c3ca4-18cb-4243-92a2-36846f007c4f" ], "x-ms-routing-request-id": [ - "CENTRALUS:20150702T140314Z:127a2430-226c-4d3e-8c06-b6da67c5e73d" + "CENTRALUS:20150703T110807Z:5a9c3ca4-18cb-4243-92a2-36846f007c4f" ], "Cache-Control": [ "no-cache" ], "Date": [ - "Thu, 02 Jul 2015 14:03:14 GMT" + "Fri, 03 Jul 2015 11:08:07 GMT" + ], + "Server": [ + "Microsoft-IIS/8.0" ] }, - "StatusCode": 204 + "StatusCode": 200 }, { "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backup/BackupVault/backuprn/storageconfig/vaultstorageconfig?api-version=2015-03-15", "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3VwL0JhY2t1cFZhdWx0L2JhY2t1cHJuL3N0b3JhZ2Vjb25maWcvdmF1bHRzdG9yYWdlY29uZmlnP2FwaS12ZXJzaW9uPTIwMTUtMDMtMTU=", "RequestMethod": "PATCH", - "RequestBody": "{\r\n \"properties\": {\r\n \"storageModelType\": \"LocallyRedundant\"\r\n }\r\n}", + "RequestBody": "{\r\n \"properties\": {\r\n \"storageModelType\": \"GeoRedundant\"\r\n }\r\n}", "RequestHeaders": { "Content-Type": [ "application/json" ], "Content-Length": [ - "72" + "68" ], "Accept-Language": [ "en-us" ], "x-ms-client-request-id": [ - "2ffa60dd-7ecf-4ce7-ab69-6331c4d8ce36-2015-07-02 14:03:14Z-PS" + "bad3411a-f21a-459b-8bb0-e8a309e0738d-2015-07-03 11:08:02Z-PS" ], "x-ms-version": [ "2013-03-01" @@ -410,44 +382,53 @@ "no-cache" ], "x-ms-request-id": [ - "0253a3d9-d123-47a0-83fe-cad21fc6f343" + "aa31c6f3-b1b5-4724-8f18-779077880d2e" ], "x-ms-client-request-id": [ - "2ffa60dd-7ecf-4ce7-ab69-6331c4d8ce36-2015-07-02 14:03:14Z-PS", - "2ffa60dd-7ecf-4ce7-ab69-6331c4d8ce36-2015-07-02 14:03:14Z-PS" + "bad3411a-f21a-459b-8bb0-e8a309e0738d-2015-07-03 11:08:02Z-PS", + "bad3411a-f21a-459b-8bb0-e8a309e0738d-2015-07-03 11:08:02Z-PS" ], "Strict-Transport-Security": [ "max-age=31536000; includeSubDomains" ], "x-ms-ratelimit-remaining-subscription-writes": [ - "1193" + "1198" ], "x-ms-correlation-request-id": [ - "0253a3d9-d123-47a0-83fe-cad21fc6f343" + "aa31c6f3-b1b5-4724-8f18-779077880d2e" ], "x-ms-routing-request-id": [ - "CENTRALUS:20150702T140315Z:0253a3d9-d123-47a0-83fe-cad21fc6f343" + "CENTRALUS:20150703T110804Z:aa31c6f3-b1b5-4724-8f18-779077880d2e" ], "Cache-Control": [ "no-cache" ], "Date": [ - "Thu, 02 Jul 2015 14:03:15 GMT" + "Fri, 03 Jul 2015 11:08:03 GMT" ] }, "StatusCode": 204 }, { - "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backup/BackupVault/storagetestrn?api-version=2015-03-15", - "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3VwL0JhY2t1cFZhdWx0L3N0b3JhZ2V0ZXN0cm4/YXBpLXZlcnNpb249MjAxNS0wMy0xNQ==", - "RequestMethod": "DELETE", - "RequestBody": "", + "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backup/BackupVault/backuprn/storageconfig/vaultstorageconfig?api-version=2015-03-15", + "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3VwL0JhY2t1cFZhdWx0L2JhY2t1cHJuL3N0b3JhZ2Vjb25maWcvdmF1bHRzdG9yYWdlY29uZmlnP2FwaS12ZXJzaW9uPTIwMTUtMDMtMTU=", + "RequestMethod": "PATCH", + "RequestBody": "{\r\n \"properties\": {\r\n \"storageModelType\": \"LocallyRedundant\"\r\n }\r\n}", "RequestHeaders": { + "Content-Type": [ + "application/json" + ], + "Content-Length": [ + "72" + ], "Accept-Language": [ "en-us" ], "x-ms-client-request-id": [ - "148d34fe-b827-479a-8141-bd29e82dbe91-2015-07-02 14:03:15Z-PS" + "292c310f-e614-4223-aced-3c543ca8a268-2015-07-03 11:08:05Z-PS" + ], + "x-ms-version": [ + "2013-03-01" ], "User-Agent": [ "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" @@ -465,31 +446,32 @@ "no-cache" ], "x-ms-request-id": [ - "d039d092-2eda-47cd-9d67-c8564fc97f64" + "dff9e05c-cf05-4bb8-8080-34c042f1a0d2" ], "x-ms-client-request-id": [ - "148d34fe-b827-479a-8141-bd29e82dbe91-2015-07-02 14:03:15Z-PS" + "292c310f-e614-4223-aced-3c543ca8a268-2015-07-03 11:08:05Z-PS", + "292c310f-e614-4223-aced-3c543ca8a268-2015-07-03 11:08:05Z-PS" ], "Strict-Transport-Security": [ "max-age=31536000; includeSubDomains" ], "x-ms-ratelimit-remaining-subscription-writes": [ - "1192" + "1197" ], "x-ms-correlation-request-id": [ - "d039d092-2eda-47cd-9d67-c8564fc97f64" + "dff9e05c-cf05-4bb8-8080-34c042f1a0d2" ], "x-ms-routing-request-id": [ - "CENTRALUS:20150702T140317Z:d039d092-2eda-47cd-9d67-c8564fc97f64" + "CENTRALUS:20150703T110806Z:dff9e05c-cf05-4bb8-8080-34c042f1a0d2" ], "Cache-Control": [ "no-cache" ], "Date": [ - "Thu, 02 Jul 2015 14:03:17 GMT" + "Fri, 03 Jul 2015 11:08:06 GMT" ] }, - "StatusCode": 200 + "StatusCode": 204 } ], "Names": {}, From 98677c6044f5ce51318b2ad55865fbebdd796be0 Mon Sep 17 00:00:00 2001 From: dragonfly91 Date: Fri, 3 Jul 2015 16:55:22 +0530 Subject: [PATCH 133/155] Toning down the logging from Verbose to Debug --- .../Cmdlets/Vault/SetAzureBackupVaultStorageType.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/SetAzureBackupVaultStorageType.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/SetAzureBackupVaultStorageType.cs index 3553d084acca..04574d35ea94 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/SetAzureBackupVaultStorageType.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/SetAzureBackupVaultStorageType.cs @@ -36,7 +36,7 @@ public override void ExecuteCmdlet() throw new ArgumentException("Invalid storage type."); } - WriteVerbose(String.Format("Updating the storage type. Type:{0}", Type)); + WriteDebug(String.Format("Updating the storage type. Type:{0}", Type)); AzureBackupClient.UpdateStorageType(Type.ToString()); }); } From 28a8cdbbfefa82adc261a49698329a49e6422917 Mon Sep 17 00:00:00 2001 From: dragonfly91 Date: Fri, 3 Jul 2015 18:48:11 +0530 Subject: [PATCH 134/155] Adding format for Get-AzureBackupVault cmdlet --- .../Commands.AzureBackup.csproj | 3 - ...t.Azure.Commands.AzureBackup.format.ps1xml | 692 +----------------- 2 files changed, 14 insertions(+), 681 deletions(-) diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj index c61824daf125..c576f42a3a92 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj @@ -144,9 +144,6 @@ Always Designer - - Always - Designer diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Microsoft.Azure.Commands.AzureBackup.format.ps1xml b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Microsoft.Azure.Commands.AzureBackup.format.ps1xml index dd54dee569d8..f61050d005c4 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Microsoft.Azure.Commands.AzureBackup.format.ps1xml +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Microsoft.Azure.Commands.AzureBackup.format.ps1xml @@ -2,714 +2,50 @@ - Microsoft.WindowsAzure.Management.StorSimple.Models.TaskStatusInfo + Microsoft.Azure.Commands.AzureBackup.Cmdlets.GetAzureBackupVault - Microsoft.WindowsAzure.Management.StorSimple.Models.TaskStatusInfo + Microsoft.Azure.Commands.AzureBackup.Cmdlets.GetAzureBackupVault - - 36 - - - - 16 - - - - - - - - - - - - - - TaskId - - - AsyncTaskAggregatedResult - - - $_.GetSteps - - - $_.GetErrors - - - - - - - - Microsoft.WindowsAzure.Management.StorSimple.Models.TaskStep - - Microsoft.WindowsAzure.Management.StorSimple.Models.TaskStep - - - - - - - - - - - - Message - - - - - - - - Microsoft.WindowsAzure.Management.StorSimple.Models.ErrorDetails - - Microsoft.WindowsAzure.Management.StorSimple.Models.ErrorDetails - - - - - - - - - - - - - - - Message - - - Code - - - - - - - - Microsoft.WindowsAzure.Management.StorSimple.Models.DeviceJobDetails - - Microsoft.WindowsAzure.Management.StorSimple.Models.DeviceJobDetails - - - - - - 36 - - - - 28 - - - - - - - - - - - - - - - - - - - - InstanceId - - - Type - - - Status - - - $_.Device.Name - - - $_.TimeStats.StartTimestamp - - - Progress - - - - - - - - Microsoft.WindowsAzure.Management.StorSimple.Models.Backup - - Microsoft.WindowsAzure.Management.StorSimple.Models.Backup - - - - - - 36 - - - - - - - 13 - - - - - - - - - - - - - - - - - - - - - - - InstanceId - - - Name - - - Type - - - BackupJobCreationType - - - CreatedOn - - - SizeInBytes - - - Snapshots - - - SSMHostName - - - - - - - - Microsoft.WindowsAzure.Management.StorSimple.Models.BackupPolicy - - Microsoft.WindowsAzure.Management.StorSimple.Models.BackupPolicy - - - - - - 36 - - - - - - - 14 - - - - - - - - - - - - - - - - - - - - - - - InstanceId - - - Name - - - SchedulesCount - - - VolumesCount - - - BackupPolicyCreationType - - - LastBackup - - - NextBackup - - - SSMHostName - - - - - - - - Microsoft.WindowsAzure.Management.StorSimple.Models.BackupPolicyDetails - - Microsoft.WindowsAzure.Management.StorSimple.Models.BackupPolicyDetails - - - - - - - InstanceId - - - Name - - - SchedulesCount - - - BackupSchedules - - - VolumesCount - - - Volumes - - - BackupPolicyCreationType - - - LastBackup - - - NextBackup - - - SSMHostName - - - - - - - - Microsoft.WindowsAzure.Management.StorSimple.Models.VirtualDisk - - Microsoft.WindowsAzure.Management.StorSimple.Models.VirtualDisk - - - - - - - InstanceId - - - Name - - - Online - - - SizeInBytes - - - AccessType - - - AcrList - - - AppType - - - DataContainerId - - - IsBackupEnabled - - - IsDefaultBackupEnabled - - - IsMonitoringEnabled - - - VSN - - - - - - - - Microsoft.WindowsAzure.Management.StorSimple.Models.DataContainer - - Microsoft.WindowsAzure.Management.StorSimple.Models.DataContainer - - - - - - 36 - - - - - - - 20 - - - - 5 - - - - - - - - - - - - - - - - - InstanceId - - - Name - - - IsEncryptionEnabled - - - Owned - - - BandwidthRate - - - $_.PrimaryStorageAccountCredential.Name - - - VolumeCount - - - - - - - - Microsoft.WindowsAzure.Management.StorSimple.Models.DeviceInfo - - Microsoft.WindowsAzure.Management.StorSimple.Models.DeviceInfo - - - - - - - DeviceId - - - - FriendlyName - - - SerialNumber - - - DeviceSoftwareVersion - - - Location - - - ModelDescription - - - Status - - - Type - - - TargetIQN - - - TimeZone - - - ActivationTime - - - AvailableStorageInBytes - - - ProvisionedStorageInBytes - - - TotalStorageInBytes - - - UsingStorageInBytes - - - - - - - - Microsoft.WindowsAzure.Management.StorSimple.Models.AccessControlRecord - - Microsoft.WindowsAzure.Management.StorSimple.Models.AccessControlRecord - - - - - - 36 - - - - - - - - - - - - - - - - InstanceId - - - Name - - - InitiatorName - - - VolumeCount - - - - - - - - Microsoft.WindowsAzure.Commands.StorSimple.ResourceCredentials - - Microsoft.WindowsAzure.Commands.StorSimple.ResourceCredentials - - - - - - - - - 20 - - - - - - - - - - ResourceName - - - ResourceId - - - ResourceState - - - - - - - - Microsoft.WindowsAzure.Commands.StorSimple.StorSimpleResourceContext - - Microsoft.WindowsAzure.Commands.StorSimple.StorSimpleResourceContext - - - - - - 20 - - - - - - - - - - ResourceId - - - ResourceName - - - - - - - - Microsoft.WindowsAzure.Management.StorSimple.Models.StorageAccountCredentialResponse - - Microsoft.WindowsAzure.Management.StorSimple.Models.StorageAccountCredentialResponse - - - - - - 36 - - - - - - - - - - 6 - - - - - - - 12 - - - - - - - - - - InstanceId - - - Login - - - Name - - - UseSSL - - - VolumeCount - - - CloudType - - - Location - - - - - - - - Microsoft.Azure.Commands.AzureBackup.Cmdlets.AzureBackupRecoveryPoint - - Microsoft.Azure.Commands.AzureBackup.Cmdlets.AzureBackupRecoveryPoint - - - - - + 18 - + 18 - - 22 + + 18 - + 18 - - 24 + + 40 - RecoveryPointId + Name - RecoveryPointType + ResourceGroupName - RecoveryPointTime + Region - ContainerType + Storage - ContainerUniqueName + ResourceId From 6b67dea810876e8069c1ffd375c58e335b615e56 Mon Sep 17 00:00:00 2001 From: swatimadhukar Date: Fri, 3 Jul 2015 06:46:24 -0700 Subject: [PATCH 135/155] Editing summary of each cmdlet --- .../Commands.AzureBackup/Cmdlets/Vault/GetAzureBackupVault.cs | 2 +- .../Commands.AzureBackup/Cmdlets/Vault/NewAzureBackupVault.cs | 2 +- .../Cmdlets/Vault/RemoveAzureBackupVault.cs | 2 +- .../Commands.AzureBackup/Cmdlets/Vault/SetAzureBackupVault.cs | 2 +- .../Cmdlets/Vault/SetAzureBackupVaultStorageType.cs | 3 +++ .../Cmdlets/VaultCredentials/GetAzureBackupVaultCredentials.cs | 2 +- 6 files changed, 8 insertions(+), 5 deletions(-) diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/GetAzureBackupVault.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/GetAzureBackupVault.cs index 3ed8b3e6a944..2b35a3be375d 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/GetAzureBackupVault.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/GetAzureBackupVault.cs @@ -23,7 +23,7 @@ namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets { /// - /// API to get backup vaults in the subscription + /// API to get azure backup vaults in a subscription /// [Cmdlet(VerbsCommon.Get, "AzureBackupVault"), OutputType(typeof(AzurePSBackupVault), typeof(List))] public class GetAzureBackupVault : AzureBackupCmdletBase diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/NewAzureBackupVault.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/NewAzureBackupVault.cs index 70fa61530ed1..ed91c931027a 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/NewAzureBackupVault.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/NewAzureBackupVault.cs @@ -20,7 +20,7 @@ namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets { /// - /// API to download the azure backup vault's credentials. + /// API to create an azure backup vault in a subscription /// [Cmdlet(VerbsCommon.New, "AzureBackupVault"), OutputType(typeof(AzurePSBackupVault))] public class NewAzureBackupVault : AzureBackupCmdletBase diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/RemoveAzureBackupVault.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/RemoveAzureBackupVault.cs index b46c01297f59..91d30a0a606f 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/RemoveAzureBackupVault.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/RemoveAzureBackupVault.cs @@ -17,7 +17,7 @@ namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets { /// - /// API to download the azure backup vault's credentials. + /// API to remove an azure backup vault in the subscription /// [Cmdlet(VerbsCommon.Remove, "AzureBackupVault")] public class RemoveAzureBackupVault : AzureBackupVaultCmdletBase diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/SetAzureBackupVault.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/SetAzureBackupVault.cs index 2f8453a8e7ce..78c000033c3e 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/SetAzureBackupVault.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/SetAzureBackupVault.cs @@ -21,7 +21,7 @@ namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets { /// - /// API to download the azure backup vault's credentials. + /// API to update an azure backup vault in a subscription. /// [Cmdlet(VerbsCommon.Set, "AzureBackupVault"), OutputType(typeof(CmdletModel.AzurePSBackupVault))] public class SetAzureBackupVault : AzureBackupVaultCmdletBase diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/SetAzureBackupVaultStorageType.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/SetAzureBackupVaultStorageType.cs index 3553d084acca..1529aa82f040 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/SetAzureBackupVaultStorageType.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/SetAzureBackupVaultStorageType.cs @@ -18,6 +18,9 @@ namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets { + /// + /// API to update backend storage type of an azure backup vault in a subscription. + /// [Cmdlet(VerbsCommon.Set, "AzureBackupVaultStorageType")] public class SetAzureBackupVaultStorageType : AzureBackupVaultCmdletBase { diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/VaultCredentials/GetAzureBackupVaultCredentials.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/VaultCredentials/GetAzureBackupVaultCredentials.cs index a0d3cdf7c47a..f923eadcb1da 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/VaultCredentials/GetAzureBackupVaultCredentials.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/VaultCredentials/GetAzureBackupVaultCredentials.cs @@ -27,7 +27,7 @@ namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets { /// - /// API to download the azure backup vault's credentials. + /// API to download an azure backup vault's credentials. /// [Cmdlet(VerbsCommon.Get, "AzureBackupVaultCredentials"), OutputType(typeof(string))] public class GetAzureBackupVaultCredentials : AzureBackupVaultCmdletBase From e26144c24ee414da85c86ca46541302640f3764c Mon Sep 17 00:00:00 2001 From: swatimadhukar Date: Fri, 3 Jul 2015 07:36:46 -0700 Subject: [PATCH 136/155] Using BackupServiceManagement from Resources in Commands.AzureBackup.csproj --- .../Commands.AzureBackup.Test.csproj | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/Commands.AzureBackup.Test.csproj b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/Commands.AzureBackup.Test.csproj index 6d837763592d..79dacc28e542 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/Commands.AzureBackup.Test.csproj +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/Commands.AzureBackup.Test.csproj @@ -39,6 +39,9 @@ False ..\..\..\packages\Microsoft.Azure.Common.Authentication.1.0.25-preview\lib\net45\Microsoft.Azure.Common.Authentication.dll + + ..\Commands.AzureBackup\Resources\Microsoft.Azure.Management.BackupServicesManagement.dll + False ..\..\..\packages\Microsoft.Azure.Management.Resources.2.18.0-preview\lib\net40\Microsoft.Azure.ResourceManager.dll @@ -127,10 +130,6 @@ - - {38a6741c-77a3-42a8-a846-83373be57c7f} - BackupServicesManagement - {5ee72c53-1720-4309-b54b-5fb79703195f} Commands.Common From e045e7ea99fa01d360da41cec215ca1fb294d93a Mon Sep 17 00:00:00 2001 From: swatimadhukar Date: Mon, 6 Jul 2015 06:36:16 -0700 Subject: [PATCH 137/155] Adding scenario test for CSP Artemis and fixing GetAzurebackupvault format. --- .../Commands.AzureBackup.Test/App.config | 2 +- .../Commands.AzureBackup.Test.csproj | 6 +- .../ScenarioTests/AzureBackupVaultTests.cs | 12 +- .../ScenarioTests/AzureBackupVaultTests.ps1 | 30 +- .../AzureBackupVaultScenarioTests.json | 920 ++++++++++++++++++ .../GetAzureBackupVaultCredentialsTests.json | 190 ---- .../SetAzureBackupVaultStorageTypeTests.json | 481 --------- ...t.Azure.Commands.AzureBackup.format.ps1xml | 24 +- .../AzureResourceManager.psd1 | 2 +- 9 files changed, 954 insertions(+), 713 deletions(-) create mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupVaultTests/AzureBackupVaultScenarioTests.json delete mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupVaultTests/GetAzureBackupVaultCredentialsTests.json delete mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupVaultTests/SetAzureBackupVaultStorageTypeTests.json diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/App.config b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/App.config index 749e8d87fdbd..51736738e693 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/App.config +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/App.config @@ -1,7 +1,7 @@  - + diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/Commands.AzureBackup.Test.csproj b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/Commands.AzureBackup.Test.csproj index 79dacc28e542..c4b59a0d3610 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/Commands.AzureBackup.Test.csproj +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/Commands.AzureBackup.Test.csproj @@ -156,13 +156,11 @@ Always - - Always - - + Always + diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupVaultTests.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupVaultTests.cs index ea427f60ba02..dee39025d4e2 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupVaultTests.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupVaultTests.cs @@ -19,15 +19,9 @@ namespace Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests public class AzureBackupVaultTests : AzureBackupTestsBase { [Fact] - public void GetAzureBackupVaultCredentialsTests() + public void AzureBackupVaultScenarioTests() { - this.RunPowerShellTest("Test-GetAzureBackupVaultCredentialsReturnsFileNameAndDownloadsCert"); - } - - [Fact] - public void SetAzureBackupVaultStorageTypeTests() - { - this.RunPowerShellTest("Test-SetAzureBackupVaultStorageTypeWithFreshResourceDoesNotThrowException"); - } + this.RunPowerShellTest("Test-AzureBackupVaultScenario"); + } } } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupVaultTests.ps1 b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupVaultTests.ps1 index a59a47e5b223..af5b0ed548c4 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupVaultTests.ps1 +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupVaultTests.ps1 @@ -13,23 +13,29 @@ # ---------------------------------------------------------------------------------- $ResourceGroupName = "backuprg" -$ResourceName = "backuprn" +$ResourceName = "backuprn1" $Location = "westus" $CertTargetLocation = (Get-Item -Path ".\" -Verbose).FullName; -function Test-GetAzureBackupVaultCredentialsReturnsFileNameAndDownloadsCert +function Test-AzureBackupVaultScenario { - $vault = Get-AzureBackupVault -Name $ResourceName; + $vault = New-AzureBackupVault -ResourceGroupName $ResourceGroupName -Name $ResourceName -Region $Location; + Assert-AreEqual $vault.Name $ResourceName; + Assert-AreEqual $vault.ResourceGroupName $ResourceGroupName; + Assert-AreEqual $vault.Region $Location; + Assert-AreEqual $vault.Storage "GeoRedundant" + + $vault = Get-AzureBackupVault -ResourceGroupName $ResourceGroupName -Name $ResourceName + Assert-AreEqual $vault.Name $ResourceName; + Assert-AreEqual $vault.ResourceGroupName $ResourceGroupName; + Assert-AreEqual $vault.Region $Location; + Assert-AreEqual $vault.Storage "GeoRedundant" + $fileName = Get-AzureBackupVaultCredentials -vault $vault -TargetLocation $CertTargetLocation Assert-NotNull $fileName 'File name should not be null'; $certFileFullPath = [io.path]::combine($CertTargetLocation, $fileName); Assert-True {{ Test-Path $certFileFullPath }} -} -function Test-SetAzureBackupVaultStorageTypeWithFreshResourceDoesNotThrowException -{ - $vault = Get-AzureBackupVault -Name $ResourceName; - Set-AzureBackupVaultStorageType -Vault $vault -Type "GeoRedundant"; $vault = Get-AzureBackupVault -Name $ResourceName; Assert-AreEqual $vault.Storage "GeoRedundant"; @@ -37,4 +43,12 @@ function Test-SetAzureBackupVaultStorageTypeWithFreshResourceDoesNotThrowExcepti Set-AzureBackupVaultStorageType -Vault $vault -Type "LocallyRedundant"; $vault = Get-AzureBackupVault -Name $ResourceName; Assert-AreEqual $vault.Storage "LocallyRedundant"; + + $vault = Set-AzureBackupVault -vault $vault -Storage "GeoRedundant"; + Assert-AreEqual $vault.Name $ResourceName; + Assert-AreEqual $vault.ResourceGroupName $ResourceGroupName; + Assert-AreEqual $vault.Region $Location; + Assert-AreEqual $vault.Storage "GeoRedundant"; + + Remove-AzureBackupVault -Vault $vault; } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupVaultTests/AzureBackupVaultScenarioTests.json b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupVaultTests/AzureBackupVaultScenarioTests.json new file mode 100644 index 000000000000..27614405ce0c --- /dev/null +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupVaultTests/AzureBackupVaultScenarioTests.json @@ -0,0 +1,920 @@ +{ + "Entries": [ + { + "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backup/BackupVault/backuprn1?api-version=2015-03-15", + "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3VwL0JhY2t1cFZhdWx0L2JhY2t1cHJuMT9hcGktdmVyc2lvbj0yMDE1LTAzLTE1", + "RequestMethod": "PUT", + "RequestBody": "{\r\n \"properties\": {\r\n \"sku\": {\r\n \"name\": \"standard\"\r\n }\r\n },\r\n \"location\": \"westus\",\r\n \"tags\": {}\r\n}", + "RequestHeaders": { + "Content-Type": [ + "application/json; charset=utf-8" + ], + "Content-Length": [ + "115" + ], + "Accept-Language": [ + "en-us" + ], + "x-ms-client-request-id": [ + "b358de39-27e1-4064-bba7-6d5de42fc1b7-2015-07-06 13:30:05Z-PS" + ], + "User-Agent": [ + "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" + ] + }, + "ResponseBody": "{\r\n \"location\": \"westus\",\r\n \"name\": \"backuprn1\",\r\n \"etag\": \"f6a25dcb-15d4-4bc4-b04a-207f003e02a8\",\r\n \"tags\": {},\r\n \"properties\": {\r\n \"sku\": {\r\n \"name\": \"standard\"\r\n },\r\n \"ProvisioningState\": \"Succeeded\"\r\n },\r\n \"id\": \"/subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backup/BackupVault/backuprn1\",\r\n \"type\": \"Microsoft.Backup/BackupVault\"\r\n}", + "ResponseHeaders": { + "Content-Length": [ + "339" + ], + "Content-Type": [ + "application/json" + ], + "Expires": [ + "-1" + ], + "Pragma": [ + "no-cache" + ], + "x-ms-request-id": [ + "adbca634-dee9-4cf6-b1f6-2fed39d5fd03" + ], + "x-ms-client-request-id": [ + "b358de39-27e1-4064-bba7-6d5de42fc1b7-2015-07-06 13:30:05Z-PS" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "x-ms-ratelimit-remaining-subscription-writes": [ + "1198" + ], + "x-ms-correlation-request-id": [ + "adbca634-dee9-4cf6-b1f6-2fed39d5fd03" + ], + "x-ms-routing-request-id": [ + "CENTRALUS:20150706T133010Z:adbca634-dee9-4cf6-b1f6-2fed39d5fd03" + ], + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 06 Jul 2015 13:30:10 GMT" + ], + "Server": [ + "Microsoft-IIS/8.0" + ] + }, + "StatusCode": 201 + }, + { + "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backup/BackupVault/backuprn1/storageconfig/vaultstorageconfig?api-version=2015-03-15", + "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3VwL0JhY2t1cFZhdWx0L2JhY2t1cHJuMS9zdG9yYWdlY29uZmlnL3ZhdWx0c3RvcmFnZWNvbmZpZz9hcGktdmVyc2lvbj0yMDE1LTAzLTE1", + "RequestMethod": "GET", + "RequestBody": "", + "RequestHeaders": { + "Accept-Language": [ + "en-us" + ], + "x-ms-client-request-id": [ + "b358de39-27e1-4064-bba7-6d5de42fc1b7-2015-07-06 13:30:05Z-PS" + ], + "User-Agent": [ + "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" + ] + }, + "ResponseBody": "{\r\n \"resourceId\": 3953238055234851915,\r\n \"properties\": {\r\n \"storageType\": \"GeoRedundant\",\r\n \"storageTypeState\": \"Unlocked\"\r\n }\r\n}", + "ResponseHeaders": { + "Content-Length": [ + "108" + ], + "Content-Type": [ + "application/json" + ], + "Expires": [ + "-1" + ], + "Pragma": [ + "no-cache" + ], + "x-ms-request-id": [ + "f15b7c0a-431a-45b9-959d-772c6b4b5568" + ], + "x-ms-client-request-id": [ + "b358de39-27e1-4064-bba7-6d5de42fc1b7-2015-07-06 13:30:05Z-PS", + "b358de39-27e1-4064-bba7-6d5de42fc1b7-2015-07-06 13:30:05Z-PS" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "x-ms-ratelimit-remaining-subscription-reads": [ + "14997" + ], + "x-ms-correlation-request-id": [ + "f15b7c0a-431a-45b9-959d-772c6b4b5568" + ], + "x-ms-routing-request-id": [ + "CENTRALUS:20150706T133011Z:f15b7c0a-431a-45b9-959d-772c6b4b5568" + ], + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 06 Jul 2015 13:30:10 GMT" + ], + "Server": [ + "Microsoft-IIS/8.0" + ] + }, + "StatusCode": 200 + }, + { + "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backup/BackupVault/backuprn1/storageconfig/vaultstorageconfig?api-version=2015-03-15", + "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3VwL0JhY2t1cFZhdWx0L2JhY2t1cHJuMS9zdG9yYWdlY29uZmlnL3ZhdWx0c3RvcmFnZWNvbmZpZz9hcGktdmVyc2lvbj0yMDE1LTAzLTE1", + "RequestMethod": "GET", + "RequestBody": "", + "RequestHeaders": { + "Accept-Language": [ + "en-us" + ], + "x-ms-client-request-id": [ + "86aa4dcf-d525-4e72-bdba-de8de0690f2f-2015-07-06 13:30:11Z-PS" + ], + "User-Agent": [ + "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" + ] + }, + "ResponseBody": "{\r\n \"resourceId\": 3953238055234851915,\r\n \"properties\": {\r\n \"storageType\": \"GeoRedundant\",\r\n \"storageTypeState\": \"Unlocked\"\r\n }\r\n}", + "ResponseHeaders": { + "Content-Length": [ + "108" + ], + "Content-Type": [ + "application/json" + ], + "Expires": [ + "-1" + ], + "Pragma": [ + "no-cache" + ], + "x-ms-request-id": [ + "f7b6c8f0-5bfc-47fe-9afe-d3120e09938c" + ], + "x-ms-client-request-id": [ + "86aa4dcf-d525-4e72-bdba-de8de0690f2f-2015-07-06 13:30:11Z-PS", + "86aa4dcf-d525-4e72-bdba-de8de0690f2f-2015-07-06 13:30:11Z-PS" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "x-ms-ratelimit-remaining-subscription-reads": [ + "14995" + ], + "x-ms-correlation-request-id": [ + "f7b6c8f0-5bfc-47fe-9afe-d3120e09938c" + ], + "x-ms-routing-request-id": [ + "CENTRALUS:20150706T133012Z:f7b6c8f0-5bfc-47fe-9afe-d3120e09938c" + ], + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 06 Jul 2015 13:30:12 GMT" + ], + "Server": [ + "Microsoft-IIS/8.0" + ] + }, + "StatusCode": 200 + }, + { + "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backup/BackupVault/backuprn1/storageconfig/vaultstorageconfig?api-version=2015-03-15", + "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3VwL0JhY2t1cFZhdWx0L2JhY2t1cHJuMS9zdG9yYWdlY29uZmlnL3ZhdWx0c3RvcmFnZWNvbmZpZz9hcGktdmVyc2lvbj0yMDE1LTAzLTE1", + "RequestMethod": "GET", + "RequestBody": "", + "RequestHeaders": { + "Accept-Language": [ + "en-us" + ], + "x-ms-client-request-id": [ + "881a5a68-c5be-4f63-a6c2-fda57b5ce1ff-2015-07-06 13:30:17Z-PS" + ], + "User-Agent": [ + "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" + ] + }, + "ResponseBody": "{\r\n \"resourceId\": 3953238055234851915,\r\n \"properties\": {\r\n \"storageType\": \"GeoRedundant\",\r\n \"storageTypeState\": \"Unlocked\"\r\n }\r\n}", + "ResponseHeaders": { + "Content-Length": [ + "108" + ], + "Content-Type": [ + "application/json" + ], + "Expires": [ + "-1" + ], + "Pragma": [ + "no-cache" + ], + "x-ms-request-id": [ + "8f3bf039-e2cf-43fd-a77a-a20251250dea" + ], + "x-ms-client-request-id": [ + "881a5a68-c5be-4f63-a6c2-fda57b5ce1ff-2015-07-06 13:30:17Z-PS", + "881a5a68-c5be-4f63-a6c2-fda57b5ce1ff-2015-07-06 13:30:17Z-PS" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "x-ms-ratelimit-remaining-subscription-reads": [ + "14993" + ], + "x-ms-correlation-request-id": [ + "8f3bf039-e2cf-43fd-a77a-a20251250dea" + ], + "x-ms-routing-request-id": [ + "CENTRALUS:20150706T133018Z:8f3bf039-e2cf-43fd-a77a-a20251250dea" + ], + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 06 Jul 2015 13:30:18 GMT" + ], + "Server": [ + "Microsoft-IIS/8.0" + ] + }, + "StatusCode": 200 + }, + { + "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backup/BackupVault/backuprn1/storageconfig/vaultstorageconfig?api-version=2015-03-15", + "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3VwL0JhY2t1cFZhdWx0L2JhY2t1cHJuMS9zdG9yYWdlY29uZmlnL3ZhdWx0c3RvcmFnZWNvbmZpZz9hcGktdmVyc2lvbj0yMDE1LTAzLTE1", + "RequestMethod": "GET", + "RequestBody": "", + "RequestHeaders": { + "Accept-Language": [ + "en-us" + ], + "x-ms-client-request-id": [ + "35e1e006-a801-4559-ab8d-3a898b75d5d6-2015-07-06 13:30:20Z-PS" + ], + "User-Agent": [ + "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" + ] + }, + "ResponseBody": "{\r\n \"resourceId\": 3953238055234851915,\r\n \"properties\": {\r\n \"storageType\": \"LocallyRedundant\",\r\n \"storageTypeState\": \"Unlocked\"\r\n }\r\n}", + "ResponseHeaders": { + "Content-Length": [ + "112" + ], + "Content-Type": [ + "application/json" + ], + "Expires": [ + "-1" + ], + "Pragma": [ + "no-cache" + ], + "x-ms-request-id": [ + "6b1dfac6-fc43-4866-ba2b-ac28ec41ff55" + ], + "x-ms-client-request-id": [ + "35e1e006-a801-4559-ab8d-3a898b75d5d6-2015-07-06 13:30:20Z-PS", + "35e1e006-a801-4559-ab8d-3a898b75d5d6-2015-07-06 13:30:20Z-PS" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "x-ms-ratelimit-remaining-subscription-reads": [ + "14991" + ], + "x-ms-correlation-request-id": [ + "6b1dfac6-fc43-4866-ba2b-ac28ec41ff55" + ], + "x-ms-routing-request-id": [ + "CENTRALUS:20150706T133021Z:6b1dfac6-fc43-4866-ba2b-ac28ec41ff55" + ], + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 06 Jul 2015 13:30:21 GMT" + ], + "Server": [ + "Microsoft-IIS/8.0" + ] + }, + "StatusCode": 200 + }, + { + "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backup/BackupVault/backuprn1/storageconfig/vaultstorageconfig?api-version=2015-03-15", + "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3VwL0JhY2t1cFZhdWx0L2JhY2t1cHJuMS9zdG9yYWdlY29uZmlnL3ZhdWx0c3RvcmFnZWNvbmZpZz9hcGktdmVyc2lvbj0yMDE1LTAzLTE1", + "RequestMethod": "GET", + "RequestBody": "", + "RequestHeaders": { + "Accept-Language": [ + "en-us" + ], + "x-ms-client-request-id": [ + "ab7eca12-d91d-4474-9c4f-0b3520b80e67-2015-07-06 13:30:21Z-PS" + ], + "User-Agent": [ + "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" + ] + }, + "ResponseBody": "{\r\n \"resourceId\": 3953238055234851915,\r\n \"properties\": {\r\n \"storageType\": \"GeoRedundant\",\r\n \"storageTypeState\": \"Unlocked\"\r\n }\r\n}", + "ResponseHeaders": { + "Content-Length": [ + "108" + ], + "Content-Type": [ + "application/json" + ], + "Expires": [ + "-1" + ], + "Pragma": [ + "no-cache" + ], + "x-ms-request-id": [ + "cd0696d2-8fd6-4ef4-96bc-b4b59b9b2d4b" + ], + "x-ms-client-request-id": [ + "ab7eca12-d91d-4474-9c4f-0b3520b80e67-2015-07-06 13:30:21Z-PS", + "ab7eca12-d91d-4474-9c4f-0b3520b80e67-2015-07-06 13:30:21Z-PS" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "x-ms-ratelimit-remaining-subscription-reads": [ + "14989" + ], + "x-ms-correlation-request-id": [ + "cd0696d2-8fd6-4ef4-96bc-b4b59b9b2d4b" + ], + "x-ms-routing-request-id": [ + "CENTRALUS:20150706T133023Z:cd0696d2-8fd6-4ef4-96bc-b4b59b9b2d4b" + ], + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 06 Jul 2015 13:30:23 GMT" + ], + "Server": [ + "Microsoft-IIS/8.0" + ] + }, + "StatusCode": 200 + }, + { + "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backup/BackupVault/backuprn1?api-version=2015-03-15", + "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3VwL0JhY2t1cFZhdWx0L2JhY2t1cHJuMT9hcGktdmVyc2lvbj0yMDE1LTAzLTE1", + "RequestMethod": "GET", + "RequestBody": "", + "RequestHeaders": { + "Accept-Language": [ + "en-us" + ], + "x-ms-client-request-id": [ + "86aa4dcf-d525-4e72-bdba-de8de0690f2f-2015-07-06 13:30:11Z-PS" + ], + "User-Agent": [ + "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" + ] + }, + "ResponseBody": "{\r\n \"location\": \"westus\",\r\n \"name\": \"backuprn1\",\r\n \"etag\": \"f6a25dcb-15d4-4bc4-b04a-207f003e02a8\",\r\n \"tags\": {},\r\n \"properties\": {\r\n \"sku\": {\r\n \"name\": \"standard\"\r\n },\r\n \"ProvisioningState\": \"Succeeded\"\r\n },\r\n \"id\": \"/subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backup/BackupVault/backuprn1\",\r\n \"type\": \"Microsoft.Backup/BackupVault\"\r\n}", + "ResponseHeaders": { + "Content-Length": [ + "339" + ], + "Content-Type": [ + "application/json" + ], + "Expires": [ + "-1" + ], + "Pragma": [ + "no-cache" + ], + "x-ms-request-id": [ + "3bce0760-d973-40e8-8801-55ded2639f62" + ], + "x-ms-client-request-id": [ + "86aa4dcf-d525-4e72-bdba-de8de0690f2f-2015-07-06 13:30:11Z-PS" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "x-ms-ratelimit-remaining-subscription-reads": [ + "14996" + ], + "x-ms-correlation-request-id": [ + "3bce0760-d973-40e8-8801-55ded2639f62" + ], + "x-ms-routing-request-id": [ + "CENTRALUS:20150706T133012Z:3bce0760-d973-40e8-8801-55ded2639f62" + ], + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 06 Jul 2015 13:30:12 GMT" + ], + "Server": [ + "Microsoft-IIS/8.0" + ] + }, + "StatusCode": 200 + }, + { + "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backup/BackupVault/backuprn1?api-version=2015-03-15", + "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3VwL0JhY2t1cFZhdWx0L2JhY2t1cHJuMT9hcGktdmVyc2lvbj0yMDE1LTAzLTE1", + "RequestMethod": "GET", + "RequestBody": "", + "RequestHeaders": { + "Accept-Language": [ + "en-us" + ], + "x-ms-client-request-id": [ + "ab7eca12-d91d-4474-9c4f-0b3520b80e67-2015-07-06 13:30:21Z-PS" + ], + "User-Agent": [ + "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" + ] + }, + "ResponseBody": "{\r\n \"location\": \"westus\",\r\n \"name\": \"backuprn1\",\r\n \"etag\": \"f6a25dcb-15d4-4bc4-b04a-207f003e02a8\",\r\n \"tags\": {},\r\n \"properties\": {\r\n \"sku\": {\r\n \"name\": \"standard\"\r\n },\r\n \"ProvisioningState\": \"Succeeded\"\r\n },\r\n \"id\": \"/subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backup/BackupVault/backuprn1\",\r\n \"type\": \"Microsoft.Backup/BackupVault\"\r\n}", + "ResponseHeaders": { + "Content-Length": [ + "339" + ], + "Content-Type": [ + "application/json" + ], + "Expires": [ + "-1" + ], + "Pragma": [ + "no-cache" + ], + "x-ms-request-id": [ + "d454e9ee-840a-4038-9000-5c2ae7c341f3" + ], + "x-ms-client-request-id": [ + "ab7eca12-d91d-4474-9c4f-0b3520b80e67-2015-07-06 13:30:21Z-PS" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "x-ms-ratelimit-remaining-subscription-reads": [ + "14990" + ], + "x-ms-correlation-request-id": [ + "d454e9ee-840a-4038-9000-5c2ae7c341f3" + ], + "x-ms-routing-request-id": [ + "CENTRALUS:20150706T133023Z:d454e9ee-840a-4038-9000-5c2ae7c341f3" + ], + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 06 Jul 2015 13:30:22 GMT" + ], + "Server": [ + "Microsoft-IIS/8.0" + ] + }, + "StatusCode": 200 + }, + { + "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backup/BackupVault/backuprn1/certificates/IdMgmtInternalCert?api-version=2015-03-15", + "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3VwL0JhY2t1cFZhdWx0L2JhY2t1cHJuMS9jZXJ0aWZpY2F0ZXMvSWRNZ210SW50ZXJuYWxDZXJ0P2FwaS12ZXJzaW9uPTIwMTUtMDMtMTU=", + "RequestMethod": "PUT", + "RequestBody": "{\r\n \"properties\": {\r\n \"certificate\": \"MIIC3TCCAcWgAwIBAgIQLunJRHBc96xOfX6422HsgDANBgkqhkiG9w0BAQUFADAeMRwwGgYDVQQDExNXaW5kb3dzIEF6dXJlIFRvb2xzMB4XDTE1MDcwNjEzMjAxM1oXDTE1MDcwODEzMzAxM1owHjEcMBoGA1UEAxMTV2luZG93cyBBenVyZSBUb29sczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALa5ZVzK4Xp5Sd73tn6irk4paqhBUqkOk4VnFPocekosZ9a84ZaZ/vjG2NpgZK3i1tglWuEERssnfKirMC42MiT2LVX7hiLkFQn3CDjip5pSNMSYiGFFx1+17Eh9Ls5w55tsfCmvu1sTrZYlYTXo16WY4MqQ0ohtNDoHMcjeCh6qZVKqn0t5kx+uOAt/LB5ygfYz0uTr4+Bd6uMG5VT80kCL4R8Iva7+I1+T11uIX5hSqLKNnMgAX0nBjppAY6MLgRghDIWlrR5NJ5EwitJPWp9HEYgYs9unTyi+cnz7a/7GR4IftJC79gi1jo8MWNiVd0fLR0IXJyy/C9IaTQ+e5PUCAwEAAaMXMBUwEwYDVR0lBAwwCgYIKwYBBQUHAwIwDQYJKoZIhvcNAQEFBQADggEBAEBKlDDP4B09dUt00TKUap9tnm937QrfgqoSwe1SU20WBGi5BpZQ6lIkH6kFJoCDu1+b15vFY7SnZgurROgitwGcy8XMGZUoN3BMJ0iI6nM9qd/8ftKKvb3Lo2iEDBZe5pzi4HqQ6tAgtGrf2tAIw7xG9Lj2cb9+VfbSBG0Btjbsj2sXTI1YGxKeO2VJ9btJAfdPY6KlO3x3bfC05bMqXJm369A+ATzEQolhVTPSgonwtLnv+Dj6We5UnQH37sLR3vt3hbF3beO6lb+efo9xPH3EWZFPFxbXxlUHG6WNqq5Y2LPKEi2cuYnzilVcKjl/qJ8VmvX+Ee7t1OvdJkvtJyI=\"\r\n }\r\n}", + "RequestHeaders": { + "Content-Type": [ + "application/json" + ], + "Content-Length": [ + "1035" + ], + "Accept-Language": [ + "en-us" + ], + "x-ms-version": [ + "2013-03-01" + ], + "User-Agent": [ + "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" + ] + }, + "ResponseBody": "{\r\n \"properties\": {\r\n \"certificate\": \"MIIC3TCCAcWgAwIBAgIQLunJRHBc96xOfX6422HsgDANBgkqhkiG9w0BAQUFADAeMRwwGgYDVQQDExNXaW5kb3dzIEF6dXJlIFRvb2xzMB4XDTE1MDcwNjEzMjAxM1oXDTE1MDcwODEzMzAxM1owHjEcMBoGA1UEAxMTV2luZG93cyBBenVyZSBUb29sczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALa5ZVzK4Xp5Sd73tn6irk4paqhBUqkOk4VnFPocekosZ9a84ZaZ/vjG2NpgZK3i1tglWuEERssnfKirMC42MiT2LVX7hiLkFQn3CDjip5pSNMSYiGFFx1+17Eh9Ls5w55tsfCmvu1sTrZYlYTXo16WY4MqQ0ohtNDoHMcjeCh6qZVKqn0t5kx+uOAt/LB5ygfYz0uTr4+Bd6uMG5VT80kCL4R8Iva7+I1+T11uIX5hSqLKNnMgAX0nBjppAY6MLgRghDIWlrR5NJ5EwitJPWp9HEYgYs9unTyi+cnz7a/7GR4IftJC79gi1jo8MWNiVd0fLR0IXJyy/C9IaTQ+e5PUCAwEAAaMXMBUwEwYDVR0lBAwwCgYIKwYBBQUHAwIwDQYJKoZIhvcNAQEFBQADggEBAEBKlDDP4B09dUt00TKUap9tnm937QrfgqoSwe1SU20WBGi5BpZQ6lIkH6kFJoCDu1+b15vFY7SnZgurROgitwGcy8XMGZUoN3BMJ0iI6nM9qd/8ftKKvb3Lo2iEDBZe5pzi4HqQ6tAgtGrf2tAIw7xG9Lj2cb9+VfbSBG0Btjbsj2sXTI1YGxKeO2VJ9btJAfdPY6KlO3x3bfC05bMqXJm369A+ATzEQolhVTPSgonwtLnv+Dj6We5UnQH37sLR3vt3hbF3beO6lb+efo9xPH3EWZFPFxbXxlUHG6WNqq5Y2LPKEi2cuYnzilVcKjl/qJ8VmvX+Ee7t1OvdJkvtJyI=\",\r\n \"resourceId\": 3953238055234851915,\r\n \"globalAcsNamespace\": \"seadev01rrp1users\",\r\n \"globalAcsHostName\": \"accesscontrol.windows.net\",\r\n \"globalAcsRPRealm\": \"http://windowscloudbackup/m3\",\r\n \"subject\": \"CN=Windows Azure Tools\",\r\n \"validFrom\": \"2015-07-06T06:20:13-07:00\",\r\n \"validTo\": \"2015-07-08T06:30:13-07:00\",\r\n \"thumbprint\": \"7B0229BFEB43C18267FCE23898BABA9EF5BADA5E\",\r\n \"friendlyName\": \"\",\r\n \"issuer\": \"CN=Windows Azure Tools\"\r\n }\r\n}", + "ResponseHeaders": { + "Content-Length": [ + "1410" + ], + "Content-Type": [ + "application/json" + ], + "Expires": [ + "-1" + ], + "Pragma": [ + "no-cache" + ], + "x-ms-request-id": [ + "933870e4-28e3-43ca-9f83-c4f34a5cc68b" + ], + "x-ms-client-request-id": [ + "48ede6bd-aa80-4638-b131-953461543f4d", + "48ede6bd-aa80-4638-b131-953461543f4d" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "x-ms-ratelimit-remaining-subscription-writes": [ + "1197" + ], + "x-ms-correlation-request-id": [ + "933870e4-28e3-43ca-9f83-c4f34a5cc68b" + ], + "x-ms-routing-request-id": [ + "CENTRALUS:20150706T133016Z:933870e4-28e3-43ca-9f83-c4f34a5cc68b" + ], + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 06 Jul 2015 13:30:16 GMT" + ], + "Server": [ + "Microsoft-IIS/8.0" + ] + }, + "StatusCode": 200 + }, + { + "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backup/BackupVault/backuprn1/storageconfig/vaultstorageconfig?api-version=2015-03-15", + "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3VwL0JhY2t1cFZhdWx0L2JhY2t1cHJuMS9zdG9yYWdlY29uZmlnL3ZhdWx0c3RvcmFnZWNvbmZpZz9hcGktdmVyc2lvbj0yMDE1LTAzLTE1", + "RequestMethod": "PATCH", + "RequestBody": "{\r\n \"properties\": {\r\n \"storageModelType\": \"GeoRedundant\"\r\n }\r\n}", + "RequestHeaders": { + "Content-Type": [ + "application/json" + ], + "Content-Length": [ + "68" + ], + "Accept-Language": [ + "en-us" + ], + "x-ms-client-request-id": [ + "0a3643ae-71a9-428b-b619-adf9ca454c31-2015-07-06 13:30:16Z-PS" + ], + "x-ms-version": [ + "2013-03-01" + ], + "User-Agent": [ + "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" + ] + }, + "ResponseBody": "", + "ResponseHeaders": { + "Content-Length": [ + "0" + ], + "Expires": [ + "-1" + ], + "Pragma": [ + "no-cache" + ], + "x-ms-request-id": [ + "14f3d9ee-0047-4057-bef1-ef0d55d8fbec" + ], + "x-ms-client-request-id": [ + "0a3643ae-71a9-428b-b619-adf9ca454c31-2015-07-06 13:30:16Z-PS", + "0a3643ae-71a9-428b-b619-adf9ca454c31-2015-07-06 13:30:16Z-PS" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "x-ms-ratelimit-remaining-subscription-writes": [ + "1196" + ], + "x-ms-correlation-request-id": [ + "14f3d9ee-0047-4057-bef1-ef0d55d8fbec" + ], + "x-ms-routing-request-id": [ + "CENTRALUS:20150706T133017Z:14f3d9ee-0047-4057-bef1-ef0d55d8fbec" + ], + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 06 Jul 2015 13:30:17 GMT" + ] + }, + "StatusCode": 204 + }, + { + "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backup/BackupVault/backuprn1/storageconfig/vaultstorageconfig?api-version=2015-03-15", + "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3VwL0JhY2t1cFZhdWx0L2JhY2t1cHJuMS9zdG9yYWdlY29uZmlnL3ZhdWx0c3RvcmFnZWNvbmZpZz9hcGktdmVyc2lvbj0yMDE1LTAzLTE1", + "RequestMethod": "PATCH", + "RequestBody": "{\r\n \"properties\": {\r\n \"storageModelType\": \"LocallyRedundant\"\r\n }\r\n}", + "RequestHeaders": { + "Content-Type": [ + "application/json" + ], + "Content-Length": [ + "72" + ], + "Accept-Language": [ + "en-us" + ], + "x-ms-client-request-id": [ + "7e359d92-22aa-4f5d-94b4-26ad3d28ff22-2015-07-06 13:30:18Z-PS" + ], + "x-ms-version": [ + "2013-03-01" + ], + "User-Agent": [ + "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" + ] + }, + "ResponseBody": "", + "ResponseHeaders": { + "Content-Length": [ + "0" + ], + "Expires": [ + "-1" + ], + "Pragma": [ + "no-cache" + ], + "x-ms-request-id": [ + "223a81aa-1ed3-4abc-ad7b-659fbdc0111e" + ], + "x-ms-client-request-id": [ + "7e359d92-22aa-4f5d-94b4-26ad3d28ff22-2015-07-06 13:30:18Z-PS", + "7e359d92-22aa-4f5d-94b4-26ad3d28ff22-2015-07-06 13:30:18Z-PS" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "x-ms-ratelimit-remaining-subscription-writes": [ + "1195" + ], + "x-ms-correlation-request-id": [ + "223a81aa-1ed3-4abc-ad7b-659fbdc0111e" + ], + "x-ms-routing-request-id": [ + "CENTRALUS:20150706T133020Z:223a81aa-1ed3-4abc-ad7b-659fbdc0111e" + ], + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 06 Jul 2015 13:30:19 GMT" + ] + }, + "StatusCode": 204 + }, + { + "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backup/BackupVault/backuprn1/storageconfig/vaultstorageconfig?api-version=2015-03-15", + "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3VwL0JhY2t1cFZhdWx0L2JhY2t1cHJuMS9zdG9yYWdlY29uZmlnL3ZhdWx0c3RvcmFnZWNvbmZpZz9hcGktdmVyc2lvbj0yMDE1LTAzLTE1", + "RequestMethod": "PATCH", + "RequestBody": "{\r\n \"properties\": {\r\n \"storageModelType\": \"GeoRedundant\"\r\n }\r\n}", + "RequestHeaders": { + "Content-Type": [ + "application/json" + ], + "Content-Length": [ + "68" + ], + "Accept-Language": [ + "en-us" + ], + "x-ms-client-request-id": [ + "ab7eca12-d91d-4474-9c4f-0b3520b80e67-2015-07-06 13:30:21Z-PS" + ], + "x-ms-version": [ + "2013-03-01" + ], + "User-Agent": [ + "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" + ] + }, + "ResponseBody": "", + "ResponseHeaders": { + "Content-Length": [ + "0" + ], + "Expires": [ + "-1" + ], + "Pragma": [ + "no-cache" + ], + "x-ms-request-id": [ + "b95fdb7c-914d-4707-a560-2b8160e33b51" + ], + "x-ms-client-request-id": [ + "ab7eca12-d91d-4474-9c4f-0b3520b80e67-2015-07-06 13:30:21Z-PS", + "ab7eca12-d91d-4474-9c4f-0b3520b80e67-2015-07-06 13:30:21Z-PS" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "x-ms-ratelimit-remaining-subscription-writes": [ + "1194" + ], + "x-ms-correlation-request-id": [ + "b95fdb7c-914d-4707-a560-2b8160e33b51" + ], + "x-ms-routing-request-id": [ + "CENTRALUS:20150706T133022Z:b95fdb7c-914d-4707-a560-2b8160e33b51" + ], + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 06 Jul 2015 13:30:22 GMT" + ] + }, + "StatusCode": 204 + }, + { + "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resources?$filter=resourceType%20eq%20'Microsoft.Backup/BackupVault'&$top=100&api-version=2013-03-01", + "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlcz8kZmlsdGVyPXJlc291cmNlVHlwZSUyMGVxJTIwJ01pY3Jvc29mdC5CYWNrdXAvQmFja3VwVmF1bHQnJiR0b3A9MTAwJmFwaS12ZXJzaW9uPTIwMTMtMDMtMDE=", + "RequestMethod": "GET", + "RequestBody": "", + "RequestHeaders": { + "Accept-Language": [ + "en-us" + ], + "x-ms-client-request-id": [ + "881a5a68-c5be-4f63-a6c2-fda57b5ce1ff-2015-07-06 13:30:17Z-PS" + ], + "User-Agent": [ + "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" + ] + }, + "ResponseBody": "{\r\n \"value\": [\r\n {\r\n \"id\": \"/subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backup/BackupVault/backuprn\",\r\n \"name\": \"backuprn\",\r\n \"type\": \"Microsoft.Backup/BackupVault\",\r\n \"location\": \"westus\",\r\n \"tags\": {}\r\n },\r\n {\r\n \"id\": \"/subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backup/BackupVault/backuprn1\",\r\n \"name\": \"backuprn1\",\r\n \"type\": \"Microsoft.Backup/BackupVault\",\r\n \"location\": \"westus\",\r\n \"tags\": {}\r\n },\r\n {\r\n \"id\": \"/subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backup/BackupVault/backuprn2\",\r\n \"name\": \"backuprn2\",\r\n \"type\": \"Microsoft.Backup/BackupVault\",\r\n \"location\": \"westus\",\r\n \"tags\": {}\r\n },\r\n {\r\n \"id\": \"/subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backup/BackupVault/vaultresourcename\",\r\n \"name\": \"vaultresourcename\",\r\n \"type\": \"Microsoft.Backup/BackupVault\",\r\n \"location\": \"westus\",\r\n \"tags\": {}\r\n },\r\n {\r\n \"id\": \"/subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backup/BackupVault/vaulttest\",\r\n \"name\": \"vaulttest\",\r\n \"type\": \"Microsoft.Backup/BackupVault\",\r\n \"location\": \"westus\",\r\n \"tags\": {}\r\n },\r\n {\r\n \"id\": \"/subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backup/BackupVault/vaulttestrn\",\r\n \"name\": \"vaulttestrn\",\r\n \"type\": \"Microsoft.Backup/BackupVault\",\r\n \"location\": \"westus\",\r\n \"tags\": {}\r\n }\r\n ]\r\n}", + "ResponseHeaders": { + "Content-Length": [ + "1355" + ], + "Content-Type": [ + "application/json; charset=utf-8" + ], + "Expires": [ + "-1" + ], + "Pragma": [ + "no-cache" + ], + "x-ms-ratelimit-remaining-subscription-reads": [ + "14994" + ], + "x-ms-request-id": [ + "9c3bcbc9-fe5c-432a-b0c8-a17c2baac6d4" + ], + "x-ms-correlation-request-id": [ + "9c3bcbc9-fe5c-432a-b0c8-a17c2baac6d4" + ], + "x-ms-routing-request-id": [ + "CENTRALUS:20150706T133017Z:9c3bcbc9-fe5c-432a-b0c8-a17c2baac6d4" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 06 Jul 2015 13:30:17 GMT" + ] + }, + "StatusCode": 200 + }, + { + "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resources?$filter=resourceType%20eq%20'Microsoft.Backup/BackupVault'&$top=100&api-version=2013-03-01", + "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlcz8kZmlsdGVyPXJlc291cmNlVHlwZSUyMGVxJTIwJ01pY3Jvc29mdC5CYWNrdXAvQmFja3VwVmF1bHQnJiR0b3A9MTAwJmFwaS12ZXJzaW9uPTIwMTMtMDMtMDE=", + "RequestMethod": "GET", + "RequestBody": "", + "RequestHeaders": { + "Accept-Language": [ + "en-us" + ], + "x-ms-client-request-id": [ + "35e1e006-a801-4559-ab8d-3a898b75d5d6-2015-07-06 13:30:20Z-PS" + ], + "User-Agent": [ + "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" + ] + }, + "ResponseBody": "{\r\n \"value\": [\r\n {\r\n \"id\": \"/subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backup/BackupVault/backuprn\",\r\n \"name\": \"backuprn\",\r\n \"type\": \"Microsoft.Backup/BackupVault\",\r\n \"location\": \"westus\",\r\n \"tags\": {}\r\n },\r\n {\r\n \"id\": \"/subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backup/BackupVault/backuprn1\",\r\n \"name\": \"backuprn1\",\r\n \"type\": \"Microsoft.Backup/BackupVault\",\r\n \"location\": \"westus\",\r\n \"tags\": {}\r\n },\r\n {\r\n \"id\": \"/subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backup/BackupVault/backuprn2\",\r\n \"name\": \"backuprn2\",\r\n \"type\": \"Microsoft.Backup/BackupVault\",\r\n \"location\": \"westus\",\r\n \"tags\": {}\r\n },\r\n {\r\n \"id\": \"/subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backup/BackupVault/vaultresourcename\",\r\n \"name\": \"vaultresourcename\",\r\n \"type\": \"Microsoft.Backup/BackupVault\",\r\n \"location\": \"westus\",\r\n \"tags\": {}\r\n },\r\n {\r\n \"id\": \"/subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backup/BackupVault/vaulttest\",\r\n \"name\": \"vaulttest\",\r\n \"type\": \"Microsoft.Backup/BackupVault\",\r\n \"location\": \"westus\",\r\n \"tags\": {}\r\n },\r\n {\r\n \"id\": \"/subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backup/BackupVault/vaulttestrn\",\r\n \"name\": \"vaulttestrn\",\r\n \"type\": \"Microsoft.Backup/BackupVault\",\r\n \"location\": \"westus\",\r\n \"tags\": {}\r\n }\r\n ]\r\n}", + "ResponseHeaders": { + "Content-Length": [ + "1355" + ], + "Content-Type": [ + "application/json; charset=utf-8" + ], + "Expires": [ + "-1" + ], + "Pragma": [ + "no-cache" + ], + "x-ms-ratelimit-remaining-subscription-reads": [ + "14992" + ], + "x-ms-request-id": [ + "2f8416a5-9b8d-4bfb-8509-8cd82623f57a" + ], + "x-ms-correlation-request-id": [ + "2f8416a5-9b8d-4bfb-8509-8cd82623f57a" + ], + "x-ms-routing-request-id": [ + "CENTRALUS:20150706T133020Z:2f8416a5-9b8d-4bfb-8509-8cd82623f57a" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 06 Jul 2015 13:30:19 GMT" + ] + }, + "StatusCode": 200 + }, + { + "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backup/BackupVault/backuprn1?api-version=2015-03-15", + "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3VwL0JhY2t1cFZhdWx0L2JhY2t1cHJuMT9hcGktdmVyc2lvbj0yMDE1LTAzLTE1", + "RequestMethod": "DELETE", + "RequestBody": "", + "RequestHeaders": { + "Accept-Language": [ + "en-us" + ], + "x-ms-client-request-id": [ + "79d0db12-b0ab-4f78-b1d4-513737a2389c-2015-07-06 13:30:23Z-PS" + ], + "User-Agent": [ + "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" + ] + }, + "ResponseBody": "", + "ResponseHeaders": { + "Content-Length": [ + "0" + ], + "Expires": [ + "-1" + ], + "Pragma": [ + "no-cache" + ], + "x-ms-request-id": [ + "3d4dd095-808d-491b-8ef7-dbc0a565ab26" + ], + "x-ms-client-request-id": [ + "79d0db12-b0ab-4f78-b1d4-513737a2389c-2015-07-06 13:30:23Z-PS" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "x-ms-ratelimit-remaining-subscription-writes": [ + "1193" + ], + "x-ms-correlation-request-id": [ + "3d4dd095-808d-491b-8ef7-dbc0a565ab26" + ], + "x-ms-routing-request-id": [ + "CENTRALUS:20150706T133026Z:3d4dd095-808d-491b-8ef7-dbc0a565ab26" + ], + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 06 Jul 2015 13:30:26 GMT" + ] + }, + "StatusCode": 200 + } + ], + "Names": {}, + "Variables": { + "SubscriptionId": "f5303a0b-fae4-4cdb-b44d-0e4c032dde26" + } +} \ No newline at end of file diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupVaultTests/GetAzureBackupVaultCredentialsTests.json b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupVaultTests/GetAzureBackupVaultCredentialsTests.json deleted file mode 100644 index 3cdbdcb2a55b..000000000000 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupVaultTests/GetAzureBackupVaultCredentialsTests.json +++ /dev/null @@ -1,190 +0,0 @@ -{ - "Entries": [ - { - "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resources?$filter=resourceType%20eq%20'Microsoft.Backup/BackupVault'&$top=100&api-version=2013-03-01", - "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlcz8kZmlsdGVyPXJlc291cmNlVHlwZSUyMGVxJTIwJ01pY3Jvc29mdC5CYWNrdXAvQmFja3VwVmF1bHQnJiR0b3A9MTAwJmFwaS12ZXJzaW9uPTIwMTMtMDMtMDE=", - "RequestMethod": "GET", - "RequestBody": "", - "RequestHeaders": { - "Accept-Language": [ - "en-us" - ], - "x-ms-client-request-id": [ - "fa9d0eb9-aec0-4246-9422-836ac9ff813d-2015-07-02 14:02:44Z-PS" - ], - "User-Agent": [ - "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" - ] - }, - "ResponseBody": "{\r\n \"value\": [\r\n {\r\n \"id\": \"/subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backup/BackupVault/backuprn\",\r\n \"name\": \"backuprn\",\r\n \"type\": \"Microsoft.Backup/BackupVault\",\r\n \"location\": \"westus\",\r\n \"tags\": {}\r\n }\r\n ]\r\n}", - "ResponseHeaders": { - "Content-Length": [ - "230" - ], - "Content-Type": [ - "application/json; charset=utf-8" - ], - "Expires": [ - "-1" - ], - "Pragma": [ - "no-cache" - ], - "x-ms-ratelimit-remaining-subscription-reads": [ - "14994" - ], - "x-ms-request-id": [ - "8a2f8dad-2ccc-4543-84da-3d0c0c56f064" - ], - "x-ms-correlation-request-id": [ - "8a2f8dad-2ccc-4543-84da-3d0c0c56f064" - ], - "x-ms-routing-request-id": [ - "CENTRALUS:20150702T140245Z:8a2f8dad-2ccc-4543-84da-3d0c0c56f064" - ], - "Strict-Transport-Security": [ - "max-age=31536000; includeSubDomains" - ], - "Cache-Control": [ - "no-cache" - ], - "Date": [ - "Thu, 02 Jul 2015 14:02:45 GMT" - ] - }, - "StatusCode": 200 - }, - { - "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backup/BackupVault/backuprn/storageconfig/vaultstorageconfig?api-version=2015-03-15", - "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3VwL0JhY2t1cFZhdWx0L2JhY2t1cHJuL3N0b3JhZ2Vjb25maWcvdmF1bHRzdG9yYWdlY29uZmlnP2FwaS12ZXJzaW9uPTIwMTUtMDMtMTU=", - "RequestMethod": "GET", - "RequestBody": "", - "RequestHeaders": { - "Accept-Language": [ - "en-us" - ], - "x-ms-client-request-id": [ - "fa9d0eb9-aec0-4246-9422-836ac9ff813d-2015-07-02 14:02:44Z-PS" - ], - "User-Agent": [ - "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" - ] - }, - "ResponseBody": "{\r\n \"resourceId\": 5089188015289137043,\r\n \"properties\": {\r\n \"storageType\": \"LocallyRedundant\",\r\n \"storageTypeState\": \"Unlocked\"\r\n }\r\n}", - "ResponseHeaders": { - "Content-Length": [ - "112" - ], - "Content-Type": [ - "application/json" - ], - "Expires": [ - "-1" - ], - "Pragma": [ - "no-cache" - ], - "x-ms-request-id": [ - "6c60134c-2c99-4893-a83b-f422d15d9e3d" - ], - "x-ms-client-request-id": [ - "fa9d0eb9-aec0-4246-9422-836ac9ff813d-2015-07-02 14:02:44Z-PS", - "fa9d0eb9-aec0-4246-9422-836ac9ff813d-2015-07-02 14:02:44Z-PS" - ], - "Strict-Transport-Security": [ - "max-age=31536000; includeSubDomains" - ], - "x-ms-ratelimit-remaining-subscription-reads": [ - "14993" - ], - "x-ms-correlation-request-id": [ - "6c60134c-2c99-4893-a83b-f422d15d9e3d" - ], - "x-ms-routing-request-id": [ - "CENTRALUS:20150702T140246Z:6c60134c-2c99-4893-a83b-f422d15d9e3d" - ], - "Cache-Control": [ - "no-cache" - ], - "Date": [ - "Thu, 02 Jul 2015 14:02:46 GMT" - ], - "Server": [ - "Microsoft-IIS/8.0" - ] - }, - "StatusCode": 200 - }, - { - "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backup/BackupVault/backuprn/certificates/IdMgmtInternalCert?api-version=2015-03-15", - "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3VwL0JhY2t1cFZhdWx0L2JhY2t1cHJuL2NlcnRpZmljYXRlcy9JZE1nbXRJbnRlcm5hbENlcnQ/YXBpLXZlcnNpb249MjAxNS0wMy0xNQ==", - "RequestMethod": "PUT", - "RequestBody": "{\r\n \"properties\": {\r\n \"certificate\": \"MIIC3TCCAcWgAwIBAgIQXMd31PGqur9FPYhcZ9VWHjANBgkqhkiG9w0BAQUFADAeMRwwGgYDVQQDExNXaW5kb3dzIEF6dXJlIFRvb2xzMB4XDTE1MDcwMjEzNTI0NloXDTE1MDcwNDE0MDI0NlowHjEcMBoGA1UEAxMTV2luZG93cyBBenVyZSBUb29sczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM6IsWTthdf0DSH/SAx116/roRYQFTblI03QV8Gq2xMy56UQk8u6lANA0kQEx2vDXDAlsH8IkNmDqBCFLi/AUXRxLCDKPNUDolyULiNcZAV/DPxSNhp8ywBvF0NGKxTQjo1ZCO6xdzCp8H7f1YunL6K/fjWgS/r9Hy77mpQH0HfMsAwWt6XMg1sxnmWC9xx9i6k8IezpKOo2gMym6HvhHAQD3keaPocrXGMS0MjbKbFVVOYmHRaPMV59ThE53WOcNLAUYz90EEs5G5DfDa1s7C5e0ndV3ni0dMngFNCBsB4BeFClS/JA3je8K5l4V/BSAq/JAvPwYrm6HOauQXXiu4cCAwEAAaMXMBUwEwYDVR0lBAwwCgYIKwYBBQUHAwIwDQYJKoZIhvcNAQEFBQADggEBAFWexhqGMs0eEGA0a9BsPis3vuTz5AfElSapcdZlrDxrF4TN/knnCPY8PFudiWOKMGCGDhZ1yOUel87P9FHdjaVPg+PARTD0ScM1l2kaA2kmvXERwU3Ktp0PXa34cPjPYGp9v2N2X7UjF0kDQmOzqkuCWREUkRxwKIv4gzDthG0X8Kcth2iPZVc7QGU+Az6yIhViNyR4eVNo20Y5ss18PSg1Ec94ek/ytF/BEIrcyUClu4UZFVDUKdMYgWYNxspClIw8l1pDkmPa37yh/9Lz0czEDAIdZ8dPRBgO9/nO/EKHbHXtNb6iI6zdwp/tm9i1yX2TgXN3ACEm1BBKS8z72Hg=\"\r\n }\r\n}", - "RequestHeaders": { - "Content-Type": [ - "application/json" - ], - "Content-Length": [ - "1035" - ], - "Accept-Language": [ - "en-us" - ], - "x-ms-version": [ - "2013-03-01" - ], - "User-Agent": [ - "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" - ] - }, - "ResponseBody": "{\r\n \"properties\": {\r\n \"certificate\": \"MIIC3TCCAcWgAwIBAgIQXMd31PGqur9FPYhcZ9VWHjANBgkqhkiG9w0BAQUFADAeMRwwGgYDVQQDExNXaW5kb3dzIEF6dXJlIFRvb2xzMB4XDTE1MDcwMjEzNTI0NloXDTE1MDcwNDE0MDI0NlowHjEcMBoGA1UEAxMTV2luZG93cyBBenVyZSBUb29sczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM6IsWTthdf0DSH/SAx116/roRYQFTblI03QV8Gq2xMy56UQk8u6lANA0kQEx2vDXDAlsH8IkNmDqBCFLi/AUXRxLCDKPNUDolyULiNcZAV/DPxSNhp8ywBvF0NGKxTQjo1ZCO6xdzCp8H7f1YunL6K/fjWgS/r9Hy77mpQH0HfMsAwWt6XMg1sxnmWC9xx9i6k8IezpKOo2gMym6HvhHAQD3keaPocrXGMS0MjbKbFVVOYmHRaPMV59ThE53WOcNLAUYz90EEs5G5DfDa1s7C5e0ndV3ni0dMngFNCBsB4BeFClS/JA3je8K5l4V/BSAq/JAvPwYrm6HOauQXXiu4cCAwEAAaMXMBUwEwYDVR0lBAwwCgYIKwYBBQUHAwIwDQYJKoZIhvcNAQEFBQADggEBAFWexhqGMs0eEGA0a9BsPis3vuTz5AfElSapcdZlrDxrF4TN/knnCPY8PFudiWOKMGCGDhZ1yOUel87P9FHdjaVPg+PARTD0ScM1l2kaA2kmvXERwU3Ktp0PXa34cPjPYGp9v2N2X7UjF0kDQmOzqkuCWREUkRxwKIv4gzDthG0X8Kcth2iPZVc7QGU+Az6yIhViNyR4eVNo20Y5ss18PSg1Ec94ek/ytF/BEIrcyUClu4UZFVDUKdMYgWYNxspClIw8l1pDkmPa37yh/9Lz0czEDAIdZ8dPRBgO9/nO/EKHbHXtNb6iI6zdwp/tm9i1yX2TgXN3ACEm1BBKS8z72Hg=\",\r\n \"resourceId\": 5089188015289137043,\r\n \"globalAcsNamespace\": \"wusppe1rrp1users\",\r\n \"globalAcsHostName\": \"accesscontrol.windows.net\",\r\n \"globalAcsRPRealm\": \"http://windowscloudbackup/m3\",\r\n \"subject\": \"CN=Windows Azure Tools\",\r\n \"validFrom\": \"2015-07-02T19:22:46+05:30\",\r\n \"validTo\": \"2015-07-04T19:32:46+05:30\",\r\n \"thumbprint\": \"6D7D8481178C53FA8B08C657F14389DD33714FD7\",\r\n \"friendlyName\": \"\",\r\n \"issuer\": \"CN=Windows Azure Tools\"\r\n }\r\n}", - "ResponseHeaders": { - "Content-Length": [ - "1409" - ], - "Content-Type": [ - "application/json" - ], - "Expires": [ - "-1" - ], - "Pragma": [ - "no-cache" - ], - "x-ms-request-id": [ - "c34f8cc0-e568-4af6-850d-cb8bf220314f" - ], - "x-ms-client-request-id": [ - "9dc9788b-6508-4565-8d17-1523707cceca", - "9dc9788b-6508-4565-8d17-1523707cceca" - ], - "Strict-Transport-Security": [ - "max-age=31536000; includeSubDomains" - ], - "x-ms-ratelimit-remaining-subscription-writes": [ - "1198" - ], - "x-ms-correlation-request-id": [ - "c34f8cc0-e568-4af6-850d-cb8bf220314f" - ], - "x-ms-routing-request-id": [ - "CENTRALUS:20150702T140250Z:c34f8cc0-e568-4af6-850d-cb8bf220314f" - ], - "Cache-Control": [ - "no-cache" - ], - "Date": [ - "Thu, 02 Jul 2015 14:02:50 GMT" - ], - "Server": [ - "Microsoft-IIS/8.0" - ] - }, - "StatusCode": 200 - } - ], - "Names": {}, - "Variables": { - "SubscriptionId": "f5303a0b-fae4-4cdb-b44d-0e4c032dde26" - } -} \ No newline at end of file diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupVaultTests/SetAzureBackupVaultStorageTypeTests.json b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupVaultTests/SetAzureBackupVaultStorageTypeTests.json deleted file mode 100644 index eb2835b65786..000000000000 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupVaultTests/SetAzureBackupVaultStorageTypeTests.json +++ /dev/null @@ -1,481 +0,0 @@ -{ - "Entries": [ - { - "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resources?$filter=resourceType%20eq%20'Microsoft.Backup/BackupVault'&$top=100&api-version=2013-03-01", - "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlcz8kZmlsdGVyPXJlc291cmNlVHlwZSUyMGVxJTIwJ01pY3Jvc29mdC5CYWNrdXAvQmFja3VwVmF1bHQnJiR0b3A9MTAwJmFwaS12ZXJzaW9uPTIwMTMtMDMtMDE=", - "RequestMethod": "GET", - "RequestBody": "", - "RequestHeaders": { - "Accept-Language": [ - "en-us" - ], - "x-ms-client-request-id": [ - "872537bf-88e0-46ba-b0e7-5880e0b93b78-2015-07-03 11:08:00Z-PS" - ], - "User-Agent": [ - "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" - ] - }, - "ResponseBody": "{\r\n \"value\": [\r\n {\r\n \"id\": \"/subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backup/BackupVault/backuprn\",\r\n \"name\": \"backuprn\",\r\n \"type\": \"Microsoft.Backup/BackupVault\",\r\n \"location\": \"westus\",\r\n \"tags\": {}\r\n }\r\n ]\r\n}", - "ResponseHeaders": { - "Content-Length": [ - "230" - ], - "Content-Type": [ - "application/json; charset=utf-8" - ], - "Expires": [ - "-1" - ], - "Pragma": [ - "no-cache" - ], - "x-ms-ratelimit-remaining-subscription-reads": [ - "14990" - ], - "x-ms-request-id": [ - "b06dc45e-abd4-4c14-bcaa-45883b35b8d9" - ], - "x-ms-correlation-request-id": [ - "b06dc45e-abd4-4c14-bcaa-45883b35b8d9" - ], - "x-ms-routing-request-id": [ - "CENTRALUS:20150703T110802Z:b06dc45e-abd4-4c14-bcaa-45883b35b8d9" - ], - "Strict-Transport-Security": [ - "max-age=31536000; includeSubDomains" - ], - "Cache-Control": [ - "no-cache" - ], - "Date": [ - "Fri, 03 Jul 2015 11:08:02 GMT" - ] - }, - "StatusCode": 200 - }, - { - "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resources?$filter=resourceType%20eq%20'Microsoft.Backup/BackupVault'&$top=100&api-version=2013-03-01", - "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlcz8kZmlsdGVyPXJlc291cmNlVHlwZSUyMGVxJTIwJ01pY3Jvc29mdC5CYWNrdXAvQmFja3VwVmF1bHQnJiR0b3A9MTAwJmFwaS12ZXJzaW9uPTIwMTMtMDMtMDE=", - "RequestMethod": "GET", - "RequestBody": "", - "RequestHeaders": { - "Accept-Language": [ - "en-us" - ], - "x-ms-client-request-id": [ - "491f85ea-bdc5-4f22-ba8e-debc7c2a2f6d-2015-07-03 11:08:03Z-PS" - ], - "User-Agent": [ - "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" - ] - }, - "ResponseBody": "{\r\n \"value\": [\r\n {\r\n \"id\": \"/subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backup/BackupVault/backuprn\",\r\n \"name\": \"backuprn\",\r\n \"type\": \"Microsoft.Backup/BackupVault\",\r\n \"location\": \"westus\",\r\n \"tags\": {}\r\n }\r\n ]\r\n}", - "ResponseHeaders": { - "Content-Length": [ - "230" - ], - "Content-Type": [ - "application/json; charset=utf-8" - ], - "Expires": [ - "-1" - ], - "Pragma": [ - "no-cache" - ], - "x-ms-ratelimit-remaining-subscription-reads": [ - "14988" - ], - "x-ms-request-id": [ - "6971380e-7c18-45b3-aa45-e4e38a8cef8d" - ], - "x-ms-correlation-request-id": [ - "6971380e-7c18-45b3-aa45-e4e38a8cef8d" - ], - "x-ms-routing-request-id": [ - "CENTRALUS:20150703T110804Z:6971380e-7c18-45b3-aa45-e4e38a8cef8d" - ], - "Strict-Transport-Security": [ - "max-age=31536000; includeSubDomains" - ], - "Cache-Control": [ - "no-cache" - ], - "Date": [ - "Fri, 03 Jul 2015 11:08:04 GMT" - ] - }, - "StatusCode": 200 - }, - { - "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resources?$filter=resourceType%20eq%20'Microsoft.Backup/BackupVault'&$top=100&api-version=2013-03-01", - "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlcz8kZmlsdGVyPXJlc291cmNlVHlwZSUyMGVxJTIwJ01pY3Jvc29mdC5CYWNrdXAvQmFja3VwVmF1bHQnJiR0b3A9MTAwJmFwaS12ZXJzaW9uPTIwMTMtMDMtMDE=", - "RequestMethod": "GET", - "RequestBody": "", - "RequestHeaders": { - "Accept-Language": [ - "en-us" - ], - "x-ms-client-request-id": [ - "60ce1104-8270-44bf-acb7-115661d1a02d-2015-07-03 11:08:06Z-PS" - ], - "User-Agent": [ - "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" - ] - }, - "ResponseBody": "{\r\n \"value\": [\r\n {\r\n \"id\": \"/subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backup/BackupVault/backuprn\",\r\n \"name\": \"backuprn\",\r\n \"type\": \"Microsoft.Backup/BackupVault\",\r\n \"location\": \"westus\",\r\n \"tags\": {}\r\n }\r\n ]\r\n}", - "ResponseHeaders": { - "Content-Length": [ - "230" - ], - "Content-Type": [ - "application/json; charset=utf-8" - ], - "Expires": [ - "-1" - ], - "Pragma": [ - "no-cache" - ], - "x-ms-ratelimit-remaining-subscription-reads": [ - "14986" - ], - "x-ms-request-id": [ - "7e89671e-c0f2-4d81-9a35-350fb3162e7f" - ], - "x-ms-correlation-request-id": [ - "7e89671e-c0f2-4d81-9a35-350fb3162e7f" - ], - "x-ms-routing-request-id": [ - "CENTRALUS:20150703T110806Z:7e89671e-c0f2-4d81-9a35-350fb3162e7f" - ], - "Strict-Transport-Security": [ - "max-age=31536000; includeSubDomains" - ], - "Cache-Control": [ - "no-cache" - ], - "Date": [ - "Fri, 03 Jul 2015 11:08:06 GMT" - ] - }, - "StatusCode": 200 - }, - { - "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backup/BackupVault/backuprn/storageconfig/vaultstorageconfig?api-version=2015-03-15", - "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3VwL0JhY2t1cFZhdWx0L2JhY2t1cHJuL3N0b3JhZ2Vjb25maWcvdmF1bHRzdG9yYWdlY29uZmlnP2FwaS12ZXJzaW9uPTIwMTUtMDMtMTU=", - "RequestMethod": "GET", - "RequestBody": "", - "RequestHeaders": { - "Accept-Language": [ - "en-us" - ], - "x-ms-client-request-id": [ - "872537bf-88e0-46ba-b0e7-5880e0b93b78-2015-07-03 11:08:00Z-PS" - ], - "User-Agent": [ - "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" - ] - }, - "ResponseBody": "{\r\n \"resourceId\": 8420362025804603700,\r\n \"properties\": {\r\n \"storageType\": \"GeoRedundant\",\r\n \"storageTypeState\": \"Unlocked\"\r\n }\r\n}", - "ResponseHeaders": { - "Content-Length": [ - "108" - ], - "Content-Type": [ - "application/json" - ], - "Expires": [ - "-1" - ], - "Pragma": [ - "no-cache" - ], - "x-ms-request-id": [ - "dc34ea62-6546-48b8-909e-828c12892f07" - ], - "x-ms-client-request-id": [ - "872537bf-88e0-46ba-b0e7-5880e0b93b78-2015-07-03 11:08:00Z-PS", - "872537bf-88e0-46ba-b0e7-5880e0b93b78-2015-07-03 11:08:00Z-PS" - ], - "Strict-Transport-Security": [ - "max-age=31536000; includeSubDomains" - ], - "x-ms-ratelimit-remaining-subscription-reads": [ - "14989" - ], - "x-ms-correlation-request-id": [ - "dc34ea62-6546-48b8-909e-828c12892f07" - ], - "x-ms-routing-request-id": [ - "CENTRALUS:20150703T110803Z:dc34ea62-6546-48b8-909e-828c12892f07" - ], - "Cache-Control": [ - "no-cache" - ], - "Date": [ - "Fri, 03 Jul 2015 11:08:02 GMT" - ], - "Server": [ - "Microsoft-IIS/8.0" - ] - }, - "StatusCode": 200 - }, - { - "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backup/BackupVault/backuprn/storageconfig/vaultstorageconfig?api-version=2015-03-15", - "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3VwL0JhY2t1cFZhdWx0L2JhY2t1cHJuL3N0b3JhZ2Vjb25maWcvdmF1bHRzdG9yYWdlY29uZmlnP2FwaS12ZXJzaW9uPTIwMTUtMDMtMTU=", - "RequestMethod": "GET", - "RequestBody": "", - "RequestHeaders": { - "Accept-Language": [ - "en-us" - ], - "x-ms-client-request-id": [ - "491f85ea-bdc5-4f22-ba8e-debc7c2a2f6d-2015-07-03 11:08:03Z-PS" - ], - "User-Agent": [ - "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" - ] - }, - "ResponseBody": "{\r\n \"resourceId\": 8420362025804603700,\r\n \"properties\": {\r\n \"storageType\": \"GeoRedundant\",\r\n \"storageTypeState\": \"Unlocked\"\r\n }\r\n}", - "ResponseHeaders": { - "Content-Length": [ - "108" - ], - "Content-Type": [ - "application/json" - ], - "Expires": [ - "-1" - ], - "Pragma": [ - "no-cache" - ], - "x-ms-request-id": [ - "c22f27ba-e25d-461e-8b43-1739683f7aca" - ], - "x-ms-client-request-id": [ - "491f85ea-bdc5-4f22-ba8e-debc7c2a2f6d-2015-07-03 11:08:03Z-PS", - "491f85ea-bdc5-4f22-ba8e-debc7c2a2f6d-2015-07-03 11:08:03Z-PS" - ], - "Strict-Transport-Security": [ - "max-age=31536000; includeSubDomains" - ], - "x-ms-ratelimit-remaining-subscription-reads": [ - "14987" - ], - "x-ms-correlation-request-id": [ - "c22f27ba-e25d-461e-8b43-1739683f7aca" - ], - "x-ms-routing-request-id": [ - "CENTRALUS:20150703T110805Z:c22f27ba-e25d-461e-8b43-1739683f7aca" - ], - "Cache-Control": [ - "no-cache" - ], - "Date": [ - "Fri, 03 Jul 2015 11:08:04 GMT" - ], - "Server": [ - "Microsoft-IIS/8.0" - ] - }, - "StatusCode": 200 - }, - { - "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backup/BackupVault/backuprn/storageconfig/vaultstorageconfig?api-version=2015-03-15", - "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3VwL0JhY2t1cFZhdWx0L2JhY2t1cHJuL3N0b3JhZ2Vjb25maWcvdmF1bHRzdG9yYWdlY29uZmlnP2FwaS12ZXJzaW9uPTIwMTUtMDMtMTU=", - "RequestMethod": "GET", - "RequestBody": "", - "RequestHeaders": { - "Accept-Language": [ - "en-us" - ], - "x-ms-client-request-id": [ - "60ce1104-8270-44bf-acb7-115661d1a02d-2015-07-03 11:08:06Z-PS" - ], - "User-Agent": [ - "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" - ] - }, - "ResponseBody": "{\r\n \"resourceId\": 8420362025804603700,\r\n \"properties\": {\r\n \"storageType\": \"LocallyRedundant\",\r\n \"storageTypeState\": \"Unlocked\"\r\n }\r\n}", - "ResponseHeaders": { - "Content-Length": [ - "112" - ], - "Content-Type": [ - "application/json" - ], - "Expires": [ - "-1" - ], - "Pragma": [ - "no-cache" - ], - "x-ms-request-id": [ - "5a9c3ca4-18cb-4243-92a2-36846f007c4f" - ], - "x-ms-client-request-id": [ - "60ce1104-8270-44bf-acb7-115661d1a02d-2015-07-03 11:08:06Z-PS", - "60ce1104-8270-44bf-acb7-115661d1a02d-2015-07-03 11:08:06Z-PS" - ], - "Strict-Transport-Security": [ - "max-age=31536000; includeSubDomains" - ], - "x-ms-ratelimit-remaining-subscription-reads": [ - "14985" - ], - "x-ms-correlation-request-id": [ - "5a9c3ca4-18cb-4243-92a2-36846f007c4f" - ], - "x-ms-routing-request-id": [ - "CENTRALUS:20150703T110807Z:5a9c3ca4-18cb-4243-92a2-36846f007c4f" - ], - "Cache-Control": [ - "no-cache" - ], - "Date": [ - "Fri, 03 Jul 2015 11:08:07 GMT" - ], - "Server": [ - "Microsoft-IIS/8.0" - ] - }, - "StatusCode": 200 - }, - { - "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backup/BackupVault/backuprn/storageconfig/vaultstorageconfig?api-version=2015-03-15", - "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3VwL0JhY2t1cFZhdWx0L2JhY2t1cHJuL3N0b3JhZ2Vjb25maWcvdmF1bHRzdG9yYWdlY29uZmlnP2FwaS12ZXJzaW9uPTIwMTUtMDMtMTU=", - "RequestMethod": "PATCH", - "RequestBody": "{\r\n \"properties\": {\r\n \"storageModelType\": \"GeoRedundant\"\r\n }\r\n}", - "RequestHeaders": { - "Content-Type": [ - "application/json" - ], - "Content-Length": [ - "68" - ], - "Accept-Language": [ - "en-us" - ], - "x-ms-client-request-id": [ - "bad3411a-f21a-459b-8bb0-e8a309e0738d-2015-07-03 11:08:02Z-PS" - ], - "x-ms-version": [ - "2013-03-01" - ], - "User-Agent": [ - "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" - ] - }, - "ResponseBody": "", - "ResponseHeaders": { - "Content-Length": [ - "0" - ], - "Expires": [ - "-1" - ], - "Pragma": [ - "no-cache" - ], - "x-ms-request-id": [ - "aa31c6f3-b1b5-4724-8f18-779077880d2e" - ], - "x-ms-client-request-id": [ - "bad3411a-f21a-459b-8bb0-e8a309e0738d-2015-07-03 11:08:02Z-PS", - "bad3411a-f21a-459b-8bb0-e8a309e0738d-2015-07-03 11:08:02Z-PS" - ], - "Strict-Transport-Security": [ - "max-age=31536000; includeSubDomains" - ], - "x-ms-ratelimit-remaining-subscription-writes": [ - "1198" - ], - "x-ms-correlation-request-id": [ - "aa31c6f3-b1b5-4724-8f18-779077880d2e" - ], - "x-ms-routing-request-id": [ - "CENTRALUS:20150703T110804Z:aa31c6f3-b1b5-4724-8f18-779077880d2e" - ], - "Cache-Control": [ - "no-cache" - ], - "Date": [ - "Fri, 03 Jul 2015 11:08:03 GMT" - ] - }, - "StatusCode": 204 - }, - { - "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backup/BackupVault/backuprn/storageconfig/vaultstorageconfig?api-version=2015-03-15", - "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3VwL0JhY2t1cFZhdWx0L2JhY2t1cHJuL3N0b3JhZ2Vjb25maWcvdmF1bHRzdG9yYWdlY29uZmlnP2FwaS12ZXJzaW9uPTIwMTUtMDMtMTU=", - "RequestMethod": "PATCH", - "RequestBody": "{\r\n \"properties\": {\r\n \"storageModelType\": \"LocallyRedundant\"\r\n }\r\n}", - "RequestHeaders": { - "Content-Type": [ - "application/json" - ], - "Content-Length": [ - "72" - ], - "Accept-Language": [ - "en-us" - ], - "x-ms-client-request-id": [ - "292c310f-e614-4223-aced-3c543ca8a268-2015-07-03 11:08:05Z-PS" - ], - "x-ms-version": [ - "2013-03-01" - ], - "User-Agent": [ - "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" - ] - }, - "ResponseBody": "", - "ResponseHeaders": { - "Content-Length": [ - "0" - ], - "Expires": [ - "-1" - ], - "Pragma": [ - "no-cache" - ], - "x-ms-request-id": [ - "dff9e05c-cf05-4bb8-8080-34c042f1a0d2" - ], - "x-ms-client-request-id": [ - "292c310f-e614-4223-aced-3c543ca8a268-2015-07-03 11:08:05Z-PS", - "292c310f-e614-4223-aced-3c543ca8a268-2015-07-03 11:08:05Z-PS" - ], - "Strict-Transport-Security": [ - "max-age=31536000; includeSubDomains" - ], - "x-ms-ratelimit-remaining-subscription-writes": [ - "1197" - ], - "x-ms-correlation-request-id": [ - "dff9e05c-cf05-4bb8-8080-34c042f1a0d2" - ], - "x-ms-routing-request-id": [ - "CENTRALUS:20150703T110806Z:dff9e05c-cf05-4bb8-8080-34c042f1a0d2" - ], - "Cache-Control": [ - "no-cache" - ], - "Date": [ - "Fri, 03 Jul 2015 11:08:06 GMT" - ] - }, - "StatusCode": 204 - } - ], - "Names": {}, - "Variables": { - "SubscriptionId": "f5303a0b-fae4-4cdb-b44d-0e4c032dde26" - } -} \ No newline at end of file diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Microsoft.Azure.Commands.AzureBackup.format.ps1xml b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Microsoft.Azure.Commands.AzureBackup.format.ps1xml index f61050d005c4..ab415da71864 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Microsoft.Azure.Commands.AzureBackup.format.ps1xml +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Microsoft.Azure.Commands.AzureBackup.format.ps1xml @@ -2,32 +2,24 @@ - Microsoft.Azure.Commands.AzureBackup.Cmdlets.GetAzureBackupVault + Microsoft.Azure.Commands.AzureBackup.Models.AzurePSBackupVault - Microsoft.Azure.Commands.AzureBackup.Cmdlets.GetAzureBackupVault + Microsoft.Azure.Commands.AzureBackup.Models.AzurePSBackupVault - + 18 - + 18 - + 18 - - - 18 - - - - 40 - @@ -35,18 +27,12 @@ Name - - ResourceGroupName - Region Storage - - ResourceId - diff --git a/src/ResourceManager/Resources/Commands.Resources/AzureResourceManager.psd1 b/src/ResourceManager/Resources/Commands.Resources/AzureResourceManager.psd1 index b269b2d03f63..a7bbe90e9684 100644 --- a/src/ResourceManager/Resources/Commands.Resources/AzureResourceManager.psd1 +++ b/src/ResourceManager/Resources/Commands.Resources/AzureResourceManager.psd1 @@ -74,7 +74,7 @@ FormatsToProcess = @( '.\Storage\Microsoft.WindowsAzure.Commands.Storage.format.ps1xml', '.\StorageManagement\Microsoft.Azure.Commands.Management.Storage.format.ps1xml', '.\OperationalInsights\Microsoft.Azure.Commands.OperationalInsights.format.ps1xml', - '.\AzureBackup\Microsoft.Azure.Commands.AzureBackup.format.ps1xml' + '.\AzureBackup\Microsoft.Azure.Commands.AzureBackup.format.ps1xml' ) # Modules to import as nested modules of the module specified in ModuleToProcess From 3cb376af18f39dc37ff771cc0e2991bc4a6240f4 Mon Sep 17 00:00:00 2001 From: swatimadhukar Date: Mon, 6 Jul 2015 06:40:46 -0700 Subject: [PATCH 138/155] Removing Microsoft.Azure.Commands.AzureBackup.types.ps1xml --- ...osoft.Azure.Commands.AzureBackup.types.ps1xml | 16 ---------------- 1 file changed, 16 deletions(-) delete mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup/Microsoft.Azure.Commands.AzureBackup.types.ps1xml diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Microsoft.Azure.Commands.AzureBackup.types.ps1xml b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Microsoft.Azure.Commands.AzureBackup.types.ps1xml deleted file mode 100644 index 1429986fb1b3..000000000000 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Microsoft.Azure.Commands.AzureBackup.types.ps1xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - Microsoft.WindowsAzure.Management.StorSimple.Models.TaskStatusInfo - - - GetSteps - if( ($_.TaskSteps | Select Message -ExpandProperty Message) -ne $null ) { [string]::Join(" `n", ($_.TaskSteps | Select -ExpandProperty Message)) } else { "No Steps" } - - - GetErrors - if( ($_.Error | Select Message -ExpandProperty Message) -ne $null ) { [string]::Join(" `n", ($_.Error | Select -ExpandProperty Message)) } else { "No Errors" } - - - - \ No newline at end of file From bf4c39ec5dbeb478fe3ddbd48387817e5863a45d Mon Sep 17 00:00:00 2001 From: dragonfly91 Date: Tue, 7 Jul 2015 19:50:25 +0530 Subject: [PATCH 139/155] Fix for bug 3459541: "Nullable" fields in PowerShell --- .../Commands.AzureBackup/Cmdlets/Vault/NewAzureBackupVault.cs | 4 ++-- .../Commands.AzureBackup/Cmdlets/Vault/SetAzureBackupVault.cs | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/NewAzureBackupVault.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/NewAzureBackupVault.cs index ed91c931027a..f63fc321dfb8 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/NewAzureBackupVault.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/NewAzureBackupVault.cs @@ -38,7 +38,7 @@ public class NewAzureBackupVault : AzureBackupCmdletBase public string Region { get; set; } [Parameter(Position = 3, Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.StorageType)] - public AzureBackupVaultStorageType? Storage { get; set; } + public AzureBackupVaultStorageType Storage { get; set; } [Parameter(Position = 4, Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.Sku)] [ValidateSet("standard")] @@ -63,7 +63,7 @@ public override void ExecuteCmdlet() var createdVault = AzureBackupClient.CreateOrUpdateAzureBackupVault(ResourceGroupName, Name, Region, skuParam); - if (Storage.HasValue) + if (Storage != 0) { WriteDebug(String.Format("Setting storage type for the resource, Type: {0}", Storage)); diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/SetAzureBackupVault.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/SetAzureBackupVault.cs index 78c000033c3e..dd7d9a41569d 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/SetAzureBackupVault.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/SetAzureBackupVault.cs @@ -27,7 +27,7 @@ namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets public class SetAzureBackupVault : AzureBackupVaultCmdletBase { [Parameter(Position = 1, Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.StorageType)] - public AzureBackupVaultStorageType? Storage { get; set; } + public AzureBackupVaultStorageType Storage { get; set; } [Parameter(Position = 2, Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.Sku)] [ValidateSet("standard")] @@ -50,7 +50,7 @@ public override void ExecuteCmdlet() AzureBackupClient.CreateOrUpdateAzureBackupVault(Vault.ResourceGroupName, Vault.Name, Vault.Region, Sku); } - if (Storage.HasValue) + if (Storage != 0) { WriteDebug(String.Format("Setting storage type for the resource, Type: {0}", Storage)); From db1fcea6c702b39ae999b0b665ee51eadada07fc Mon Sep 17 00:00:00 2001 From: dragonfly91 Date: Tue, 7 Jul 2015 20:31:40 +0530 Subject: [PATCH 140/155] Removed SKU --- .../AzureBackupClientAdapter/VaultAdapter.cs | 5 +++-- .../AzureBackupCmdletHelpMessage.cs | 1 - .../Cmdlets/Vault/NewAzureBackupVault.cs | 11 ++--------- .../Cmdlets/Vault/SetAzureBackupVault.cs | 10 ---------- .../Commands.AzureBackup/Helpers/VaultHelpers.cs | 1 - .../Commands.AzureBackup/Models/AzurePSBackupVault.cs | 2 -- 6 files changed, 5 insertions(+), 25 deletions(-) diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupClientAdapter/VaultAdapter.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupClientAdapter/VaultAdapter.cs index d0ecc0ef3ecd..b9bb3778759a 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupClientAdapter/VaultAdapter.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupClientAdapter/VaultAdapter.cs @@ -21,6 +21,7 @@ namespace Microsoft.Azure.Commands.AzureBackup.ClientAdapter public partial class AzureBackupClientAdapter { public const int defaultTop = 100; + private const string defaultSKU = "standard"; /// /// Creates or updates the vault identified by client @@ -28,7 +29,7 @@ public partial class AzureBackupClientAdapter /// /// /// - public AzureBackupVault CreateOrUpdateAzureBackupVault(string resourceGroupName, string vaultName, string location, string skuParam) + public AzureBackupVault CreateOrUpdateAzureBackupVault(string resourceGroupName, string vaultName, string location) { var createResourceParameters = new AzureBackupVaultCreateOrUpdateParameters() { @@ -37,7 +38,7 @@ public AzureBackupVault CreateOrUpdateAzureBackupVault(string resourceGroupName, { Sku = new SkuProperties() { - Name = skuParam, + Name = defaultSKU, }, }, }; diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupCmdletHelpMessage.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupCmdletHelpMessage.cs index a3c522538fd1..9d2719413564 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupCmdletHelpMessage.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupCmdletHelpMessage.cs @@ -20,7 +20,6 @@ internal static class AzureBackupCmdletHelpMessage public const string ResourceGroupName = "The ResourceGroup name."; public const string ResourceName = "The Resource name."; public const string Location = "The resource location."; - public const string Sku = "The SKU of the backup vault instance."; public const string TargetLocation = "The directory where the credentials file will be saved. This must be an absolute path."; public const string StorageType = "The vault back-end storage type."; } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/NewAzureBackupVault.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/NewAzureBackupVault.cs index f63fc321dfb8..b82a8b57014e 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/NewAzureBackupVault.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/NewAzureBackupVault.cs @@ -40,16 +40,10 @@ public class NewAzureBackupVault : AzureBackupCmdletBase [Parameter(Position = 3, Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.StorageType)] public AzureBackupVaultStorageType Storage { get; set; } - [Parameter(Position = 4, Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.Sku)] - [ValidateSet("standard")] - public string Sku { get; set; } - // TODO: Add support for tags //[Alias("Tags")] //[Parameter(Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.ResourceTags)] - //public Hashtable[] Tag { get; set; } - - private string DefaultSKU = "standard"; + //public Hashtable[] Tag { get; set; } public override void ExecuteCmdlet() { @@ -58,10 +52,9 @@ public override void ExecuteCmdlet() base.ExecuteCmdlet(); InitializeAzureBackupCmdlet(ResourceGroupName, Name); - string skuParam = Sku ?? DefaultSKU; WriteDebug(String.Format("Creating backup vault with ResourceGroupName: {0}, ResourceName: {1}", ResourceGroupName, Name)); - var createdVault = AzureBackupClient.CreateOrUpdateAzureBackupVault(ResourceGroupName, Name, Region, skuParam); + var createdVault = AzureBackupClient.CreateOrUpdateAzureBackupVault(ResourceGroupName, Name, Region); if (Storage != 0) { diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/SetAzureBackupVault.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/SetAzureBackupVault.cs index dd7d9a41569d..f12d3d4fa12d 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/SetAzureBackupVault.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/SetAzureBackupVault.cs @@ -29,10 +29,6 @@ public class SetAzureBackupVault : AzureBackupVaultCmdletBase [Parameter(Position = 1, Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.StorageType)] public AzureBackupVaultStorageType Storage { get; set; } - [Parameter(Position = 2, Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.Sku)] - [ValidateSet("standard")] - public string Sku { get; set; } - // TODO: Add support for tags //[Alias("Tags")] //[Parameter(Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.ResourceTags)] @@ -44,12 +40,6 @@ public override void ExecuteCmdlet() ExecutionBlock(() => { - if (Sku != null) - { - WriteDebug(String.Format("Updating Sku, Sku: {0}", Sku)); - AzureBackupClient.CreateOrUpdateAzureBackupVault(Vault.ResourceGroupName, Vault.Name, Vault.Region, Sku); - } - if (Storage != 0) { WriteDebug(String.Format("Setting storage type for the resource, Type: {0}", Storage)); diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Helpers/VaultHelpers.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Helpers/VaultHelpers.cs index 9859cefbb0b9..a71fcd718e08 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Helpers/VaultHelpers.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Helpers/VaultHelpers.cs @@ -34,7 +34,6 @@ public static CmdletModel.AzurePSBackupVault GetCmdletVault(ClientModel.AzureBac Name = vault.Name, Region = vault.Location, ResourceGroupName = GetResourceGroup(vault.Id), - Sku = (vault.Properties != null) ? vault.Properties.Sku.Name : null, Storage = storageType, }; diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzurePSBackupVault.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzurePSBackupVault.cs index 3a8d43db0226..62324a3a36ea 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzurePSBackupVault.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Models/AzurePSBackupVault.cs @@ -31,8 +31,6 @@ public class AzurePSBackupVault // public Hashtable[] Tags { get; protected set; } - public string Sku { get; set; } - public string Storage { get; set; } public AzurePSBackupVault() : base() { } From 71d4889245dac0a72fdeac403079be7fd2362c7a Mon Sep 17 00:00:00 2001 From: swatimadhukar Date: Wed, 8 Jul 2015 03:33:56 -0700 Subject: [PATCH 141/155] Removing Set-AzureBackupVaultStorage cmdlet from AzureBackup --- setup/azurecmdfiles.wxi | 558 +++--------------- .../ScenarioTests/AzureBackupVaultTests.ps1 | 16 +- .../AzureBackupVaultScenarioTests.json | 520 ++++------------ .../Vault/SetAzureBackupVaultStorageType.cs | 47 -- .../Commands.AzureBackup.csproj | 1 - 5 files changed, 210 insertions(+), 932 deletions(-) delete mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/SetAzureBackupVaultStorageType.cs diff --git a/setup/azurecmdfiles.wxi b/setup/azurecmdfiles.wxi index 6faa1ed7c3e8..96a75864d0f1 100644 --- a/setup/azurecmdfiles.wxi +++ b/setup/azurecmdfiles.wxi @@ -153,81 +153,15 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -237,35 +171,8 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + @@ -282,45 +189,9 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -330,21 +201,12 @@ - - - - - - - - - @@ -354,222 +216,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -4213,6 +3859,74 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -4341,135 +4055,27 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -5632,6 +5238,28 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupVaultTests.ps1 b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupVaultTests.ps1 index af5b0ed548c4..1edbe269e585 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupVaultTests.ps1 +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupVaultTests.ps1 @@ -19,31 +19,23 @@ $CertTargetLocation = (Get-Item -Path ".\" -Verbose).FullName; function Test-AzureBackupVaultScenario { - $vault = New-AzureBackupVault -ResourceGroupName $ResourceGroupName -Name $ResourceName -Region $Location; + $vault = New-AzureBackupVault -ResourceGroupName $ResourceGroupName -Name $ResourceName -Region $Location -Storage "LocallyRedundant"; Assert-AreEqual $vault.Name $ResourceName; Assert-AreEqual $vault.ResourceGroupName $ResourceGroupName; Assert-AreEqual $vault.Region $Location; - Assert-AreEqual $vault.Storage "GeoRedundant" + Assert-AreEqual $vault.Storage "LocallyRedundant"; $vault = Get-AzureBackupVault -ResourceGroupName $ResourceGroupName -Name $ResourceName Assert-AreEqual $vault.Name $ResourceName; Assert-AreEqual $vault.ResourceGroupName $ResourceGroupName; Assert-AreEqual $vault.Region $Location; - Assert-AreEqual $vault.Storage "GeoRedundant" - + Assert-AreEqual $vault.Storage "LocallyRedundant"; + $fileName = Get-AzureBackupVaultCredentials -vault $vault -TargetLocation $CertTargetLocation Assert-NotNull $fileName 'File name should not be null'; $certFileFullPath = [io.path]::combine($CertTargetLocation, $fileName); Assert-True {{ Test-Path $certFileFullPath }} - Set-AzureBackupVaultStorageType -Vault $vault -Type "GeoRedundant"; - $vault = Get-AzureBackupVault -Name $ResourceName; - Assert-AreEqual $vault.Storage "GeoRedundant"; - - Set-AzureBackupVaultStorageType -Vault $vault -Type "LocallyRedundant"; - $vault = Get-AzureBackupVault -Name $ResourceName; - Assert-AreEqual $vault.Storage "LocallyRedundant"; - $vault = Set-AzureBackupVault -vault $vault -Storage "GeoRedundant"; Assert-AreEqual $vault.Name $ResourceName; Assert-AreEqual $vault.ResourceGroupName $ResourceGroupName; diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupVaultTests/AzureBackupVaultScenarioTests.json b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupVaultTests/AzureBackupVaultScenarioTests.json index 27614405ce0c..32288e3c71c7 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupVaultTests/AzureBackupVaultScenarioTests.json +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/SessionRecords/Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests.AzureBackupVaultTests/AzureBackupVaultScenarioTests.json @@ -16,13 +16,13 @@ "en-us" ], "x-ms-client-request-id": [ - "b358de39-27e1-4064-bba7-6d5de42fc1b7-2015-07-06 13:30:05Z-PS" + "8ccef70d-c423-4098-849c-0a1e1b75e2f5-2015-07-08 09:58:09Z-PS" ], "User-Agent": [ "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" ] }, - "ResponseBody": "{\r\n \"location\": \"westus\",\r\n \"name\": \"backuprn1\",\r\n \"etag\": \"f6a25dcb-15d4-4bc4-b04a-207f003e02a8\",\r\n \"tags\": {},\r\n \"properties\": {\r\n \"sku\": {\r\n \"name\": \"standard\"\r\n },\r\n \"ProvisioningState\": \"Succeeded\"\r\n },\r\n \"id\": \"/subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backup/BackupVault/backuprn1\",\r\n \"type\": \"Microsoft.Backup/BackupVault\"\r\n}", + "ResponseBody": "{\r\n \"location\": \"westus\",\r\n \"name\": \"backuprn1\",\r\n \"etag\": \"22a9ef4f-5bd9-48b5-bc4d-f564d529b597\",\r\n \"tags\": {},\r\n \"properties\": {\r\n \"sku\": {\r\n \"name\": \"standard\"\r\n },\r\n \"ProvisioningState\": \"Succeeded\"\r\n },\r\n \"id\": \"/subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backup/BackupVault/backuprn1\",\r\n \"type\": \"Microsoft.Backup/BackupVault\"\r\n}", "ResponseHeaders": { "Content-Length": [ "339" @@ -37,58 +37,64 @@ "no-cache" ], "x-ms-request-id": [ - "adbca634-dee9-4cf6-b1f6-2fed39d5fd03" + "81d97ccb-5ad8-41d5-a9f3-a47af8d6216f" ], "x-ms-client-request-id": [ - "b358de39-27e1-4064-bba7-6d5de42fc1b7-2015-07-06 13:30:05Z-PS" + "8ccef70d-c423-4098-849c-0a1e1b75e2f5-2015-07-08 09:58:09Z-PS" ], "Strict-Transport-Security": [ "max-age=31536000; includeSubDomains" ], "x-ms-ratelimit-remaining-subscription-writes": [ - "1198" + "1199" ], "x-ms-correlation-request-id": [ - "adbca634-dee9-4cf6-b1f6-2fed39d5fd03" + "81d97ccb-5ad8-41d5-a9f3-a47af8d6216f" ], "x-ms-routing-request-id": [ - "CENTRALUS:20150706T133010Z:adbca634-dee9-4cf6-b1f6-2fed39d5fd03" + "CENTRALUS:20150708T095812Z:81d97ccb-5ad8-41d5-a9f3-a47af8d6216f" ], "Cache-Control": [ "no-cache" ], "Date": [ - "Mon, 06 Jul 2015 13:30:10 GMT" + "Wed, 08 Jul 2015 09:58:12 GMT" ], "Server": [ "Microsoft-IIS/8.0" ] }, - "StatusCode": 201 + "StatusCode": 200 }, { "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backup/BackupVault/backuprn1/storageconfig/vaultstorageconfig?api-version=2015-03-15", "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3VwL0JhY2t1cFZhdWx0L2JhY2t1cHJuMS9zdG9yYWdlY29uZmlnL3ZhdWx0c3RvcmFnZWNvbmZpZz9hcGktdmVyc2lvbj0yMDE1LTAzLTE1", - "RequestMethod": "GET", - "RequestBody": "", + "RequestMethod": "PATCH", + "RequestBody": "{\r\n \"properties\": {\r\n \"storageModelType\": \"LocallyRedundant\"\r\n }\r\n}", "RequestHeaders": { + "Content-Type": [ + "application/json" + ], + "Content-Length": [ + "72" + ], "Accept-Language": [ "en-us" ], "x-ms-client-request-id": [ - "b358de39-27e1-4064-bba7-6d5de42fc1b7-2015-07-06 13:30:05Z-PS" + "8ccef70d-c423-4098-849c-0a1e1b75e2f5-2015-07-08 09:58:09Z-PS" + ], + "x-ms-version": [ + "2013-03-01" ], "User-Agent": [ "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" ] }, - "ResponseBody": "{\r\n \"resourceId\": 3953238055234851915,\r\n \"properties\": {\r\n \"storageType\": \"GeoRedundant\",\r\n \"storageTypeState\": \"Unlocked\"\r\n }\r\n}", + "ResponseBody": "", "ResponseHeaders": { "Content-Length": [ - "108" - ], - "Content-Type": [ - "application/json" + "0" ], "Expires": [ "-1" @@ -97,59 +103,62 @@ "no-cache" ], "x-ms-request-id": [ - "f15b7c0a-431a-45b9-959d-772c6b4b5568" + "1cf95f4c-680f-4974-9f74-a6e8629b2ad4" ], "x-ms-client-request-id": [ - "b358de39-27e1-4064-bba7-6d5de42fc1b7-2015-07-06 13:30:05Z-PS", - "b358de39-27e1-4064-bba7-6d5de42fc1b7-2015-07-06 13:30:05Z-PS" + "8ccef70d-c423-4098-849c-0a1e1b75e2f5-2015-07-08 09:58:09Z-PS", + "8ccef70d-c423-4098-849c-0a1e1b75e2f5-2015-07-08 09:58:09Z-PS" ], "Strict-Transport-Security": [ "max-age=31536000; includeSubDomains" ], - "x-ms-ratelimit-remaining-subscription-reads": [ - "14997" + "x-ms-ratelimit-remaining-subscription-writes": [ + "1198" ], "x-ms-correlation-request-id": [ - "f15b7c0a-431a-45b9-959d-772c6b4b5568" + "1cf95f4c-680f-4974-9f74-a6e8629b2ad4" ], "x-ms-routing-request-id": [ - "CENTRALUS:20150706T133011Z:f15b7c0a-431a-45b9-959d-772c6b4b5568" + "CENTRALUS:20150708T095814Z:1cf95f4c-680f-4974-9f74-a6e8629b2ad4" ], "Cache-Control": [ "no-cache" ], "Date": [ - "Mon, 06 Jul 2015 13:30:10 GMT" - ], - "Server": [ - "Microsoft-IIS/8.0" + "Wed, 08 Jul 2015 09:58:14 GMT" ] }, - "StatusCode": 200 + "StatusCode": 204 }, { "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backup/BackupVault/backuprn1/storageconfig/vaultstorageconfig?api-version=2015-03-15", "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3VwL0JhY2t1cFZhdWx0L2JhY2t1cHJuMS9zdG9yYWdlY29uZmlnL3ZhdWx0c3RvcmFnZWNvbmZpZz9hcGktdmVyc2lvbj0yMDE1LTAzLTE1", - "RequestMethod": "GET", - "RequestBody": "", + "RequestMethod": "PATCH", + "RequestBody": "{\r\n \"properties\": {\r\n \"storageModelType\": \"GeoRedundant\"\r\n }\r\n}", "RequestHeaders": { + "Content-Type": [ + "application/json" + ], + "Content-Length": [ + "68" + ], "Accept-Language": [ "en-us" ], "x-ms-client-request-id": [ - "86aa4dcf-d525-4e72-bdba-de8de0690f2f-2015-07-06 13:30:11Z-PS" + "26734291-d565-4c21-8837-f6fc4f04c302-2015-07-08 09:58:18Z-PS" + ], + "x-ms-version": [ + "2013-03-01" ], "User-Agent": [ "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" ] }, - "ResponseBody": "{\r\n \"resourceId\": 3953238055234851915,\r\n \"properties\": {\r\n \"storageType\": \"GeoRedundant\",\r\n \"storageTypeState\": \"Unlocked\"\r\n }\r\n}", + "ResponseBody": "", "ResponseHeaders": { "Content-Length": [ - "108" - ], - "Content-Type": [ - "application/json" + "0" ], "Expires": [ "-1" @@ -158,35 +167,32 @@ "no-cache" ], "x-ms-request-id": [ - "f7b6c8f0-5bfc-47fe-9afe-d3120e09938c" + "7bc725d4-f5ef-4278-961a-acab202c5c1a" ], "x-ms-client-request-id": [ - "86aa4dcf-d525-4e72-bdba-de8de0690f2f-2015-07-06 13:30:11Z-PS", - "86aa4dcf-d525-4e72-bdba-de8de0690f2f-2015-07-06 13:30:11Z-PS" + "26734291-d565-4c21-8837-f6fc4f04c302-2015-07-08 09:58:18Z-PS", + "26734291-d565-4c21-8837-f6fc4f04c302-2015-07-08 09:58:18Z-PS" ], "Strict-Transport-Security": [ "max-age=31536000; includeSubDomains" ], - "x-ms-ratelimit-remaining-subscription-reads": [ - "14995" + "x-ms-ratelimit-remaining-subscription-writes": [ + "1196" ], "x-ms-correlation-request-id": [ - "f7b6c8f0-5bfc-47fe-9afe-d3120e09938c" + "7bc725d4-f5ef-4278-961a-acab202c5c1a" ], "x-ms-routing-request-id": [ - "CENTRALUS:20150706T133012Z:f7b6c8f0-5bfc-47fe-9afe-d3120e09938c" + "CENTRALUS:20150708T095820Z:7bc725d4-f5ef-4278-961a-acab202c5c1a" ], "Cache-Control": [ "no-cache" ], "Date": [ - "Mon, 06 Jul 2015 13:30:12 GMT" - ], - "Server": [ - "Microsoft-IIS/8.0" + "Wed, 08 Jul 2015 09:58:20 GMT" ] }, - "StatusCode": 200 + "StatusCode": 204 }, { "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backup/BackupVault/backuprn1/storageconfig/vaultstorageconfig?api-version=2015-03-15", @@ -198,16 +204,16 @@ "en-us" ], "x-ms-client-request-id": [ - "881a5a68-c5be-4f63-a6c2-fda57b5ce1ff-2015-07-06 13:30:17Z-PS" + "8ccef70d-c423-4098-849c-0a1e1b75e2f5-2015-07-08 09:58:09Z-PS" ], "User-Agent": [ "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" ] }, - "ResponseBody": "{\r\n \"resourceId\": 3953238055234851915,\r\n \"properties\": {\r\n \"storageType\": \"GeoRedundant\",\r\n \"storageTypeState\": \"Unlocked\"\r\n }\r\n}", + "ResponseBody": "{\r\n \"resourceId\": 1117362664063487198,\r\n \"properties\": {\r\n \"storageType\": \"LocallyRedundant\",\r\n \"storageTypeState\": \"Unlocked\"\r\n }\r\n}", "ResponseHeaders": { "Content-Length": [ - "108" + "112" ], "Content-Type": [ "application/json" @@ -219,29 +225,29 @@ "no-cache" ], "x-ms-request-id": [ - "8f3bf039-e2cf-43fd-a77a-a20251250dea" + "3eb0cb5d-390e-4ff0-9c35-0e3a73d9171b" ], "x-ms-client-request-id": [ - "881a5a68-c5be-4f63-a6c2-fda57b5ce1ff-2015-07-06 13:30:17Z-PS", - "881a5a68-c5be-4f63-a6c2-fda57b5ce1ff-2015-07-06 13:30:17Z-PS" + "8ccef70d-c423-4098-849c-0a1e1b75e2f5-2015-07-08 09:58:09Z-PS", + "8ccef70d-c423-4098-849c-0a1e1b75e2f5-2015-07-08 09:58:09Z-PS" ], "Strict-Transport-Security": [ "max-age=31536000; includeSubDomains" ], "x-ms-ratelimit-remaining-subscription-reads": [ - "14993" + "14997" ], "x-ms-correlation-request-id": [ - "8f3bf039-e2cf-43fd-a77a-a20251250dea" + "3eb0cb5d-390e-4ff0-9c35-0e3a73d9171b" ], "x-ms-routing-request-id": [ - "CENTRALUS:20150706T133018Z:8f3bf039-e2cf-43fd-a77a-a20251250dea" + "CENTRALUS:20150708T095814Z:3eb0cb5d-390e-4ff0-9c35-0e3a73d9171b" ], "Cache-Control": [ "no-cache" ], "Date": [ - "Mon, 06 Jul 2015 13:30:18 GMT" + "Wed, 08 Jul 2015 09:58:14 GMT" ], "Server": [ "Microsoft-IIS/8.0" @@ -259,13 +265,13 @@ "en-us" ], "x-ms-client-request-id": [ - "35e1e006-a801-4559-ab8d-3a898b75d5d6-2015-07-06 13:30:20Z-PS" + "0efb57c9-0306-446d-acbc-ae232387f1af-2015-07-08 09:58:14Z-PS" ], "User-Agent": [ "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" ] }, - "ResponseBody": "{\r\n \"resourceId\": 3953238055234851915,\r\n \"properties\": {\r\n \"storageType\": \"LocallyRedundant\",\r\n \"storageTypeState\": \"Unlocked\"\r\n }\r\n}", + "ResponseBody": "{\r\n \"resourceId\": 1117362664063487198,\r\n \"properties\": {\r\n \"storageType\": \"LocallyRedundant\",\r\n \"storageTypeState\": \"Unlocked\"\r\n }\r\n}", "ResponseHeaders": { "Content-Length": [ "112" @@ -280,29 +286,29 @@ "no-cache" ], "x-ms-request-id": [ - "6b1dfac6-fc43-4866-ba2b-ac28ec41ff55" + "79d0534f-03c5-4bdd-b57f-ad84552fcde0" ], "x-ms-client-request-id": [ - "35e1e006-a801-4559-ab8d-3a898b75d5d6-2015-07-06 13:30:20Z-PS", - "35e1e006-a801-4559-ab8d-3a898b75d5d6-2015-07-06 13:30:20Z-PS" + "0efb57c9-0306-446d-acbc-ae232387f1af-2015-07-08 09:58:14Z-PS", + "0efb57c9-0306-446d-acbc-ae232387f1af-2015-07-08 09:58:14Z-PS" ], "Strict-Transport-Security": [ "max-age=31536000; includeSubDomains" ], "x-ms-ratelimit-remaining-subscription-reads": [ - "14991" + "14995" ], "x-ms-correlation-request-id": [ - "6b1dfac6-fc43-4866-ba2b-ac28ec41ff55" + "79d0534f-03c5-4bdd-b57f-ad84552fcde0" ], "x-ms-routing-request-id": [ - "CENTRALUS:20150706T133021Z:6b1dfac6-fc43-4866-ba2b-ac28ec41ff55" + "CENTRALUS:20150708T095816Z:79d0534f-03c5-4bdd-b57f-ad84552fcde0" ], "Cache-Control": [ "no-cache" ], "Date": [ - "Mon, 06 Jul 2015 13:30:21 GMT" + "Wed, 08 Jul 2015 09:58:15 GMT" ], "Server": [ "Microsoft-IIS/8.0" @@ -320,13 +326,13 @@ "en-us" ], "x-ms-client-request-id": [ - "ab7eca12-d91d-4474-9c4f-0b3520b80e67-2015-07-06 13:30:21Z-PS" + "26734291-d565-4c21-8837-f6fc4f04c302-2015-07-08 09:58:18Z-PS" ], "User-Agent": [ "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" ] }, - "ResponseBody": "{\r\n \"resourceId\": 3953238055234851915,\r\n \"properties\": {\r\n \"storageType\": \"GeoRedundant\",\r\n \"storageTypeState\": \"Unlocked\"\r\n }\r\n}", + "ResponseBody": "{\r\n \"resourceId\": 1117362664063487198,\r\n \"properties\": {\r\n \"storageType\": \"GeoRedundant\",\r\n \"storageTypeState\": \"Unlocked\"\r\n }\r\n}", "ResponseHeaders": { "Content-Length": [ "108" @@ -341,29 +347,29 @@ "no-cache" ], "x-ms-request-id": [ - "cd0696d2-8fd6-4ef4-96bc-b4b59b9b2d4b" + "cb317c47-05af-4847-92a1-07d66589e09a" ], "x-ms-client-request-id": [ - "ab7eca12-d91d-4474-9c4f-0b3520b80e67-2015-07-06 13:30:21Z-PS", - "ab7eca12-d91d-4474-9c4f-0b3520b80e67-2015-07-06 13:30:21Z-PS" + "26734291-d565-4c21-8837-f6fc4f04c302-2015-07-08 09:58:18Z-PS", + "26734291-d565-4c21-8837-f6fc4f04c302-2015-07-08 09:58:18Z-PS" ], "Strict-Transport-Security": [ "max-age=31536000; includeSubDomains" ], "x-ms-ratelimit-remaining-subscription-reads": [ - "14989" + "14993" ], "x-ms-correlation-request-id": [ - "cd0696d2-8fd6-4ef4-96bc-b4b59b9b2d4b" + "cb317c47-05af-4847-92a1-07d66589e09a" ], "x-ms-routing-request-id": [ - "CENTRALUS:20150706T133023Z:cd0696d2-8fd6-4ef4-96bc-b4b59b9b2d4b" + "CENTRALUS:20150708T095822Z:cb317c47-05af-4847-92a1-07d66589e09a" ], "Cache-Control": [ "no-cache" ], "Date": [ - "Mon, 06 Jul 2015 13:30:23 GMT" + "Wed, 08 Jul 2015 09:58:21 GMT" ], "Server": [ "Microsoft-IIS/8.0" @@ -381,13 +387,13 @@ "en-us" ], "x-ms-client-request-id": [ - "86aa4dcf-d525-4e72-bdba-de8de0690f2f-2015-07-06 13:30:11Z-PS" + "0efb57c9-0306-446d-acbc-ae232387f1af-2015-07-08 09:58:14Z-PS" ], "User-Agent": [ "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" ] }, - "ResponseBody": "{\r\n \"location\": \"westus\",\r\n \"name\": \"backuprn1\",\r\n \"etag\": \"f6a25dcb-15d4-4bc4-b04a-207f003e02a8\",\r\n \"tags\": {},\r\n \"properties\": {\r\n \"sku\": {\r\n \"name\": \"standard\"\r\n },\r\n \"ProvisioningState\": \"Succeeded\"\r\n },\r\n \"id\": \"/subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backup/BackupVault/backuprn1\",\r\n \"type\": \"Microsoft.Backup/BackupVault\"\r\n}", + "ResponseBody": "{\r\n \"location\": \"westus\",\r\n \"name\": \"backuprn1\",\r\n \"etag\": \"22a9ef4f-5bd9-48b5-bc4d-f564d529b597\",\r\n \"tags\": {},\r\n \"properties\": {\r\n \"sku\": {\r\n \"name\": \"standard\"\r\n },\r\n \"ProvisioningState\": \"Succeeded\"\r\n },\r\n \"id\": \"/subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backup/BackupVault/backuprn1\",\r\n \"type\": \"Microsoft.Backup/BackupVault\"\r\n}", "ResponseHeaders": { "Content-Length": [ "339" @@ -402,10 +408,10 @@ "no-cache" ], "x-ms-request-id": [ - "3bce0760-d973-40e8-8801-55ded2639f62" + "bea6c724-4984-4afb-bc39-4ee2bac905ca" ], "x-ms-client-request-id": [ - "86aa4dcf-d525-4e72-bdba-de8de0690f2f-2015-07-06 13:30:11Z-PS" + "0efb57c9-0306-446d-acbc-ae232387f1af-2015-07-08 09:58:14Z-PS" ], "Strict-Transport-Security": [ "max-age=31536000; includeSubDomains" @@ -414,16 +420,16 @@ "14996" ], "x-ms-correlation-request-id": [ - "3bce0760-d973-40e8-8801-55ded2639f62" + "bea6c724-4984-4afb-bc39-4ee2bac905ca" ], "x-ms-routing-request-id": [ - "CENTRALUS:20150706T133012Z:3bce0760-d973-40e8-8801-55ded2639f62" + "CENTRALUS:20150708T095815Z:bea6c724-4984-4afb-bc39-4ee2bac905ca" ], "Cache-Control": [ "no-cache" ], "Date": [ - "Mon, 06 Jul 2015 13:30:12 GMT" + "Wed, 08 Jul 2015 09:58:15 GMT" ], "Server": [ "Microsoft-IIS/8.0" @@ -441,13 +447,13 @@ "en-us" ], "x-ms-client-request-id": [ - "ab7eca12-d91d-4474-9c4f-0b3520b80e67-2015-07-06 13:30:21Z-PS" + "26734291-d565-4c21-8837-f6fc4f04c302-2015-07-08 09:58:18Z-PS" ], "User-Agent": [ "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" ] }, - "ResponseBody": "{\r\n \"location\": \"westus\",\r\n \"name\": \"backuprn1\",\r\n \"etag\": \"f6a25dcb-15d4-4bc4-b04a-207f003e02a8\",\r\n \"tags\": {},\r\n \"properties\": {\r\n \"sku\": {\r\n \"name\": \"standard\"\r\n },\r\n \"ProvisioningState\": \"Succeeded\"\r\n },\r\n \"id\": \"/subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backup/BackupVault/backuprn1\",\r\n \"type\": \"Microsoft.Backup/BackupVault\"\r\n}", + "ResponseBody": "{\r\n \"location\": \"westus\",\r\n \"name\": \"backuprn1\",\r\n \"etag\": \"22a9ef4f-5bd9-48b5-bc4d-f564d529b597\",\r\n \"tags\": {},\r\n \"properties\": {\r\n \"sku\": {\r\n \"name\": \"standard\"\r\n },\r\n \"ProvisioningState\": \"Succeeded\"\r\n },\r\n \"id\": \"/subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backup/BackupVault/backuprn1\",\r\n \"type\": \"Microsoft.Backup/BackupVault\"\r\n}", "ResponseHeaders": { "Content-Length": [ "339" @@ -462,28 +468,28 @@ "no-cache" ], "x-ms-request-id": [ - "d454e9ee-840a-4038-9000-5c2ae7c341f3" + "f30f6dd0-24bc-4301-9415-134a49893b11" ], "x-ms-client-request-id": [ - "ab7eca12-d91d-4474-9c4f-0b3520b80e67-2015-07-06 13:30:21Z-PS" + "26734291-d565-4c21-8837-f6fc4f04c302-2015-07-08 09:58:18Z-PS" ], "Strict-Transport-Security": [ "max-age=31536000; includeSubDomains" ], "x-ms-ratelimit-remaining-subscription-reads": [ - "14990" + "14994" ], "x-ms-correlation-request-id": [ - "d454e9ee-840a-4038-9000-5c2ae7c341f3" + "f30f6dd0-24bc-4301-9415-134a49893b11" ], "x-ms-routing-request-id": [ - "CENTRALUS:20150706T133023Z:d454e9ee-840a-4038-9000-5c2ae7c341f3" + "CENTRALUS:20150708T095821Z:f30f6dd0-24bc-4301-9415-134a49893b11" ], "Cache-Control": [ "no-cache" ], "Date": [ - "Mon, 06 Jul 2015 13:30:22 GMT" + "Wed, 08 Jul 2015 09:58:21 GMT" ], "Server": [ "Microsoft-IIS/8.0" @@ -495,7 +501,7 @@ "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backup/BackupVault/backuprn1/certificates/IdMgmtInternalCert?api-version=2015-03-15", "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3VwL0JhY2t1cFZhdWx0L2JhY2t1cHJuMS9jZXJ0aWZpY2F0ZXMvSWRNZ210SW50ZXJuYWxDZXJ0P2FwaS12ZXJzaW9uPTIwMTUtMDMtMTU=", "RequestMethod": "PUT", - "RequestBody": "{\r\n \"properties\": {\r\n \"certificate\": \"MIIC3TCCAcWgAwIBAgIQLunJRHBc96xOfX6422HsgDANBgkqhkiG9w0BAQUFADAeMRwwGgYDVQQDExNXaW5kb3dzIEF6dXJlIFRvb2xzMB4XDTE1MDcwNjEzMjAxM1oXDTE1MDcwODEzMzAxM1owHjEcMBoGA1UEAxMTV2luZG93cyBBenVyZSBUb29sczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALa5ZVzK4Xp5Sd73tn6irk4paqhBUqkOk4VnFPocekosZ9a84ZaZ/vjG2NpgZK3i1tglWuEERssnfKirMC42MiT2LVX7hiLkFQn3CDjip5pSNMSYiGFFx1+17Eh9Ls5w55tsfCmvu1sTrZYlYTXo16WY4MqQ0ohtNDoHMcjeCh6qZVKqn0t5kx+uOAt/LB5ygfYz0uTr4+Bd6uMG5VT80kCL4R8Iva7+I1+T11uIX5hSqLKNnMgAX0nBjppAY6MLgRghDIWlrR5NJ5EwitJPWp9HEYgYs9unTyi+cnz7a/7GR4IftJC79gi1jo8MWNiVd0fLR0IXJyy/C9IaTQ+e5PUCAwEAAaMXMBUwEwYDVR0lBAwwCgYIKwYBBQUHAwIwDQYJKoZIhvcNAQEFBQADggEBAEBKlDDP4B09dUt00TKUap9tnm937QrfgqoSwe1SU20WBGi5BpZQ6lIkH6kFJoCDu1+b15vFY7SnZgurROgitwGcy8XMGZUoN3BMJ0iI6nM9qd/8ftKKvb3Lo2iEDBZe5pzi4HqQ6tAgtGrf2tAIw7xG9Lj2cb9+VfbSBG0Btjbsj2sXTI1YGxKeO2VJ9btJAfdPY6KlO3x3bfC05bMqXJm369A+ATzEQolhVTPSgonwtLnv+Dj6We5UnQH37sLR3vt3hbF3beO6lb+efo9xPH3EWZFPFxbXxlUHG6WNqq5Y2LPKEi2cuYnzilVcKjl/qJ8VmvX+Ee7t1OvdJkvtJyI=\"\r\n }\r\n}", + "RequestBody": "{\r\n \"properties\": {\r\n \"certificate\": \"MIIC3TCCAcWgAwIBAgIQFKHEzjT4EpZNl44PA7dJojANBgkqhkiG9w0BAQUFADAeMRwwGgYDVQQDExNXaW5kb3dzIEF6dXJlIFRvb2xzMB4XDTE1MDcwODA5NDgxNVoXDTE1MDcxMDA5NTgxNVowHjEcMBoGA1UEAxMTV2luZG93cyBBenVyZSBUb29sczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALNA8xmDPJujD5HrGrZ5UZpKncdDBRHJmp4JKEd29jtZng2F8v7z67kF0hDAEE9WSAIxPhjNxQoyxZ2gDdFVQp2r1n6dLxZYlHgih73QFIfAzFo0BP1PCVDCNk5edfMzRt+iZdcK2ruoRRxPiFlo8D6eKSA3MUvwzEl61i44+ctz3mA5lwNf1c58ENLg29IWGhd3LODjkkpre6eGeMEbI5h9+Z2N8yj5ATtzQiDe0FSapbwqktTgT/+ngP6jWxVZI3uyBCZYgxfzfnhtzWkCQnqx2jOOMSu5D1JSiXngQPVQ5wQBVVDmcbF/YdXpRWVER48p2tHemvbd+7zPkmXT5CkCAwEAAaMXMBUwEwYDVR0lBAwwCgYIKwYBBQUHAwIwDQYJKoZIhvcNAQEFBQADggEBADo2hDHV3r75KgFAP5Ie4jVqGazT1Y5Gs4NBsG6dzDWg9/0vsHT8SOjNjjccpPUkP2aO/4RQlLhC2gsU/BMYw7kxY0eyUxAM0SB7sJ9gj/EBcHDyeOu1eSnYGmqcvXmbFjMauLwNkNwsACo5vVz0ghXxpazRAnpzyKgZgwNC4ruotDzMT8S4zB8a1WVEpcx43Um/5Yg06QBfIEG4wD11rIpENkKm3DWnP5OV39knHLLt/UvwY011kpfXFuXo4ZVXI3F096kgER/vpr32T+H3SCJVbrTi+qKDLjENpdVSTxEh16w/RK1mB6LST7KOIn0LwC76xveMYoOP/1uYK4hkKgQ=\"\r\n }\r\n}", "RequestHeaders": { "Content-Type": [ "application/json" @@ -513,7 +519,7 @@ "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" ] }, - "ResponseBody": "{\r\n \"properties\": {\r\n \"certificate\": \"MIIC3TCCAcWgAwIBAgIQLunJRHBc96xOfX6422HsgDANBgkqhkiG9w0BAQUFADAeMRwwGgYDVQQDExNXaW5kb3dzIEF6dXJlIFRvb2xzMB4XDTE1MDcwNjEzMjAxM1oXDTE1MDcwODEzMzAxM1owHjEcMBoGA1UEAxMTV2luZG93cyBBenVyZSBUb29sczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALa5ZVzK4Xp5Sd73tn6irk4paqhBUqkOk4VnFPocekosZ9a84ZaZ/vjG2NpgZK3i1tglWuEERssnfKirMC42MiT2LVX7hiLkFQn3CDjip5pSNMSYiGFFx1+17Eh9Ls5w55tsfCmvu1sTrZYlYTXo16WY4MqQ0ohtNDoHMcjeCh6qZVKqn0t5kx+uOAt/LB5ygfYz0uTr4+Bd6uMG5VT80kCL4R8Iva7+I1+T11uIX5hSqLKNnMgAX0nBjppAY6MLgRghDIWlrR5NJ5EwitJPWp9HEYgYs9unTyi+cnz7a/7GR4IftJC79gi1jo8MWNiVd0fLR0IXJyy/C9IaTQ+e5PUCAwEAAaMXMBUwEwYDVR0lBAwwCgYIKwYBBQUHAwIwDQYJKoZIhvcNAQEFBQADggEBAEBKlDDP4B09dUt00TKUap9tnm937QrfgqoSwe1SU20WBGi5BpZQ6lIkH6kFJoCDu1+b15vFY7SnZgurROgitwGcy8XMGZUoN3BMJ0iI6nM9qd/8ftKKvb3Lo2iEDBZe5pzi4HqQ6tAgtGrf2tAIw7xG9Lj2cb9+VfbSBG0Btjbsj2sXTI1YGxKeO2VJ9btJAfdPY6KlO3x3bfC05bMqXJm369A+ATzEQolhVTPSgonwtLnv+Dj6We5UnQH37sLR3vt3hbF3beO6lb+efo9xPH3EWZFPFxbXxlUHG6WNqq5Y2LPKEi2cuYnzilVcKjl/qJ8VmvX+Ee7t1OvdJkvtJyI=\",\r\n \"resourceId\": 3953238055234851915,\r\n \"globalAcsNamespace\": \"seadev01rrp1users\",\r\n \"globalAcsHostName\": \"accesscontrol.windows.net\",\r\n \"globalAcsRPRealm\": \"http://windowscloudbackup/m3\",\r\n \"subject\": \"CN=Windows Azure Tools\",\r\n \"validFrom\": \"2015-07-06T06:20:13-07:00\",\r\n \"validTo\": \"2015-07-08T06:30:13-07:00\",\r\n \"thumbprint\": \"7B0229BFEB43C18267FCE23898BABA9EF5BADA5E\",\r\n \"friendlyName\": \"\",\r\n \"issuer\": \"CN=Windows Azure Tools\"\r\n }\r\n}", + "ResponseBody": "{\r\n \"properties\": {\r\n \"certificate\": \"MIIC3TCCAcWgAwIBAgIQFKHEzjT4EpZNl44PA7dJojANBgkqhkiG9w0BAQUFADAeMRwwGgYDVQQDExNXaW5kb3dzIEF6dXJlIFRvb2xzMB4XDTE1MDcwODA5NDgxNVoXDTE1MDcxMDA5NTgxNVowHjEcMBoGA1UEAxMTV2luZG93cyBBenVyZSBUb29sczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALNA8xmDPJujD5HrGrZ5UZpKncdDBRHJmp4JKEd29jtZng2F8v7z67kF0hDAEE9WSAIxPhjNxQoyxZ2gDdFVQp2r1n6dLxZYlHgih73QFIfAzFo0BP1PCVDCNk5edfMzRt+iZdcK2ruoRRxPiFlo8D6eKSA3MUvwzEl61i44+ctz3mA5lwNf1c58ENLg29IWGhd3LODjkkpre6eGeMEbI5h9+Z2N8yj5ATtzQiDe0FSapbwqktTgT/+ngP6jWxVZI3uyBCZYgxfzfnhtzWkCQnqx2jOOMSu5D1JSiXngQPVQ5wQBVVDmcbF/YdXpRWVER48p2tHemvbd+7zPkmXT5CkCAwEAAaMXMBUwEwYDVR0lBAwwCgYIKwYBBQUHAwIwDQYJKoZIhvcNAQEFBQADggEBADo2hDHV3r75KgFAP5Ie4jVqGazT1Y5Gs4NBsG6dzDWg9/0vsHT8SOjNjjccpPUkP2aO/4RQlLhC2gsU/BMYw7kxY0eyUxAM0SB7sJ9gj/EBcHDyeOu1eSnYGmqcvXmbFjMauLwNkNwsACo5vVz0ghXxpazRAnpzyKgZgwNC4ruotDzMT8S4zB8a1WVEpcx43Um/5Yg06QBfIEG4wD11rIpENkKm3DWnP5OV39knHLLt/UvwY011kpfXFuXo4ZVXI3F096kgER/vpr32T+H3SCJVbrTi+qKDLjENpdVSTxEh16w/RK1mB6LST7KOIn0LwC76xveMYoOP/1uYK4hkKgQ=\",\r\n \"resourceId\": 1117362664063487198,\r\n \"globalAcsNamespace\": \"seadev01rrp1users\",\r\n \"globalAcsHostName\": \"accesscontrol.windows.net\",\r\n \"globalAcsRPRealm\": \"http://windowscloudbackup/m3\",\r\n \"subject\": \"CN=Windows Azure Tools\",\r\n \"validFrom\": \"2015-07-08T02:48:15-07:00\",\r\n \"validTo\": \"2015-07-10T02:58:15-07:00\",\r\n \"thumbprint\": \"2F6E98592FCC206CBA2BF6FDCA6279C87A0DCA60\",\r\n \"friendlyName\": \"\",\r\n \"issuer\": \"CN=Windows Azure Tools\"\r\n }\r\n}", "ResponseHeaders": { "Content-Length": [ "1410" @@ -528,11 +534,11 @@ "no-cache" ], "x-ms-request-id": [ - "933870e4-28e3-43ca-9f83-c4f34a5cc68b" + "a94d6ca2-6cba-45f0-bd5e-fe3535d1e7d9" ], "x-ms-client-request-id": [ - "48ede6bd-aa80-4638-b131-953461543f4d", - "48ede6bd-aa80-4638-b131-953461543f4d" + "38750946-e6c7-4f15-a698-323deaf1f2ab", + "38750946-e6c7-4f15-a698-323deaf1f2ab" ], "Strict-Transport-Security": [ "max-age=31536000; includeSubDomains" @@ -541,16 +547,16 @@ "1197" ], "x-ms-correlation-request-id": [ - "933870e4-28e3-43ca-9f83-c4f34a5cc68b" + "a94d6ca2-6cba-45f0-bd5e-fe3535d1e7d9" ], "x-ms-routing-request-id": [ - "CENTRALUS:20150706T133016Z:933870e4-28e3-43ca-9f83-c4f34a5cc68b" + "CENTRALUS:20150708T095819Z:a94d6ca2-6cba-45f0-bd5e-fe3535d1e7d9" ], "Cache-Control": [ "no-cache" ], "Date": [ - "Mon, 06 Jul 2015 13:30:16 GMT" + "Wed, 08 Jul 2015 09:58:18 GMT" ], "Server": [ "Microsoft-IIS/8.0" @@ -558,306 +564,6 @@ }, "StatusCode": 200 }, - { - "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backup/BackupVault/backuprn1/storageconfig/vaultstorageconfig?api-version=2015-03-15", - "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3VwL0JhY2t1cFZhdWx0L2JhY2t1cHJuMS9zdG9yYWdlY29uZmlnL3ZhdWx0c3RvcmFnZWNvbmZpZz9hcGktdmVyc2lvbj0yMDE1LTAzLTE1", - "RequestMethod": "PATCH", - "RequestBody": "{\r\n \"properties\": {\r\n \"storageModelType\": \"GeoRedundant\"\r\n }\r\n}", - "RequestHeaders": { - "Content-Type": [ - "application/json" - ], - "Content-Length": [ - "68" - ], - "Accept-Language": [ - "en-us" - ], - "x-ms-client-request-id": [ - "0a3643ae-71a9-428b-b619-adf9ca454c31-2015-07-06 13:30:16Z-PS" - ], - "x-ms-version": [ - "2013-03-01" - ], - "User-Agent": [ - "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" - ] - }, - "ResponseBody": "", - "ResponseHeaders": { - "Content-Length": [ - "0" - ], - "Expires": [ - "-1" - ], - "Pragma": [ - "no-cache" - ], - "x-ms-request-id": [ - "14f3d9ee-0047-4057-bef1-ef0d55d8fbec" - ], - "x-ms-client-request-id": [ - "0a3643ae-71a9-428b-b619-adf9ca454c31-2015-07-06 13:30:16Z-PS", - "0a3643ae-71a9-428b-b619-adf9ca454c31-2015-07-06 13:30:16Z-PS" - ], - "Strict-Transport-Security": [ - "max-age=31536000; includeSubDomains" - ], - "x-ms-ratelimit-remaining-subscription-writes": [ - "1196" - ], - "x-ms-correlation-request-id": [ - "14f3d9ee-0047-4057-bef1-ef0d55d8fbec" - ], - "x-ms-routing-request-id": [ - "CENTRALUS:20150706T133017Z:14f3d9ee-0047-4057-bef1-ef0d55d8fbec" - ], - "Cache-Control": [ - "no-cache" - ], - "Date": [ - "Mon, 06 Jul 2015 13:30:17 GMT" - ] - }, - "StatusCode": 204 - }, - { - "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backup/BackupVault/backuprn1/storageconfig/vaultstorageconfig?api-version=2015-03-15", - "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3VwL0JhY2t1cFZhdWx0L2JhY2t1cHJuMS9zdG9yYWdlY29uZmlnL3ZhdWx0c3RvcmFnZWNvbmZpZz9hcGktdmVyc2lvbj0yMDE1LTAzLTE1", - "RequestMethod": "PATCH", - "RequestBody": "{\r\n \"properties\": {\r\n \"storageModelType\": \"LocallyRedundant\"\r\n }\r\n}", - "RequestHeaders": { - "Content-Type": [ - "application/json" - ], - "Content-Length": [ - "72" - ], - "Accept-Language": [ - "en-us" - ], - "x-ms-client-request-id": [ - "7e359d92-22aa-4f5d-94b4-26ad3d28ff22-2015-07-06 13:30:18Z-PS" - ], - "x-ms-version": [ - "2013-03-01" - ], - "User-Agent": [ - "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" - ] - }, - "ResponseBody": "", - "ResponseHeaders": { - "Content-Length": [ - "0" - ], - "Expires": [ - "-1" - ], - "Pragma": [ - "no-cache" - ], - "x-ms-request-id": [ - "223a81aa-1ed3-4abc-ad7b-659fbdc0111e" - ], - "x-ms-client-request-id": [ - "7e359d92-22aa-4f5d-94b4-26ad3d28ff22-2015-07-06 13:30:18Z-PS", - "7e359d92-22aa-4f5d-94b4-26ad3d28ff22-2015-07-06 13:30:18Z-PS" - ], - "Strict-Transport-Security": [ - "max-age=31536000; includeSubDomains" - ], - "x-ms-ratelimit-remaining-subscription-writes": [ - "1195" - ], - "x-ms-correlation-request-id": [ - "223a81aa-1ed3-4abc-ad7b-659fbdc0111e" - ], - "x-ms-routing-request-id": [ - "CENTRALUS:20150706T133020Z:223a81aa-1ed3-4abc-ad7b-659fbdc0111e" - ], - "Cache-Control": [ - "no-cache" - ], - "Date": [ - "Mon, 06 Jul 2015 13:30:19 GMT" - ] - }, - "StatusCode": 204 - }, - { - "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backup/BackupVault/backuprn1/storageconfig/vaultstorageconfig?api-version=2015-03-15", - "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3VwL0JhY2t1cFZhdWx0L2JhY2t1cHJuMS9zdG9yYWdlY29uZmlnL3ZhdWx0c3RvcmFnZWNvbmZpZz9hcGktdmVyc2lvbj0yMDE1LTAzLTE1", - "RequestMethod": "PATCH", - "RequestBody": "{\r\n \"properties\": {\r\n \"storageModelType\": \"GeoRedundant\"\r\n }\r\n}", - "RequestHeaders": { - "Content-Type": [ - "application/json" - ], - "Content-Length": [ - "68" - ], - "Accept-Language": [ - "en-us" - ], - "x-ms-client-request-id": [ - "ab7eca12-d91d-4474-9c4f-0b3520b80e67-2015-07-06 13:30:21Z-PS" - ], - "x-ms-version": [ - "2013-03-01" - ], - "User-Agent": [ - "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" - ] - }, - "ResponseBody": "", - "ResponseHeaders": { - "Content-Length": [ - "0" - ], - "Expires": [ - "-1" - ], - "Pragma": [ - "no-cache" - ], - "x-ms-request-id": [ - "b95fdb7c-914d-4707-a560-2b8160e33b51" - ], - "x-ms-client-request-id": [ - "ab7eca12-d91d-4474-9c4f-0b3520b80e67-2015-07-06 13:30:21Z-PS", - "ab7eca12-d91d-4474-9c4f-0b3520b80e67-2015-07-06 13:30:21Z-PS" - ], - "Strict-Transport-Security": [ - "max-age=31536000; includeSubDomains" - ], - "x-ms-ratelimit-remaining-subscription-writes": [ - "1194" - ], - "x-ms-correlation-request-id": [ - "b95fdb7c-914d-4707-a560-2b8160e33b51" - ], - "x-ms-routing-request-id": [ - "CENTRALUS:20150706T133022Z:b95fdb7c-914d-4707-a560-2b8160e33b51" - ], - "Cache-Control": [ - "no-cache" - ], - "Date": [ - "Mon, 06 Jul 2015 13:30:22 GMT" - ] - }, - "StatusCode": 204 - }, - { - "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resources?$filter=resourceType%20eq%20'Microsoft.Backup/BackupVault'&$top=100&api-version=2013-03-01", - "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlcz8kZmlsdGVyPXJlc291cmNlVHlwZSUyMGVxJTIwJ01pY3Jvc29mdC5CYWNrdXAvQmFja3VwVmF1bHQnJiR0b3A9MTAwJmFwaS12ZXJzaW9uPTIwMTMtMDMtMDE=", - "RequestMethod": "GET", - "RequestBody": "", - "RequestHeaders": { - "Accept-Language": [ - "en-us" - ], - "x-ms-client-request-id": [ - "881a5a68-c5be-4f63-a6c2-fda57b5ce1ff-2015-07-06 13:30:17Z-PS" - ], - "User-Agent": [ - "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" - ] - }, - "ResponseBody": "{\r\n \"value\": [\r\n {\r\n \"id\": \"/subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backup/BackupVault/backuprn\",\r\n \"name\": \"backuprn\",\r\n \"type\": \"Microsoft.Backup/BackupVault\",\r\n \"location\": \"westus\",\r\n \"tags\": {}\r\n },\r\n {\r\n \"id\": \"/subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backup/BackupVault/backuprn1\",\r\n \"name\": \"backuprn1\",\r\n \"type\": \"Microsoft.Backup/BackupVault\",\r\n \"location\": \"westus\",\r\n \"tags\": {}\r\n },\r\n {\r\n \"id\": \"/subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backup/BackupVault/backuprn2\",\r\n \"name\": \"backuprn2\",\r\n \"type\": \"Microsoft.Backup/BackupVault\",\r\n \"location\": \"westus\",\r\n \"tags\": {}\r\n },\r\n {\r\n \"id\": \"/subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backup/BackupVault/vaultresourcename\",\r\n \"name\": \"vaultresourcename\",\r\n \"type\": \"Microsoft.Backup/BackupVault\",\r\n \"location\": \"westus\",\r\n \"tags\": {}\r\n },\r\n {\r\n \"id\": \"/subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backup/BackupVault/vaulttest\",\r\n \"name\": \"vaulttest\",\r\n \"type\": \"Microsoft.Backup/BackupVault\",\r\n \"location\": \"westus\",\r\n \"tags\": {}\r\n },\r\n {\r\n \"id\": \"/subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backup/BackupVault/vaulttestrn\",\r\n \"name\": \"vaulttestrn\",\r\n \"type\": \"Microsoft.Backup/BackupVault\",\r\n \"location\": \"westus\",\r\n \"tags\": {}\r\n }\r\n ]\r\n}", - "ResponseHeaders": { - "Content-Length": [ - "1355" - ], - "Content-Type": [ - "application/json; charset=utf-8" - ], - "Expires": [ - "-1" - ], - "Pragma": [ - "no-cache" - ], - "x-ms-ratelimit-remaining-subscription-reads": [ - "14994" - ], - "x-ms-request-id": [ - "9c3bcbc9-fe5c-432a-b0c8-a17c2baac6d4" - ], - "x-ms-correlation-request-id": [ - "9c3bcbc9-fe5c-432a-b0c8-a17c2baac6d4" - ], - "x-ms-routing-request-id": [ - "CENTRALUS:20150706T133017Z:9c3bcbc9-fe5c-432a-b0c8-a17c2baac6d4" - ], - "Strict-Transport-Security": [ - "max-age=31536000; includeSubDomains" - ], - "Cache-Control": [ - "no-cache" - ], - "Date": [ - "Mon, 06 Jul 2015 13:30:17 GMT" - ] - }, - "StatusCode": 200 - }, - { - "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resources?$filter=resourceType%20eq%20'Microsoft.Backup/BackupVault'&$top=100&api-version=2013-03-01", - "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlcz8kZmlsdGVyPXJlc291cmNlVHlwZSUyMGVxJTIwJ01pY3Jvc29mdC5CYWNrdXAvQmFja3VwVmF1bHQnJiR0b3A9MTAwJmFwaS12ZXJzaW9uPTIwMTMtMDMtMDE=", - "RequestMethod": "GET", - "RequestBody": "", - "RequestHeaders": { - "Accept-Language": [ - "en-us" - ], - "x-ms-client-request-id": [ - "35e1e006-a801-4559-ab8d-3a898b75d5d6-2015-07-06 13:30:20Z-PS" - ], - "User-Agent": [ - "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" - ] - }, - "ResponseBody": "{\r\n \"value\": [\r\n {\r\n \"id\": \"/subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backup/BackupVault/backuprn\",\r\n \"name\": \"backuprn\",\r\n \"type\": \"Microsoft.Backup/BackupVault\",\r\n \"location\": \"westus\",\r\n \"tags\": {}\r\n },\r\n {\r\n \"id\": \"/subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backup/BackupVault/backuprn1\",\r\n \"name\": \"backuprn1\",\r\n \"type\": \"Microsoft.Backup/BackupVault\",\r\n \"location\": \"westus\",\r\n \"tags\": {}\r\n },\r\n {\r\n \"id\": \"/subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backup/BackupVault/backuprn2\",\r\n \"name\": \"backuprn2\",\r\n \"type\": \"Microsoft.Backup/BackupVault\",\r\n \"location\": \"westus\",\r\n \"tags\": {}\r\n },\r\n {\r\n \"id\": \"/subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backup/BackupVault/vaultresourcename\",\r\n \"name\": \"vaultresourcename\",\r\n \"type\": \"Microsoft.Backup/BackupVault\",\r\n \"location\": \"westus\",\r\n \"tags\": {}\r\n },\r\n {\r\n \"id\": \"/subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backup/BackupVault/vaulttest\",\r\n \"name\": \"vaulttest\",\r\n \"type\": \"Microsoft.Backup/BackupVault\",\r\n \"location\": \"westus\",\r\n \"tags\": {}\r\n },\r\n {\r\n \"id\": \"/subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backup/BackupVault/vaulttestrn\",\r\n \"name\": \"vaulttestrn\",\r\n \"type\": \"Microsoft.Backup/BackupVault\",\r\n \"location\": \"westus\",\r\n \"tags\": {}\r\n }\r\n ]\r\n}", - "ResponseHeaders": { - "Content-Length": [ - "1355" - ], - "Content-Type": [ - "application/json; charset=utf-8" - ], - "Expires": [ - "-1" - ], - "Pragma": [ - "no-cache" - ], - "x-ms-ratelimit-remaining-subscription-reads": [ - "14992" - ], - "x-ms-request-id": [ - "2f8416a5-9b8d-4bfb-8509-8cd82623f57a" - ], - "x-ms-correlation-request-id": [ - "2f8416a5-9b8d-4bfb-8509-8cd82623f57a" - ], - "x-ms-routing-request-id": [ - "CENTRALUS:20150706T133020Z:2f8416a5-9b8d-4bfb-8509-8cd82623f57a" - ], - "Strict-Transport-Security": [ - "max-age=31536000; includeSubDomains" - ], - "Cache-Control": [ - "no-cache" - ], - "Date": [ - "Mon, 06 Jul 2015 13:30:19 GMT" - ] - }, - "StatusCode": 200 - }, { "RequestUri": "/Subscriptions/f5303a0b-fae4-4cdb-b44d-0e4c032dde26/resourceGroups/backuprg/providers/Microsoft.Backup/BackupVault/backuprn1?api-version=2015-03-15", "EncodedRequestUri": "L1N1YnNjcmlwdGlvbnMvZjUzMDNhMGItZmFlNC00Y2RiLWI0NGQtMGU0YzAzMmRkZTI2L3Jlc291cmNlR3JvdXBzL2JhY2t1cHJnL3Byb3ZpZGVycy9NaWNyb3NvZnQuQmFja3VwL0JhY2t1cFZhdWx0L2JhY2t1cHJuMT9hcGktdmVyc2lvbj0yMDE1LTAzLTE1", @@ -868,7 +574,7 @@ "en-us" ], "x-ms-client-request-id": [ - "79d0db12-b0ab-4f78-b1d4-513737a2389c-2015-07-06 13:30:23Z-PS" + "c4aca23e-b7fa-4016-829d-5af4fd8eef00-2015-07-08 09:58:21Z-PS" ], "User-Agent": [ "Microsoft.Azure.Management.BackupServices.BackupServicesManagementClient/0.0.0.0" @@ -886,28 +592,28 @@ "no-cache" ], "x-ms-request-id": [ - "3d4dd095-808d-491b-8ef7-dbc0a565ab26" + "17c2f600-ee65-4ad2-a946-de4bc205406d" ], "x-ms-client-request-id": [ - "79d0db12-b0ab-4f78-b1d4-513737a2389c-2015-07-06 13:30:23Z-PS" + "c4aca23e-b7fa-4016-829d-5af4fd8eef00-2015-07-08 09:58:21Z-PS" ], "Strict-Transport-Security": [ "max-age=31536000; includeSubDomains" ], "x-ms-ratelimit-remaining-subscription-writes": [ - "1193" + "1195" ], "x-ms-correlation-request-id": [ - "3d4dd095-808d-491b-8ef7-dbc0a565ab26" + "17c2f600-ee65-4ad2-a946-de4bc205406d" ], "x-ms-routing-request-id": [ - "CENTRALUS:20150706T133026Z:3d4dd095-808d-491b-8ef7-dbc0a565ab26" + "CENTRALUS:20150708T095825Z:17c2f600-ee65-4ad2-a946-de4bc205406d" ], "Cache-Control": [ "no-cache" ], "Date": [ - "Mon, 06 Jul 2015 13:30:26 GMT" + "Wed, 08 Jul 2015 09:58:25 GMT" ] }, "StatusCode": 200 diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/SetAzureBackupVaultStorageType.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/SetAzureBackupVaultStorageType.cs deleted file mode 100644 index 93ea2780d80a..000000000000 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/SetAzureBackupVaultStorageType.cs +++ /dev/null @@ -1,47 +0,0 @@ -// ---------------------------------------------------------------------------------- -// -// Copyright Microsoft Corporation -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// http://www.apache.org/licenses/LICENSE-2.0 -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// ---------------------------------------------------------------------------------- - -using Microsoft.Azure.Commands.AzureBackup.Models; -using System; -using System.Management.Automation; - -namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets -{ - /// - /// API to update backend storage type of an azure backup vault in a subscription. - /// - [Cmdlet(VerbsCommon.Set, "AzureBackupVaultStorageType")] - public class SetAzureBackupVaultStorageType : AzureBackupVaultCmdletBase - { - [Parameter(Position = 2, Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.StorageType)] - [ValidateNotNullOrEmpty] - public AzureBackupVaultStorageType Type { get; set; } - - public override void ExecuteCmdlet() - { - ExecutionBlock(() => - { - base.ExecuteCmdlet(); - - if (Type == 0) - { - throw new ArgumentException("Invalid storage type."); - } - - WriteDebug(String.Format("Updating the storage type. Type:{0}", Type)); - AzureBackupClient.UpdateStorageType(Type.ToString()); - }); - } - } -} diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj index c576f42a3a92..2d440de290f0 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj @@ -125,7 +125,6 @@ - From 1381cdb968ecc9cebdc125bba8527749aa6fbb27 Mon Sep 17 00:00:00 2001 From: swatimadhukar Date: Wed, 8 Jul 2015 05:49:47 -0700 Subject: [PATCH 142/155] Using one ResourceApiVersion per client --- .../ScenarioTests/AzureBackupTestBase.cs | 18 +++++++++--------- .../AzureBackupClientAdapter.cs | 10 +++++----- .../AzureBackupClientAdapter/VaultAdapter.cs | 16 ++++++++-------- ...re.Management.BackupServicesManagement.dll | Bin 56832 -> 56832 bytes 4 files changed, 22 insertions(+), 22 deletions(-) diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupTestBase.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupTestBase.cs index b08ab4972c30..19bfd08fbe0c 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupTestBase.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupTestBase.cs @@ -31,7 +31,7 @@ public abstract class AzureBackupTestsBase private CSMTestEnvironmentFactory csmTestFactory; private EnvironmentSetupHelper helper; - public BackupServicesManagementClient BackupServicesMgmtClient { get; private set; } + public BackupVaultServicesManagementClient BackupVaultServicesMgmtClient { get; private set; } protected AzureBackupTestsBase() { @@ -41,9 +41,9 @@ protected AzureBackupTestsBase() protected void SetupManagementClients() { - BackupServicesMgmtClient = GetBackupServicesManagementClient(); + BackupVaultServicesMgmtClient = GetBackupVaultServicesManagementClient(); //helper.SetupManagementClients(BackupServicesMgmtClient); - helper.SetupSomeOfManagementClients(BackupServicesMgmtClient); + helper.SetupSomeOfManagementClients(BackupVaultServicesMgmtClient); } protected void RunPowerShellTest(params string[] scripts) @@ -61,9 +61,9 @@ protected void RunPowerShellTest(params string[] scripts) } } - private BackupServicesManagementClient GetBackupServicesManagementClient() + private BackupVaultServicesManagementClient GetBackupVaultServicesManagementClient() { - return GetServiceClient(); + return GetServiceClient(); } public static T GetServiceClient() where T : class @@ -74,14 +74,14 @@ public static T GetServiceClient() where T : class ServicePointManager.ServerCertificateValidationCallback = IgnoreCertificateErrorHandler; - BackupServicesManagementClient client; + BackupVaultServicesManagementClient client; string resourceName = ConfigurationManager.AppSettings["ResourceName"]; string resourceGroupName = ConfigurationManager.AppSettings["ResourceGroupName"]; if (testEnvironment.UsesCustomUri()) { - client = new BackupServicesManagementClient( + client = new BackupVaultServicesManagementClient( resourceName, resourceGroupName, testEnvironment.Credentials as SubscriptionCloudCredentials, @@ -90,7 +90,7 @@ public static T GetServiceClient() where T : class else { - client = new BackupServicesManagementClient( + client = new BackupVaultServicesManagementClient( resourceName, resourceGroupName, testEnvironment.Credentials as SubscriptionCloudCredentials); @@ -99,7 +99,7 @@ public static T GetServiceClient() where T : class return GetServiceClient(factory, client); } - public static T GetServiceClient(TestEnvironmentFactory factory, BackupServicesManagementClient client) where T : class + public static T GetServiceClient(TestEnvironmentFactory factory, BackupVaultServicesManagementClient client) where T : class { TestEnvironment testEnvironment = factory.GetTestEnvironment(); diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupClientAdapter/AzureBackupClientAdapter.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupClientAdapter/AzureBackupClientAdapter.cs index 13879cdb935c..215db6047e47 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupClientAdapter/AzureBackupClientAdapter.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupClientAdapter/AzureBackupClientAdapter.cs @@ -51,7 +51,7 @@ public partial class AzureBackupClientAdapter /// /// Azure backup client. /// - private BackupServicesManagementClient azureBackupClient; + private BackupVaultServicesManagementClient azureBackupVaultClient; /// /// Cancellation Token Source @@ -62,16 +62,16 @@ public partial class AzureBackupClientAdapter /// /// Get Azure backup client. /// - private BackupServicesManagementClient AzureBackupClient + private BackupVaultServicesManagementClient AzureBackupVaultClient { get { - if (this.azureBackupClient == null) + if (this.azureBackupVaultClient == null) { - this.azureBackupClient = AzureSession.ClientFactory.CreateCustomClient(resourceName, resourceGroupName, cloudCreds, baseURI); + this.azureBackupVaultClient = AzureSession.ClientFactory.CreateCustomClient(resourceName, resourceGroupName, cloudCreds, baseURI); } - return this.azureBackupClient; + return this.azureBackupVaultClient; } } diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupClientAdapter/VaultAdapter.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupClientAdapter/VaultAdapter.cs index b9bb3778759a..9d997c95bf7c 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupClientAdapter/VaultAdapter.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupClientAdapter/VaultAdapter.cs @@ -43,7 +43,7 @@ public AzureBackupVault CreateOrUpdateAzureBackupVault(string resourceGroupName, }, }; - var response = AzureBackupClient.Vault.CreateOrUpdateAsync(resourceGroupName, vaultName, createResourceParameters, GetCustomRequestHeaders(), CmdletCancellationToken).Result; + var response = AzureBackupVaultClient.Vault.CreateOrUpdateAsync(resourceGroupName, vaultName, createResourceParameters, GetCustomRequestHeaders(), CmdletCancellationToken).Result; return response.Vault; } @@ -61,7 +61,7 @@ public void UpdateStorageType(string storageType) }, }; - AzureBackupClient.Vault.UpdateStorageTypeAsync(updateVaultStorageTypeRequest, GetCustomRequestHeaders(), CmdletCancellationToken).Wait(); + AzureBackupVaultClient.Vault.UpdateStorageTypeAsync(updateVaultStorageTypeRequest, GetCustomRequestHeaders(), CmdletCancellationToken).Wait(); } /// @@ -73,7 +73,7 @@ public string GetStorageTypeDetails(string resourceGroupName, string vaultName) string storageType = String.Empty; try { - var response = AzureBackupClient.Vault.GetResourceStorageConfigAsync(resourceGroupName, vaultName, GetCustomRequestHeaders(), CmdletCancellationToken).Result; + var response = AzureBackupVaultClient.Vault.GetResourceStorageConfigAsync(resourceGroupName, vaultName, GetCustomRequestHeaders(), CmdletCancellationToken).Result; storageType = (response != null) ? response.StorageDetails.StorageType : null; } catch (Exception) { } @@ -87,7 +87,7 @@ public string GetStorageTypeDetails(string resourceGroupName, string vaultName) /// public AzureBackupVault GetVault(string resourceGroupName, string vaultName) { - var getResponse = AzureBackupClient.Vault.GetAsync(resourceGroupName, vaultName, GetCustomRequestHeaders(), CmdletCancellationToken).Result; + var getResponse = AzureBackupVaultClient.Vault.GetAsync(resourceGroupName, vaultName, GetCustomRequestHeaders(), CmdletCancellationToken).Result; return (getResponse != null) ? getResponse.Vault : null; } @@ -97,7 +97,7 @@ public AzureBackupVault GetVault(string resourceGroupName, string vaultName) /// public IEnumerable GetVaults() { - var listResponse = AzureBackupClient.Vault.ListAsync(defaultTop, GetCustomRequestHeaders(), CmdletCancellationToken).Result; + var listResponse = AzureBackupVaultClient.Vault.ListAsync(defaultTop, GetCustomRequestHeaders(), CmdletCancellationToken).Result; return (listResponse != null) ? listResponse.Vaults : null; } @@ -108,7 +108,7 @@ public IEnumerable GetVaults() /// public IEnumerable GetVaultsInResourceGroup(string resourceGroupName) { - var listResponse = AzureBackupClient.Vault.ListByResourceGroupAsync(resourceGroupName, defaultTop, GetCustomRequestHeaders(), CmdletCancellationToken).Result; + var listResponse = AzureBackupVaultClient.Vault.ListByResourceGroupAsync(resourceGroupName, defaultTop, GetCustomRequestHeaders(), CmdletCancellationToken).Result; return (listResponse != null) ? listResponse.Vaults : null; } @@ -119,12 +119,12 @@ public IEnumerable GetVaultsInResourceGroup(string resourceGro /// public void DeleteVault(string resourceGroupName, string vaultName) { - AzureBackupClient.Vault.DeleteAsync(resourceGroupName, vaultName, GetCustomRequestHeaders(), CmdletCancellationToken).Wait(); + AzureBackupVaultClient.Vault.DeleteAsync(resourceGroupName, vaultName, GetCustomRequestHeaders(), CmdletCancellationToken).Wait(); } public VaultCredUploadCertResponse UploadCertificate(string certName, VaultCredUploadCertRequest request) { - return AzureBackupClient.Vault.UploadCertificateAsync(certName, request, GetCustomRequestHeaders(), CmdletCancellationToken).Result; + return AzureBackupVaultClient.Vault.UploadCertificateAsync(certName, request, GetCustomRequestHeaders(), CmdletCancellationToken).Result; } } } \ No newline at end of file diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Resources/Microsoft.Azure.Management.BackupServicesManagement.dll b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Resources/Microsoft.Azure.Management.BackupServicesManagement.dll index 19ae95856d579c69a01aefd4a23ab3c84768c4f0..5c365d3bf9bd4deee2db29b8b4a0bb52a2a5dd54 100644 GIT binary patch delta 8159 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 delta 8156 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 From 3e8d86a11a8a1ce8d5fb94e493fcc20a910b02d5 Mon Sep 17 00:00:00 2001 From: swatimadhukar Date: Thu, 9 Jul 2015 02:46:40 -0700 Subject: [PATCH 143/155] Using fully signed Microsoft.WindowsAzure.Management.Common.dll and unsigned Security.Cryptography.dll and taking nuget dependency of BackupServicesManagement dll. --- .../Commands.AzureBackup.Test.csproj | 5 +++-- .../Commands.AzureBackup.Test/packages.config | 1 + .../Commands.AzureBackup.csproj | 5 ++--- .../Commands.AzureBackup/MSSharedLibKey.snk | Bin 0 -> 160 bytes ...re.Management.BackupServicesManagement.dll | Bin 56832 -> 0 bytes ...crosoft.WindowsAzure.Management.Common.dll | Bin 1339904 -> 1322440 bytes .../Resources/Security.Cryptography.dll | Bin 51200 -> 97792 bytes .../Commands.AzureBackup/packages.config | 1 + 8 files changed, 7 insertions(+), 5 deletions(-) create mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup/MSSharedLibKey.snk delete mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup/Resources/Microsoft.Azure.Management.BackupServicesManagement.dll diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/Commands.AzureBackup.Test.csproj b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/Commands.AzureBackup.Test.csproj index c4b59a0d3610..03968ae61099 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/Commands.AzureBackup.Test.csproj +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/Commands.AzureBackup.Test.csproj @@ -39,8 +39,9 @@ False ..\..\..\packages\Microsoft.Azure.Common.Authentication.1.0.25-preview\lib\net45\Microsoft.Azure.Common.Authentication.dll - - ..\Commands.AzureBackup\Resources\Microsoft.Azure.Management.BackupServicesManagement.dll + + False + ..\..\..\packages\Microsoft.Azure.Management.BackupServices.0.6.0-preview\lib\net40\Microsoft.Azure.Management.BackupServicesManagement.dll False diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/packages.config b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/packages.config index c7826ee5d690..646601056fd3 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/packages.config +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/packages.config @@ -4,6 +4,7 @@ + diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj index 2d440de290f0..19a4bb817f29 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj @@ -56,9 +56,9 @@ ..\..\..\packages\Microsoft.Azure.Common.2.1.0\lib\net45\Microsoft.Azure.Common.NetFramework.dll - + False - Resources\Microsoft.Azure.Management.BackupServicesManagement.dll + ..\..\..\packages\Microsoft.Azure.Management.BackupServices.0.6.0-preview\lib\net40\Microsoft.Azure.Management.BackupServicesManagement.dll ..\..\..\packages\Microsoft.IdentityModel.Clients.ActiveDirectory.2.14.201151115\lib\net45\Microsoft.IdentityModel.Clients.ActiveDirectory.dll @@ -155,7 +155,6 @@ - diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/MSSharedLibKey.snk b/src/ResourceManager/AzureBackup/Commands.AzureBackup/MSSharedLibKey.snk new file mode 100644 index 0000000000000000000000000000000000000000..695f1b38774e839e5b90059bfb7f32df1dff4223 GIT binary patch literal 160 zcmV;R0AK$ABme*efB*oL000060ssI2Bme+XQ$aBR1ONa50098C{E+7Ye`kjtcRG*W zi8#m|)B?I?xgZ^2Sw5D;l4TxtPwG;3)3^j?qDHjEteSTF{rM+4WI`v zCD?tsZ^;k+S&r1&HRMb=j738S=;J$tCKNrc$@P|lZ99zk)9EgfCY`QMRW~G5 z%1H!N928K-K?Mf{5gkUsZA4LV*k{IdRCEM{(T@Sg5gBnt{1Cq9IrqLxEe%1P`ThUD zZyM^p?>YCJbI(2Z+-=f4vdbb#}oTfiOj@kVt6#McH6GRq4ZFyyQU^G%ZT2- zPN~g4zq+RG=G}H{Pb;gV%2%b-4}b}2?5i)~n&7>UMZMfxT5lo@85Bo7@ci?uy;qTx z|GQTM5{19JAa|SG`P6nAqWCZ2Q`NwY|5~Z`;=0#^6G~Nh>MH!$z}!tY2DB_4%82&+9_6{*WH=aNE(FHRY7O5!4nRN+^kaS%tDM( zPt&gWqi&W8s*3BC8rf&8EH!Vgh%eOkf(B7#<*0C^Q-$W)cyy6?Tnh0pJ@L2{;?Z5= zanblwl;zJ8nx~X4)6fJ9Xb5>|j6QG^j~qg!G~ogoLLM53r9K#1EyusmQk#s4tRw_R zU`H!^DLgVyA}fQI$MUp;)hLSNLfxz+Bu8cn>;0KkNf1ZUmBNqa&^JrnfGZ?Mtz@g* z_#0mJHNEPKgu1F#rWs8kwpo3mC=9ZzZ4KyS%wIYt7LrxVe%idanJPl(7 z^BfJUHjw9NS;;ymVWrWNPNguOmOAm@pB13fqnXW_~}%b%~D=VX!@g?laqGOcjWX(e+jl%}tS zTwm2|5~djEE+(004Ingco|VKNf!U<&xi{CgXA+p=5r4=tWs*^0)O-c)K%A!?LTo2i z*v>|$o$k_h9(UR)nBxV_cahBs*lO5oBD%%CVy1g^AVeMFUL6Y7Yiu7LdP3-!EfZa! zOw2+L4WW5&wPjk_2FOk>lfHn};YHKr#k}%#^!oJE3+M@XbTIu*6wnZQeVH8v^n@m%hpW>LGYaSlmC#$tU8^oBT|@reSwpZA z50}hKOcAy-v!ES9uiMUOX*;bxJHkLahf3PPG-Ern3fdvWcFL?rm}aD(T|iIBOTXS; zIT6g4Fx8^X@m4E02Q~5bX#4cvpT72~3&fy}?6GL*!G ziokf8It%eJ>=m%A950zD5Xl7f5NwV->C4bT+11mSG_;1O-i26On5=SCNz9jsE6JwK zEGlfkmcUUgVzE`)RgNQbuq^gHWwF5EMVx7R|T9|y9jgtNicusIF?b+w_e3{9gMT~+Pj_z64oQxs`&+B!F3}sS#Cv#^*?=OMweHr0o?@KIRK*2ej?WQCxf@KmjB$9^H(!3hYPDl!p z#+{8$!}O8NzfqwoKNN!Qg;mYKS~-~sZ=r29!7(%!NJ1`&UF&1jM;xo0BSm^CD4Nm; zry}v`vFXX>yh+3o$zI%at+Sf)?5-6}&s7zQp7OIS(iR8ze5$!{X&wQ{VCC#+b< ztBs)dMLRTkqi{po3P@A2gs#OJfmXRxpxJ2xG<%GbEGfyuq9PEvqenF1(W`w#R^gKG_M*r*oLS8(OM9xCv26^MgJ;HH(+d7#v@E z9SHTX81LW^CD#L+-GCyEG{SMaO+=i9A~OJi$+HP=mimVLsbF*WzUK2`{=!+(S=W0r zP`#h1$RT;1zW+RgnSo43=pm z@{H8okeWURMN|4*l<_&SImz>QlZ+*k=i{a;pM5LgxmI*;eifTdJ;>KcIN0746Jp6@V?u+mCh0y&$C~1TIH&SOf};7b`Fx=0m5iN!xFq_+Wtp z$r!w`wbog!Z)BctK)Cg$dL5r{Md#uIKFh&u|hc;S?lG(E&7!qM>jnrOIG#?=s^ zvhd7MydoNkR&dV^sc2Z1Q_Wi$tpsmn32)anmBp}z;*n@YG?Ip;!B{D4t7fc--^XXOQ?y~KtfGf2{l?mEwrvpUkqUmKUa6nUl*+d ze_dJrI?Z1X{`&NOFaO6K{%AA`{%BeLsOFD>KbAh=<>!W>+mA=%;E$K(k8A!0@HeER zUVg6Ln!hpH2>!-W{-a1K8q>qzig(GT(i`ncUjlF(E4eS;q@qpfgRE`F%?NIEV=ZtH z_*5j?9BoM-!VSc9xf{%v3pbc9cZ2D&Hy9ZucSfd1DP*$gOuA%Rn$i9lZ+j}^Zei2G z$oXkEQ)}S#n6RiP3Q4&XdPxbV4;#{_+Tv5J>96WZEYVAJN;1RBrvUZCNBmXT6R<6*@8askzXrOc`1I6B%tvye|1s8xD=U@i_u!=x z#Wle3(}w#^7^G!7$nqyApbRE4&pP2osu5!nQ&t`mF%VP!JgRUFY6#hU0`atms#9Ls`Sk_c}uN!v&+$;L9CT#|&IT$0r^i)-RqY!Et^ zMAV0-+|tewF-x3WlI=(?NiyV;yx4T`(MX;MxGLKz%q7Vwxg@JhE@^8+CX-7NrE^K% z*~3wkOG;Hkej6#AiB&F2ehw3>7l&S|w*dtdG%2L!WSP7iTH7h4MpJr03Q6=NDWqGa zQ%IQrh_0Lz63da3Lb^t;1BI2-&5^>JLWW~uokCW`Ds&3D7AYi`4=Y-cN6d==6Ddg` zRw0iv5nxt5xfx4@m1AAJ!irUz46;&FHwrU^ArwIdS>a@mi0eJ}L!QBPnIEh_sx#92 zm$cqB#&8Ae1;cVZzuAW*oGb#)W92&wX-F?ToyBn5=|vKGFnRU2-oPqb3BHMj$P-<8Zmn>5^u%qnPs2NasW`1gf7J4cnU%V;EYJ zfeBX+#xP>pF=<{sQ9vmJ;Grb!hA=HP3{=FrGI=UZ0MjG^jEk>u;}h?a| zbis}10p=g^7xfbc znCEH|Q;0`6vFtEJ=Dsq6sB#2#7*Yu@K^Q`W8-^&xA*WV}E;v(%iz1f|Aa-p&$usqT z#7OrtwJ#Tu!1?Tmq$S!?9Ff2$i)u?E5?Fx|$zEP^1UUE<#y5_%#MR?{r5iEEvRWDs>$&Moao1M|>{NZ5`>)OhjU9LnafE5Tzp$-r2)Z6p=_(Lw<-9&J26q)9vX#OsO^&jVPe02~D&J zmdPB{w?h++W-|q$3DJ{;CT^7uO=Kp##S@y~Xut_gTmEbS--zP%y>%OFbe_Lu#`7NFY@{^BU5Bi5m#lo_!Z1*e@et?11B2pejV zF|(pG@}mTG*JoJCYP;+I7+}{)tHYF;(V03-nW@8+nS36=(@qhWqm=jzi$}q5zA4dJ zTCTCt3>~J-Ca<`0zq2M}T3<0b%f%$!s<&cKJ&zb&|&6;ih(k zNv-i!2)Eu;C-q_YFtyc(o1%C_{u0rjczw9Z1xyY%1%-7rA|z;ylsw$zweWt>+{tBk4>YTz)nKnK%U-QpuLu1%;nKJp5x4@!Wk?U=SVz; z8%#*k(|A~)X2x*DibV_>gKZ7z=ymtuG_%1D)#A}P4AF_N0MS}fKcNT6opE*^P<~+} zos$O;h&SRi(`kX304Jo~3^M_lpmruuNGhwG(TJpk-Bh40-o#u$X05DU(WZjaOix9l zlMUbu6H+*DXo}6aY{qpuVf+#Q=>Xo%4=VL3;5!AY@hMFI@vu@q^59Li3Sqb4rwxcr zI#1yCS&}ETnmmEKH1h<8iOdrir19L6Tf5{5T6&c!E} zm{5!YdGX{4g3XbqOrAhRB~O@?$`fjnh5@lO;N}U!s&E_G zteYozv1Mtk94$GCCd~o+6(NzMvxlRgw{k2CvIio(*#j*m*#lX<*#ikZ*#oO-EZ6XE z_Ha4stejigS;0JbiT!R2+mY;nWXK+PvFYHskvtJ_V7613J&;qf2UeNv!PbUMCVL=C zXAiuy2dOA~kgA3};(aJ=&$~Y;d(a|S7Gw_^&1MR+2cjp*9^5LOJ;?lc3zjSU-Ixis z(Zl7?Yki$P=;lb_%^rB}wHyrb`dGc2J+Qkx0DC*H$FQIWV)Yik8o)5R^2uFTQmq^- z|hD9o|sNoNn>(bDyV-;8c07M2HPzjY%eOalxA$N-v2v`8$E{d{$sQUsx#@OXXAg0c zJv3U;#=P!$`F^m@%^nEp>>*DTaxCra0lsZ#58nQ=f5;wm8^XUE-SoaI(G+Xa*+X-z zxgdLJv7#;cE7(wrjF}Z}&R<1PcfDC&?blt$`!MJ_X?6C1xI$+SEjoK>v9kvem!p(; zvlVMK*+Z+AYi!i4vxnw_?4iwyw&mZ()(f^0cf?tj+)JN=CIpy0{FyL#%w)Ep70>BB z%WJ8VG!C-|?Ff@v1Isydcr%?umW^cmIJM25i3zI}Z^)kz{fXDv0~avK9t5=yy%iF) zMoMN6ycPzObd29B{OQWf1z6(cae7sFes$3+5R~7f!bw;xQf=jEz6!pph1lJ2KW+!V zHI?(Li(Z0YOYdPz*&(pRF;oQRWRn9XN;Z>Q^W|AZ=G> zu69_pYYnh zz_^v0io~s)JBVB1aFM)h0f<|vG~!l*I&O_Z5yY)TBr*5(V|F>;K3XN;`$XK@V&&d} z`uLRSl#`5GtHIm*1@yT09u{}8_&5sm+0swVuYo|!e|RIjkO0RJFQs=~Xg@XQ0Z}`3 zCygC@{x#gp%3Tf2HCte#!f^B5Kx>SZ(}LdxOy;xTDSA-;Uf>Zn@Zt$K1)C#JnQ)W3 zNw_&Fl_z2&4I?ON;1RT+Ot2@yszbJGse!(|j<-3MnI}1mW`PurON2LiqXM&lCuim@ zK{bY5gETsDqkPS2lWYNrb&RG;UWrOqJG%i9bUvuOh~gF{UX*Tlo_~|m6EE7mbuCwm zRY5=hz8<7j&MoaY5Dx9ci|m=iizGw5$cs$}kBQ`oK)2XVVZ2CAi5FRA;ze5<~I&K{Sdcu}ev^6w*sfi;zhnx-3ux5E;XmO6`h{{Ag{;Xi83}_zOcvWq2=o~V4NqgJ9M|3MR6Xvewdo-ZsW)`&UK32K8lsv%CV9ssWVNyI8&3G zZqLy1B2H4P`3~wV3n#6*iL32~CfVZ5mQe^P6VLAdp%IvJm5;RWNrq_$a1w~$u6A%COjPrQy7xqwN$ zD5!ntt&pHKQZioTwJ;2$V>BX=FhrSmatR*-YngbFw6|m9#p@^Im=3-)dW!d&d1l#r zKJd{_Ikv3UC)YJrjt1s>5vojM8HnHz`f)p;<{+d*p05?IY((9628_oDVtXEqmH*IO}!b9IeE8a@26T z=hU%i3PRq9alJrJ_vE~2HcF`MmN(~sn4k!@XqcbX)QWm zpHovEo>RBj;aWU8pV2n)6(Cwm>L)M^aI7^HjEWV1`TN&iE9B{Pc{&{)?dzHM+wL51 ziZ-EJO{Lvx#p}Xa(`N0l(dKlI8Gnt?OR1eqlwXSJ>P|92Al`~(!s!{42`(YFs!S$i zNf{H1;BDUmQdyUcB}huxn@qGZnUHlxR@-P>60^ohCOj3bNyKb$$9b@#{l4#`mHK?V z0r=_ka{O^te-C@!IBqr;;ZMVYbq}V)FM;nAYEA!Z(4JDERBM%sH`QuAaQw6Zu}SA2 zSOJiKyc_Dw)A`3asGDl?52%k+!k>q>xCZhd!!?-ybGasQiR39DhO~p-L)t-5ryY%G zA87{>No?>Y?U20Vo6w;hZAjj6GYH;9-Z22)UVIx(^@dpZSiFKhccS|`@3e=E(DUnaHG6Zmgdt4KopGz&-fZtn82N-qUO<-Ob5FxXFx&&>76fA;%;$ck(vJ zvLKluqByl+GDA)~nITP?WJXAIGDB-mlFSH|H<=-#xJ5~3#1fulhJ>DEhSfBMYy4WQ zEIOI_1nR7uTiQtqW=ClF`uagdG(zh`P1enZxN*Fw5DoSR&mO4q}FqzSg zFsU_kGV^9Ssgs#cQ(K+Ph~f?TyG4KEi;@{Z?L%*c1U)7tlNnx1!Z|ycVdbATnW3Kl zo6PWi1H{oqFVUF9;(wEw|E^?4-1*HWGxXSkWX4@1>}00=QcOB0nITY`%y0>@qdjIQ zvZRd3npB+3$hz!FW(b!gGqTReYFm`dcq%-}jGfC&#TvL7dBiZT({be=LUc8^Lgz9! z7vbL*(7DW-Dv9GA`i*{_%Zz&PQi@*~(BdCDX|?1MapnUu+w4&$plU4#g?V@>V&9uGM(HvfkdLt#J)<4=2#ZI2}Fc98KM;>86vCq zO&}6_k|9>pfbL+_I?2%2P-o@b(oS;bp_BHTKx{{z?2rt}5HB_z95|9E0)EVP3X>sn zB7D+SCK5NDwjwd6^xdfj_Yw~-l_LHA4L9CrDxuc_# zC9Mf5yvY*3`M4bV#w%l$?pGkW8d=fG{6Fw|>)v;># zd!BkktMlKWrg}uHx!QY&g<7(A)*c2{>#kB)9ggzV-x;K&jEJ(u0&yKd+4 zhVQzakDD&@WzVREm)Fn)b3xtx`usNu>h9y!H*8+g{Sz1vD@RhD3gQPd^mDDKey$a@ z--8lqISSz`axwEBR7{ICcB}so%_RTI(cjvlgk~>lX3G-4rz%B@Lf`LGdJl{PySR4Op|5U; z6yDIc{0~TS&El6spXK$~w^7CtR&ts|3ix@s(<`_bv9j<7B!#>&Pwp~5Ao&D^HRPY< zMaRBR@z%=m;zj?2Xu+D;mk2xd8ht#<6|U0xY9>gABFIk9i~A=R<3XGlG< zFW=*m*q6VhxC2VdPblgkotcM^+Cw_i;_vP9(NF7>2eGAEIabDJ%2#8t4e_h7LT-k1 zrVf71+g@?`QmpQH`F^m@4Sosf;P)A-kYi~-1Hp{7e=*V9Uw25XoNh>j?B+n6gTe&A ze3|P!fb!Fc=d;7+7ZZ~fUbp&Jw$>s}$(OvIC#YR|j>YxS^dI4dl_RZ=ev{Fpj((Fm z`c2x=uZYW0N_>tLn`@%qxmvC<)EpiC&MAm~<+Z1OVe19EsypngbE01YjDCMA3?5sV z-FU@ahzXD@c+GW^#^Hky?G2M!<3b!PT5qb8`UfF@Ms2ehOgyc4L;n8}{fXD%FV|)X ze+9JQ-grgs@m9Ne0p|110Izu~lB z{l^Pk=`DtHo5MNjZ#JS$qiuvg+IY6%%sQNt{%9jO?H_Hdz{8JihVw5RPJBZEk44J- zSR**?A8V|@mxnPE#X=u*I4Av?MsU_8Z{#ekufP|CF-?W@UWaqiA7}(;RCC5E@XFQ& zhVwCpbJCw?1gHJej1~B0#&ZqlPaMukf0PlNjoK5MD)5>WmVVLpWrq_#Xafs1mpCdt zp;>dbRN$LLSbxDOzUxk9J3D)tuKq#TB*Rm#^oMX~2ix4x7%1z7&qMTK5G6aXY;i+` z=*dn@Ab6(-{ zRJ0{O!U{Lf`z03M+t82evEd+Cl0VMhZ~F0$7UGQiJa|*Bo(GPfHXtxG{JkT_DE{PM zK{jGY`}-g>OrFP3h-;-9fWuMpY%9JE&M-=zG7l>bid6Bs%92M9nP#}8Is zi0dryWuZVQ67uKC7YgLb7z*ae8N#nJkyj;eM{}W9L$`u7`!U>G$vaRsB|nZbjn+Gp z5Y?IfBtYn${A*lIYAS6t**aSOK(IC-%;|)!kkcK|2H2Ov{`?XeSh*LZ{1wXN6*i;D z#&V!$vmY>z^n>*12N}>0aya_m_6O-7KP zt86w$_fx1l>?^vH9=ekOx|74v9cKRnY+qJ)I8}Mw=Xm|-CA4nkek0|7qD;QiW^;5; zQg?WQ=uUd*P6p^s4o7#mNho_4oT9*QFlwF5-8$2MWBle*1%9J-7oA+Y!##?1_wyY{ z&I5N2{1;lca=%5%w>Jy?ek*7(U8C7Mjoze%-XwMu{sa~Nbg{xvr89{>cc$+)3g6=@ z%<+%gdO%<8CYTn5>N-ANpzq6~@9(7ie^K(urqP;nl|J4{oiV}0)})8dWPq*7;i!(e z_hwaxPTJO@lWS`XP@(eih1%Bhy|#V@ty{U@qvTW85?gmsZ;ZX@Ovsynt8om^YPx3uzS?mFvCA6nsGH9nX2 zbT8~)vT(_wQ;7+x5tJ{%t!BOr|0p9y=uXV$nY+d_!=wANq^Q`4PbF}>cd7av`rnwG zxncLFwWvz~-W)~UnIq|aB*veGz3klPk5*Mi0Q_$D68=~(TSs!Epp*dUr+N&Z8hp?f zbviz8T={dz`DiuETWa4?8&dyR zdvEOq^>i(4sp{%p0A_)dTTr$cIk(l3{y~%x^=#emQMT7ppE>pSg8rg<)*h%Q?_Wvz zYW?PLlbRcSAvjIFE1Hc?Q@5aOQvU%=OwEe5#v*EMj1t}#d!hEj>XR|H{$t$VCif9F zH_qA%;*@+zd~PQtbqC6j`by(HjZNxXjg@KorWb;3qIpPtu<7U4 z4D~gX)6~zJ*srP0SxBI65jCfoI3`ovHQXx8X_uEb_z6I?G~saWC>f##^=$`8A&#l$;| znTLNp7tp7h39V7@6X=c>Lg(S%?_}NATM4D{uSgPl9)av(^$vBTK%MP`ZdM->XaF1P zVOabof&Oh8p>L^=2=r`%>%h;|Edss2gU~P4M+N$1^Tu?FR42Og0q40zto)q zB?Nj|eNv#U0==T{5{UoSSdDsBeF~O1KX^XMRB#W<(I9P_3l5?DD=EJ&wcnHSUxNFA ze?BzDXP5sHT!#B(m=e?YN&?@m`ddRFFoOx5@oKNg1mozE8^Q zq|{uWlKXE-X+`d!94YUOkp2f!`m1=qN6JrBeF-!#ReclXvg&_9`SI%iMEP`eJ!Z!Z z^+WLUFV)Tnk%&P3~)3*?LDSTVLAB);F}W^&PFW zLw_qZytI{exVqKV!g?8%may#`2PbKfPsnloDR9BzX zQ>o96sa}09uC^`no0?JFdoA;4Q>n@OMA{uv-ZPb&JSz8(Po)k&mwPph^C&ir^Jt}% zyQWdM{nM!1(P`A}ifI|hzkV8ZyA$+2_2p@XSGU78wr=rSa?Pwg3XE67 z%IVaweL8CwO8J)Q)NrTV4@{?q<8uG*>D2J1>D2H6DgSvoHT>mtYN!&_Fp|haeoKPV z79^?*LygpFs72a_vwgWal{5^~numfwU{(HFQPXBBV z^d0{^5A=+Gfd{GxaG$sN76cZ^o2`T&uIWRa<RjlN zz-frdw-kNU|Svpqr2^^vz=3gE$|$L(awsJsjK-x?BDMOAVz$Usnm<;_u<$ zVL-wp(B+|TBW}}w4+n1y{RDBF4Sh89?~-Q_emMB$&?|`B?7HuUs(j1T&qUBWDt;51 z?pvW=F;E~p3s4Bzk=FVkV!8$g>IJk}L&CRG4H<}hE7hn&c~G6Ejycc*-)ZXGhVqfX z3f~#(IRi}#p8@DU9Lj@g6<&sx)+-i=I{>v9=!|eLpjigGEWFdVTCFtD+rt+CTCX7) zqchcBQ}@wu#&@PVVxUikF9Y;;59JzlovC{S?X6LF8tBJpZ;kqlhjOjD-_%uAT;*G< zerTY!imL(r%s{7BywA5zy<(uv6@LjRBR> zdMG!jJs!#p>VSdnfs~EvxPkr-QZ}k<4D>AOHmTbU^a|=Wsk;qyN@a&SOFe3!(<*xb zea}D_qwZ|=3j^g)ceeVifo??IW>qha_l}C&P`6pN8;Ewpq(0$_I9hirfw9JyVVf`T>;A7>g^uNbJTUF?*6K;`p!{z8t9*^9su+i59PV) zeg}HMcdq)ap{%I>uJ1fmkAoiCYy*v)dlK0Q}?;*-}x?3cN*xy>em2$#zVPBeMO)v&|bvaqrNTBvz5{ zRdVX`tdHy2h3ea@smrrIu4ntyZ?|ZO>)FNXZXTGRj_cVaYGF!4T+c?;D~C12_3W_v z;V}(yJ)2PXzgt6G&yJ`O9Q-L{XuqqTW*t*MG|-Mvr*%U0T%+qMYgSsw+YFQnZLr?0 zer2F~)V){ry+>0XM&0|=T?T5XImh~ds(-JpyF4^teMk)%sH#y*CNqx>htoyRMUu>=GzN}WB$rd!+V-8 z^KRYO)!j0Fy6)?$Q$|d$k$CpA5dS^kof$A z>V8xAFzOyu<1&6)=0ob3hSX0xuB&@UEtC<{bq}jv4XMT%Pt-lEe&VTnL_KHfdQkU> zx=F@Q^F69=*O1ybV|o3f>TDS?UH6#k(~!D$#ufFCL1W~}HE*sQ1HFZqQX!_g7G*$v zSR@qVed@NdcugOiv{rL{N_g3dh0K|4@n6{vAfD!_=}%DlLy8DC4!{or$uLQd{+O;B5t1zN-S4a&>Wg*C|8?Md)oS(6bs_&_ z>c8r0{i_8-`WgOeWJyWnh?Fx|)z$Z+5$=->LnxOt z97K7j;c(!3-(~U30t4!*hJ$!c^znv#;2z)C8m)PD1Xy9Gx#F(nH%(3bDI_fU-m6%S{B^lJEQ5eV5N0Y z)4E`v`dY&toF#v=VGQTT)M^O-VCIXk+kvL*f~~$IO*f*{a^BhWk>H5Xj|=@Vp}!KA zd?a|Ky0z)Wz?JH+n_flv`KBj=2oNA=uJ5s?XVBueoBkts*!P2`-vujubDQo%A75yC z4fnro3Wh3uzUJyshpK7rRUL{ke1~el{Wa3}8>H`xEJpf^to@C%LpRCDuC`8VUJ}~j z+uXb&)as)hd{XwP9nGskJ?f(7g@GLw$EZiV<$T=#0{F+8HivuEEzP@8-qE}-e8TtP zmWu)>eD}6q6u4bRg!+7>@^+DPyU4j+B-}2%w+rv>!aHoy-|iBw!`8aS`y!tckGe~E z?-Jg-g!eAty-RrSGVO9++$X$8)!e3=tM3!8`-JO0;kr+_?h~&2gzG^^!#itQF|v2p zT>hMh< zU>e|ouhg~+W|m;)3#LafD+SYy^<_r18*h+wqU=;}^LOKU)VJ!p@%*$k`csP-zkf>b zZT^{3u90$3$}6P2P09zP{Hc`wfY3|1M#@1cuaNRKDIbvXr&6lA&!QES{$Ga@a*xvg zQg{{0P$f##?zKyQUF5jjqx2uFx<&3$`d_TNU+z)*U#)&x?os*&YgIjak&tqglzXK- zF6Av!-Y@0TQsM{6NH66oDfdcwT*_OdykE+vrA)+b^Fu=^Z;|q8DHCzQOL>cwPfPif z^)J@HTEDPGN)wfmet@%OCL$y!W4%TJrPSkysQy0*T1L!etZelhrOf{ z=W;_!e5oN+a(F6=|y zh^W64U~=JjxdY(_e8j?mMkpQT}BGX>@s3g!ku4IV|NdDc>Wd=DI=dZ<6xkk7obbr=~7W6=tlC`t?CF$MQ=lorNh zD()LmS{RqjAleK`GDgZrIQ_NjHi?3VIewE_5Zq&yET z;EAi07vQYSQg21+Qx`$Dh0_m~dm-DW2BaKRJAm1T(uebpUARw4c>uC~Y8a)3XWQrE z{*aW1Asb)2mokeJ8lM_RX{pN~yG12@3sBDREyBpm!hNec1@~<#iTgG+5BF14x0LgN zX;%xSTnx-qwM@z$V5X@RxSxjKnp=R;TPfw~z{DZrZ2xcl^8z0Vd?WC)z<&n%g8PG) z2k!{p75r@QOTl=kJ=7Vxtnx1+k3=r5K2h^R?OAmf)ZJG1)w+l3UZ{)Uw;<1|Pt}jq zf1v)J`Y+Z8j>DM?{`S@}YIgs8>KXVlBUJYDd%F9gZL zd0_w9xR8y&^=|)QlpqBd22~Nzx_IUJ)CUu!Yk{w~;?suD6nxt8nTikI?tuN8R06Z0 z1D_fA%*1CFKC|&T1)n+iwBkLUthy_ZRaXSF>N~*~)rH}#I)=}c_*@@;QLV4Ysy+A& z;d8j+MYX%~W%V|E-ht2iD}%mlq{?>_KDXm@Po&lN<*F**ckuZUKF?OQ`nFe3_vP`q z3ZM5?cls`SsYKG)%MbIqx~@7ApG-Cw)Im#o|6TUWQkcQ>y0;`$1%!TKG(bL)5c z_TqXQu6Na=%PY5}hbBf+r>iZ)gPC+Teernr>dPlGsqQTUqXYX>hf<^C-DeIA9-J84 zmC9T?JebOQDuzZz)Fxef&cMXTcqz%6kzq(UdEx40q@4uKx+CMM(d=+~G^;j=YTL$A znSpUZNdG)CPF}li7%MfBRmBq4WKsj;sco6vV?(%ZAIJ50r>YS(x=gOOX49=&*Y zzth^zfy>rVz{SIZP;u?R_<%y4FnI8*M~7Cg*|jz`J}``K?m9T(Y1hbgDs?k`N5@hg zB5eWf3@(9DRtX-)8rnTJk{%dh!>?OqEai-y)0^TUErLCxe<(Yc&WsH2Q@f64$5V&Y zrnSS6njP3Tl2RLw4jk-WlRk6^-v%(QtNnHFBDHPbC8@zu$2HVNlf^ORnFHCBG(MCX zDnRPdF73!B)2>sKMceyRa0jq| zpBcISLC;9_kG%1)l%*+9raxn5v1>#JCF=BF%9UAl4`Mo+NzlDDHQv2(e0)r?FiSK% zX%rEQ%#!ZD16a|9;4j^M1KERF#S)HLT&va$j1HzoMr2{_OCL;)Dj3_d6t2!59UW9_ zQzKXo_5Fs_xN~EhtzgB{wOkC{yEBj4q|!@Wp_dxN%Vo$$+e?dC>omH5%w0k0EuJ-t zzV87&x2!S4Ihr~$zIk}`piHo>Hb4RgFxFX<9vQ*X!L6oyLuxdY86H%d*dG{B4~Cwl zA~-89Z*Cn)2JX)uoRIdg5DOiz{PYjXwrbYSO+$Lt7vZRz9$S~L7d-+69;CZsKz65VjZRXM!i~!8QH-M}jinVAaVd)SBUQ2$0aLUKsY?e& zCQ>S6x+`vK1Mb%CjSuXg;efkG>t!FJu%nBFF*ns1ESDAxmh8{t=`l4SX^Lzz9;dY< zanCv}ZAfddR+*rEB#mT(A*yF{&AM~Mvy+x_IcG?bXy~W|G3q#$q;3=VBK$z$k%23% zXF_#ZI&*OKIKJAmZvu1Fu&f;(*guM8et0m8A>22ye?KF8mrUazi8HCBAw=_I!y~DT zowq8DkUs59jSL*o8KW!CXhIrFV@DjADgN zAKH}~OpgxfsKJi6S7-K5Fi+n)F*365$Y4qm1C<`@Uw3!{tNHj*Rgxu`kazgP*+Ke#Ncxnu>VR~Z!0k@AU3#XFATc;28_b)`g2cMUfZrY;*tEXb3Uv$B{g zMQ}Hw%ERg`9X;Cu)}{x^jQ96U9=dXXhccc+i$a^bx{Jxld#YOL&PoS6U^=2R>!O}$ zB$@4WnVEucaDXPVYcPpmW9OcvgW9`X$6J{?Li`Y|k;Otq09*j%+{0s=i(Rbg@S=s7 zf;_iCXNNfMt1lZE9+zaj3?6aP%F`$M`)3W1DwSDe`~nIN9-K^&IFFYJ4pAUviIP=y zq0B>PGSH>4jI16S7(+`^w<)`Bl&b0Qo36ac<7;Zu==ic8)tA=aMpSEuB_|lj9NoJZ z|FrlJPa-^+b?_MEXY$QOs*Z(K8u2Fk*!$LH2M5OF_{NZOqg|86!l^c`8^tn^p+@NA zS?S?X5wLn+Ha&tB(>_JmoEqIfen6_$92mgS5nIsB?o5r1Fx=(hqbHn@Z8zrw2Bmjx zIen7T2)%aODP^~PB1Iu)a@Z*9YTvWkzUPW^*`|xV$)w?gZRrIHI|)u6vmTkUGPq+b ze!`twZkz$)Le1QBNC|%TXm;S@)V5I<4UV1SrLy#G;t3HJ&Q0JN9vn6?^uYeCIy-e# z=Fs+m;S9#lwl(%T*cw8N?E!1cPGmAz0OTI5aut46nk0IK!Ap2Ll~PcrK8vZ^moa;sh(@fGu{O-Q>c&$|i5{z7aWE|~#j+%YXaj@@cQgd$)$ClL4 z@BmkBjnH~yg@IZgDYC5ZLSkly%6N?|jhqJu>CULu1GO_Xm>Rw`1zYRGPpaTqQ;;Ts zP;0Ll`X(@NdzVPpI4t^9jCYG2+!E!kI(j`+>oOS(!KN(t!fly#hsLn`>9tk#WwXwW zJ=*Jzn9*kMOy(;@XPE%zsPxSVE1gb|-qVS7N8mBL;0w+k48VAoy@75V9>P(byLU=w zDI;aJMYl>DczhsZyCLSmO3zUWx7bBXOSe31L&baEqUFw}x2U)5c8Bj%d-uCV10}oL zqJ1{X-6j?d7Vid&uIPv(Ya`_seYYi(v}S9={kSIN&Z?+_n}wW^ntw7xKyvdW!7RQ)Hi>C57J9 z1DA156zM}fFhG$H^`QU7KGXw47$53E=gas|4~&o=!qb%X!y{O!MPC@f<5oTBf00}D zzyKQMx>XNMQRr4ZFo$-lrP=~!DlJ9lZF_jkv=lb5(Z)P;8G|l^nQY5>42s~*K^ucED>B$JxRKX@%iu!= zFsxE?HsIK78H`b6vt=+!vCWpjBF1LRV2Ls|TLz1G47AL#hBGmjiw6nl>EUwmB*B^v zE{9=W_jJHXB$mTyW%7&VFk10QEaw7LuwpKU-SkK-hs9ufGZM>TuQDUC9G+yOZAD=_ zucep6a0M`oRsh3tC1*0uNGylNibkRr7Aqc!Uf9cwL@x|gW+ZxH70*cYI@WMTq8G*} z%@TWI5Q8-x?1f<_KY4M6p%)e_GYq}3Sn)9Q(%lM%p%+He!_W(Jxx>&4W7+ohxJ$2I zttEi7wS?ikWan9q*PN4@HR+6V)+33so8+kV z!

(w#?ep#qxwppWUP~^2`MR)sP!Xtvr3Ozn`J?$iUGxBLmqi)GAD%Pv6J$3jLsK z{Q#ep>7d=dUq3NAh`68e<5oT=V^*?j@IZ?1PUw)|R)aMn8|Px%e zqO96IdRb;*Ot2X*z>Azq62O&8<6vPF0!tP59N;(f8! z4BoQJ;#WK-R7MTrekw-X_^OtOQ|7zM)CI5FnCA!8zXi5aF+#k zH|mF#+He51uRC6fass^@cYBYv2c!+!Yh3uz_MCFqZoE}jqrz!2fOCA4R#5WrKXFwXhR_w>?XW`jGqo%J$OY~*-s0)^- zukD9??G3&vdTSTptn%UCQ0{^UW>F4ebcex3U+j{;yH@U!9{TVO8hfBB>ANyZD(M~j z!LQDs-eV%e>!Azq?M+%?6z^6h(8dAK(@yl5(;#ac_UYm;1_fzD1$o+6Rr6ZVj0hc$ zalv6mF1kT*9?V-bhJN84tzD4q&VeIl*jLa7TRl7nEJp=;+vrbsXcvdEcHs*{=#An?A8*{>@e&;2XC8l zR!{De3kp2c^+&vk8=WQg;M}K=pQcpREV0=b@87^*i`LsJT66^Cjuke_RqY5Qv7e*x zEVan)@tGLy;_-B6pT{0=;e4{^x2rX+>5jc^4N7!ec04gUa)H zdQ`=?86F~f>iA9vdeN6 z9>P27oU5eKGlsZ6U{vEc*3b#m?1MJkx42%b){EtytM?FOA9b~;;TpnrIMz!2(=~(Y zinD4~f92-pbAM@_vt3pE?d5yUY3+IX>WW2Q>pkahmTg@cYK&F-V%4}z#RWS{Z6Kjy z9V})8st6=}J}Cs>;7@`eNdgqJ0afs(!3x#-L$MBgW?P{OTpGaZt4suZwY9O?v5s)U zFLxDppV9wk(eFoA1R*vyw<-}d1hKgeG46amtyO&@*cj{b#S)Ox9-ALsRGSDm2oJar z^#E%UeyN>R;ia8bYd~Gu7u(3%IwNU&ZEQ1P=$vGylcHIYy-J1>mM@lM&std3B2_J{ zY6-(&OMS7HiiFZPT4_Ng4GMfK$+uGYR+4X}6^g(z5n45Z`cmjZOxL)FV1=mYlFXWv@d8diI(W0lo=X< z$N@YD#^x|!1RQ;_298m!VKHD8c(#Lw!&PS#uwm)gCV$vh8wmU0n{>`>$KXb>Y{+-ZOEUsqpoJH2z8M5GNWS93PgD9qfu+FbuLvfr+6pcWwQ>s{rDDgw9s&<8($9_{Y=8VAP(ox? z!ipXLM(p@^qQ}1vqUiAt!rBU|V?tQQ9+8EX<*T2j>Zkd_5es$Ez0|oDy~nRvqO7gt zgrl~#)uIwQ`Xm62eg@hS{fy6`G4^p4_5i*Jw2mJC_o=bt&x^h<8u>43yt3qyoqgEV>V}fIr=GG z_gwWYjG}GgHHpTc?{rk@hSqh_c|Nu4q+hG)mbaXoM|auIqH`bT2yh{OCs<)@k769c zTt?utSVN+FWk2Wwwm$5S?iJTa=&5e}dC2PkL+?et@To zVvYke$AJQK=oM`t7U+fM)_A~(*Fqz%g+?$VBbYG5;da|j$FCwHw#uGH7WUbqY4gVz zWDws^{NoH!_N36U4xS~7bw+5N5wXrfnG6ff{x=KOnWe2W%UEa3Yn?III%5%8_+@Hy zZ8{B`@9__XyIfPzQYYzHv?u=2q(7xCp@-;ZU$^FY zaj((FU89X(gzu#Oky^aYGdxjhoJx%sD5XcV4}-fApFRVc0Y2i@^@ywM5r$}|)xI^{ zXofU;nuSpCPw4J@eCpgk!Wbnd(~h6x(VUp#2u*QBOwlLf(`WpAJIt^dpY7Td+l?uX zc};Q5HN~+oOmQlllw0wM)d;aH1ULvh8G_YT*ZX|a7zBL<7k|W8d;HJC^Nr0o2YTt< z_;Bec-h4%>6i$tWsQUjTBNx31?HCzP-NeYpXyjvJS+NQ<^4*)-K2T@*cWe(c2ViU^ENrZ{ZPJJNKSJLU=r z1nI1o0Pn?z2Vr zQ8cDIMfVxeeIokC7$yWo_t~QWWo@@*ZKo{E7s}dhWNjB&H^ngSl(l`6PqlS# zUDxNl@IBwW3w|2@;fJO8@$uRQr^-Cf<2&jx@+6#^1ZXSpy9mtA6mAgM;cps$N59W% zIv0=J@C?s+OH1B9%nGei*VNs-o5U7A?Z934Yka=1)XrUNcRlf$)*t@W1&wEY>B`t` zZPkyyMwZlyJsURl?UA>0yRt(EyDm;=x<*sud$O6qJ@#Jeeq(x%=bOWO^xM4lyXPLF z^u9~>;C;%TrCsvc*q)PK;#?WsV?+DckN=6k@4e)<@=M+)T-bZ}w1-Y9yn&cmJ2J8b z&wZ7ANjH`1=J(0@_u6d8;J4HN_fIUqe-VMdPN0q#8iXFL@I15>Pr8lxoCk`R=*;Ht zB@6K_e&J%5>PNW_r&OPxrOOdM&wS1zLMZM=qs8HM;=!34v?{Frn&qnu`k+e`~ z7NXz!zaE^W!Up&y68=((-7=p)l|CC}GYNbaVo`8u&ymyBEOeHqvQpm-8vBDaK>k$> z_C`NN;S;nG_msBm^O@D^a-7>{AiEp&<(?ROpCRrN9r!GgC)C+VICwhDIf8$j4*G8f z<$lqG&&S4aZcMA~#|iT|XcG9`D0*)*c%C*>Z`($ME~xc)t2fBn2=2v*|xdGRQ? s_UAa@A8i#LJ|W=qN1mYbq&)G4d|>^*@9$Uo-#fxX;{W~o|Dgr`KXJ$>2LJ#7 diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Resources/Microsoft.WindowsAzure.Management.Common.dll b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Resources/Microsoft.WindowsAzure.Management.Common.dll index 0ff26b7d81defff03593e658d1307662ae2db7d7..247f5d1a8c3e194a2b90b3bf0e6632ea528c31bd 100644 GIT binary patch delta 153655 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

G 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 HaH|#owHW;l7be49KmbAn?O(BAQN552%P3 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�Y!I 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%0DRB+=ZyBC7gMoP-R9Z1NI{3K3Xg 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
2jMtLe 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 diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Resources/Security.Cryptography.dll b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Resources/Security.Cryptography.dll index 867eefea6aa2582d6448d61060e31cf5ddced6b8..6fe3849e1d7331beeec4896fe29594e4a55add8d 100644 GIT binary patch literal 97792 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%0A2qS- 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 + From dbb6cfded4a29f1719e3bdd92474b2330e158841 Mon Sep 17 00:00:00 2001 From: swatimadhukar Date: Thu, 9 Jul 2015 04:04:21 -0700 Subject: [PATCH 144/155] Adding Commands.AzureBackup.dll-help.xml and psd1 --- .../Commands.AzureBackup.csproj | 11 +- ....Azure.Commands.AzureBackup.dll-help.psd1} | 8 +- ...ft.Azure.Commands.AzureBackup.dll-help.xml | 884 ++++++++++++++++++ 3 files changed, 897 insertions(+), 6 deletions(-) rename src/ResourceManager/AzureBackup/Commands.AzureBackup/{Microsoft.WindowsAzure.Commands.StorSimple.dll-help.psd1 => Microsoft.Azure.Commands.AzureBackup.dll-help.psd1} (89%) create mode 100644 src/ResourceManager/AzureBackup/Commands.AzureBackup/Microsoft.Azure.Commands.AzureBackup.dll-help.xml diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj index 19a4bb817f29..0070f30b574c 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj @@ -30,14 +30,16 @@ MinimumRecommendedRules.ruleset - ..\..\..\Package\Release\ServiceManagement\Azure\StorSimple\ + ..\..\..\Package\Release\ResourceManager\AzureResourceManager\AzureBackup\ TRACE;SIGN true pdbonly AnyCPU prompt MinimumRecommendedRules.ruleset - true + ;$(ProgramFiles)\Microsoft Visual Studio 12.0\Team Tools\Static Analysis Tools\Rule Sets + ;$(ProgramFiles)\Microsoft Visual Studio 12.0\Team Tools\Static Analysis Tools\FxCop\Rules + true MSSharedLibKey.snk true false @@ -139,10 +141,12 @@ + Always Designer + Designer @@ -155,6 +159,9 @@ + + Always + diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Microsoft.WindowsAzure.Commands.StorSimple.dll-help.psd1 b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Microsoft.Azure.Commands.AzureBackup.dll-help.psd1 similarity index 89% rename from src/ResourceManager/AzureBackup/Commands.AzureBackup/Microsoft.WindowsAzure.Commands.StorSimple.dll-help.psd1 rename to src/ResourceManager/AzureBackup/Commands.AzureBackup/Microsoft.Azure.Commands.AzureBackup.dll-help.psd1 index ead8aec13057..7abd2c521bb9 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Microsoft.WindowsAzure.Commands.StorSimple.dll-help.psd1 +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Microsoft.Azure.Commands.AzureBackup.dll-help.psd1 @@ -1,5 +1,5 @@ # -# Module manifest for module 'Microsoft.WindowsAzure.Commands.StorSimple' +# Module manifest for module 'Microsoft.WindowsAzure.Commands.AzureBackup' # # Generated by: Microsoft Corporation # @@ -9,10 +9,10 @@ @{ # Version number of this module. -ModuleVersion = '0.8.13' +ModuleVersion = '1.0' # ID used to uniquely identify this module -GUID = 'd52ed268-64c7-46bd-9cf8-1814d07409f8' +GUID = 'bbe363aa-27da-4af9-9cd4-b9bad23bd58d' # Author of this module Author = 'Microsoft Corporation' @@ -61,7 +61,7 @@ FormatsToProcess = @() # Modules to import as nested modules of the module specified in ModuleToProcess NestedModules = @( - '..\..\..\Package\Debug\ServiceManagement\Azure\StorSimple\Microsoft.WindowsAzure.Commands.StorSimple.dll' + '..\..\..\Package\Debug\ResourceManager\AzureResourceManager\AzureBackup\Microsoft.Azure.Commands.AzureBackup.dll' ) # Functions to export from this module diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Microsoft.Azure.Commands.AzureBackup.dll-help.xml b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Microsoft.Azure.Commands.AzureBackup.dll-help.xml new file mode 100644 index 000000000000..732d973175bf --- /dev/null +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Microsoft.Azure.Commands.AzureBackup.dll-help.xml @@ -0,0 +1,884 @@ + + + + + Get-AzureBackupVault + + Retrieves one or more vault objects based on the parameters that are specified. + + + + + Get + AzureBackupVault + + + + The Get-AzureBackupVault commandlet retrieves existing Azure Backup vaults and returns objects of type AzurePSBackupVault. The vault object is used in some Azure Backup commandlets as a mandatory parameter. + + + + Get-AzureBackupVault + + ResourceGroupName + + The Azure resource group under which the vault was created. + + String + + + Name + + The name of the specific Azure Backup vault that needs to be retrieved. If no name is specified, then the commandlet returns all the vaults created by the subscription. If there is more than 1 backup vault with the same name then the commandlet returns all the vaults that match the name. Use the -ResourceGroupName parameter to filter results and get a unique vault. + + String + + + Profile + + Non-mandatory AzureProfile input object + + AzureProfile + + + + + + ResourceGroupName + + The Azure resource group under which the vault was created. + + String + + String + + + + + + Name + + The name of the specific Azure Backup vault that needs to be retrieved. If no name is specified, then the commandlet returns all the vaults created by the subscription. If there is more than 1 backup vault with the same name then the commandlet returns all the vaults that match the name. Use the -ResourceGroupName parameter to filter results and get a unique vault. + + String + + String + + + + + + Profile + + Non-mandatory AzureProfile input object + + AzureProfile + + AzureProfile + + + + + + + + + Vault name as [String] + + + + + This section details out the type of the objects that you can pipe to the cmdlet. + + + + + + + Microsoft.Azure.Commands.AzureBackup.Models.AzurePSBackupVault + + + + + This section details out the type of the objects that the cmdlet emits. + + + + + + + + + None + + + + + -------------------------- View all the Azure Backup vaults created -------------------------- + + PS C:\> + + Get-AzureBackupVault + + + + + + + + + + + + + + + + -------------------------- Get a list of all vaults created in West US -------------------------- + + PS C:\> + + Get-AzureBackupVault | Where-Object { $_.Region -eq "westus" } + + + + + + + + + + + + + + + + -------------------------- Get a reference to a specific vault -------------------------- + + PS C:\> + + Get-AzureBackupVault -Name "myvault" + + + + + ResourceId : /subscriptions/4bfbe168-f42a-4a06-8f5a-331cad1f497e/resourceGroups/rg1/providers/Microsoft.Backup + /BackupVault/myvault +Name : myvault +ResourceGroupName : rg1 +Region : westus +Storage : GeoRedundant + + + + + + + + + + + -------------------------- Count the number of vaults having Locally Redundant Storage -------------------------- + + PS C:\> + + Get-AzureBackupVault | Where-Object { $_.Storage –match ‘LocallyRedundant’ } | Measure-Object + + + + + Count : 4 +Average : +Sum : +Maximum : +Minimum : +Property : + + + + + + + + + + + + + New-AzureBackupVault + + + + Set-AzureBackupVault + + + + Remove-AzureBackupVault + + + + Get-AzureBackupContainer + + + + + + + + Get-AzureBackupVaultCredentials + + Downloads the Vault Credentials file to a specified location. + + + + + Get + AzureBackupVaultCredentials + + + + To enable hybrid backup scenarios the Vault Credentials file is a critical component. The vault credential file is used to connect a server to the Azure Backup vault and register it. Only after registration can backup data be sent to the vault. The Get-AzureBackupVaultCredentials commandlet downloads and places a vault credential file at the location specified by the user. + + + + Get-AzureBackupVaultCredentials + + TargetLocation + + The destination path where the Vault Credentials file should be placed. + + String + + + Vault + + The specific Azure Backup vault object for which the Vault Credential file is generated. + + AzurePSBackupVault + + + Profile + + Non-mandatory AzureProfile input object + + AzureProfile + + + + + + TargetLocation + + The destination path where the Vault Credentials file should be placed. + + String + + String + + + + + + Vault + + The specific Azure Backup vault object for which the Vault Credential file is generated. + + AzurePSBackupVault + + AzurePSBackupVault + + + + + + Profile + + Non-mandatory AzureProfile input object + + AzureProfile + + AzureProfile + + + + + + + + + Microsoft.Azure.Commands.AzureBackup.Models.AzurePSBackupVault + + + + + +This section details out the type of the objects that you can pipe to the cmdlet. + + + + + + + Vault Credentials file name as [String] + + + + + +This section details out the type of the objects that the cmdlet emits. + + + + + + + + + None + + + + + -------------------------- Download a Vault Credentials file -------------------------- + + PS C:\> + + Get-AzureBackupVaultCredentials -Vault $vaultobj -TargetLocation "C:\users\admin\Desktop" + + This will place the vault credentials file at the user-specified location. + + + f5303a0b-fae4-4cdb-b44d-0e4c032dde26_backuprg_backuprn_2015-06-7--06-22-35.VaultCredentials + + + + + + + + + + + + + + + + + New-AzureBackupVault + + Creates a new Azure Backup vault based on the parameters that are specified. A vault is the start point for all backup operations with Azure Backup. + + + + + New + AzureBackupVault + + + + The New-AzureBackupVault commandlet creates and Azure Backup vault and returns an object of type AzurePSBackupVault that acts as a reference to the vault entity. The vault has some important properties that define the scope of backup – the region and the storage type. + + + + New-AzureBackupVault + + ResourceGroupName + + Specifies the name of an existing resource group. In order to create a resource group, use the New-AzureResourceGroup commandlet. There is no requirement that the Azure ResourceGroup and the Azure Backup vault be in the same region. + + String + + + Name + + Specifies the name of the Azure Backup vault. The combination of ResourceGroupName and Name must be unique. You cannot create two vaults with the same name under the same ResourceGroup, but two vaults with the same name can be placed under two different Resource Groups. + + String + + + Region + + The region parameter places the vault object into a specific Azure region. For hybrid backup scenarios, it is advised to create a vault in a region close to the on-premise server to reduce latency. For backup of Azure IaaS virtual machines, the vault becomes the point of discovery for local virtual machines. + + String + + + Storage + + Backup storage is billed at Azure Storage rates and users can choose between LocallyRedundant and GeoRedundant as the storage for the backup data. Since this is an optional parameter, if it is not specified then the vault is created with the GeoRedundant Storage option. + + AzureBackupVaultStorageType + + + Profile + + Non-mandatory AzureProfile input object + + AzureProfile + + + + + + ResourceGroupName + + Specifies the name of an existing resource group. In order to create a resource group, use the New-AzureResourceGroup commandlet. There is no requirement that the Azure ResourceGroup and the Azure Backup vault be in the same region. + + String + + String + + + + + + Name + + Specifies the name of the Azure Backup vault. The combination of ResourceGroupName and Name must be unique. You cannot create two vaults with the same name under the same ResourceGroup, but two vaults with the same name can be placed under two different Resource Groups. + + String + + String + + + + + + Region + + The region parameter places the vault object into a specific Azure region. For hybrid backup scenarios, it is advised to create a vault in a region close to the on-premise server to reduce latency. For backup of Azure IaaS virtual machines, the vault becomes the point of discovery for local virtual machines. + + String + + String + + + + + + Storage + + Backup storage is billed at Azure Storage rates and users can choose between LocallyRedundant and GeoRedundant as the storage for the backup data. Since this is an optional parameter, if it is not specified then the vault is created with the GeoRedundant Storage option. + + AzureBackupVaultStorageType + + AzureBackupVaultStorageType + + + + + + Profile + + Non-mandatory AzureProfile input object + + AzureProfile + + AzureProfile + + + + + + + + + None + + + + + This section details out the type of the objects that you can pipe to the cmdlet. + + + + + + + Microsoft.Azure.Commands.AzureBackup.Models.AzurePSBackupVault + + + + + This section details out the type of the objects that the cmdlet emits. + + + + + + + + + None + + + + + -------------------------- Create a new backup vault -------------------------- + + PS C:\> + + New-AzureBackupVault –ResourceGroupName “rg1” –Name “vault1” –Region “westus” + + + + + ResourceId : /subscriptions/4bfbe168-f42a-4a06-8f5a-331cad1f497e/resourceGroups/rg1/providers/Microsoft.Backup + /BackupVault/vault1 +Name : vault1 +ResourceGroupName : rg1 +Region : westus +Storage : GeoRedundant + + + + + + + + + + + -------------------------- Create a new backup vault with Locally Redundant Storage -------------------------- + + PS C:\> + + New-AzureBackupVault –ResourceGroupName “rg2” –Name “vault2” –Region “westus” –Storage LocallyRedundant + + + + + ResourceId : /subscriptions/4bfbe168-f42a-4a06-8f5a-331cad1f497e/resourceGroups/rg2/providers/Microsoft.Backup + /BackupVault/vault2 +Name : vault2 +ResourceGroupName : rg2 +Region : westus +Storage : LocallyRedundant + + + + + + + + + + + + + New-AzureResourceGroup + https://msdn.microsoft.com/en-us/library/dn654594.aspx + + + Get-AzureBackupVault + + + + Set-AzureBackupVault + + + + Remove-AzureBackupVault + + + + + + + + Remove-AzureBackupVault + + Deletes the Azure Backup vault object based on the parameters that are specified. + + + + + Remove + AzureBackupVault + + + + The Remove-AzureBackupVault commandlet deletes the backup vault. However, before a vault can be removed, it must first be empty – it must contain no backup data or protected items or registered servers. This ensures that a vault cannot be deleted inadvertently; the deletion of a backup vault is a planned operation. + Use the Remove-AzureBackupContainer commandlet to clear up IaaS VM backup data from the vault, or use the Delete-RegisteredServer commandlet to clear up other registered servers and backup data. + + + + Remove-AzureBackupVault + + Vault + + The specific Azure Backup vault object which needs to be removed. + + AzurePSBackupVault + + + Profile + + Non-mandatory AzureProfile input object + + AzureProfile + + + + + + Vault + + The specific Azure Backup vault object which needs to be removed. + + AzurePSBackupVault + + AzurePSBackupVault + + + + + + Profile + + Non-mandatory AzureProfile input object + + AzureProfile + + AzureProfile + + + + + + + + + Microsoft.Azure.Commands.AzureBackup.Models.AzurePSBackupVault + + + + + This section details out the type of the objects that you can pipe to the cmdlet. + + + + + + + None + + + + + This section details out the type of the objects that the cmdlet emits. + + + + + + + + + None + + + + + -------------------------- Delete an Azure Backup vault -------------------------- + + PS C:\> + + Get-AzureBackupVault -Name "myvault" | Remove-AzureBackupVault + + + + + + + + + + + + + + + + + + Remove-AzureBackupContainer + + + + Delete-RegisteredServer + + + + New-AzureBackupVault + + + + Get-AzureBackupVault + + + + Set-AzureBackupVault + + + + + + + + Set-AzureBackupVault + + Changes the properties of the Azure Backup vault object based on the parameters that are specified. + + + + + Set + AzureBackupVault + + + + The Set-AzureBackupVault commandlet allows you to change the storage type of the backup vault. The other parameters like Region, Name, and ResourceGroupName are not editable. + + + + Set-AzureBackupVault + + Storage + + Users can choose between LocallyRedundant and GeoRedundant as the storage for the backup data. + + AzureBackupVaultStorageType + + + Vault + + The specific Azure Backup vault object for which the properties need to be updated. + + AzurePSBackupVault + + + Profile + + Non-mandatory AzureProfile input object + + AzureProfile + + + + + + Storage + + Users can choose between LocallyRedundant and GeoRedundant as the storage for the backup data. + + AzureBackupVaultStorageType + + AzureBackupVaultStorageType + + + + + + Vault + + The specific Azure Backup vault object for which the properties need to be updated. + + AzurePSBackupVault + + AzurePSBackupVault + + + + + + Profile + + Non-mandatory AzureProfile input object + + AzureProfile + + AzureProfile + + + + + + + + + Microsoft.Azure.Commands.AzureBackup.Models.AzurePSBackupVault + + + + + +This section details out the type of the objects that you can pipe to the cmdlet. + + + + + + + None + + + + + +This section details out the type of the objects that the cmdlet emits. + + + + + + + + + The storage type is locked on the registration of the first server or virtual machine, and cannot be changed afterwards. + + + + + -------------------------- Change the storage for an existing vault -------------------------- + + PS C:\> + + Get-AzureBackupVault –Name “myvault” | Set-AzureBackupVault –Storage LocallyRedundant + + + + + + + + + + + + + + + + + + New-AzureBackupVault + + + + Get-AzureBackupVault + + + + Remove-AzureBackupVault + + + + Set-AzureBackupVaultStorageType + + + + + \ No newline at end of file From 57e86df932854d707457b67aa167ee5bb010d2be Mon Sep 17 00:00:00 2001 From: swatimadhukar Date: Thu, 9 Jul 2015 09:02:45 -0700 Subject: [PATCH 145/155] Correcting Commands.AzureBackup.csproj --- .../Commands.AzureBackup/Commands.AzureBackup.csproj | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj index 0070f30b574c..d34c3ca26efe 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj @@ -37,8 +37,6 @@ AnyCPU prompt MinimumRecommendedRules.ruleset - ;$(ProgramFiles)\Microsoft Visual Studio 12.0\Team Tools\Static Analysis Tools\Rule Sets - ;$(ProgramFiles)\Microsoft Visual Studio 12.0\Team Tools\Static Analysis Tools\FxCop\Rules true MSSharedLibKey.snk true From 0a792366e04c3549bd0bbfd489740b4fa469a594 Mon Sep 17 00:00:00 2001 From: swatimadhukar Date: Thu, 9 Jul 2015 10:38:52 -0700 Subject: [PATCH 146/155] new azurecmdfiles.wxi --- setup/azurecmdfiles.wxi | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/setup/azurecmdfiles.wxi b/setup/azurecmdfiles.wxi index 15c818d90dfc..296c29fe09b9 100644 --- a/setup/azurecmdfiles.wxi +++ b/setup/azurecmdfiles.wxi @@ -11,9 +11,6 @@ - - - @@ -165,6 +162,9 @@ + + + @@ -1070,9 +1070,6 @@ - - - @@ -4036,7 +4033,6 @@ - @@ -4086,6 +4082,7 @@ + @@ -4373,7 +4370,6 @@ - From aa3e24630e63eb82388b538a9c0bdfa4804a4cc1 Mon Sep 17 00:00:00 2001 From: swatimadhukar Date: Thu, 9 Jul 2015 11:30:34 -0700 Subject: [PATCH 147/155] deleting automatically created app.config --- src/Common/Commands.Common.Storage/app.config | 11 ----------- 1 file changed, 11 deletions(-) delete mode 100644 src/Common/Commands.Common.Storage/app.config diff --git a/src/Common/Commands.Common.Storage/app.config b/src/Common/Commands.Common.Storage/app.config deleted file mode 100644 index d493bfcbbea0..000000000000 --- a/src/Common/Commands.Common.Storage/app.config +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - From 40eebb6ab56286069cc9d1dce3dd10ce65dd0007 Mon Sep 17 00:00:00 2001 From: swatimadhukar Date: Thu, 9 Jul 2015 12:49:20 -0700 Subject: [PATCH 148/155] Adding AzureBackup test to AzurePowershell.Test.targets --- AzurePowershell.Test.targets | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/AzurePowershell.Test.targets b/AzurePowershell.Test.targets index b3fcd9c1cebd..459a30b6356f 100644 --- a/AzurePowershell.Test.targets +++ b/AzurePowershell.Test.targets @@ -7,6 +7,7 @@ .\src\Local.x64.testsettings .\src\Common\Commands.ScenarioTest\bin\Debug\Microsoft.WindowsAzure.Commands.ScenarioTest.dll .\src\Common\Commands.Common.Test\bin\Debug\Microsoft.WindowsAzure.Commands.Common.Test.dll + .\src\ResourceManager\AzureBackup\Commands.AzureBackup.Test\bin\Debug\Microsoft.Azure.Commands.AzureBackup.Test.dll .\src\ResourceManager\Sql\Commands.Sql.Test\bin\Debug\Microsoft.Azure.Commands.Sql.Test.dll .\src\ResourceManager\Compute\Commands.Compute.Test\bin\Debug\Microsoft.Azure.Commands.Compute.dll .\src\ResourceManager\Compute\Commands.Compute.Test\bin\Debug\Microsoft.Azure.Commands.Compute.Test.dll @@ -42,6 +43,7 @@ + @@ -217,6 +219,13 @@ Projects="build.proj"/> + + + + + + From 50d4a0523c8eaea1f736eabef0fa241a4b3d0abf Mon Sep 17 00:00:00 2001 From: swatimadhukar Date: Thu, 9 Jul 2015 23:10:05 -0700 Subject: [PATCH 149/155] Adding Trait in Vault Scenario Test --- .../ScenarioTests/AzureBackupVaultTests.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupVaultTests.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupVaultTests.cs index dee39025d4e2..87372daeaeaf 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupVaultTests.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupVaultTests.cs @@ -12,6 +12,7 @@ // limitations under the License. // ---------------------------------------------------------------------------------- +using Microsoft.WindowsAzure.Commands.ScenarioTest; using Xunit; namespace Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests @@ -19,6 +20,7 @@ namespace Microsoft.Azure.Commands.AzureBackup.Test.ScenarioTests public class AzureBackupVaultTests : AzureBackupTestsBase { [Fact] + [Trait(Category.AcceptanceType, Category.CheckIn)] public void AzureBackupVaultScenarioTests() { this.RunPowerShellTest("Test-AzureBackupVaultScenario"); From d721580a95b55ab98fb4aeb06559b9f565ebe7a4 Mon Sep 17 00:00:00 2001 From: dragonfly91 Date: Fri, 10 Jul 2015 14:31:37 +0530 Subject: [PATCH 150/155] Updated wxi after pulling from upstream --- setup/azurecmdfiles.wxi | 360 +++------------------------------------- 1 file changed, 24 insertions(+), 336 deletions(-) diff --git a/setup/azurecmdfiles.wxi b/setup/azurecmdfiles.wxi index c3e2b003cae6..46fe488eb9e4 100644 --- a/setup/azurecmdfiles.wxi +++ b/setup/azurecmdfiles.wxi @@ -11,6 +11,9 @@ + + + @@ -41,15 +44,6 @@ - - - - - - - - - @@ -95,9 +89,6 @@ - - - @@ -254,15 +245,6 @@ - - - - - - - - - @@ -302,9 +284,6 @@ - - - @@ -346,6 +325,18 @@ + + + + + + + + + + + + @@ -403,15 +394,6 @@ - - - - - - - - - @@ -499,9 +481,6 @@ - - - @@ -744,15 +723,6 @@ - - - - - - - - - @@ -810,9 +780,6 @@ - - - @@ -845,15 +812,6 @@ - - - - - - - - - @@ -881,9 +839,6 @@ - - - @@ -910,15 +865,6 @@ - - - - - - - - - @@ -940,9 +886,6 @@ - - - @@ -1011,15 +954,6 @@ - - - - - - - - - @@ -1062,14 +996,14 @@ - - - + + + @@ -1411,15 +1345,6 @@ - - - - - - - - - @@ -1474,9 +1399,6 @@ - - - @@ -1503,15 +1425,6 @@ - - - - - - - - - @@ -1548,9 +1461,6 @@ - - - @@ -1568,15 +1478,6 @@ - - - - - - - - - @@ -1640,9 +1541,6 @@ - - - @@ -1779,15 +1677,6 @@ - - - - - - - - - @@ -1833,9 +1722,6 @@ - - - @@ -1862,15 +1748,6 @@ - - - - - - - - - @@ -1922,9 +1799,6 @@ - - - @@ -2197,15 +2071,6 @@ - - - - - - - - - @@ -2347,9 +2212,6 @@ - - - @@ -2435,15 +2297,6 @@ - - - - - - - - - @@ -2507,9 +2360,6 @@ - - - @@ -2563,15 +2413,6 @@ - - - - - - - - - @@ -2683,9 +2524,6 @@ - - - @@ -2712,15 +2550,6 @@ - - - - - - - - - @@ -2844,9 +2673,6 @@ - - - @@ -3147,15 +2973,6 @@ - - - - - - - - - @@ -3210,9 +3027,6 @@ - - - @@ -3260,15 +3074,6 @@ - - - - - - - - - @@ -3389,9 +3194,6 @@ - - - @@ -3652,15 +3454,6 @@ - - - - - - - - - @@ -3802,9 +3595,6 @@ - - - @@ -3822,15 +3612,6 @@ - - - - - - - - - @@ -3894,9 +3675,6 @@ - - - @@ -3982,15 +3760,6 @@ - - - - - - - - - @@ -4036,9 +3805,6 @@ - - - @@ -4048,6 +3814,7 @@ + @@ -4058,9 +3825,6 @@ - - - @@ -4076,7 +3840,6 @@ - @@ -4127,9 +3890,6 @@ - - - @@ -4143,7 +3903,6 @@ - @@ -4157,6 +3916,10 @@ + + + + @@ -4176,9 +3939,6 @@ - - - @@ -4208,7 +3968,6 @@ - @@ -4279,9 +4038,6 @@ - - - @@ -4301,7 +4057,6 @@ - @@ -4312,9 +4067,6 @@ - - - @@ -4324,7 +4076,6 @@ - @@ -4333,9 +4084,6 @@ - - - @@ -4343,7 +4091,6 @@ - @@ -4366,9 +4113,6 @@ - - - @@ -4383,8 +4127,8 @@ - + @@ -4496,9 +4240,6 @@ - - - @@ -4517,7 +4258,6 @@ - @@ -4526,9 +4266,6 @@ - - - @@ -4541,15 +4278,11 @@ - - - - @@ -4571,7 +4304,6 @@ - @@ -4616,9 +4348,6 @@ - - - @@ -4634,7 +4363,6 @@ - @@ -4643,9 +4371,6 @@ - - - @@ -4663,7 +4388,6 @@ - @@ -4750,9 +4474,6 @@ - - - @@ -4800,7 +4521,6 @@ - @@ -4828,9 +4548,6 @@ - - - @@ -4852,7 +4569,6 @@ - @@ -4870,9 +4586,6 @@ - - - @@ -4910,7 +4623,6 @@ - @@ -4919,9 +4631,6 @@ - - - @@ -4963,7 +4672,6 @@ - @@ -5052,9 +4760,6 @@ - - - @@ -5073,7 +4778,6 @@ - @@ -5089,9 +4793,6 @@ - - - @@ -5132,7 +4833,6 @@ - @@ -5209,9 +4909,6 @@ - - - @@ -5259,15 +4956,11 @@ - - - - @@ -5289,7 +4982,6 @@ - @@ -5317,9 +5009,6 @@ - - - @@ -5335,7 +5024,6 @@ - From 61b5744a38b5e2f731b3055ea73d9605a34589c5 Mon Sep 17 00:00:00 2001 From: swatimadhukar Date: Fri, 10 Jul 2015 04:09:38 -0700 Subject: [PATCH 151/155] Upgrading Microsoft.Azure.Common.Authentication verisoin --- .../Commands.AzureBackup.Test/Commands.AzureBackup.Test.csproj | 2 +- .../AzureBackup/Commands.AzureBackup.Test/packages.config | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/Commands.AzureBackup.Test.csproj b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/Commands.AzureBackup.Test.csproj index 03968ae61099..711601628a13 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/Commands.AzureBackup.Test.csproj +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/Commands.AzureBackup.Test.csproj @@ -37,7 +37,7 @@ False - ..\..\..\packages\Microsoft.Azure.Common.Authentication.1.0.25-preview\lib\net45\Microsoft.Azure.Common.Authentication.dll + ..\..\..\packages\Microsoft.Azure.Common.Authentication.1.0.27-preview\lib\net45\Microsoft.Azure.Common.Authentication.dll False diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/packages.config b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/packages.config index 646601056fd3..02c953d8b272 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/packages.config +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/packages.config @@ -2,7 +2,7 @@ - + From 092d0317656c2f69d4e58d5436795712480ddc7d Mon Sep 17 00:00:00 2001 From: swatimadhukar Date: Fri, 10 Jul 2015 10:54:41 -0700 Subject: [PATCH 152/155] Taking care of Code Review. --- AzurePowershell.Test.targets | 4 +-- ChangeLog.txt | 10 ++++++- src/ResourceManager.AzureBackup.sln | 22 --------------- .../Properties/AssemblyInfo.cs | 21 +++++++++++--- .../Cmdlets/Vault/GetAzureBackupVault.cs | 2 +- .../Cmdlets/Vault/NewAzureBackupVault.cs | 2 +- .../Cmdlets/Vault/RemoveAzureBackupVault.cs | 2 +- .../Cmdlets/Vault/SetAzureBackupVault.cs | 2 +- .../GetAzureBackupVaultCredentials.cs | 2 +- .../Commands.AzureBackup.csproj | 28 +++++-------------- .../Helpers/VaultHelpers.cs | 2 +- .../Commands.AzureBackup/packages.config | 4 +-- 12 files changed, 43 insertions(+), 58 deletions(-) delete mode 100644 src/ResourceManager.AzureBackup.sln diff --git a/AzurePowershell.Test.targets b/AzurePowershell.Test.targets index 459a30b6356f..7a5479fb8b6b 100644 --- a/AzurePowershell.Test.targets +++ b/AzurePowershell.Test.targets @@ -7,7 +7,7 @@ .\src\Local.x64.testsettings .\src\Common\Commands.ScenarioTest\bin\Debug\Microsoft.WindowsAzure.Commands.ScenarioTest.dll .\src\Common\Commands.Common.Test\bin\Debug\Microsoft.WindowsAzure.Commands.Common.Test.dll - .\src\ResourceManager\AzureBackup\Commands.AzureBackup.Test\bin\Debug\Microsoft.Azure.Commands.AzureBackup.Test.dll + .\src\ResourceManager\AzureBackup\Commands.AzureBackup.Test\bin\Debug\Microsoft.Azure.Commands.AzureBackup.Test.dll .\src\ResourceManager\Sql\Commands.Sql.Test\bin\Debug\Microsoft.Azure.Commands.Sql.Test.dll .\src\ResourceManager\Compute\Commands.Compute.Test\bin\Debug\Microsoft.Azure.Commands.Compute.dll .\src\ResourceManager\Compute\Commands.Compute.Test\bin\Debug\Microsoft.Azure.Commands.Compute.Test.dll @@ -65,7 +65,7 @@ - + diff --git a/ChangeLog.txt b/ChangeLog.txt index a72bc2486eaa..51ee1314d5f8 100644 --- a/ChangeLog.txt +++ b/ChangeLog.txt @@ -1,4 +1,12 @@ -2015.07.16 version 0.9.5 +2015.07.10 version 1.0.0 +* Azure Backup cmdlets + *Added New-AzureBackupVault cmdlets + *Added Get-AzureBackupVault cmdlets + *Added Set-AzureBackupVault cmdlets + *Added Remove-AzureBackupVault cmdlets + *Added Get-AzureBackupVaultCredential cmdlets + +2015.07.16 version 0.9.5 * Azure Resource Manager cmdlets * Fixed formatting of output for Get-UsageAggregates * Fixed executing Get-UsageAggregates when first cmdlet being called. diff --git a/src/ResourceManager.AzureBackup.sln b/src/ResourceManager.AzureBackup.sln deleted file mode 100644 index 7e69df5fb3c6..000000000000 --- a/src/ResourceManager.AzureBackup.sln +++ /dev/null @@ -1,22 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Express 2013 for Web -VisualStudioVersion = 12.0.31101.0 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Commands.AzureBackup", "ResourceManager\AzureBackup\Commands.AzureBackup\Commands.AzureBackup.csproj", "{6C8D2337-C9D1-4F52-94B3-AB63A19F3453}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {6C8D2337-C9D1-4F52-94B3-AB63A19F3453}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {6C8D2337-C9D1-4F52-94B3-AB63A19F3453}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6C8D2337-C9D1-4F52-94B3-AB63A19F3453}.Release|Any CPU.ActiveCfg = Release|Any CPU - {6C8D2337-C9D1-4F52-94B3-AB63A19F3453}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/Properties/AssemblyInfo.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/Properties/AssemblyInfo.cs index 03491411ad2d..63471bfe0684 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/Properties/AssemblyInfo.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/Properties/AssemblyInfo.cs @@ -1,11 +1,24 @@ -using System.Reflection; +// ---------------------------------------------------------------------------------- +// +// Copyright Microsoft Corporation +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; // General Information about an assembly is controlled through the following // set of attributes. Change these attribute values to modify the information // associated with an assembly. -[assembly: AssemblyTitle("Commands.AzureBackup.Test")] +[assembly: AssemblyTitle("Microsoft.Azure.Commands.AzureBackup.Test")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] @@ -32,5 +45,5 @@ // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] +[assembly: AssemblyVersion(Microsoft.WindowsAzure.Commands.Common.AzurePowerShell.AssemblyVersion)] +[assembly: AssemblyFileVersion(Microsoft.WindowsAzure.Commands.Common.AzurePowerShell.AssemblyFileVersion)] diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/GetAzureBackupVault.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/GetAzureBackupVault.cs index 2b35a3be375d..9f05845750a4 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/GetAzureBackupVault.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/GetAzureBackupVault.cs @@ -23,7 +23,7 @@ namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets { /// - /// API to get azure backup vaults in a subscription + /// Command to get azure backup vaults in a subscription /// [Cmdlet(VerbsCommon.Get, "AzureBackupVault"), OutputType(typeof(AzurePSBackupVault), typeof(List))] public class GetAzureBackupVault : AzureBackupCmdletBase diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/NewAzureBackupVault.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/NewAzureBackupVault.cs index b82a8b57014e..6bc443c4273f 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/NewAzureBackupVault.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/NewAzureBackupVault.cs @@ -20,7 +20,7 @@ namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets { /// - /// API to create an azure backup vault in a subscription + /// Command to create an azure backup vault in a subscription /// [Cmdlet(VerbsCommon.New, "AzureBackupVault"), OutputType(typeof(AzurePSBackupVault))] public class NewAzureBackupVault : AzureBackupCmdletBase diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/RemoveAzureBackupVault.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/RemoveAzureBackupVault.cs index 91d30a0a606f..6124f3a43bed 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/RemoveAzureBackupVault.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/RemoveAzureBackupVault.cs @@ -17,7 +17,7 @@ namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets { /// - /// API to remove an azure backup vault in the subscription + /// Command to remove an azure backup vault in the subscription /// [Cmdlet(VerbsCommon.Remove, "AzureBackupVault")] public class RemoveAzureBackupVault : AzureBackupVaultCmdletBase diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/SetAzureBackupVault.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/SetAzureBackupVault.cs index f12d3d4fa12d..82b01c2e7200 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/SetAzureBackupVault.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/Vault/SetAzureBackupVault.cs @@ -21,7 +21,7 @@ namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets { /// - /// API to update an azure backup vault in a subscription. + /// Command to update an azure backup vault in a subscription. /// [Cmdlet(VerbsCommon.Set, "AzureBackupVault"), OutputType(typeof(CmdletModel.AzurePSBackupVault))] public class SetAzureBackupVault : AzureBackupVaultCmdletBase diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/VaultCredentials/GetAzureBackupVaultCredentials.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/VaultCredentials/GetAzureBackupVaultCredentials.cs index f923eadcb1da..ef4324c83763 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/VaultCredentials/GetAzureBackupVaultCredentials.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/VaultCredentials/GetAzureBackupVaultCredentials.cs @@ -27,7 +27,7 @@ namespace Microsoft.Azure.Commands.AzureBackup.Cmdlets { /// - /// API to download an azure backup vault's credentials. + /// Command to download an azure backup vault's credentials. /// [Cmdlet(VerbsCommon.Get, "AzureBackupVaultCredentials"), OutputType(typeof(string))] public class GetAzureBackupVaultCredentials : AzureBackupVaultCmdletBase diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj index d34c3ca26efe..7b7322805b62 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj @@ -169,25 +169,11 @@ Commands.Common - - - - - This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. - - - - - - - - - - + + + + + + + \ No newline at end of file diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Helpers/VaultHelpers.cs b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Helpers/VaultHelpers.cs index a71fcd718e08..a1d9d69b5b54 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Helpers/VaultHelpers.cs +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Helpers/VaultHelpers.cs @@ -18,7 +18,7 @@ namespace Microsoft.Azure.Commands.AzureBackup.Helpers { - public static class VaultHelpers + internal static class VaultHelpers { /// /// Gets CmdletModel of backup vault from Client model diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/packages.config b/src/ResourceManager/AzureBackup/Commands.AzureBackup/packages.config index 9c795d14cbc9..09f7afbc1e61 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/packages.config +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/packages.config @@ -8,11 +8,11 @@ - + - + \ No newline at end of file From 2ea5bb854b141f74d2aab9abcc11b31363b9ba7f Mon Sep 17 00:00:00 2001 From: swatimadhukar Date: Fri, 10 Jul 2015 11:03:39 -0700 Subject: [PATCH 153/155] Using latest BackupServicesManagement dll 1.0.0.0 --- .../Commands.AzureBackup.Test.csproj | 4 ++-- .../Commands.AzureBackup.Test/packages.config | 2 +- .../Commands.AzureBackup.csproj | 20 +++++++++---------- .../Commands.AzureBackup/packages.config | 2 +- 4 files changed, 14 insertions(+), 14 deletions(-) diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/Commands.AzureBackup.Test.csproj b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/Commands.AzureBackup.Test.csproj index 711601628a13..12977a420ca1 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/Commands.AzureBackup.Test.csproj +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/Commands.AzureBackup.Test.csproj @@ -39,9 +39,9 @@ False ..\..\..\packages\Microsoft.Azure.Common.Authentication.1.0.27-preview\lib\net45\Microsoft.Azure.Common.Authentication.dll - + False - ..\..\..\packages\Microsoft.Azure.Management.BackupServices.0.6.0-preview\lib\net40\Microsoft.Azure.Management.BackupServicesManagement.dll + ..\..\..\packages\Microsoft.Azure.Management.BackupServices.1.0.0-preview\lib\net40\Microsoft.Azure.Management.BackupServicesManagement.dll False diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/packages.config b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/packages.config index 02c953d8b272..ec8ef520b0bd 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/packages.config +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/packages.config @@ -4,7 +4,7 @@ - + diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj index 7b7322805b62..b581a19ef2a3 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/Commands.AzureBackup.csproj @@ -37,7 +37,7 @@ AnyCPU prompt MinimumRecommendedRules.ruleset - true + true MSSharedLibKey.snk true false @@ -56,9 +56,9 @@ ..\..\..\packages\Microsoft.Azure.Common.2.1.0\lib\net45\Microsoft.Azure.Common.NetFramework.dll - + False - ..\..\..\packages\Microsoft.Azure.Management.BackupServices.0.6.0-preview\lib\net40\Microsoft.Azure.Management.BackupServicesManagement.dll + ..\..\..\packages\Microsoft.Azure.Management.BackupServices.1.0.0-preview\lib\net40\Microsoft.Azure.Management.BackupServicesManagement.dll ..\..\..\packages\Microsoft.IdentityModel.Clients.ActiveDirectory.2.14.201151115\lib\net45\Microsoft.IdentityModel.Clients.ActiveDirectory.dll @@ -169,11 +169,11 @@ Commands.Common - - - - - - - + + + + + + + \ No newline at end of file diff --git a/src/ResourceManager/AzureBackup/Commands.AzureBackup/packages.config b/src/ResourceManager/AzureBackup/Commands.AzureBackup/packages.config index 09f7afbc1e61..7cf80c93199a 100644 --- a/src/ResourceManager/AzureBackup/Commands.AzureBackup/packages.config +++ b/src/ResourceManager/AzureBackup/Commands.AzureBackup/packages.config @@ -4,7 +4,7 @@ - + From 795cac2deb33383854503ba1ac2ffc09891f3c1f Mon Sep 17 00:00:00 2001 From: swatimadhukar Date: Fri, 10 Jul 2015 11:26:34 -0700 Subject: [PATCH 154/155] azurecmdfiles.wxi changes --- setup/azurecmdfiles.wxi | 336 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 336 insertions(+) diff --git a/setup/azurecmdfiles.wxi b/setup/azurecmdfiles.wxi index 46fe488eb9e4..ef6737be3aae 100644 --- a/setup/azurecmdfiles.wxi +++ b/setup/azurecmdfiles.wxi @@ -44,6 +44,15 @@ + + + + + + + + + @@ -89,6 +98,9 @@ + + + @@ -245,6 +257,15 @@ + + + + + + + + + @@ -284,6 +305,9 @@ + + + @@ -394,6 +418,15 @@ + + + + + + + + + @@ -481,6 +514,9 @@ + + + @@ -723,6 +759,15 @@ + + + + + + + + + @@ -780,6 +825,9 @@ + + + @@ -812,6 +860,15 @@ + + + + + + + + + @@ -839,6 +896,9 @@ + + + @@ -865,6 +925,15 @@ + + + + + + + + + @@ -886,6 +955,9 @@ + + + @@ -954,6 +1026,15 @@ + + + + + + + + + @@ -996,6 +1077,9 @@ + + + @@ -1345,6 +1429,15 @@ + + + + + + + + + @@ -1399,6 +1492,9 @@ + + + @@ -1425,6 +1521,15 @@ + + + + + + + + + @@ -1461,6 +1566,9 @@ + + + @@ -1478,6 +1586,15 @@ + + + + + + + + + @@ -1541,6 +1658,9 @@ + + + @@ -1677,6 +1797,15 @@ + + + + + + + + + @@ -1722,6 +1851,9 @@ + + + @@ -1748,6 +1880,15 @@ + + + + + + + + + @@ -1799,6 +1940,9 @@ + + + @@ -2071,6 +2215,15 @@ + + + + + + + + + @@ -2212,6 +2365,9 @@ + + + @@ -2297,6 +2453,15 @@ + + + + + + + + + @@ -2360,6 +2525,9 @@ + + + @@ -2413,6 +2581,15 @@ + + + + + + + + + @@ -2524,6 +2701,9 @@ + + + @@ -2550,6 +2730,15 @@ + + + + + + + + + @@ -2673,6 +2862,9 @@ + + + @@ -2973,6 +3165,15 @@ + + + + + + + + + @@ -3027,6 +3228,9 @@ + + + @@ -3074,6 +3278,15 @@ + + + + + + + + + @@ -3194,6 +3407,9 @@ + + + @@ -3454,6 +3670,15 @@ + + + + + + + + + @@ -3595,6 +3820,9 @@ + + + @@ -3612,6 +3840,15 @@ + + + + + + + + + @@ -3675,6 +3912,9 @@ + + + @@ -3760,6 +4000,15 @@ + + + + + + + + + @@ -3805,6 +4054,9 @@ + + + @@ -3825,6 +4077,9 @@ + + + @@ -3840,6 +4095,7 @@ + @@ -3890,6 +4146,9 @@ + + + @@ -3903,6 +4162,7 @@ + @@ -3939,6 +4199,9 @@ + + + @@ -3968,6 +4231,7 @@ + @@ -4038,6 +4302,9 @@ + + + @@ -4057,6 +4324,7 @@ + @@ -4067,6 +4335,9 @@ + + + @@ -4076,6 +4347,7 @@ + @@ -4084,6 +4356,9 @@ + + + @@ -4091,6 +4366,7 @@ + @@ -4113,6 +4389,9 @@ + + + @@ -4127,6 +4406,7 @@ + @@ -4240,6 +4520,9 @@ + + + @@ -4258,6 +4541,7 @@ + @@ -4266,6 +4550,9 @@ + + + @@ -4278,11 +4565,15 @@ + + + + @@ -4304,6 +4595,7 @@ + @@ -4348,6 +4640,9 @@ + + + @@ -4363,6 +4658,7 @@ + @@ -4371,6 +4667,9 @@ + + + @@ -4388,6 +4687,7 @@ + @@ -4474,6 +4774,9 @@ + + + @@ -4521,6 +4824,7 @@ + @@ -4548,6 +4852,9 @@ + + + @@ -4569,6 +4876,7 @@ + @@ -4586,6 +4894,9 @@ + + + @@ -4623,6 +4934,7 @@ + @@ -4631,6 +4943,9 @@ + + + @@ -4672,6 +4987,7 @@ + @@ -4760,6 +5076,9 @@ + + + @@ -4778,6 +5097,7 @@ + @@ -4793,6 +5113,9 @@ + + + @@ -4833,6 +5156,7 @@ + @@ -4909,6 +5233,9 @@ + + + @@ -4956,11 +5283,15 @@ + + + + @@ -4982,6 +5313,7 @@ + @@ -5009,6 +5341,9 @@ + + + @@ -5024,6 +5359,7 @@ + From f175118b2f2699b6276b45e7aa824ee5b82b2887 Mon Sep 17 00:00:00 2001 From: swatimadhukar Date: Fri, 10 Jul 2015 11:48:54 -0700 Subject: [PATCH 155/155] Adding missed comma --- .../Resources/Commands.Resources/AzureResourceManager.psd1 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ResourceManager/Resources/Commands.Resources/AzureResourceManager.psd1 b/src/ResourceManager/Resources/Commands.Resources/AzureResourceManager.psd1 index ce5d4deec890..389e535075f2 100644 --- a/src/ResourceManager/Resources/Commands.Resources/AzureResourceManager.psd1 +++ b/src/ResourceManager/Resources/Commands.Resources/AzureResourceManager.psd1 @@ -101,7 +101,7 @@ NestedModules = @( '.\StorageManagement\Microsoft.Azure.Commands.Management.Storage.dll', '.\OperationalInsights\Microsoft.Azure.Commands.OperationalInsights.dll', '.\UsageAggregates\Microsoft.Azure.Commands.UsageAggregates.dll', - '.\ApiManagement\Microsoft.Azure.Commands.ApiManagement.ServiceManagement.dll' + '.\ApiManagement\Microsoft.Azure.Commands.ApiManagement.ServiceManagement.dll', '.\AzureBackup\Microsoft.Azure.Commands.AzureBackup.dll' )