Skip to content

Panic modifying page_rule resource #5577

@VenelinMartinov

Description

@VenelinMartinov

Confirmation

  • This is a bug with an existing resource and is not a feature request or enhancement. Feature requests should be submitted with Cloudflare Support or your account team.
  • I have searched the issue tracker and my issue isn't already found.
  • I have replicated my issue using the latest version of the provider and it is still present.

Terraform and Cloudflare provider version

Terraform v1.11.4
on darwin_arm64

  • provider registry.terraform.io/cloudflare/cloudflare v5.4.0

Affected resource(s)

  • cloudflare_page_rule

Terraform configuration files

terraform {
  required_providers {
    cloudflare = {
      source  = "cloudflare/cloudflare"
      version = "~> 5.0"
    }
  }
}

provider "cloudflare" {}

resource "cloudflare_page_rule" "example" {
  zone_id = "ID"
  target  = "TARGET"
  
  actions = {
    cache_level = "aggressive"
    # cache_ttl_by_status = {}
  }
}

Link to debug output

Panic output

terraform apply -auto-approve
cloudflare_page_rule.example: Refreshing state... [id=ID]

Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:
  ~ update in-place

Terraform will perform the following actions:

  # cloudflare_page_rule.example will be updated in-place
  ~ resource "cloudflare_page_rule" "example" {
      ~ actions     = {
          + cache_ttl_by_status = {}
        }
      ~ created_on  = "2025-05-13T13:38:02Z" -> (known after apply)
        id          = "ID"
      ~ modified_on = "2025-05-13T13:39:00Z" -> (known after apply)
      + target      = "TARGET"
        # (3 unchanged attributes hidden)
    }

Plan: 0 to add, 1 to change, 0 to destroy.
cloudflare_page_rule.example: Modifying... [id=]
╷
│ Error: Plugin did not respond
│ 
│ The plugin encountered an error, and failed to respond to the plugin6.(*GRPCProvider).ApplyResourceChange call. The plugin logs may contain more details.
╵

Stack trace from the terraform-provider-cloudflare_v5.4.0 plugin:

panic: reflect: call of reflect.Value.IsNil on zero Value

goroutine 56 [running]:
reflect.Value.IsNil({0x0?, 0x0?, 0x10c257920?})
	reflect/value.go:1561 +0xec
github.com/cloudflare/terraform-provider-cloudflare/internal/apijson.(*encoder).newTypeEncoder.(*encoder).newMapEncoder.func5({0x10838e060?, 0x140012ffe60?, 0x10838e060?}, {0x0?, 0x0?, 0x105c92a1c?})
	github.com/cloudflare/terraform-provider-cloudflare/internal/apijson/encoder.go:673 +0x64
github.com/cloudflare/terraform-provider-cloudflare/internal/apijson.encoder.newTerraformTypeEncoder.(*encoder).terraformUnwrappedDynamicEncoder.func24({0x108f7c008?, 0x14001295848?}, {0x0?, 0x0?})
	github.com/cloudflare/terraform-provider-cloudflare/internal/apijson/encoder.go:348 +0x16c
github.com/cloudflare/terraform-provider-cloudflare/internal/apijson.encoder.newTerraformTypeEncoder.(*encoder).terraformUnwrappedDynamicEncoder.encoder.handleNullAndUndefined.func34({0x108d0fa80?, 0x14001295848?, 0x108d0fa80?}, {0x0?, 0x0?, 0x105048484?})
	github.com/cloudflare/terraform-provider-cloudflare/internal/apijson/encoder.go:376 +0x28c
github.com/cloudflare/terraform-provider-cloudflare/internal/apijson.encoder.newTerraformTypeEncoder.func12({0x108c7d980?, 0x140012b8b10?, 0x140012c8768?}, {0x108c7d980?, 0x140012e0690?, 0x20?})
	github.com/cloudflare/terraform-provider-cloudflare/internal/apijson/encoder.go:443 +0x354
github.com/cloudflare/terraform-provider-cloudflare/internal/apijson.(*encoder).newStructTypeEncoder.func3({0x108ef81a0?, 0x140012b8908?, 0x140012c8898?}, {0x108ef81a0?, 0x140012e0488?, 0x105048484?})
	github.com/cloudflare/terraform-provider-cloudflare/internal/apijson/encoder.go:551 +0x168
github.com/cloudflare/terraform-provider-cloudflare/internal/apijson.(*encoder).newTypeEncoder.func2({0x108193c40?, 0x14001542410?, 0x140012c8998?}, {0x108193c40?, 0x140015424c0?, 0x140012fadb0?})
	github.com/cloudflare/terraform-provider-cloudflare/internal/apijson/encoder.go:182 +0x43c
github.com/cloudflare/terraform-provider-cloudflare/internal/apijson.(*encoder).newStructTypeEncoder.func3({0x108d69980?, 0x14001542370?, 0x108d69980?}, {0x108d69980?, 0x14001542420?, 0x14001200008?})
	github.com/cloudflare/terraform-provider-cloudflare/internal/apijson/encoder.go:551 +0x168
github.com/cloudflare/terraform-provider-cloudflare/internal/apijson.(*encoder).marshal(0x140012c8b08?, {0x108d69980?, 0x14001542370?}, {0x108d69980?, 0x14001542420?})
	github.com/cloudflare/terraform-provider-cloudflare/internal/apijson/encoder.go:101 +0x14c
github.com/cloudflare/terraform-provider-cloudflare/internal/apijson.MarshalForUpdate({0x108d69980, 0x14001542370}, {0x108d69980, 0x14001542420})
	github.com/cloudflare/terraform-provider-cloudflare/internal/apijson/encoder.go:41 +0x7c
github.com/cloudflare/terraform-provider-cloudflare/internal/services/page_rule.PageRuleModel.marshalCustomForUpdate({{0x2, {0x140010d7540, 0x20}}, {0x2, {0x140010d7580, 0x20}}, {0x2, 0x1}, {0x2, {0x140011a5ca8, ...}}, ...}, ...)
	github.com/cloudflare/terraform-provider-cloudflare/internal/services/page_rule/custom.go:25 +0x58
github.com/cloudflare/terraform-provider-cloudflare/internal/services/page_rule.PageRuleModel.MarshalJSONForUpdate(...)
	github.com/cloudflare/terraform-provider-cloudflare/internal/services/page_rule/model.go:31
github.com/cloudflare/terraform-provider-cloudflare/internal/services/page_rule.(*PageRuleResource).Update(0x1400111c788, {0x108f71228, 0x140012757d0}, {{{{0x108fede78, 0x14001292cc0}, {0x10839f760, 0x1400127de60}}, {0x10901c1f0, 0x14000b2cb40}}, {{{0x108fede78, ...}, ...}, ...}, ...}, ...)
	github.com/cloudflare/terraform-provider-cloudflare/internal/services/page_rule/resource.go:115 +0x288
github.com/hashicorp/terraform-plugin-framework/internal/fwserver.(*Server).UpdateResource(0x14000ac6b48, {0x108f71228, 0x140012757d0}, 0x140012c9428, 0x140012c9400)
	github.com/hashicorp/terraform-plugin-framework@v1.14.1/internal/fwserver/server_updateresource.go:122 +0x53c
github.com/hashicorp/terraform-plugin-framework/internal/fwserver.(*Server).ApplyResourceChange(0x14000ac6b48, {0x108f71228, 0x140012757d0}, 0x140012671d0, 0x140012c95f0)
	github.com/hashicorp/terraform-plugin-framework@v1.14.1/internal/fwserver/server_applyresourcechange.go:102 +0x118
github.com/hashicorp/terraform-plugin-framework/internal/proto6server.(*Server).ApplyResourceChange(0x14000ac6b48, {0x108f71228?, 0x140012756e0?}, 0x14001267130)
	github.com/hashicorp/terraform-plugin-framework@v1.14.1/internal/proto6server/server_applyresourcechange.go:55 +0x2e0
github.com/hashicorp/terraform-plugin-go/tfprotov6/tf6server.(*server).ApplyResourceChange(0x14000aa1400, {0x108f71228?, 0x14001274c90?}, 0x1400012ca80)
	github.com/hashicorp/terraform-plugin-go@v0.26.0/tfprotov6/tf6server/server.go:866 +0x2a8
github.com/hashicorp/terraform-plugin-go/tfprotov6/internal/tfplugin6._Provider_ApplyResourceChange_Handler({0x108e6c320, 0x14000aa1400}, {0x108f71228, 0x14001274c90}, 0x14001177a80, 0x0)
	github.com/hashicorp/terraform-plugin-go@v0.26.0/tfprotov6/internal/tfplugin6/tfplugin6_grpc.pb.go:611 +0x1c0
google.golang.org/grpc.(*Server).processUnaryRPC(0x14000a18200, {0x108f71228, 0x14001274c00}, 0x1400131cc60, 0x1400100e600, 0x10c2498d8, 0x0)
	google.golang.org/grpc@v1.71.0/server.go:1405 +0xca8
google.golang.org/grpc.(*Server).handleStream(0x14000a18200, {0x108f76168, 0x14000b7e000}, 0x1400131cc60)
	google.golang.org/grpc@v1.71.0/server.go:1815 +0x910
google.golang.org/grpc.(*Server).serveStreams.func2.1()
	google.golang.org/grpc@v1.71.0/server.go:1035 +0x84
created by google.golang.org/grpc.(*Server).serveStreams.func2 in goroutine 68
	google.golang.org/grpc@v1.71.0/server.go:1046 +0x13c

Error: The terraform-provider-cloudflare_v5.4.0 plugin crashed!

This is always indicative of a bug within the plugin. It would be immensely
helpful if you could report the crash with the plugin's maintainers so that it
can be fixed. The output above should help diagnose the issue.

Error: exit status 1

Expected output

Not a panic

Actual output

Panic

Steps to reproduce

  1. Create resource
  2. Change the cache_level to cache_ttl_by_status
  3. Run terraform apply

Additional factoids

No response

References

No response

Metadata

Metadata

Assignees

Labels

kind/bugCategorizes issue or PR as related to a bug.version/5Categorizes issue or PR as related to version 5 of the provider.

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions