Skip to content

Commit

Permalink
GATE-2661: Fixes issue with rule precedence updates by using a genera…
Browse files Browse the repository at this point in the history
…ted version of precendence in API calls to reduce clashing versions
  • Loading branch information
norwoodj committed Jun 1, 2022
1 parent aeee4ae commit 08987e9
Showing 1 changed file with 19 additions and 5 deletions.
24 changes: 19 additions & 5 deletions internal/provider/resource_cloudflare_teams_rules.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,8 @@ func resourceCloudflareTeamsRule() *schema.Resource {
}
}

const rulePrecedenceFactor = 1000

func resourceCloudflareTeamsRuleRead(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
client := meta.(*cloudflare.API)
accountID := d.Get("account_id").(string)
Expand All @@ -45,7 +47,7 @@ func resourceCloudflareTeamsRuleRead(ctx context.Context, d *schema.ResourceData
if err := d.Set("description", rule.Description); err != nil {
return diag.FromErr(fmt.Errorf("error parsing rule description"))
}
if err := d.Set("precedence", int64(rule.Precedence)); err != nil {
if err := d.Set("precedence", apiToProviderRulePrecedence(rule.Precedence, rule.Name)); err != nil {
return diag.FromErr(fmt.Errorf("error parsing rule precedence"))
}
if err := d.Set("enabled", rule.Enabled); err != nil {
Expand Down Expand Up @@ -86,10 +88,12 @@ func resourceCloudflareTeamsRuleCreate(ctx context.Context, d *schema.ResourceDa
filters = append(filters, cloudflare.TeamsFilterType(f.(string)))
}

ruleName := d.Get("name").(string)
apiPrecedence := providerToApiRulePrecedence(uint64(d.Get("precedence").(int)), ruleName)
newTeamsRule := cloudflare.TeamsRule{
Name: d.Get("name").(string),
Name: ruleName,
Description: d.Get("description").(string),
Precedence: uint64(d.Get("precedence").(int)),
Precedence: apiPrecedence,
Enabled: d.Get("enabled").(bool),
Action: cloudflare.TeamsGatewayAction(d.Get("action").(string)),
Filters: filters,
Expand Down Expand Up @@ -124,11 +128,13 @@ func resourceCloudflareTeamsRuleUpdate(ctx context.Context, d *schema.ResourceDa
filters = append(filters, cloudflare.TeamsFilterType(f.(string)))
}

ruleName := d.Get("name").(string)
apiPrecedence := providerToApiRulePrecedence(uint64(d.Get("precedence").(int)), ruleName)
teamsRule := cloudflare.TeamsRule{
ID: d.Id(),
Name: d.Get("name").(string),
Name: ruleName,
Description: d.Get("description").(string),
Precedence: uint64(d.Get("precedence").(int)),
Precedence: apiPrecedence,
Enabled: d.Get("enabled").(bool),
Action: cloudflare.TeamsGatewayAction(d.Get("action").(string)),
Filters: filters,
Expand Down Expand Up @@ -355,3 +361,11 @@ func inflateTeamsL4Override(settings interface{}) *cloudflare.TeamsL4OverrideSet
Port: port,
}
}

func providerToApiRulePrecedence(provided uint64, ruleName string) uint64 {
return provided*rulePrecedenceFactor + uint64(hashCodeString(ruleName)%rulePrecedenceFactor)
}

func apiToProviderRulePrecedence(apiPrecedence uint64, ruleName string) uint64 {
return (apiPrecedence - uint64(hashCodeString(ruleName)%rulePrecedenceFactor)) / rulePrecedenceFactor
}

0 comments on commit 08987e9

Please sign in to comment.