Skip to content

Commit

Permalink
CUSTESC-29915: unify output for rules without rule settings
Browse files Browse the repository at this point in the history
  • Loading branch information
alyssamw committed Jun 15, 2023
1 parent 2cca192 commit fb2d9c1
Show file tree
Hide file tree
Showing 3 changed files with 63 additions and 2 deletions.
3 changes: 3 additions & 0 deletions .changelog/2532.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
```release-note:bug
resource/cloudflare_teams_rules.go: unify output for rules without rule settings
```
12 changes: 10 additions & 2 deletions internal/sdkv2provider/resource_cloudflare_teams_rules.go
Original file line number Diff line number Diff line change
Expand Up @@ -73,8 +73,16 @@ func resourceCloudflareTeamsRuleRead(ctx context.Context, d *schema.ResourceData
if err := d.Set("version", int64(rule.Version)); err != nil {
return diag.FromErr(fmt.Errorf("error parsing rule version"))
}
if err := d.Set("rule_settings", flattenTeamsRuleSettings(&rule.RuleSettings)); err != nil {
return diag.FromErr(fmt.Errorf("error parsing rule settings"))
empty := func(s cloudflare.TeamsRuleSettings) bool {
return len(s.OverrideIPs) == 0 && s.BlockReason == "" && s.OverrideHost == "" &&
s.BISOAdminControls != nil && s.L4Override != nil && len(s.AddHeaders) == 0 &&
s.CheckSession == nil && s.BlockPageEnabled == false && s.InsecureDisableDNSSECValidation == false &&
s.EgressSettings == nil
}
if !empty(rule.RuleSettings) {
if err := d.Set("rule_settings", flattenTeamsRuleSettings(&rule.RuleSettings)); err != nil {
return diag.FromErr(fmt.Errorf("error parsing rule settings"))
}
}
return nil
}
Expand Down
50 changes: 50 additions & 0 deletions internal/sdkv2provider/resource_cloudflare_teams_rules_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,56 @@ resource "cloudflare_teams_rule" "%[1]s" {
`, rnd, accountID)
}

func TestAccCloudflareTeamsRuleNoSettings(t *testing.T) {
// Temporarily unset CLOUDFLARE_API_TOKEN if it is set as the Access
// service does not yet support the API tokens and it results in
// misleading state error messages.
if os.Getenv("CLOUDFLARE_API_TOKEN") != "" {
t.Setenv("CLOUDFLARE_API_TOKEN", "")
}

rnd := generateRandomResourceName()
name := fmt.Sprintf("cloudflare_teams_rule.%s", rnd)

resource.Test(t, resource.TestCase{
PreCheck: func() {
testAccPreCheck(t)
testAccPreCheck(t)
},
ProviderFactories: providerFactories,
CheckDestroy: testAccCheckCloudflareTeamsRuleDestroy,
Steps: []resource.TestStep{
{
Config: testAccCloudflareTeamsRuleConfigBasic(rnd, accountID),
Check: resource.ComposeTestCheckFunc(
resource.TestCheckResourceAttr(name, consts.AccountIDSchemaKey, accountID),
resource.TestCheckResourceAttr(name, "name", rnd),
resource.TestCheckResourceAttr(name, "description", "desc"),
resource.TestCheckResourceAttr(name, "precedence", "12302"),
resource.TestCheckResourceAttr(name, "action", "block"),
resource.TestCheckResourceAttr(name, "filters.0", "dns"),
resource.TestCheckResourceAttr(name, "traffic", "any(dns.domains[*] == \"example.com\")"),
resource.TestCheckResourceAttr(name, "rule_settings", "null"),
),
},
},
})
}

func testAccCloudflareTeamsRuleConfigNoSettings(rnd, accountID string) string {
return fmt.Sprintf(`
resource "cloudflare_teams_rule" "%[1]s" {
name = "%[1]s"
account_id = "%[2]s"
description = "desc"
precedence = 12302
action = "block"
filters = ["dns"]
traffic = "any(dns.domains[*] == \"example.com\")"
}
`, rnd, accountID)
}

func testAccCheckCloudflareTeamsRuleDestroy(s *terraform.State) error {
client := testAccProvider.Meta().(*cloudflare.API)

Expand Down

0 comments on commit fb2d9c1

Please sign in to comment.