From 9718345d112267705736ed66cf555d6c246fb8dd Mon Sep 17 00:00:00 2001 From: Steph Date: Mon, 24 Jun 2024 07:57:33 +0100 Subject: [PATCH 1/2] remove configmodeattr in 4.0 --- .../site_recovery_replicated_vm_resource.go | 99 +++++++++++++++++++ 1 file changed, 99 insertions(+) diff --git a/internal/services/recoveryservices/site_recovery_replicated_vm_resource.go b/internal/services/recoveryservices/site_recovery_replicated_vm_resource.go index 89270c4bd099..84eab502dbd2 100644 --- a/internal/services/recoveryservices/site_recovery_replicated_vm_resource.go +++ b/internal/services/recoveryservices/site_recovery_replicated_vm_resource.go @@ -299,6 +299,105 @@ func resourceSiteRecoveryReplicatedVM() *pluginsdk.Resource { Optional: true, Elem: networkInterfaceResource(), } + resource.Schema["unmanaged_disk"] = &pluginsdk.Schema{ + Type: pluginsdk.TypeSet, + Optional: true, + ForceNew: true, + ConfigMode: pluginsdk.SchemaConfigModeAttr, + Elem: &pluginsdk.Resource{ + Schema: map[string]*pluginsdk.Schema{ + "disk_uri": { + Type: pluginsdk.TypeString, + Required: true, + ForceNew: true, + ValidateFunc: validation.StringIsNotEmpty, + }, + + "staging_storage_account_id": { + Type: pluginsdk.TypeString, + Required: true, + ForceNew: true, + ValidateFunc: azure.ValidateResourceID, + }, + + "target_storage_account_id": { + Type: pluginsdk.TypeString, + Required: true, + ForceNew: true, + ValidateFunc: commonids.ValidateStorageAccountID, + }, + }, + }, + } + resource.Schema["managed_disk"] = &pluginsdk.Schema{ + Type: pluginsdk.TypeSet, + Optional: true, + ForceNew: true, + ConfigMode: pluginsdk.SchemaConfigModeAttr, + Set: resourceSiteRecoveryReplicatedVMDiskHash, + Elem: &pluginsdk.Resource{ + Schema: map[string]*pluginsdk.Schema{ + "disk_id": { + Type: pluginsdk.TypeString, + Required: true, + ForceNew: true, + ValidateFunc: validation.StringIsNotEmpty, + }, + + "staging_storage_account_id": { + Type: pluginsdk.TypeString, + Required: true, + ForceNew: true, + ValidateFunc: commonids.ValidateStorageAccountID, + }, + + "target_resource_group_id": { + Type: pluginsdk.TypeString, + Required: true, + ForceNew: true, + ValidateFunc: commonids.ValidateResourceGroupID, + }, + + "target_disk_type": { + Type: pluginsdk.TypeString, + Required: true, + ForceNew: true, + ValidateFunc: validation.StringInSlice([]string{ + string(disks.DiskStorageAccountTypesStandardLRS), + string(disks.DiskStorageAccountTypesPremiumLRS), + string(disks.DiskStorageAccountTypesStandardSSDLRS), + string(disks.DiskStorageAccountTypesUltraSSDLRS), + }, false), + }, + + "target_replica_disk_type": { + Type: pluginsdk.TypeString, + Required: true, + ForceNew: true, + ValidateFunc: validation.StringInSlice([]string{ + string(disks.DiskStorageAccountTypesStandardLRS), + string(disks.DiskStorageAccountTypesPremiumLRS), + string(disks.DiskStorageAccountTypesStandardSSDLRS), + string(disks.DiskStorageAccountTypesUltraSSDLRS), + }, false), + }, + + "target_disk_encryption_set_id": { + Type: pluginsdk.TypeString, + Optional: true, + ForceNew: true, + ValidateFunc: commonids.ValidateDiskEncryptionSetID, + }, + + "target_disk_encryption": { + Type: pluginsdk.TypeList, + Optional: true, + MaxItems: 1, + Elem: diskEncryptionResource(), + }, + }, + }, + } } return resource } From c49ef2a1a90e8d9a701ca65a3b14f546ad94b617 Mon Sep 17 00:00:00 2001 From: Steph Date: Mon, 24 Jun 2024 09:12:51 +0100 Subject: [PATCH 2/2] add configmodeattr to nested list properties --- .../site_recovery_replicated_vm_resource.go | 52 +++++++++++++++++-- 1 file changed, 48 insertions(+), 4 deletions(-) diff --git a/internal/services/recoveryservices/site_recovery_replicated_vm_resource.go b/internal/services/recoveryservices/site_recovery_replicated_vm_resource.go index 84eab502dbd2..39f551a76983 100644 --- a/internal/services/recoveryservices/site_recovery_replicated_vm_resource.go +++ b/internal/services/recoveryservices/site_recovery_replicated_vm_resource.go @@ -390,10 +390,11 @@ func resourceSiteRecoveryReplicatedVM() *pluginsdk.Resource { }, "target_disk_encryption": { - Type: pluginsdk.TypeList, - Optional: true, - MaxItems: 1, - Elem: diskEncryptionResource(), + Type: pluginsdk.TypeList, + Optional: true, + MaxItems: 1, + ConfigMode: pluginsdk.SchemaConfigModeAttr, + Elem: diskEncryptionResource(), }, }, }, @@ -471,6 +472,49 @@ func networkInterfaceResource() *pluginsdk.Resource { } func diskEncryptionResource() *pluginsdk.Resource { + if !features.FourPointOhBeta() { + return &pluginsdk.Resource{ + Schema: map[string]*pluginsdk.Schema{ + "disk_encryption_key": { + Type: pluginsdk.TypeList, + Required: true, + MaxItems: 1, + ConfigMode: pluginsdk.SchemaConfigModeAttr, + Elem: &pluginsdk.Resource{ + Schema: map[string]*pluginsdk.Schema{ + "secret_url": { + Type: pluginsdk.TypeString, + Required: true, + ForceNew: true, + ValidateFunc: keyVaultValidate.NestedItemId, + }, + + "vault_id": commonschema.ResourceIDReferenceRequiredForceNew(&commonids.KeyVaultId{}), + }, + }, + }, + + "key_encryption_key": { + Type: pluginsdk.TypeList, + Optional: true, + MaxItems: 1, + ConfigMode: pluginsdk.SchemaConfigModeAttr, + Elem: &pluginsdk.Resource{ + Schema: map[string]*pluginsdk.Schema{ + "key_url": { + Type: pluginsdk.TypeString, + Required: true, + ForceNew: true, + ValidateFunc: keyVaultValidate.NestedItemId, + }, + + "vault_id": commonschema.ResourceIDReferenceRequiredForceNew(&commonids.KeyVaultId{}), + }, + }, + }, + }, + } + } return &pluginsdk.Resource{ Schema: map[string]*pluginsdk.Schema{ "disk_encryption_key": {