Skip to content

Commit 0dd267c

Browse files
zubairabidZubair AbidmikeharderMaryGao
authored
Dataprotection 2025-09-01 (#37561)
* Add DPP Vault soft delete functionality for API version 2025-09-01 - Add new API version v2025_09_01 to main.tsp - Implement DeletedBackupVault model extending BackupVault with deletion metadata - Add ResourceDeletionInfo model with deletion timestamps and activity tracking - Implement deleted backup vault operations: * Get deleted vault * List deleted vaults by subscription * Undelete soft-deleted vault * Get operation status for undelete operations - Generate OpenAPI specification for 2025-09-01 with new soft delete operations - Maintain one-to-one mapping with C# client library ResourceDataContracts.cs * Examples and other nitnats * Update generated OpenAPI specification * More examples and validation * Update examples * Try to fix some issues * Update deleted vault to proxy resource, Update jsons with prettier * Fix list deleted vaults * Fix example for list deleted vaults * Attempted fix for latest issues * Attemtp fix * prettier everythgin * VaultCRUD got missed in the last prettier run * Suppress provisioning state false positive * Run compile again * Add new property to DeletedBackupVault * Update examples * Initial - remove undelete, and add deletedvaultid * Add example for change * prettier * Fix manual routes for DeletedBackupVault * Remove unnecessary and incorrect suppressions * remove readonly * Re-add readonly workaround * Fix formattin --------- Co-authored-by: Zubair Abid <[email protected]> Co-authored-by: Mike Harder <[email protected]> Co-authored-by: Mary Gao <[email protected]>
1 parent 794f7f5 commit 0dd267c

File tree

189 files changed

+20649
-7
lines changed

Some content is hidden

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

189 files changed

+20649
-7
lines changed

specification/dataprotection/cspell.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ words:
1010
- adls
1111
- bcdr
1212
- undelete
13+
- undeletes
1314
- dppworkerrequest
1415
overrides:
1516
- filename: >-

specification/dataprotection/resource-manager/Microsoft.DataProtection/DataProtection/BackupVaultResource.tsp

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,10 @@ import "@azure-tools/typespec-azure-core";
22
import "@azure-tools/typespec-azure-resource-manager";
33
import "@typespec/openapi";
44
import "@typespec/rest";
5+
import "@typespec/versioning";
56

67
using TypeSpec.Rest;
8+
using TypeSpec.Versioning;
79
using Azure.ResourceManager;
810
using TypeSpec.Http;
911
using TypeSpec.OpenAPI;
@@ -30,6 +32,38 @@ model BackupVaultResource
3032
eTag?: string;
3133
}
3234

35+
/**
36+
* Deleted Backup Vault Resource (available from version 2025-09-01)
37+
*/
38+
@added(Versions.v2025_09_01)
39+
@parentResource(ArmLocationResource<"Subscription">)
40+
model DeletedBackupVaultResource
41+
is Azure.ResourceManager.ProxyResource<DeletedBackupVault> {
42+
...ResourceNameParameter<
43+
Resource = DeletedBackupVaultResource,
44+
KeyName = "deletedVaultName",
45+
SegmentName = "deletedVaults",
46+
NamePattern = ""
47+
>;
48+
}
49+
50+
/**
51+
* List of deleted backup vault resources
52+
*/
53+
@added(Versions.v2025_09_01)
54+
model DeletedBackupVaultResourceList {
55+
/**
56+
* List of resources.
57+
*/
58+
@pageItems
59+
value?: DeletedBackupVaultResource[];
60+
61+
/**
62+
* The uri to fetch the next page of resources. Call ListNext() fetches next page of resources.
63+
*/
64+
nextLink?: string;
65+
}
66+
3367
@armResourceOperations
3468
interface BackupVaultResourceOps
3569
extends Azure.ResourceManager.Legacy.LegacyOperations<
@@ -67,6 +101,14 @@ interface BackupVaultResources {
67101
#suppress "@azure-tools/typespec-azure-core/casing-style" "non-standard operations"
68102
@header
69103
`x-ms-authorization-auxiliary`?: string;
104+
105+
/**
106+
* The ID of the deleted backup vault to restore from during undelete flow.
107+
*/
108+
#suppress "@azure-tools/typespec-azure-core/casing-style" "non-standard operations"
109+
@added(Versions.v2025_09_01)
110+
@header
111+
`x-ms-deleted-vault-id`?: string;
70112
},
71113
LroHeaders = ArmLroLocationHeader<FinalResult = BackupVaultResource> &
72114
Azure.Core.Foundations.RetryAfterHeader,
@@ -223,6 +265,23 @@ interface BackupVaultOperationResults {
223265
>;
224266
}
225267

268+
/**
269+
* Deleted backup vault operations (available from version 2025-09-01)
270+
*/
271+
@armResourceOperations
272+
@added(Versions.v2025_09_01)
273+
interface DeletedBackupVaults {
274+
/**
275+
* Gets a deleted backup vault
276+
*/
277+
get is ArmResourceRead<DeletedBackupVaultResource>;
278+
279+
/**
280+
* Lists deleted backup vaults by location
281+
*/
282+
listByLocation is ArmResourceListByParent<DeletedBackupVaultResource>;
283+
}
284+
226285
@@doc(BackupVaultResource.name, "The name of the backup vault.");
227286
@@doc(BackupVaultResource.properties, "BackupVaultResource properties");
228287
@@doc(BackupVaultResources.createOrUpdate::parameters.resource,
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
{
2+
"parameters": {
3+
"api-version": "2025-09-01",
4+
"backupInstanceName": "testInstance1",
5+
"resourceGroupName": "000pikumar",
6+
"subscriptionId": "04cf684a-d41f-4550-9f70-7708a3a2283b",
7+
"vaultName": "PratikPrivatePreviewVault1"
8+
},
9+
"responses": {
10+
"200": {},
11+
"202": {
12+
"headers": {
13+
"Azure-AsyncOperation": "https://management.azure.com/subscriptions/04cf684a-d41f-4550-9f70-7708a3a2283b/resourceGroups/000pikumar/providers/Microsoft.DataProtection/backupVaults/PratikPrivatePreviewVault1/operationStatus/ZTA4YjQ0ZGYtYmNkNS00YTk1LWFjZTMtOTc1MjNmZWIxYWZlO2Y1ODg1MzA3LWJkNjItNDQ2OC05ZjZlLTJkMGM2NjNiNmJmNg==?api-version=2025-09-01",
14+
"Location": "https://management.azure.com/subscriptions/04cf684a-d41f-4550-9f70-7708a3a2283b/resourceGroups/000pikumar/providers/Microsoft.DataProtection/backupInstances/harshitbi1/operationResults/ZTA4YjQ0ZGYtYmNkNS00YTk1LWFjZTMtOTc1MjNmZWIxYWZlO2Y1ODg1MzA3LWJkNjItNDQ2OC05ZjZlLTJkMGM2NjNiNmJmNg==?api-version=2025-09-01",
15+
"Retry-After": "60"
16+
}
17+
},
18+
"204": {}
19+
},
20+
"operationId": "BackupInstances_Delete",
21+
"title": "Delete BackupInstance"
22+
}
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
{
2+
"parameters": {
3+
"api-version": "2025-09-01",
4+
"backupInstanceName": "zblobbackuptestsa58",
5+
"parameters": {
6+
"endTime": "2021-02-24T00:35:17.6829685Z",
7+
"sourceDataStoreType": "OperationalStore",
8+
"startTime": "2020-10-17T23:28:17.6829685Z"
9+
},
10+
"resourceGroupName": "Blob-Backup",
11+
"subscriptionId": "04cf684a-d41f-4550-9f70-7708a3a2283b",
12+
"vaultName": "ZBlobBackupVaultBVTD3"
13+
},
14+
"responses": {
15+
"200": {
16+
"body": {
17+
"type": "Microsoft.DataProtection/backupVaults/backupInstances/findRestorableTimeRanges",
18+
"id": "zblobbackuptestsa58",
19+
"properties": {
20+
"objectType": "AzureBackupFindRestorableTimeRangesResponse",
21+
"restorableTimeRanges": [
22+
{
23+
"endTime": "2021-02-24T00:35:17.0000000Z",
24+
"objectType": "RestorableTimeRange",
25+
"startTime": "2021-02-23T18:33:51.6349708Z"
26+
}
27+
]
28+
}
29+
}
30+
}
31+
},
32+
"operationId": "RestorableTimeRanges_Find",
33+
"title": "Find Restorable Time Ranges"
34+
}
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
{
2+
"parameters": {
3+
"api-version": "2025-09-01",
4+
"backupInstanceName": "testInstance1",
5+
"resourceGroupName": "000pikumar",
6+
"subscriptionId": "04cf684a-d41f-4550-9f70-7708a3a2283b",
7+
"vaultName": "PratikPrivatePreviewVault1"
8+
},
9+
"responses": {
10+
"200": {
11+
"body": {
12+
"name": "harshitbi2",
13+
"type": "Microsoft.DataProtection/backupVaults/backupInstances",
14+
"id": "/subscriptions/04cf684a-d41f-4550-9f70-7708a3a2283b/resourceGroups/000pikumar/providers/Microsoft.DataProtection/backupVaults/PratikPrivatePreviewVault1/backupInstances/harshitbi2",
15+
"properties": {
16+
"dataSourceInfo": {
17+
"datasourceType": "OssDB",
18+
"objectType": "Datasource",
19+
"resourceID": "/subscriptions/f75d8d8b-6735-4697-82e1-1a7a3ff0d5d4/resourceGroups/viveksipgtest/providers/Microsoft.DBforPostgreSQL/servers/viveksipgtest/databases/testdb",
20+
"resourceLocation": "",
21+
"resourceName": "testdb",
22+
"resourceType": "OssDB",
23+
"resourceUri": ""
24+
},
25+
"dataSourceSetInfo": {
26+
"datasourceType": "OssDB",
27+
"objectType": "DatasourceSet",
28+
"resourceID": "/subscriptions/f75d8d8b-6735-4697-82e1-1a7a3ff0d5d4/resourceGroups/viveksipgtest/providers/Microsoft.DBforPostgreSQL/servers/viveksipgtest",
29+
"resourceLocation": "",
30+
"resourceName": "viveksipgtest",
31+
"resourceType": "OssDB",
32+
"resourceUri": ""
33+
},
34+
"friendlyName": "harshitbi2",
35+
"identityDetails": {
36+
"useSystemAssignedIdentity": false,
37+
"userAssignedIdentityArmUrl": "/subscriptions/f75d8d8b-6735-4697-82e1-1a7a3ff0d5d4/resourcegroups/rg-name/providers/Microsoft.ManagedIdentity/userAssignedIdentities/testUami"
38+
},
39+
"objectType": "BackupInstance",
40+
"policyInfo": {
41+
"policyId": "/subscriptions/04cf684a-d41f-4550-9f70-7708a3a2283b/resourceGroups/000pikumar/providers/Microsoft.DataProtection/backupVaults/PratikPrivatePreviewVault1/backupPolicies/PratikPolicy1",
42+
"policyVersion": "3.2"
43+
},
44+
"protectionStatus": {
45+
"status": "NotProtected"
46+
},
47+
"provisioningState": "Provisioning"
48+
}
49+
}
50+
}
51+
},
52+
"operationId": "BackupInstances_Get",
53+
"title": "Get BackupInstance"
54+
}
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
{
2+
"parameters": {
3+
"operationId": "YWUzNDFkMzQtZmM5OS00MmUyLWEzNDMtZGJkMDIxZjlmZjgzOzdmYzBiMzhmLTc2NmItNDM5NS05OWQ1LTVmOGEzNzg4MWQzNA==",
4+
"api-version": "2025-09-01",
5+
"backupInstanceName": "testInstance1",
6+
"resourceGroupName": "SampleResourceGroup",
7+
"subscriptionId": "04cf684a-d41f-4550-9f70-7708a3a2283b",
8+
"vaultName": "swaggerExample"
9+
},
10+
"responses": {
11+
"200": {
12+
"body": {
13+
"name": "testInstance1",
14+
"type": "Microsoft.DataProtection/backupVaults/backupInstances",
15+
"id": "/subscriptions/04cf684a-d41f-4550-9f70-7708a3a2283b/resourceGroups/SampleResourceGroup/providers/Microsoft.DataProtection/backupVaults/swaggerExample/backupInstances/testInstance1",
16+
"properties": {
17+
"dataSourceInfo": {
18+
"datasourceType": "OssDB",
19+
"objectType": "Datasource",
20+
"resourceID": "/subscriptions/f75d8d8b-6735-4697-82e1-1a7a3ff0d5d4/resourceGroups/viveksipgtest/providers/Microsoft.DBforPostgreSQL/servers/viveksipgtest/databases/testdb",
21+
"resourceLocation": "",
22+
"resourceName": "testdb",
23+
"resourceType": "OssDB",
24+
"resourceUri": ""
25+
},
26+
"dataSourceSetInfo": {
27+
"datasourceType": "OssDB",
28+
"objectType": "DatasourceSet",
29+
"resourceID": "/subscriptions/f75d8d8b-6735-4697-82e1-1a7a3ff0d5d4/resourceGroups/viveksipgtest/providers/Microsoft.DBforPostgreSQL/servers/viveksipgtest",
30+
"resourceLocation": "",
31+
"resourceName": "viveksipgtest",
32+
"resourceType": "OssDB",
33+
"resourceUri": ""
34+
},
35+
"friendlyName": "testInstance1",
36+
"objectType": "BackupInstance",
37+
"policyInfo": {
38+
"policyId": "/subscriptions/04cf684a-d41f-4550-9f70-7708a3a2283b/resourceGroups/SampleResourceGroup/providers/Microsoft.DataProtection/backupVaults/swaggerExample/backupPolicies/PratikPolicy1",
39+
"policyVersion": "3.2"
40+
},
41+
"protectionStatus": {
42+
"status": "ConfiguringProtection"
43+
},
44+
"provisioningState": "Provisioned"
45+
}
46+
}
47+
},
48+
"202": {
49+
"headers": {
50+
"Azure-AsyncOperation": "https://management.windowsazure.com/subscriptions/04cf684a-d41f-4550-9f70-7708a3a2283b/resourceGroups/SampleResourceGroup/providers/Microsoft.DataProtection/backupVaults/swaggerExample/operationStatus/YWUzNDFkMzQtZmM5OS00MmUyLWEzNDMtZGJkMDIxZjlmZjgzOzdmYzBiMzhmLTc2NmItNDM5NS05OWQ1LTVmOGEzNzg4MWQzNA==?api-version=2025-09-01",
51+
"Location": "https://management.windowsazure.com/subscriptions/04cf684a-d41f-4550-9f70-7708a3a2283b/resourceGroups/SampleResourceGroup/providers/Microsoft.DataProtection/backupvaults/swaggerExample/backupInstances/testInstance1/operationResults/YWUzNDFkMzQtZmM5OS00MmUyLWEzNDMtZGJkMDIxZjlmZjgzOzdmYzBiMzhmLTc2NmItNDM5NS05OWQ1LTVmOGEzNzg4MWQzNA==?api-version=2025-09-01",
52+
"Retry-After": "10"
53+
}
54+
}
55+
},
56+
"operationId": "BackupInstances_GetBackupInstanceOperationResult",
57+
"title": "Get BackupInstanceOperationResult"
58+
}
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
{
2+
"parameters": {
3+
"api-version": "2025-09-01",
4+
"backupInstanceName": "adlsbackupinstance",
5+
"resourceGroupName": "adlsrg",
6+
"subscriptionId": "54707983-993e-43de-8d94-074451394eda",
7+
"vaultName": "adlsvault"
8+
},
9+
"responses": {
10+
"200": {
11+
"body": {
12+
"name": "adlsbackupinstance",
13+
"type": "Microsoft.DataProtection/backupVaults/backupInstances",
14+
"id": "/subscriptions/54707983-993e-43de-8d94-074451394eda/resourceGroups/adlsrg/providers/Microsoft.DataProtection/backupVaults/adlsvault/backupInstances/adlsbackupinstance",
15+
"properties": {
16+
"currentProtectionState": "ProtectionConfigured",
17+
"dataSourceInfo": {
18+
"datasourceType": "Microsoft.Storage/storageAccounts/adlsBlobServices",
19+
"objectType": "Datasource",
20+
"resourceID": "/subscriptions/54707983-993e-43de-8d94-074451394eda/resourceGroups/adlsrg/providers/Microsoft.Storage/storageAccounts/adlsstorageaccount",
21+
"resourceLocation": "centraluseuap",
22+
"resourceName": "adls5blbcentraluseuap2",
23+
"resourceType": "Microsoft.Storage/storageAccounts",
24+
"resourceUri": "/subscriptions/54707983-993e-43de-8d94-074451394eda/resourceGroups/adlsrg/providers/Microsoft.Storage/storageAccounts/adlsstorageaccount"
25+
},
26+
"dataSourceSetInfo": {
27+
"datasourceType": "Microsoft.Storage/storageAccounts/adlsBlobServices",
28+
"objectType": "DatasourceSet",
29+
"resourceID": "/subscriptions/54707983-993e-43de-8d94-074451394eda/resourceGroups/adlsrg/providers/Microsoft.Storage/storageAccounts/adlsstorageaccount",
30+
"resourceLocation": "centraluseuap",
31+
"resourceName": "adls5blbcentraluseuap2",
32+
"resourceType": "Microsoft.Storage/storageAccounts",
33+
"resourceUri": "/subscriptions/54707983-993e-43de-8d94-074451394eda/resourceGroups/adlsrg/providers/Microsoft.Storage/storageAccounts/adlsstorageaccount"
34+
},
35+
"friendlyName": "adlsbackupinstance",
36+
"objectType": "BackupInstance",
37+
"policyInfo": {
38+
"policyId": "/subscriptions/54707983-993e-43de-8d94-074451394eda/resourceGroups/adlsrg/providers/Microsoft.DataProtection/backupVaults/adlsvault/backupPolicies/adlspolicy",
39+
"policyParameters": {
40+
"backupDatasourceParametersList": [
41+
{
42+
"containersList": [
43+
"container1",
44+
"container2"
45+
],
46+
"objectType": "AdlsBlobBackupDatasourceParameters"
47+
}
48+
]
49+
}
50+
},
51+
"protectionStatus": {
52+
"status": "ProtectionConfigured"
53+
},
54+
"provisioningState": "Succeeded"
55+
}
56+
}
57+
}
58+
},
59+
"operationId": "BackupInstances_Get",
60+
"title": "Get BackupInstance for ADLS Blob"
61+
}
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
{
2+
"parameters": {
3+
"api-version": "2025-09-01",
4+
"backupInstanceName": "testInstance1",
5+
"recoveryPointId": "7fb2cddd-c5b3-44f6-a0d9-db3c4f9d5f25",
6+
"resourceGroupName": "000pikumar",
7+
"subscriptionId": "04cf684a-d41f-4550-9f70-7708a3a2283b",
8+
"vaultName": "PratikPrivatePreviewVault1"
9+
},
10+
"responses": {
11+
"200": {
12+
"body": {
13+
"name": "7fb2cddd-c5b3-44f6-a0d9-db3c4f9d5f25",
14+
"type": "microsoft.dataprotection/backupvaults/backupInstances/recoveryPoints",
15+
"id": "/subscriptions/04cf684a-d41f-4550-9f70-7708a3a2283b/resourceGroups/HelloTest/providers/Microsoft.DataProtection/backupVaults/HelloTestVault/backupInstances/653213d-c5b3-44f6-a0d9-db3c4f9d8e34/recoveryPoints/7fb2cddd-c5b3-44f6-a0d9-db3c4f9d5f25",
16+
"properties": {
17+
"friendlyName": "panbha4",
18+
"objectType": "AzureBackupDiscreteRecoveryPoint",
19+
"recoveryPointDataStoresDetails": [
20+
{
21+
"type": "Snapshot",
22+
"creationTime": "2019-03-01T13:00:00Z",
23+
"id": "0ff03512-b333-4509-a6c7-12164c8b1dce",
24+
"metaData": "123456"
25+
},
26+
{
27+
"type": "BackupStorage",
28+
"creationTime": "2019-03-01T13:00:00Z",
29+
"id": "5d8cfd30-722e-4bab-85f6-4a9d01ffc6f1",
30+
"metaData": "123456"
31+
}
32+
],
33+
"recoveryPointState": "Completed",
34+
"recoveryPointTime": "2019-03-01T13:00:00Z",
35+
"recoveryPointType": "Full"
36+
}
37+
}
38+
}
39+
},
40+
"operationId": "RecoveryPoints_Get",
41+
"title": "Get Recovery Point"
42+
}

0 commit comments

Comments
 (0)