Skip to content

Commit 54705e5

Browse files
committed
update per comments
1 parent 5bbe7d7 commit 54705e5

File tree

2 files changed

+107
-1
lines changed

2 files changed

+107
-1
lines changed

internal/services/logic/logic_app_standard_resource.go

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -331,6 +331,34 @@ func (r LogicAppResource) ResourceType() string {
331331
return "azurerm_logic_app_standard"
332332
}
333333

334+
func (r LogicAppResource) CustomizeDiff() sdk.ResourceFunc {
335+
return sdk.ResourceFunc{
336+
Timeout: 5 * time.Minute,
337+
Func: func(ctx context.Context, metadata sdk.ResourceMetaData) error {
338+
// Since `key_vault_reference_identity_id` is O+C, if it's removed from the config, the value get below is still the old value.
339+
if metadata.ResourceDiff.GetRawConfig().GetAttr("key_vault_reference_identity_id").IsNull() {
340+
return nil
341+
}
342+
343+
keyVaultReferenceIdentityId := metadata.ResourceDiff.Get("key_vault_reference_identity_id").(string)
344+
if keyVaultReferenceIdentityId == "" || strings.EqualFold(keyVaultReferenceIdentityId, "SystemAssigned") {
345+
return nil
346+
}
347+
348+
identityIdsRaw := metadata.ResourceDiff.Get("identity.0.identity_ids").(*pluginsdk.Set)
349+
identityIds := identityIdsRaw.List()
350+
351+
for _, id := range identityIds {
352+
if strings.EqualFold(id.(string), keyVaultReferenceIdentityId) {
353+
return nil
354+
}
355+
}
356+
357+
return fmt.Errorf("`key_vault_reference_identity_id` must be an identity assigned to this resource in the `identity` block, got `%s`", keyVaultReferenceIdentityId)
358+
},
359+
}
360+
}
361+
334362
func (r LogicAppResource) Create() sdk.ResourceFunc {
335363
return sdk.ResourceFunc{
336364
Timeout: 30 * time.Minute,
@@ -911,7 +939,8 @@ func (r LogicAppResource) Update() sdk.ResourceFunc {
911939
}
912940
}
913941

914-
var _ sdk.ResourceWithUpdate = &LogicAppResource{}
942+
var _ sdk.ResourceWithUpdate = LogicAppResource{}
943+
var _ sdk.ResourceWithCustomizeDiff = LogicAppResource{}
915944

916945
func getBasicLogicAppSettings(d LogicAppResourceModel, endpointSuffix string) ([]webapps.NameValuePair, error) {
917946
appKindPropName := "APP_KIND"

internal/services/logic/logic_app_standard_resource_test.go

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ package logic_test
66
import (
77
"context"
88
"fmt"
9+
"regexp"
910
"strings"
1011
"testing"
1112

@@ -1111,6 +1112,18 @@ func TestAccLogicAppStandard_vnetContentShareEnabled(t *testing.T) {
11111112
})
11121113
}
11131114

1115+
func TestAccLogicAppStandard_keyVaultReferenceIdentityInvalid(t *testing.T) {
1116+
data := acceptance.BuildTestData(t, "azurerm_logic_app_standard", "test")
1117+
r := LogicAppStandardResource{}
1118+
1119+
data.ResourceTest(t, r, []acceptance.TestStep{
1120+
{
1121+
Config: r.keyVaultReferenceIdentityInvalid(data),
1122+
ExpectError: regexp.MustCompile("`key_vault_reference_identity_id` must be an identity assigned to this resource in the `identity` block"),
1123+
},
1124+
})
1125+
}
1126+
11141127
func TestAccLogicAppStandard_keyVaultReferenceIdentity(t *testing.T) {
11151128
data := acceptance.BuildTestData(t, "azurerm_logic_app_standard", "test")
11161129
r := LogicAppStandardResource{}
@@ -1142,6 +1155,14 @@ func TestAccLogicAppStandard_keyVaultReferenceIdentity(t *testing.T) {
11421155
),
11431156
},
11441157
data.ImportStep(),
1158+
{
1159+
Config: r.keyVaultReferenceSysmtemAssignedIdentity(data),
1160+
Check: acceptance.ComposeTestCheckFunc(
1161+
check.That(data.ResourceName).ExistsInAzure(r),
1162+
check.That(data.ResourceName).Key("key_vault_reference_identity_id").HasValue("SystemAssigned"),
1163+
),
1164+
},
1165+
data.ImportStep(),
11451166
})
11461167
}
11471168

@@ -2688,6 +2709,40 @@ resource "azurerm_logic_app_standard" "test" {
26882709
`, r.template(data), data.RandomInteger, enabled)
26892710
}
26902711

2712+
func (r LogicAppStandardResource) keyVaultReferenceIdentityInvalid(data acceptance.TestData) string {
2713+
return fmt.Sprintf(`
2714+
%[1]s
2715+
2716+
resource "azurerm_user_assigned_identity" "test" {
2717+
name = "acctest-%[2]d"
2718+
resource_group_name = azurerm_resource_group.test.name
2719+
location = azurerm_resource_group.test.location
2720+
}
2721+
2722+
resource "azurerm_user_assigned_identity" "other" {
2723+
name = "acctest-other-%[2]d"
2724+
resource_group_name = azurerm_resource_group.test.name
2725+
location = azurerm_resource_group.test.location
2726+
}
2727+
2728+
resource "azurerm_logic_app_standard" "test" {
2729+
name = "acctest-%[2]d-func"
2730+
location = azurerm_resource_group.test.location
2731+
resource_group_name = azurerm_resource_group.test.name
2732+
app_service_plan_id = azurerm_app_service_plan.test.id
2733+
storage_account_name = azurerm_storage_account.test.name
2734+
storage_account_access_key = azurerm_storage_account.test.primary_access_key
2735+
2736+
identity {
2737+
type = "UserAssigned"
2738+
identity_ids = [azurerm_user_assigned_identity.test.id]
2739+
}
2740+
2741+
key_vault_reference_identity_id = azurerm_user_assigned_identity.other.id
2742+
}
2743+
`, r.template(data), data.RandomInteger)
2744+
}
2745+
26912746
func (r LogicAppStandardResource) keyVaultReferenceIdentity(data acceptance.TestData) string {
26922747
return fmt.Sprintf(`
26932748
%[1]s
@@ -2715,3 +2770,25 @@ resource "azurerm_logic_app_standard" "test" {
27152770
}
27162771
`, r.template(data), data.RandomInteger)
27172772
}
2773+
2774+
func (r LogicAppStandardResource) keyVaultReferenceSysmtemAssignedIdentity(data acceptance.TestData) string {
2775+
return fmt.Sprintf(`
2776+
%s
2777+
2778+
resource "azurerm_logic_app_standard" "test" {
2779+
name = "acctest-%d-func"
2780+
location = azurerm_resource_group.test.location
2781+
resource_group_name = azurerm_resource_group.test.name
2782+
app_service_plan_id = azurerm_app_service_plan.test.id
2783+
storage_account_name = azurerm_storage_account.test.name
2784+
storage_account_access_key = azurerm_storage_account.test.primary_access_key
2785+
2786+
identity {
2787+
type = "SystemAssigned"
2788+
}
2789+
2790+
key_vault_reference_identity_id = "systemAssigned"
2791+
2792+
}
2793+
`, r.template(data), data.RandomInteger)
2794+
}

0 commit comments

Comments
 (0)