Skip to content

Commit 9413fe9

Browse files
committed
update per comments
1 parent 270d148 commit 9413fe9

File tree

3 files changed

+74
-5
lines changed

3 files changed

+74
-5
lines changed

internal/services/dataprotection/data_protection_backup_instance_data_lake_storage_resource.go

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,20 +6,21 @@ package dataprotection
66
import (
77
"context"
88
"fmt"
9+
"regexp"
910
"time"
1011

1112
"github.com/hashicorp/go-azure-helpers/lang/pointer"
1213
"github.com/hashicorp/go-azure-helpers/lang/response"
1314
"github.com/hashicorp/go-azure-helpers/resourcemanager/commonids"
1415
"github.com/hashicorp/go-azure-helpers/resourcemanager/commonschema"
1516
"github.com/hashicorp/go-azure-helpers/resourcemanager/location"
17+
"github.com/hashicorp/go-azure-helpers/resourcemanager/resourceids"
1618
"github.com/hashicorp/go-azure-sdk/resource-manager/dataprotection/2025-07-01/backupinstanceresources"
1719
"github.com/hashicorp/go-azure-sdk/resource-manager/dataprotection/2025-07-01/backupvaultresources"
1820
"github.com/hashicorp/go-azure-sdk/resource-manager/dataprotection/2025-07-01/basebackuppolicyresources"
1921
"github.com/hashicorp/go-azure-sdk/sdk/client/pollers"
2022
"github.com/hashicorp/terraform-provider-azurerm/internal/sdk"
2123
"github.com/hashicorp/terraform-provider-azurerm/internal/services/dataprotection/custompollers"
22-
storageValidate "github.com/hashicorp/terraform-provider-azurerm/internal/services/storage/validate"
2324
"github.com/hashicorp/terraform-provider-azurerm/internal/tf/pluginsdk"
2425
"github.com/hashicorp/terraform-provider-azurerm/internal/tf/validation"
2526
)
@@ -34,9 +35,18 @@ type BackupInstanceDataLakeStorageModel struct {
3435
ProtectionState string `tfschema:"protection_state"`
3536
}
3637

38+
//go:generate go run ../../tools/generator-tests resourceidentity -resource-name data_protection_backup_instance_data_lake_storage -service-package-name dataprotection -properties "name" -compare-values "subscription_id:data_protection_backup_vault_id,resource_group_name:data_protection_backup_vault_id,backup_vault_name:data_protection_backup_vault_id"
39+
3740
type DataProtectionBackupInstanceDataLakeStorageResource struct{}
3841

39-
var _ sdk.Resource = DataProtectionBackupInstanceDataLakeStorageResource{}
42+
var (
43+
_ sdk.Resource = DataProtectionBackupInstanceDataLakeStorageResource{}
44+
_ sdk.ResourceWithIdentity = DataProtectionBackupInstanceDataLakeStorageResource{}
45+
)
46+
47+
func (r DataProtectionBackupInstanceDataLakeStorageResource) Identity() resourceids.ResourceId {
48+
return &backupinstanceresources.BackupInstanceId{}
49+
}
4050

4151
func (r DataProtectionBackupInstanceDataLakeStorageResource) ResourceType() string {
4252
return "azurerm_data_protection_backup_instance_data_lake_storage"
@@ -72,8 +82,11 @@ func (r DataProtectionBackupInstanceDataLakeStorageResource) Arguments() map[str
7282
Required: true,
7383
MinItems: 1,
7484
Elem: &pluginsdk.Schema{
75-
Type: pluginsdk.TypeString,
76-
ValidateFunc: storageValidate.StorageContainerName,
85+
Type: pluginsdk.TypeString,
86+
ValidateFunc: validation.All(
87+
validation.StringLenBetween(3, 63),
88+
validation.StringMatch(regexp.MustCompile(`^[0-9a-z][0-9a-z-]*$`), "only lowercase alphanumeric characters and hyphens are allowed, and the value must not start with a hyphen"),
89+
),
7790
},
7891
},
7992
}
@@ -176,6 +189,9 @@ func (r DataProtectionBackupInstanceDataLakeStorageResource) Create() sdk.Resour
176189
}
177190

178191
metadata.SetID(id)
192+
if err := pluginsdk.SetResourceIdentityData(metadata.ResourceData, &id); err != nil {
193+
return err
194+
}
179195
return nil
180196
},
181197
}
@@ -238,6 +254,9 @@ func (r DataProtectionBackupInstanceDataLakeStorageResource) Read() sdk.Resource
238254
}
239255
}
240256

257+
if err := pluginsdk.SetResourceIdentityData(metadata.ResourceData, id); err != nil {
258+
return err
259+
}
241260
return metadata.Encode(&state)
242261
},
243262
}
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
// Copyright IBM Corp. 2014, 2025
2+
// SPDX-License-Identifier: MPL-2.0
3+
4+
package dataprotection_test
5+
6+
import (
7+
"testing"
8+
9+
"github.com/hashicorp/terraform-plugin-testing/statecheck"
10+
"github.com/hashicorp/terraform-plugin-testing/tfjsonpath"
11+
"github.com/hashicorp/terraform-provider-azurerm/internal/acceptance"
12+
customstatecheck "github.com/hashicorp/terraform-provider-azurerm/internal/acceptance/statecheck"
13+
)
14+
15+
func TestAccDataProtectionBackupInstanceDataLakeStorage_resourceIdentity(t *testing.T) {
16+
data := acceptance.BuildTestData(t, "azurerm_data_protection_backup_instance_data_lake_storage", "test")
17+
r := DataProtectionBackupInstanceDataLakeStorageResource{}
18+
19+
checkedFields := map[string]struct{}{
20+
"name": {},
21+
"backup_vault_name": {},
22+
"resource_group_name": {},
23+
"subscription_id": {},
24+
}
25+
26+
data.ResourceIdentityTest(t, []acceptance.TestStep{
27+
{
28+
Config: r.basic(data),
29+
ConfigStateChecks: []statecheck.StateCheck{
30+
customstatecheck.ExpectAllIdentityFieldsAreChecked("azurerm_data_protection_backup_instance_data_lake_storage.test", checkedFields),
31+
statecheck.ExpectIdentityValueMatchesStateAtPath("azurerm_data_protection_backup_instance_data_lake_storage.test", tfjsonpath.New("name"), tfjsonpath.New("name")),
32+
customstatecheck.ExpectStateContainsIdentityValueAtPath("azurerm_data_protection_backup_instance_data_lake_storage.test", tfjsonpath.New("backup_vault_name"), tfjsonpath.New("data_protection_backup_vault_id")),
33+
customstatecheck.ExpectStateContainsIdentityValueAtPath("azurerm_data_protection_backup_instance_data_lake_storage.test", tfjsonpath.New("resource_group_name"), tfjsonpath.New("data_protection_backup_vault_id")),
34+
customstatecheck.ExpectStateContainsIdentityValueAtPath("azurerm_data_protection_backup_instance_data_lake_storage.test", tfjsonpath.New("subscription_id"), tfjsonpath.New("data_protection_backup_vault_id")),
35+
},
36+
},
37+
data.ImportBlockWithResourceIdentityStep(false),
38+
data.ImportBlockWithIDStep(false),
39+
}, false)
40+
}

website/docs/r/data_protection_backup_instance_data_lake_storage.html.markdown

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,16 @@ resource "azurerm_storage_account" "example" {
2727
is_hns_enabled = true
2828
}
2929
30+
resource "azurerm_storage_container" "example" {
31+
name = "example-container"
32+
storage_account_id = azurerm_storage_account.example.id
33+
}
34+
35+
resource "azurerm_storage_container" "example2" {
36+
name = "example-container2"
37+
storage_account_id = azurerm_storage_account.example.id
38+
}
39+
3040
resource "azurerm_data_protection_backup_vault" "example" {
3141
name = "example-backup-vault"
3242
resource_group_name = azurerm_resource_group.example.name
@@ -58,7 +68,7 @@ resource "azurerm_data_protection_backup_instance_data_lake_storage" "example" {
5868
location = azurerm_resource_group.example.location
5969
storage_account_id = azurerm_storage_account.example.id
6070
backup_policy_id = azurerm_data_protection_backup_policy_data_lake_storage.example.id
61-
storage_container_names = ["container1", "container2"]
71+
storage_container_names = [azurerm_storage_container.example.name, azurerm_storage_container.example2.name]
6272
6373
depends_on = [azurerm_role_assignment.example]
6474
}

0 commit comments

Comments
 (0)