Skip to content

Commit 53b5bb3

Browse files
authored
Added support for Blob Hardened recovery points (VaultStore). (Azure#21789)
Added Cross Subscription Restore for AzureDisk, AzureDatabaseForPostgreSQL and AzureBlob. Added Get-AzDataProtectionOperationStatus command for long running cmdlets Async.
1 parent d86205f commit 53b5bb3

File tree

71 files changed

+5150
-3631
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

71 files changed

+5150
-3631
lines changed

src/DataProtection/.gitignore

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ internal
66
exports
77
tools
88
custom/*.psm1
9-
custom/autogen-model-cmdlets
109
test/*-TestResults.xml
1110
/*.ps1
1211
/*.ps1xml

src/DataProtection/Az.DataProtection.psd1

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
DotNetFrameworkVersion = '4.7.2'
1212
RequiredAssemblies = './bin/Az.DataProtection.private.dll'
1313
FormatsToProcess = './Az.DataProtection.format.ps1xml'
14-
FunctionsToExport = 'Backup-AzDataProtectionBackupInstanceAdhoc', 'Edit-AzDataProtectionPolicyRetentionRuleClientObject', 'Edit-AzDataProtectionPolicyTagClientObject', 'Edit-AzDataProtectionPolicyTriggerClientObject', 'Find-AzDataProtectionRestorableTimeRange', 'Get-AzDataProtectionBackupInstance', 'Get-AzDataProtectionBackupPolicy', 'Get-AzDataProtectionBackupVault', 'Get-AzDataProtectionJob', 'Get-AzDataProtectionOperation', 'Get-AzDataProtectionPolicyTemplate', 'Get-AzDataProtectionRecoveryPoint', 'Get-AzDataProtectionResourceGuard', 'Initialize-AzDataProtectionBackupInstance', 'Initialize-AzDataProtectionRestoreRequest', 'New-AzDataProtectionBackupConfigurationClientObject', 'New-AzDataProtectionBackupInstance', 'New-AzDataProtectionBackupPolicy', 'New-AzDataProtectionBackupVault', 'New-AzDataProtectionBackupVaultStorageSettingObject', 'New-AzDataProtectionPolicyTagCriteriaClientObject', 'New-AzDataProtectionPolicyTriggerScheduleClientObject', 'New-AzDataProtectionResourceGuard', 'New-AzDataProtectionRestoreConfigurationClientObject', 'New-AzDataProtectionRetentionLifeCycleClientObject', 'Remove-AzDataProtectionBackupInstance', 'Remove-AzDataProtectionBackupPolicy', 'Remove-AzDataProtectionBackupVault', 'Remove-AzDataProtectionResourceGuard', 'Resume-AzDataProtectionBackupInstanceProtection', 'Search-AzDataProtectionBackupInstanceInAzGraph', 'Search-AzDataProtectionJobInAzGraph', 'Set-AzDataProtectionMSIPermission', 'Start-AzDataProtectionBackupInstanceRestore', 'Stop-AzDataProtectionBackupInstanceProtection', 'Suspend-AzDataProtectionBackupInstanceBackup', 'Sync-AzDataProtectionBackupInstance', 'Test-AzDataProtectionBackupInstanceReadiness', 'Test-AzDataProtectionBackupInstanceRestore', 'Update-AzDataProtectionBackupInstanceAssociatedPolicy', 'Update-AzDataProtectionBackupVault', 'Update-AzDataProtectionResourceGuard', '*'
14+
FunctionsToExport = 'Backup-AzDataProtectionBackupInstanceAdhoc', 'Edit-AzDataProtectionPolicyRetentionRuleClientObject', 'Edit-AzDataProtectionPolicyTagClientObject', 'Edit-AzDataProtectionPolicyTriggerClientObject', 'Find-AzDataProtectionRestorableTimeRange', 'Get-AzDataProtectionBackupInstance', 'Get-AzDataProtectionBackupPolicy', 'Get-AzDataProtectionBackupVault', 'Get-AzDataProtectionJob', 'Get-AzDataProtectionOperation', 'Get-AzDataProtectionOperationStatus', 'Get-AzDataProtectionPolicyTemplate', 'Get-AzDataProtectionRecoveryPoint', 'Get-AzDataProtectionResourceGuard', 'Initialize-AzDataProtectionBackupInstance', 'Initialize-AzDataProtectionRestoreRequest', 'New-AzDataProtectionBackupConfigurationClientObject', 'New-AzDataProtectionBackupInstance', 'New-AzDataProtectionBackupPolicy', 'New-AzDataProtectionBackupVault', 'New-AzDataProtectionBackupVaultStorageSettingObject', 'New-AzDataProtectionPolicyTagCriteriaClientObject', 'New-AzDataProtectionPolicyTriggerScheduleClientObject', 'New-AzDataProtectionResourceGuard', 'New-AzDataProtectionRestoreConfigurationClientObject', 'New-AzDataProtectionRetentionLifeCycleClientObject', 'Remove-AzDataProtectionBackupInstance', 'Remove-AzDataProtectionBackupPolicy', 'Remove-AzDataProtectionBackupVault', 'Remove-AzDataProtectionResourceGuard', 'Resume-AzDataProtectionBackupInstanceProtection', 'Search-AzDataProtectionBackupInstanceInAzGraph', 'Search-AzDataProtectionJobInAzGraph', 'Set-AzDataProtectionMSIPermission', 'Start-AzDataProtectionBackupInstanceRestore', 'Stop-AzDataProtectionBackupInstanceProtection', 'Suspend-AzDataProtectionBackupInstanceBackup', 'Sync-AzDataProtectionBackupInstance', 'Test-AzDataProtectionBackupInstanceReadiness', 'Test-AzDataProtectionBackupInstanceRestore', 'Update-AzDataProtectionBackupInstanceAssociatedPolicy', 'Update-AzDataProtectionBackupVault', 'Update-AzDataProtectionResourceGuard', '*'
1515
AliasesToExport = '*'
1616
PrivateData = @{
1717
PSData = @{

src/DataProtection/README.md

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ This directory contains the PowerShell module for the DataProtection service.
1717
This module was primarily generated via [AutoRest](https://github.com/Azure/autorest) using the [PowerShell](https://github.com/Azure/autorest.powershell) extension.
1818

1919
## Module Requirements
20-
- [Az.Accounts module](https://www.powershellgallery.com/packages/Az.Accounts/), version 2.7.5 or greater
20+
- [Az.Accounts module](https://www.powershellgallery.com/packages/Az.Accounts/), version 2.2.3 or greater
2121

2222
## Authentication
2323
AutoRest does not generate authentication code for the module. Authentication is handled via Az.Accounts by altering the HTTP payload before it is sent.
@@ -163,14 +163,6 @@ directive:
163163
verb: Sync
164164
variant: Sync$|SyncViaIdentity$|SyncViaIdentityExpanded$
165165
remove: true
166-
- where:
167-
verb: Get
168-
subject: OperationResult
169-
remove: true
170-
- where:
171-
verb: Get
172-
subject: OperationStatus
173-
remove: true
174166
- where:
175167
verb: Start
176168
subject: BackupInstanceRehydrate
@@ -269,6 +261,16 @@ directive:
269261
property-name: SoftDeleteSettingState
270262
set:
271263
property-name: SoftDeleteState
264+
- where:
265+
subject: OperationStatus
266+
parameter-name: Location
267+
set:
268+
parameter-description: Azure region where the operation is triggered.
269+
- where:
270+
subject: OperationStatus
271+
parameter-name: OperationId
272+
set:
273+
parameter-description: Operation Id to track the operation status.
272274
- where:
273275
model-name: BackupVaultResource
274276
set:

src/DataProtection/custom/Cmdlets/Common/Initialize-AzDataProtectionBackupInstance.ps1

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ function Initialize-AzDataProtectionBackupInstance {
4444
${FriendlyName},
4545

4646
[Parameter(Mandatory=$false, HelpMessage='Backup configuration for backup. Use this parameter to configure protection for AzureKubernetesService.')]
47-
[Microsoft.Azure.PowerShell.Cmdlets.DataProtection.Models.Api202301.KubernetesClusterBackupDatasourceParameters]
47+
[Microsoft.Azure.PowerShell.Cmdlets.DataProtection.Models.Api202301.IBackupDatasourceParameters]
4848
${BackupConfiguration}
4949
)
5050

@@ -145,13 +145,15 @@ function Initialize-AzDataProtectionBackupInstance {
145145
}
146146

147147
if($manifest.addBackupDatasourceParametersList -eq $true)
148-
{
149-
if($BackupConfiguration -eq $null){
150-
$errormsg = "Please input parameter BackupConfiguration for AKS cluster backup. Use command New-AzDataProtectionBackupConfigurationClientObject for creating the BackupConfiguration"
148+
{
149+
if($BackupConfiguration -eq $null -and $manifest.backupConfigurationRequired -eq $true){
150+
$errormsg = "Please input parameter BackupConfiguration for given DatasourceType. Use command New-AzDataProtectionBackupConfigurationClientObject for creating the BackupConfiguration."
151151
throw $errormsg
152152
}
153153

154-
$backupInstanceResource.Property.PolicyInfo.PolicyParameter.BackupDatasourceParametersList += @($BackupConfiguration)
154+
if($BackupConfiguration -ne $null){
155+
$backupInstanceResource.Property.PolicyInfo.PolicyParameter.BackupDatasourceParametersList += @($BackupConfiguration)
156+
}
155157
}
156158
elseif($ExcludedResourceType -ne $null -or $IncludedResourceType -ne $null -or $ExcludedNamespace -ne $null -or $IncludedNamespace -ne $null -or $LabelSelector -ne $null -or $SnapshotVolume -ne $null -or $IncludeClusterScopeResource -ne $null){
157159
$errormsg = "ExcludedResourceType, IncludedResourceType, ExcludedNamespace, IncludedNamespace, LabelSelector, SnapshotVolume, IncludeClusterScopeResource parameters are not applicable for given DatasourceType. Please ensure to remove them"

src/DataProtection/custom/Cmdlets/Common/New-AzDataProtectionBackupConfigurationClientObject.ps1

Lines changed: 74 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ function New-AzDataProtectionBackupConfigurationClientObject{
77
param(
88
[Parameter(Mandatory, HelpMessage='Datasource Type')]
99
[Microsoft.Azure.PowerShell.Cmdlets.DataProtection.Support.DatasourceTypes]
10-
[ValidateSet('AzureKubernetesService')]
10+
[ValidateSet('AzureKubernetesService', 'AzureBlob')]
1111
${DatasourceType},
1212

1313
[Parameter(Mandatory=$false, HelpMessage='List of resource types to be excluded from backup')]
@@ -36,33 +36,87 @@ function New-AzDataProtectionBackupConfigurationClientObject{
3636

3737
[Parameter(Mandatory=$false, HelpMessage='Boolean parameter to decide whether cluster scope resources are included for backup. By default this is taken as true.')]
3838
[Nullable[System.Boolean]]
39-
${IncludeClusterScopeResource}
39+
${IncludeClusterScopeResource},
40+
41+
[Parameter(Mandatory=$false, HelpMessage='List of containers to be backed up inside the VaultStore. Use this parameter for DatasourceType AzureBlob.')]
42+
[System.String[]]
43+
${VaultedBackupContainer},
44+
45+
[Parameter(Mandatory=$false, HelpMessage='Switch parameter to include all containers to be backed up inside the VaultStore. Use this parameter for DatasourceType AzureBlob.')]
46+
[Switch]
47+
${IncludeAllContainer},
48+
49+
[Parameter(Mandatory=$false, HelpMessage='Storage account where the Datasource is present. Use this parameter for DatasourceType AzureBlob.')]
50+
[System.String]
51+
${StorageAccountName},
52+
53+
[Parameter(Mandatory=$false, HelpMessage='Storage account resource group name where the Datasource is present. Use this parameter for DatasourceType AzureBlob.')]
54+
[System.String]
55+
${StorageAccountResourceGroupName}
4056
)
4157

4258
process {
43-
# need to have parameter validation when this command supports another DatasourceType
59+
# need to have parameter validation when this command supports another DatasourceType
60+
$dataSourceParam = $null
61+
62+
if($DatasourceType.ToString() -eq "AzureKubernetesService"){
4463

45-
$dataSourceParam = [Microsoft.Azure.PowerShell.Cmdlets.DataProtection.Models.Api202301.KubernetesClusterBackupDatasourceParameters]::new()
46-
$dataSourceParam.ObjectType = "KubernetesClusterBackupDatasourceParameters"
64+
# parameter validation
65+
if($VaultedBackupContainer -ne $null -or $IncludeAllContainer){
66+
$message = "Invalid parameter VaultedBackupContainer or IncludeAllContainer for given DatasourceType."
67+
throw $message
68+
}
69+
70+
$dataSourceParam = [Microsoft.Azure.PowerShell.Cmdlets.DataProtection.Models.Api202301.KubernetesClusterBackupDatasourceParameters]::new()
71+
$dataSourceParam.ObjectType = "KubernetesClusterBackupDatasourceParameters"
4772

48-
$dataSourceParam.ExcludedResourceType = $ExcludedResourceType
49-
$dataSourceParam.IncludedResourceType = $IncludedResourceType
50-
$dataSourceParam.ExcludedNamespace = $ExcludedNamespace
51-
$dataSourceParam.IncludedNamespace = $IncludedNamespace
52-
$dataSourceParam.LabelSelector = $LabelSelector
73+
$dataSourceParam.ExcludedResourceType = $ExcludedResourceType
74+
$dataSourceParam.IncludedResourceType = $IncludedResourceType
75+
$dataSourceParam.ExcludedNamespace = $ExcludedNamespace
76+
$dataSourceParam.IncludedNamespace = $IncludedNamespace
77+
$dataSourceParam.LabelSelector = $LabelSelector
5378

54-
if ($SnapshotVolume -ne $null) {
55-
$dataSourceParam.SnapshotVolume = $SnapshotVolume
56-
}
57-
else{
58-
$dataSourceParam.SnapshotVolume = $true
59-
}
79+
if ($SnapshotVolume -ne $null) {
80+
$dataSourceParam.SnapshotVolume = $SnapshotVolume
81+
}
82+
else{
83+
$dataSourceParam.SnapshotVolume = $true
84+
}
6085

61-
if($IncludeClusterScopeResource -ne $null){
62-
$dataSourceParam.IncludeClusterScopeResource = $IncludeClusterScopeResource
86+
if($IncludeClusterScopeResource -ne $null){
87+
$dataSourceParam.IncludeClusterScopeResource = $IncludeClusterScopeResource
88+
}
89+
else{
90+
$dataSourceParam.IncludeClusterScopeResource = $true
91+
}
6392
}
64-
else{
65-
$dataSourceParam.IncludeClusterScopeResource = $true
93+
94+
if($DatasourceType.ToString() -eq "AzureBlob"){
95+
$dataSourceParam = [Microsoft.Azure.PowerShell.Cmdlets.DataProtection.Models.Api202301.BlobBackupDatasourceParameters]::new()
96+
$dataSourceParam.ObjectType = "BlobBackupDatasourceParameters"
97+
98+
if($VaultedBackupContainer -ne $null){
99+
$dataSourceParam.ContainersList = $VaultedBackupContainer
100+
}
101+
elseif($IncludeAllContainer){
102+
if($StorageAcountName -eq $null -or $StorageAccountResourceGroupName -eq $null){
103+
$message = "Please input StorageAcountName and StorageAccountResourceGroupName parameters for fetching all vaulted containers."
104+
throw $message
105+
}
106+
107+
CheckStorageModuleDependency
108+
$storageAccount = Get-AzStorageAccount -ResourceGroupName $StorageAccountResourceGroupName -Name $StorageAcountName
109+
$containers=Get-AzStorageContainer -Context $storageAccount.Context
110+
$dataSourceParam.ContainersList = $containers.Name
111+
}
112+
elseif($ExcludedResourceType -ne $null -or $IncludedResourceType -ne $null -or $ExcludedNamespace -ne $null -or $IncludedNamespace -ne $null -or $LabelSelector -ne $null -or $SnapshotVolume -ne $null -or $IncludeClusterScopeResource -ne $null){
113+
$message = "Invalid parameters ExcludedResourceType, IncludedResourceType, ExcludedNamespace, IncludedNamespace, LabelSelector, SnapshotVolume, IncludeClusterScopeResource for given DatasourceType."
114+
throw $message
115+
}
116+
else {
117+
$message = "Please input VaultedBackupContainer or IncludeAllContainer parameters for given workload type."
118+
throw $message
119+
}
66120
}
67121

68122
$dataSourceParam

src/DataProtection/custom/Cmdlets/Common/New-AzDataProtectionBackupInstance.ps1

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -90,9 +90,11 @@ function New-AzDataProtectionBackupInstance {
9090
$BackupInstance.Tag = $Tag
9191
}
9292

93-
$null = $PSBoundParameters.Add("BackupInstance", $BackupInstance.Property)
94-
$null = Az.DataProtection\Test-AzDataProtectionBackupInstanceReadiness @PSBoundParameters
95-
$null = $PSBoundParameters.Remove("BackupInstance")
93+
# commenting inline validate for now
94+
# $null = $PSBoundParameters.Add("BackupInstance", $BackupInstance.Property)
95+
# $null = Az.DataProtection\Test-AzDataProtectionBackupInstanceReadiness @PSBoundParameters
96+
# $null = $PSBoundParameters.Remove("BackupInstance")
97+
9698
$null = $PSBoundParameters.Add("Name", $name)
9799
$null = $PSBoundParameters.Add("Parameter", $BackupInstance)
98100
Az.DataProtection.Internal\New-AzDataProtectionBackupInstance @PSBoundParameters

0 commit comments

Comments
 (0)