diff --git a/src/ResourceManager/RecoveryServices/Commands.RecoveryServices.Backup.Helpers/ServiceClientHelpers.cs b/src/ResourceManager/RecoveryServices/Commands.RecoveryServices.Backup.Helpers/ServiceClientHelpers.cs
index 07acea7e5bbf..b6ab24a37197 100644
--- a/src/ResourceManager/RecoveryServices/Commands.RecoveryServices.Backup.Helpers/ServiceClientHelpers.cs
+++ b/src/ResourceManager/RecoveryServices/Commands.RecoveryServices.Backup.Helpers/ServiceClientHelpers.cs
@@ -76,6 +76,9 @@ public static string GetServiceClientProviderType(CmdletModel.WorkloadType workl
case CmdletModel.WorkloadType.AzureFiles:
providerType = ServiceClientModel.BackupManagementType.AzureStorage.ToString();
break;
+ case CmdletModel.WorkloadType.MSSQL:
+ providerType = ServiceClientModel.BackupManagementType.AzureWorkload.ToString();
+ break;
default:
break;
}
@@ -353,4 +356,4 @@ public static string GetServiceClientWorkloadType(CmdletModel.WorkloadType workl
return serviceClientWorkloadType;
}
}
-}
+}
\ No newline at end of file
diff --git a/src/ResourceManager/RecoveryServices/Commands.RecoveryServices.Backup.Models/AzureWorkloadModels/AzureWorkloadSQLDatabaseProtectedItem.cs b/src/ResourceManager/RecoveryServices/Commands.RecoveryServices.Backup.Models/AzureWorkloadModels/AzureWorkloadSQLDatabaseProtectedItem.cs
new file mode 100644
index 000000000000..f0857f870aeb
--- /dev/null
+++ b/src/ResourceManager/RecoveryServices/Commands.RecoveryServices.Backup.Models/AzureWorkloadModels/AzureWorkloadSQLDatabaseProtectedItem.cs
@@ -0,0 +1,93 @@
+// ----------------------------------------------------------------------------------
+//
+// 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.RecoveryServices.Backup.Models;
+
+namespace Microsoft.Azure.Commands.RecoveryServices.Backup.Cmdlets.Models
+{
+ ///
+ /// Azure sql database workload Item Class
+ ///
+ public class AzureWorkloadSQLDatabaseProtectedItem : AzureItem
+ {
+ ///
+ /// friendly name of the DB represented by this backup item.
+ ///
+ public string FriendlyName { get; set; }
+
+ ///
+ /// host/Cluster Name for instance or AG.
+ ///
+ public string ServerName { get; set; }
+
+ ///
+ /// parent name of the DB such as Instance or Availability Group.
+ ///
+ public string ParentName { get; set; }
+
+ ///
+ /// protected item, example: for a DB, standalone server
+ /// or distributed.
+ ///
+ public string ParentType { get; set; }
+
+ ///
+ /// error details in last backup
+ ///
+ public ErrorDetail LastBackupErrorDetail { get; set; }
+
+ ///
+ ///ID of the protected item.
+ ///
+ public string ProtectedItemDataSourceId { get; set; }
+
+ ///
+ /// health status of the backup item
+ ///
+ public string ProtectedItemHealthStatus { get; set; }
+
+ ///
+ /// Constructor. Takes the service client object representing the protected item
+ /// and converts it in to the PS protected item model
+ ///
+ /// Service client object representing the protected item resource
+ /// Name of the container associated with this protected item
+ /// Type of the container associated with this protected item
+ /// Name of the protection policy associated with this protected item
+ public AzureWorkloadSQLDatabaseProtectedItem(ProtectedItemResource protectedItemResource,
+ string containerName, ContainerType containerType, string policyName)
+ : base(protectedItemResource, containerName, containerType, policyName)
+ {
+ AzureVmWorkloadSQLDatabaseProtectedItem protectedItem = (AzureVmWorkloadSQLDatabaseProtectedItem)protectedItemResource.Properties;
+ FriendlyName = protectedItem.FriendlyName;
+ ServerName = protectedItem.ServerName;
+ ParentName = protectedItem.ParentName;
+ ParentType = protectedItem.ParentType;
+ LastBackupErrorDetail = protectedItem.LastBackupErrorDetail;
+ ProtectedItemDataSourceId = protectedItem.ProtectedItemDataSourceId;
+ ProtectedItemHealthStatus = protectedItem.ProtectedItemHealthStatus;
+ LastBackupStatus = protectedItem.LastBackupStatus;
+ LastBackupTime = protectedItem.LastBackupTime;
+ ProtectionState =
+ EnumUtils.GetEnum(protectedItem.ProtectionState.ToString());
+ ProtectionStatus = EnumUtils.GetEnum(protectedItem.ProtectionStatus);
+ }
+ }
+
+ ///
+ /// Azure Workload Item ExtendedInfo Class
+ ///
+ public class AzureWorkloadSQLDatabaseProtectedItemExtendedInfo : AzureItemExtendedInfo
+ { }
+}
\ No newline at end of file
diff --git a/src/ResourceManager/RecoveryServices/Commands.RecoveryServices.Backup.Models/CmdletParamEnums.cs b/src/ResourceManager/RecoveryServices/Commands.RecoveryServices.Backup.Models/CmdletParamEnums.cs
index 8c7821e52dea..7991b70aeb74 100644
--- a/src/ResourceManager/RecoveryServices/Commands.RecoveryServices.Backup.Models/CmdletParamEnums.cs
+++ b/src/ResourceManager/RecoveryServices/Commands.RecoveryServices.Backup.Models/CmdletParamEnums.cs
@@ -98,6 +98,8 @@ public enum ItemParams
BackupManagementType,
ExpiryDateTimeUTC,
StorageAccountName,
+ BackupType,
+ EnableCompression
}
public enum ProtectionCheckParams
diff --git a/src/ResourceManager/RecoveryServices/Commands.RecoveryServices.Backup.Models/CommonModels/Enums.cs b/src/ResourceManager/RecoveryServices/Commands.RecoveryServices.Backup.Models/CommonModels/Enums.cs
index 1ac388827f41..86a2424148b4 100644
--- a/src/ResourceManager/RecoveryServices/Commands.RecoveryServices.Backup.Models/CommonModels/Enums.cs
+++ b/src/ResourceManager/RecoveryServices/Commands.RecoveryServices.Backup.Models/CommonModels/Enums.cs
@@ -37,7 +37,12 @@ public enum ContainerType
///
/// Represents any Azure Storage containers.
///
- AzureStorage
+ AzureStorage,
+
+ ///
+ /// Represents any Azure Workload containers.
+ ///
+ AzureWorkload
}
///
@@ -70,6 +75,7 @@ public enum BackupManagementType
/// Represents Azure File Storage. https://docs.microsoft.com/en-in/azure/storage/files/storage-files-introduction
///
AzureStorage,
+ AzureWorkload,
}
///
@@ -103,6 +109,7 @@ public enum WorkloadType
/// Represents Azure File https://docs.microsoft.com/en-in/azure/storage/files/storage-files-introduction
///
AzureFiles,
+ MSSQL,
}
///
@@ -134,6 +141,7 @@ public enum PsBackupProviderTypes
/// Represents the Azure File provider for powershell cmdlets.
///
AzureFiles,
+ AzureWorkload,
}
///
@@ -334,4 +342,15 @@ public enum SourceFileType
File,
Directory
}
-}
+
+ ///
+ /// Type of the backup.
+ ///
+ public enum BackupType
+ {
+ Full,
+ Differential,
+ Log,
+ CopyOnlyFull
+ }
+}
\ No newline at end of file
diff --git a/src/ResourceManager/RecoveryServices/Commands.RecoveryServices.Backup.Models/CommonModels/Utils.cs b/src/ResourceManager/RecoveryServices/Commands.RecoveryServices.Backup.Models/CommonModels/Utils.cs
index 526188855a4f..cb5930140587 100644
--- a/src/ResourceManager/RecoveryServices/Commands.RecoveryServices.Backup.Models/CommonModels/Utils.cs
+++ b/src/ResourceManager/RecoveryServices/Commands.RecoveryServices.Backup.Models/CommonModels/Utils.cs
@@ -218,6 +218,8 @@ public static BackupManagementType GetPsBackupManagementType(string backupManage
return BackupManagementType.AzureSQL;
case ServiceClientModel.BackupManagementType.AzureStorage:
return BackupManagementType.AzureStorage;
+ case ServiceClientModel.BackupManagementType.AzureWorkload:
+ return BackupManagementType.AzureWorkload;
default:
throw new Exception("Unsupported BackupManagmentType: " + backupManagementType);
}
@@ -248,6 +250,11 @@ public static ContainerType GetPsContainerType(string containerType)
{
return ContainerType.AzureStorage;
}
+ else if (containerType ==
+ ServiceClientModel.BackupManagementType.AzureWorkload)
+ {
+ return ContainerType.AzureWorkload;
+ }
else
{
throw new Exception("Unsupported ContainerType: " + containerType);
@@ -265,14 +272,18 @@ public static WorkloadType GetPsWorkloadType(string workloadType)
{
return WorkloadType.AzureVM;
}
- if (workloadType == ServiceClientModel.WorkloadType.AzureSqlDb.ToString())
+ else if (workloadType == ServiceClientModel.WorkloadType.AzureSqlDb.ToString())
{
return WorkloadType.AzureSQLDatabase;
}
- if (workloadType == ServiceClientModel.WorkloadType.AzureFileShare)
+ else if (workloadType == ServiceClientModel.WorkloadType.AzureFileShare)
{
return WorkloadType.AzureFiles;
}
+ else if (workloadType == ServiceClientModel.WorkloadType.SQLDataBase)
+ {
+ return WorkloadType.MSSQL;
+ }
else
{
throw new Exception("Unsupported WorkloadType: " + workloadType);
@@ -290,14 +301,18 @@ public static string GetServiceClientWorkloadType(string workloadType)
{
return ServiceClientModel.WorkloadType.VM;
}
- if (workloadType == WorkloadType.AzureSQLDatabase.ToString())
+ else if (workloadType == WorkloadType.AzureSQLDatabase.ToString())
{
return ServiceClientModel.WorkloadType.AzureSqlDb;
}
- if (workloadType == WorkloadType.AzureFiles.ToString())
+ else if (workloadType == WorkloadType.AzureFiles.ToString())
{
return ServiceClientModel.WorkloadType.AzureFileShare;
}
+ else if (workloadType == WorkloadType.MSSQL.ToString())
+ {
+ return ServiceClientModel.WorkloadType.SQLDataBase;
+ }
else
{
throw new Exception("Unsupported WorkloadType: " + workloadType);
@@ -315,10 +330,14 @@ public static string GetARMResourceType(string workloadType)
{
return "Microsoft.Compute/virtualMachines";
}
- if (workloadType == WorkloadType.AzureFiles.ToString())
+ else if (workloadType == WorkloadType.AzureFiles.ToString())
{
return "Microsoft.Storage/storageAccounts";
}
+ else if (workloadType == WorkloadType.MSSQL.ToString())
+ {
+ return "VMAppContainer";
+ }
throw new Exception("Unsupported WorkloadType: " + workloadType);
}
@@ -335,12 +354,16 @@ public static string GetWorkloadTypeFromArmType(string armType)
{
return WorkloadType.AzureVM.ToString();
}
- if (string.Compare(armType, "Microsoft.Storage/storageAccounts", ignoreCase: true) == 0)
+ else if (string.Compare(armType, "Microsoft.Storage/storageAccounts", ignoreCase: true) == 0)
{
return WorkloadType.AzureFiles.ToString();
}
+ else if (string.Compare(armType, "VMAppContainer", ignoreCase: true) == 0)
+ {
+ return WorkloadType.MSSQL.ToString();
+ }
throw new Exception("Unsupported ArmType: " + armType);
}
}
-}
+}
\ No newline at end of file
diff --git a/src/ResourceManager/RecoveryServices/Commands.RecoveryServices.Backup.Providers/Commands.RecoveryServices.Backup.Providers.csproj b/src/ResourceManager/RecoveryServices/Commands.RecoveryServices.Backup.Providers/Commands.RecoveryServices.Backup.Providers.csproj
new file mode 100644
index 000000000000..a7c0bb54ea7e
--- /dev/null
+++ b/src/ResourceManager/RecoveryServices/Commands.RecoveryServices.Backup.Providers/Commands.RecoveryServices.Backup.Providers.csproj
@@ -0,0 +1,93 @@
+
+
+
+
+
+ Debug
+ AnyCPU
+ {02234E90-BCDE-4B20-B1F5-01B1005821DB}
+ Library
+ Properties
+ Microsoft.Azure.Commands.RecoveryServices.Backup.Providers
+ Microsoft.Azure.Commands.RecoveryServices.Backup.Providers
+ v4.5.2
+ 512
+ ..\
+
+
+ true
+ full
+ false
+ bin\Debug\
+ DEBUG;TRACE
+ prompt
+ 4
+
+
+ pdbonly
+ true
+ bin\Release\
+ prompt
+ 4
+ TRACE;SIGN
+ true
+ MSSharedLibKey.snk
+ true
+ false
+
+
+
+ False
+ ..\..\..\packages\Microsoft.Azure.Management.RecoveryServices.Backup.3.0.1-preview\lib\net452\Microsoft.Azure.Management.RecoveryServices.Backup.dll
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {142d7b0b-388a-4ceb-a228-7f6d423c5c2e}
+ Commands.Profile
+
+
+ {0e1d3f36-e6c8-4764-8c7d-6f9ee537490c}
+ Commands.RecoveryServices.Backup.Helpers
+
+
+ {5e675749-6139-464a-904c-59c0ffdfec82}
+ Commands.RecoveryServices.Backup.Logger
+
+
+ {30b92759-50b3-494e-b9f0-ec9a2ce9d57b}
+ Commands.RecoveryServices.Backup.Models
+
+
+ {b758fec1-35c1-4f93-a954-66dd33f6e0ec}
+ Commands.RecoveryServices.Backup.ServiceClientAdapter
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/ResourceManager/RecoveryServices/Commands.RecoveryServices.Backup.Providers/Providers/AzureFilesPsBackupProvider.cs b/src/ResourceManager/RecoveryServices/Commands.RecoveryServices.Backup.Providers/Providers/AzureFilesPsBackupProvider.cs
index cd54f4a273cf..a0c6bbd89876 100644
--- a/src/ResourceManager/RecoveryServices/Commands.RecoveryServices.Backup.Providers/Providers/AzureFilesPsBackupProvider.cs
+++ b/src/ResourceManager/RecoveryServices/Commands.RecoveryServices.Backup.Providers/Providers/AzureFilesPsBackupProvider.cs
@@ -17,7 +17,6 @@
using Microsoft.Azure.Commands.RecoveryServices.Backup.Helpers;
using Microsoft.Azure.Commands.RecoveryServices.Backup.Properties;
using Microsoft.Azure.Management.Internal.Resources.Models;
-using Microsoft.Azure.Management.Internal.Resources.Utilities.Models;
using Microsoft.Azure.Management.RecoveryServices.Backup.Models;
using Microsoft.Rest.Azure.OData;
using System;
diff --git a/src/ResourceManager/RecoveryServices/Commands.RecoveryServices.Backup.Providers/Providers/AzureWorkloadPsBackupProvider.cs b/src/ResourceManager/RecoveryServices/Commands.RecoveryServices.Backup.Providers/Providers/AzureWorkloadPsBackupProvider.cs
new file mode 100644
index 000000000000..09fc057b5f76
--- /dev/null
+++ b/src/ResourceManager/RecoveryServices/Commands.RecoveryServices.Backup.Providers/Providers/AzureWorkloadPsBackupProvider.cs
@@ -0,0 +1,154 @@
+// ----------------------------------------------------------------------------------
+//
+// 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.RecoveryServices.Backup.Cmdlets.Models;
+using Microsoft.Azure.Commands.RecoveryServices.Backup.Cmdlets.ServiceClientAdapterNS;
+using Microsoft.Azure.Management.RecoveryServices.Backup.Models;
+using System;
+using System.Collections.Generic;
+using CmdletModel = Microsoft.Azure.Commands.RecoveryServices.Backup.Cmdlets.Models;
+using RestAzureNS = Microsoft.Rest.Azure;
+
+namespace Microsoft.Azure.Commands.RecoveryServices.Backup.Cmdlets.ProviderModel
+{
+ ///
+ /// This class implements methods for azure DB Workload backup provider
+ ///
+ public class AzureWorkloadPsBackupProvider : IPsBackupProvider
+ {
+ private const int defaultOperationStatusRetryTimeInMilliSec = 5 * 1000; // 5 sec
+ private const string separator = ";";
+ private const CmdletModel.RetentionDurationType defaultFileRetentionType =
+ CmdletModel.RetentionDurationType.Days;
+ private const int defaultFileRetentionCount = 30;
+ Dictionary ProviderData { get; set; }
+ ServiceClientAdapter ServiceClientAdapter { get; set; }
+ AzureWorkloadProviderHelper AzureWorkloadProviderHelper { get; set; }
+ ///
+ /// Initializes the provider with the data recieved from the cmdlet layer
+ ///
+ /// Data from the cmdlet layer intended for the provider
+ /// Service client adapter for communicating with the backend service
+ public void Initialize(Dictionary providerData, ServiceClientAdapter serviceClientAdapter)
+ {
+ ProviderData = providerData;
+ ServiceClientAdapter = serviceClientAdapter;
+ AzureWorkloadProviderHelper = new AzureWorkloadProviderHelper(ServiceClientAdapter);
+ }
+
+ public ResourceBackupStatus CheckBackupStatus()
+ {
+ throw new NotImplementedException();
+ }
+
+ public ProtectionPolicyResource CreatePolicy()
+ {
+ throw new NotImplementedException();
+ }
+
+ public RestAzureNS.AzureOperationResponse DisableProtection()
+ {
+ throw new NotImplementedException();
+ }
+
+ public RestAzureNS.AzureOperationResponse EnableProtection()
+ {
+ throw new NotImplementedException();
+ }
+
+ public RetentionPolicyBase GetDefaultRetentionPolicyObject()
+ {
+ throw new NotImplementedException();
+ }
+
+ public SchedulePolicyBase GetDefaultSchedulePolicyObject()
+ {
+ throw new NotImplementedException();
+ }
+
+ public ProtectedItemResource GetProtectedItem()
+ {
+ throw new NotImplementedException();
+ }
+
+ public RecoveryPointBase GetRecoveryPointDetails()
+ {
+ throw new NotImplementedException();
+ }
+
+ public List ListBackupManagementServers()
+ {
+ throw new NotImplementedException();
+ }
+
+ public List ListProtectedItems()
+ {
+ throw new NotImplementedException();
+ }
+
+ public List ListProtectionContainers()
+ {
+ throw new NotImplementedException();
+ }
+
+ public List ListRecoveryPoints()
+ {
+ throw new NotImplementedException();
+ }
+
+ public RestAzureNS.AzureOperationResponse ModifyPolicy()
+ {
+ throw new NotImplementedException();
+ }
+
+ public RPMountScriptDetails ProvisionItemLevelRecoveryAccess()
+ {
+ throw new NotImplementedException();
+ }
+
+ public void RevokeItemLevelRecoveryAccess()
+ {
+ throw new NotImplementedException();
+ }
+
+ public RestAzureNS.AzureOperationResponse TriggerBackup()
+ {
+ string vaultName = (string)ProviderData[VaultParams.VaultName];
+ string vaultResourceGroupName = (string)ProviderData[VaultParams.ResourceGroupName];
+ ItemBase item = (ItemBase)ProviderData[ItemParams.Item];
+ DateTime? expiryDateTime = (DateTime?)ProviderData[ItemParams.ExpiryDateTimeUTC];
+ string backupType = ProviderData[ItemParams.BackupType].ToString();
+ bool enableCompression = (bool)ProviderData[ItemParams.EnableCompression];
+ AzureWorkloadSQLDatabaseProtectedItem azureWorkloadProtectedItem = item as AzureWorkloadSQLDatabaseProtectedItem;
+ BackupRequestResource triggerBackupRequest = new BackupRequestResource();
+ AzureWorkloadBackupRequest azureWorkloadBackupRequest = new AzureWorkloadBackupRequest();
+ azureWorkloadBackupRequest.RecoveryPointExpiryTimeInUTC = expiryDateTime;
+ azureWorkloadBackupRequest.BackupType = backupType;
+ azureWorkloadBackupRequest.EnableCompression = enableCompression;
+ triggerBackupRequest.Properties = azureWorkloadBackupRequest;
+
+ return ServiceClientAdapter.TriggerBackup(
+ IdUtils.GetValueByName(azureWorkloadProtectedItem.Id, IdUtils.IdNames.ProtectionContainerName),
+ IdUtils.GetValueByName(azureWorkloadProtectedItem.Id, IdUtils.IdNames.ProtectedItemName),
+ triggerBackupRequest,
+ vaultName: vaultName,
+ resourceGroupName: vaultResourceGroupName);
+ }
+
+ public RestAzureNS.AzureOperationResponse TriggerRestore()
+ {
+ throw new NotImplementedException();
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/ResourceManager/RecoveryServices/Commands.RecoveryServices.Backup.Providers/PsBackupProviderManager.cs b/src/ResourceManager/RecoveryServices/Commands.RecoveryServices.Backup.Providers/PsBackupProviderManager.cs
index 3495a997a853..d241d3e99a05 100644
--- a/src/ResourceManager/RecoveryServices/Commands.RecoveryServices.Backup.Providers/PsBackupProviderManager.cs
+++ b/src/ResourceManager/RecoveryServices/Commands.RecoveryServices.Backup.Providers/PsBackupProviderManager.cs
@@ -215,6 +215,16 @@ public IPsBackupProvider GetProviderInstance(
}
psProviderType = PsBackupProviderTypes.AzureFiles;
break;
+ case WorkloadType.MSSQL:
+ if (backupManagementType.HasValue &&
+ backupManagementType != BackupManagementType.AzureWorkload)
+ {
+ throw new ArgumentException(
+ string.Format(Resources.BackupManagementTypeNotExpectedForWorkloadType,
+ workloadType.ToString()));
+ }
+ psProviderType = PsBackupProviderTypes.AzureWorkload;
+ break;
default:
throw new ArgumentException(
string.Format(Resources.UnsupportedWorkloadTypeException,
@@ -248,6 +258,9 @@ public IPsBackupProvider GetProviderInstance(PsBackupProviderTypes providerType)
case PsBackupProviderTypes.AzureFiles:
psBackupProvider = new AzureFilesPsBackupProvider();
break;
+ case PsBackupProviderTypes.AzureWorkload:
+ psBackupProvider = new AzureWorkloadPsBackupProvider();
+ break;
default:
break;
}
@@ -277,4 +290,4 @@ public IPsBackupProvider GetProviderInstance(string resourceType)
}
}
}
-}
+}
\ No newline at end of file
diff --git a/src/ResourceManager/RecoveryServices/Commands.RecoveryServices.Backup.Test/ScenarioTests/AzureWorkload/ItemTests.cs b/src/ResourceManager/RecoveryServices/Commands.RecoveryServices.Backup.Test/ScenarioTests/AzureWorkload/ItemTests.cs
new file mode 100644
index 000000000000..5e2158261833
--- /dev/null
+++ b/src/ResourceManager/RecoveryServices/Commands.RecoveryServices.Backup.Test/ScenarioTests/AzureWorkload/ItemTests.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 Microsoft.Azure.Commands.RecoveryServices.Backup.Cmdlets.Models;
+using Microsoft.WindowsAzure.Commands.ScenarioTest;
+using Microsoft.WindowsAzure.Commands.Test.Utilities.Common;
+using Xunit;
+
+namespace Microsoft.Azure.Commands.RecoveryServices.Backup.Test.ScenarioTests
+{
+ public partial class ItemTests : RMTestBase
+ {
+ [Fact]
+ [Trait(Category.AcceptanceType, Category.CheckIn)]
+ [Trait(TestConstants.Workload, TestConstants.AzureVmWorkload)]
+ public void TestAzureVmWorkloadBackupItem()
+ {
+ TestController.NewInstance.RunPsTest(
+ _logger, PsBackupProviderTypes.AzureWorkload, "Test-AzureVmWorkloadBackupItem");
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/ResourceManager/RecoveryServices/Commands.RecoveryServices.Backup.Test/ScenarioTests/AzureWorkload/ItemTests.ps1 b/src/ResourceManager/RecoveryServices/Commands.RecoveryServices.Backup.Test/ScenarioTests/AzureWorkload/ItemTests.ps1
new file mode 100644
index 000000000000..06448fd28c7a
--- /dev/null
+++ b/src/ResourceManager/RecoveryServices/Commands.RecoveryServices.Backup.Test/ScenarioTests/AzureWorkload/ItemTests.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.
+# ----------------------------------------------------------------------------------
+
+function Test-AzureVmWorkloadBackupItem
+{
+ try
+ {
+ Get-AzureRmRecoveryServicesVault -ResourceGroupName 'shracrg' -Name 'shracsql' | Set-AzureRmRecoveryServicesVaultContext
+ Backup-AzureRmRecoveryServicesBackupItem -BackupType "Full" -EnableCompression
+ }
+ finally
+ {
+
+ }
+}
\ No newline at end of file
diff --git a/src/ResourceManager/RecoveryServices/Commands.RecoveryServices.Backup.Test/TestConstants.cs b/src/ResourceManager/RecoveryServices/Commands.RecoveryServices.Backup.Test/TestConstants.cs
index ed14871dd2d9..4dc07218666f 100644
--- a/src/ResourceManager/RecoveryServices/Commands.RecoveryServices.Backup.Test/TestConstants.cs
+++ b/src/ResourceManager/RecoveryServices/Commands.RecoveryServices.Backup.Test/TestConstants.cs
@@ -30,5 +30,7 @@ public class TestConstants
public const string MAB = "MAB";
public const string AzureFS = "AzureFS";
+
+ public const string AzureVmWorkload = "AzureVmWorkload";
}
}
diff --git a/src/ResourceManager/RecoveryServices/Commands.RecoveryServices.Backup/Cmdlets/Backup/BackupAzureRmRecoveryServicesBackupItem.cs b/src/ResourceManager/RecoveryServices/Commands.RecoveryServices.Backup/Cmdlets/Backup/BackupAzureRmRecoveryServicesBackupItem.cs
index 7da0ea499f26..bf29efcc5077 100644
--- a/src/ResourceManager/RecoveryServices/Commands.RecoveryServices.Backup/Cmdlets/Backup/BackupAzureRmRecoveryServicesBackupItem.cs
+++ b/src/ResourceManager/RecoveryServices/Commands.RecoveryServices.Backup/Cmdlets/Backup/BackupAzureRmRecoveryServicesBackupItem.cs
@@ -12,13 +12,13 @@
// limitations under the License.
// ----------------------------------------------------------------------------------
-using System;
-using System.Collections.Generic;
-using System.Management.Automation;
using Microsoft.Azure.Commands.RecoveryServices.Backup.Cmdlets.Models;
using Microsoft.Azure.Commands.RecoveryServices.Backup.Cmdlets.ProviderModel;
using Microsoft.Azure.Commands.RecoveryServices.Backup.Properties;
using Microsoft.Azure.Management.Internal.Resources.Utilities.Models;
+using System;
+using System.Collections.Generic;
+using System.Management.Automation;
namespace Microsoft.Azure.Commands.RecoveryServices.Backup.Cmdlets
{
@@ -26,7 +26,7 @@ namespace Microsoft.Azure.Commands.RecoveryServices.Backup.Cmdlets
/// Enables backup of an item protected by the recovery services vault.
/// Returns the corresponding job created in the service to track this backup operation.
///
- [Cmdlet("Backup", ResourceManager.Common.AzureRMConstants.AzureRMPrefix + "RecoveryServicesBackupItem", SupportsShouldProcess = true),OutputType(typeof(JobBase))]
+ [Cmdlet("Backup", ResourceManager.Common.AzureRMConstants.AzureRMPrefix + "RecoveryServicesBackupItem", SupportsShouldProcess = true), OutputType(typeof(JobBase))]
public class BackupAzureRmRecoveryServicesBackupItem : RSBackupVaultCmdletBase
{
///
@@ -45,6 +45,22 @@ public class BackupAzureRmRecoveryServicesBackupItem : RSBackupVaultCmdletBase
[ValidateNotNullOrEmpty]
public DateTime? ExpiryDateTimeUTC { get; set; }
+ ///
+ /// The protected item on which backup has to be triggered.
+ ///
+ [Parameter(Mandatory = false, HelpMessage = ParamHelpMsgs.Item.BackupType,
+ ValueFromPipeline = false)]
+ [ValidateNotNullOrEmpty]
+ public BackupType BackupType { get; set; }
+
+ ///
+ /// The protected item on which backup has to be triggered.
+ ///
+ [Parameter(Mandatory = false, HelpMessage = ParamHelpMsgs.Item.EnableCompression,
+ ValueFromPipeline = false)]
+ [ValidateNotNullOrEmpty]
+ public SwitchParameter EnableCompression { get; set; }
+
public override void ExecuteCmdlet()
{
ExecutionBlock(() =>
@@ -62,6 +78,8 @@ public override void ExecuteCmdlet()
{VaultParams.ResourceGroupName, resourceGroupName},
{ItemParams.Item, Item},
{ItemParams.ExpiryDateTimeUTC, ExpiryDateTimeUTC},
+ {ItemParams.BackupType, BackupType},
+ {ItemParams.EnableCompression, EnableCompression.IsPresent},
}, ServiceClientAdapter);
IPsBackupProvider psBackupProvider =
diff --git a/src/ResourceManager/RecoveryServices/Commands.RecoveryServices.Backup/Cmdlets/Backup/GetAzureRmRecoveryServicesBackupStatus.cs b/src/ResourceManager/RecoveryServices/Commands.RecoveryServices.Backup/Cmdlets/Backup/GetAzureRmRecoveryServicesBackupStatus.cs
index 02ff54dd48dd..b6d3db1a21bd 100644
--- a/src/ResourceManager/RecoveryServices/Commands.RecoveryServices.Backup/Cmdlets/Backup/GetAzureRmRecoveryServicesBackupStatus.cs
+++ b/src/ResourceManager/RecoveryServices/Commands.RecoveryServices.Backup/Cmdlets/Backup/GetAzureRmRecoveryServicesBackupStatus.cs
@@ -61,7 +61,7 @@ public class GetAzureRmRecoveryServicesBackupStatus : RecoveryServicesBackupCmdl
HelpMessage = ParamHelpMsgs.ProtectionCheck.Type)]
[Parameter(ParameterSetName = IdWorkloadParamSet, Mandatory = true,
HelpMessage = ParamHelpMsgs.ProtectionCheck.Type),]
- [ValidateSet("AzureVM", "AzureFiles")]
+ [ValidateSet("AzureVM", "AzureFiles", "SQLDataBase")]
public string Type { get; set; }
[Parameter(ParameterSetName = IdParamSet, ValueFromPipelineByPropertyName = true,
diff --git a/src/ResourceManager/RecoveryServices/Commands.RecoveryServices.Backup/ParamHelpMsgs.cs b/src/ResourceManager/RecoveryServices/Commands.RecoveryServices.Backup/ParamHelpMsgs.cs
index 3a14c9d7553d..0bd499884d2d 100644
--- a/src/ResourceManager/RecoveryServices/Commands.RecoveryServices.Backup/ParamHelpMsgs.cs
+++ b/src/ResourceManager/RecoveryServices/Commands.RecoveryServices.Backup/ParamHelpMsgs.cs
@@ -83,6 +83,8 @@ internal static class Item
public const string AzureFileShareName = "Azure FileShare Name.";
public const string AzureFileStorageAccountName = "Azure file share storage account name";
public const string AzureFileStorageAccountResourceGroupName = "Azure file share storage account resource group name";
+ public const string BackupType = "Type of backup to be performed";
+ public const string EnableCompression = "If enabling compression is required";
}
internal static class RecoveryPoint