-
Notifications
You must be signed in to change notification settings - Fork 605
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Do not use TypeMap for non-primitive types, use TypeList
Currently, TypeMap doesn't support non-primitive type values. ref : hashicorp/terraform-plugin-sdk#62 When using non-primitive values with TypeMap, terraform crashes at runtime with a following error message. ``` panic: Unknown validation type: 6 ``` This error is originated at https://github.com/hashicorp/terraform-plugin-sdk/blob/v2.11.0/helper/schema/schema.go#L2017 Only TypeBool, TypeInt, TypeFloat and TypeString are supported. So, in this change, use TypeList with new custom resource to store non-primitive values.
- Loading branch information
Showing
4 changed files
with
123 additions
and
5 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
```release-note:bug | ||
resource/cloudflare_notification_policy: Fix unexpected crashes when using cloudflare_notification_policy with a filters attribute | ||
``` |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -84,3 +84,103 @@ func testCheckCloudflareNotificationPolicyUpdated(resName, policyName, policyDes | |
} | ||
}`, resName, policyName, policyDesc, accountID) | ||
} | ||
|
||
func TestAccCloudflareNotificationPolicyWithFiltersAttribute(t *testing.T) { | ||
// Temporarily unset CLOUDFLARE_API_TOKEN if it is set as the notification | ||
// service does not yet support the API tokens and it results in | ||
// misleading state error messages. | ||
if os.Getenv("CLOUDFLARE_API_TOKEN") != "" { | ||
defer func(apiToken string) { | ||
os.Setenv("CLOUDFLARE_API_TOKEN", apiToken) | ||
}(os.Getenv("CLOUDFLARE_API_TOKEN")) | ||
os.Setenv("CLOUDFLARE_API_TOKEN", "") | ||
} | ||
|
||
rnd := generateRandomResourceName() | ||
resourceName := "cloudflare_notification_policy." + rnd | ||
updatedPolicyName := "updated Advanced Security Events Alert from terraform provider" | ||
updatedPolicyDesc := "updated description" | ||
accountID := os.Getenv("CLOUDFLARE_ACCOUNT_ID") | ||
zoneID := os.Getenv("CLOUDFLARE_ZONE_ID") | ||
|
||
resource.Test(t, resource.TestCase{ | ||
PreCheck: func() { | ||
testAccPreCheckAccount(t) | ||
}, | ||
Providers: testAccProviders, | ||
Steps: []resource.TestStep{ | ||
{ | ||
Config: testCheckCloudflareNotificationPolicyWithFiltersAttribute(rnd, accountID, zoneID), | ||
Check: resource.ComposeTestCheckFunc( | ||
resource.TestCheckResourceAttr(resourceName, "name", "test Advanced Security Events Alert from terraform provider"), | ||
resource.TestCheckResourceAttr(resourceName, "description", "test description"), | ||
resource.TestCheckResourceAttr(resourceName, "enabled", "true"), | ||
resource.TestCheckResourceAttr(resourceName, "alert_type", "clickhouse_alert_fw_ent_anomaly"), | ||
resource.TestCheckResourceAttr(resourceName, "account_id", accountID), | ||
resource.TestCheckResourceAttr(resourceName, "filters.0.services.#", "1"), | ||
resource.TestCheckResourceAttr(resourceName, "filters.0.services.0", "waf"), | ||
resource.TestCheckResourceAttr(resourceName, "filters.0.zones.#", "1"), | ||
resource.TestCheckResourceAttr(resourceName, "filters.0.zones.0", zoneID), | ||
), | ||
}, | ||
{ | ||
Config: testCheckCloudflareNotificationPolicyWithFiltersAttributeUpdated(rnd, updatedPolicyName, updatedPolicyDesc, accountID, zoneID), | ||
Check: resource.ComposeTestCheckFunc( | ||
resource.TestCheckResourceAttr(resourceName, "name", updatedPolicyName), | ||
resource.TestCheckResourceAttr(resourceName, "description", updatedPolicyDesc), | ||
resource.TestCheckResourceAttr(resourceName, "enabled", "true"), | ||
resource.TestCheckResourceAttr(resourceName, "alert_type", "clickhouse_alert_fw_ent_anomaly"), | ||
resource.TestCheckResourceAttr(resourceName, "account_id", accountID), | ||
resource.TestCheckResourceAttr(resourceName, "filters.0.services.#", "2"), | ||
resource.TestCheckResourceAttr(resourceName, "filters.0.services.0", "waf"), | ||
resource.TestCheckResourceAttr(resourceName, "filters.0.services.1", "firewallrules"), | ||
resource.TestCheckResourceAttr(resourceName, "filters.0.zones.#", "1"), | ||
resource.TestCheckResourceAttr(resourceName, "filters.0.zones.0", zoneID), | ||
), | ||
}, | ||
}, | ||
}) | ||
} | ||
|
||
func testCheckCloudflareNotificationPolicyWithFiltersAttribute(name, accountID, zoneID string) string { | ||
return fmt.Sprintf(` | ||
resource "cloudflare_notification_policy" "%[1]s" { | ||
name = "test Advanced Security Events Alert from terraform provider" | ||
account_id = "%[2]s" | ||
description = "test description" | ||
enabled = true | ||
alert_type = "clickhouse_alert_fw_ent_anomaly" | ||
email_integration { | ||
name = "" | ||
id = "[email protected]" | ||
} | ||
filters { | ||
services = [ | ||
"waf", | ||
] | ||
zones = ["%[3]s"] | ||
} | ||
}`, name, accountID, zoneID) | ||
} | ||
|
||
func testCheckCloudflareNotificationPolicyWithFiltersAttributeUpdated(resName, policyName, policyDesc, accountID, zoneID string) string { | ||
return fmt.Sprintf(` | ||
resource "cloudflare_notification_policy" "%[1]s" { | ||
name = "%[2]s" | ||
account_id = "%[4]s" | ||
description = "%[3]s" | ||
enabled = true | ||
alert_type = "clickhouse_alert_fw_ent_anomaly" | ||
email_integration { | ||
name = "" | ||
id = "[email protected]" | ||
} | ||
filters { | ||
services = [ | ||
"waf", | ||
"firewallrules", | ||
] | ||
zones = ["%[5]s"] | ||
} | ||
}`, resName, policyName, policyDesc, accountID, zoneID) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters