terraform-provider-cloudflare
terraform-provider-cloudflare copied to clipboard
panic: interface conversion: interface {} is nil, not []interface {}
Confirmation
- [X] My issue isn't already found on the issue tracker.
- [X] I have replicated my issue using the latest version of the provider and it is still present.
Terraform and Cloudflare provider version
1.0.0
Affected resource(s)
- cloudflare_firewall_rule
- cloudflare_load_balancer
- cloudflare_zone_settings_override
- cloudflare_rate_limit
- cloudflare_filter
Terraform configuration files
resource "cloudflare_load_balancer_pool" "dealer-websites" {
for_each = var.load_balancer_pools
name = "dealer-websites-${each.key}"
description = "Dealer Websites - ${title(each.key)}"
enabled = true
check_regions = ["WEU"]
minimum_origins = 1
dynamic "origins" {
for_each = each.value.origins
content {
name = origins.value["name"]
address = origins.value["address"]
weight = lookup(origins.value, "weight", 1)
}
}
monitor = cloudflare_load_balancer_monitor.healthcheck[each.key].id
lifecycle {
ignore_changes = [
origins
]
}
}
resource "cloudflare_load_balancer_monitor" "healthcheck" {
for_each = var.load_balancer_pools
type = "https"
expected_body = ""
expected_codes = lookup(lookup(each.value, "monitor", {}), "expected_codes", "2xx")
method = "GET"
timeout = 7
path = lookup(lookup(each.value, "monitor", {}), "path", "/healthz")
interval = 60
retries = 5
description = lookup(lookup(each.value, "monitor", {}), "description", title(each.key))
allow_insecure = true
follow_redirects = true
dynamic "header" {
for_each = lookup(lookup(each.value, "monitor", {}), "headers", [])
content {
header = header.value["header"]
values = header.value["values"]
}
}
}
resource "cloudflare_load_balancer" "dealer-websites" {
for_each = var.load_balancer_pools
zone_id = cloudflare_zone.default.id
name = "${each.key}-lb.dw1.${var.env}.tld"
fallback_pool_id = cloudflare_load_balancer_pool.dealer-websites[each.key].id
default_pool_ids = [cloudflare_load_balancer_pool.dealer-websites[each.key].id]
description = "Dealer Websites - ${title(each.key)}"
proxied = true
session_affinity = "ip_cookie"
steering_policy = "off"
}
Debug output
2021-11-23T15:28:29.910Z [INFO] provider.terraform-provider-cloudflare_v3.4.0: 2021/11/23 15:28:29 [DEBUG] Read Cloudflare Load Balancer Pool from API as struct: {ID:dae5a71d5ef9db70c3d46a9138a6f3f3 CreatedOn:2020-02-14 14:31:46.226945 +0000 UTC ModifiedOn:2020-03-24 13:50:52.435041 +0000 UTC Description:Dealer Websites - Preprod Name:dealer-websites-preprod Enabled:true MinimumOrigins:1 Monitor:7b13add1698776aa8c411c94e533824f Origins:[{Name:onprem Address<redacted> Enabled:true Weight:0 Header:map[]} {Name:preprod Address:<redacted> Enabled:true Weight:1 Header:map[]}] NotificationEmail: Latitude:<nil> Longitude:<nil> LoadShedding:<nil> OriginSteering:<nil> CheckRegions:[WEU]}: timestamp=2021-11-23T15:28:29.909Z
2021-11-23T15:28:29.923Z [INFO] provider.terraform-provider-cloudflare_v3.4.0: 2021/11/23 15:28:29 [WARN] Truncating attribute path of 0 diagnostics for TypeSet: timestamp=2021-11-23T15:28:29.923Z
2021-11-23T15:28:29.923Z [INFO] provider.terraform-provider-cloudflare_v3.4.0: 2021/11/23 15:28:29 [WARN] Truncating attribute path of 0 diagnostics for TypeSet: timestamp=2021-11-23T15:28:29.923Z
2021-11-23T15:28:29.934Z [WARN] Provider "registry.terraform.io/hashicorp/cloudflare" produced an invalid plan for cloudflare_load_balancer_pool.dealer-websites["preprod"], but we are tolerating it because it is using the legacy plugin SDK.
The following problems may be the cause of any confusing errors from downstream operations:
- .notification_email: planned value cty.StringVal("") for a non-computed attribute
2021-11-23T15:28:29.940Z [INFO] ReferenceTransformer: reference not found: "var.load_balancer_pools"
2021-11-23T15:28:29.940Z [INFO] ReferenceTransformer: reference not found: "cloudflare_load_balancer_pool.dealer-websites"
2021-11-23T15:28:29.940Z [INFO] ReferenceTransformer: reference not found: "each.key"
2021-11-23T15:28:29.940Z [INFO] ReferenceTransformer: reference not found: "each.key"
2021-11-23T15:28:29.941Z [INFO] ReferenceTransformer: reference not found: "var.env"
2021-11-23T15:28:29.941Z [INFO] ReferenceTransformer: reference not found: "each.key"
2021-11-23T15:28:29.941Z [INFO] ReferenceTransformer: reference not found: "cloudflare_load_balancer_pool.dealer-websites"
2021-11-23T15:28:29.941Z [INFO] ReferenceTransformer: reference not found: "each.key"
2021-11-23T15:28:29.941Z [DEBUG] ReferenceTransformer: "cloudflare_load_balancer.dealer-websites[\"preprod\"]" references: []
2021-11-23T15:28:29.947Z [DEBUG] provider.terraform-provider-cloudflare_v3.4.0: PANIC: interface conversion: interface {} is nil, not []interface {}
2021-11-23T15:28:29.947Z [DEBUG] provider.terraform-provider-cloudflare_v3.4.0:
2021-11-23T15:28:29.947Z [DEBUG] provider.terraform-provider-cloudflare_v3.4.0: goroutine 504 [running]:
2021-11-23T15:28:29.947Z [DEBUG] provider.terraform-provider-cloudflare_v3.4.0: github.com/cloudflare/terraform-provider-cloudflare/cloudflare.resourceCloudflareLoadBalancerStateUpgradeV1({0xc00009ba40, 0x5064e5}, 0xc0003c4e10, {0xe3c460, 0xc000400648})
2021-11-23T15:28:29.947Z [DEBUG] provider.terraform-provider-cloudflare_v3.4.0: github.com/cloudflare/terraform-provider-cloudflare/cloudflare/resource_cloudflare_load_balancer_migrate.go:56 +0x29d
2021-11-23T15:28:29.947Z [DEBUG] provider.terraform-provider-cloudflare_v3.4.0: github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema.(*GRPCProviderServer).upgradeJSONState(0xc00000c690, {0x1213c68, 0xc0006b1840}, 0xe3c460, 0xc000400648, 0xc0003a8ab8)
2021-11-23T15:28:29.947Z [DEBUG] provider.terraform-provider-cloudflare_v3.4.0: github.com/hashicorp/terraform-plugin-sdk/[email protected]/helper/schema/grpc_provider.go:424 +0x97
2021-11-23T15:28:29.947Z [DEBUG] provider.terraform-provider-cloudflare_v3.4.0: github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema.(*GRPCProviderServer).UpgradeResourceState(0xc00000c690, {0x1213c68, 0xc0006b1840}, 0xc00056d620)
2021-11-23T15:28:29.947Z [DEBUG] provider.terraform-provider-cloudflare_v3.4.0: github.com/hashicorp/terraform-plugin-sdk/[email protected]/helper/schema/grpc_provider.go:300 +0x365
2021-11-23T15:28:29.947Z [DEBUG] provider.terraform-provider-cloudflare_v3.4.0: github.com/hashicorp/terraform-plugin-go/tfprotov5/tf5server.(*server).UpgradeResourceState(0xc0003819e0, {0x1213d10, 0xc000769da0}, 0xc00059a780)
2021-11-23T15:28:29.947Z [DEBUG] provider.terraform-provider-cloudflare_v3.4.0: github.com/hashicorp/[email protected]/tfprotov5/tf5server/server.go:281 +0x130
2021-11-23T15:28:29.947Z [DEBUG] provider.terraform-provider-cloudflare_v3.4.0: github.com/hashicorp/terraform-plugin-go/tfprotov5/internal/tfplugin5._Provider_UpgradeResourceState_Handler({0xfa9160, 0xc0003819e0}, {0x1213d10, 0xc000769da0}, 0xc000387260, 0x0)
2021-11-23T15:28:29.948Z [DEBUG] provider.terraform-provider-cloudflare_v3.4.0: github.com/hashicorp/[email protected]/tfprotov5/internal/tfplugin5/tfplugin5_grpc.pb.go:308 +0x170
2021-11-23T15:28:29.948Z [DEBUG] provider.terraform-provider-cloudflare_v3.4.0: google.golang.org/grpc.(*Server).processUnaryRPC(0xc0000cb180, {0x12255a8, 0xc000262600}, 0xc00090fd40, 0xc000241dd0, 0x18c2e00, 0x0)
2021-11-23T15:28:29.948Z [DEBUG] provider.terraform-provider-cloudflare_v3.4.0: google.golang.org/[email protected]/server.go:1297 +0xccf
2021-11-23T15:28:29.948Z [DEBUG] provider.terraform-provider-cloudflare_v3.4.0: google.golang.org/grpc.(*Server).handleStream(0xc0000cb180, {0x12255a8, 0xc000262600}, 0xc00090fd40, 0x0)
2021-11-23T15:28:29.948Z [DEBUG] provider.terraform-provider-cloudflare_v3.4.0: google.golang.org/[email protected]/server.go:1626 +0xa2a
2021-11-23T15:28:29.948Z [DEBUG] provider.terraform-provider-cloudflare_v3.4.0: google.golang.org/grpc.(*Server).serveStreams.func1.2()
2021-11-23T15:28:29.949Z [DEBUG] provider.terraform-provider-cloudflare_v3.4.0: google.golang.org/[email protected]/server.go:941 +0x98
2021-11-23T15:28:29.949Z [DEBUG] provider.terraform-provider-cloudflare_v3.4.0: created by google.golang.org/grpc.(*Server).serveStreams.func1
2021-11-23T15:28:29.949Z [DEBUG] provider.terraform-provider-cloudflare_v3.4.0: google.golang.org/[email protected]/server.go:939 +0x294
2021-11-23T15:28:29.957Z [DEBUG] provider: plugin process exited: path=.terraform/providers/registry.terraform.io/hashicorp/cloudflare/3.4.0/linux_amd64/terraform-provider-cloudflare_v3.4.0 pid=141 error="exit status 2"
2021-11-23T15:28:29.957Z [DEBUG] provider.stdio: received EOF, stopping recv loop: err="rpc error: code = Unavailable desc = transport is closing"
2021-11-23T15:28:29.958Z [ERROR] plugin.(*GRPCProvider).ReadResource: error="rpc error: code = Unavailable desc = transport is closing"
2021-11-23T15:28:29.958Z [ERROR] plugin.(*GRPCProvider).ReadResource: error="rpc error: code = Unavailable desc = transport is closing"
2021-11-23T15:28:29.958Z [ERROR] plugin.(*GRPCProvider).ReadResource: error="rpc error: code = Unavailable desc = transport is closing"
2021-11-23T15:28:29.958Z [ERROR] plugin.(*GRPCProvider).ReadResource: error="rpc error: code = Unavailable desc = transport is closing"
2021-11-23T15:28:29.958Z [ERROR] plugin.(*GRPCProvider).UpgradeResourceState: error="rpc error: code = Unavailable desc = transport is closing"
2021-11-23T15:28:29.961Z [INFO] backend/local: plan operation completed
Panic output
No response
Expected output
Plan should execute successfully
Actual output
│ Error: Plugin did not respond
│
│ with cloudflare_load_balancer.dealer-websites["preprod"],
│ on loadbalancers.tf line 52, in resource "cloudflare_load_balancer" "dealer-websites":
│ 52: resource "cloudflare_load_balancer" "dealer-websites" {
│
│ The plugin encountered an error, and failed to respond to the plugin.(*GRPCProvider).UpgradeResourceState call. The plugin logs may contain more details.
...
...
Stack trace from the terraform-provider-cloudflare_v3.4.0 plugin:
panic: interface conversion: interface {} is nil, not []interface {}
goroutine 394 [running]:
github.com/cloudflare/terraform-provider-cloudflare/cloudflare.resourceCloudflareLoadBalancerStateUpgradeV1({0xc00083fa40, 0x5064e5}, 0xc000744d80, {0xe3c460, 0xc0005caed0})
github.com/cloudflare/terraform-provider-cloudflare/cloudflare/resource_cloudflare_load_balancer_migrate.go:56 +0x29d
github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema.(*GRPCProviderServer).upgradeJSONState(0xc0005c2120, {0x1213c68, 0xc0007cd840}, 0xe3c460, 0xc0005caed0, 0xc0007f2ab8)
github.com/hashicorp/terraform-plugin-sdk/[email protected]/helper/schema/grpc_provider.go:424 +0x97
github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema.(*GRPCProviderServer).UpgradeResourceState(0xc0005c2120, {0x1213c68, 0xc0007cd840}, 0xc000381740)
github.com/hashicorp/terraform-plugin-sdk/[email protected]/helper/schema/grpc_provider.go:300 +0x365
github.com/hashicorp/terraform-plugin-go/tfprotov5/tf5server.(*server).UpgradeResourceState(0xc00027ea60, {0x1213d10, 0xc000045950}, 0xc00079f270)
github.com/hashicorp/[email protected]/tfprotov5/tf5server/server.go:281 +0x130
github.com/hashicorp/terraform-plugin-go/tfprotov5/internal/tfplugin5._Provider_UpgradeResourceState_Handler({0xfa9160, 0xc00027ea60}, {0x1213d10, 0xc000045950}, 0xc000387d40, 0x0)
github.com/hashicorp/[email protected]/tfprotov5/internal/tfplugin5/tfplugin5_grpc.pb.go:308 +0x170
google.golang.org/grpc.(*Server).processUnaryRPC(0xc0005d08c0, {0x12255a8, 0xc000528000}, 0xc000751680, 0xc000279bc0, 0x18c2e00, 0x0)
google.golang.org/[email protected]/server.go:1297 +0xccf
google.golang.org/grpc.(*Server).handleStream(0xc0005d08c0, {0x12255a8, 0xc000528000}, 0xc000751680, 0x0)
google.golang.org/[email protected]/server.go:1626 +0xa2a
google.golang.org/grpc.(*Server).serveStreams.func1.2()
google.golang.org/[email protected]/server.go:941 +0x98
created by google.golang.org/grpc.(*Server).serveStreams.func1
google.golang.org/[email protected]/server.go:939 +0x294
Error: The terraform-provider-cloudflare_v3.4.0 plugin crashed!
Steps to reproduce
Still working on an exact reproduction scenario
Additional factoids
Upgrading cloudflare plugin version from 2.x
to 3.4.0
We do have other Terraform repos using some of the same resources that are erroring that planned OK with the 3.4.0
plugin
References
No response
I had the same issue attempting to run a plan on:
- cloudflare_firewall_rule
- cloudflare_load_balancer
- cloudflare_zone_settings_override
Same Cloudflare provider version (3.4.0) using Terraform 1.0.9.
I found the issue was due to the state, specifically of the loadbalancer. Comparing the state of a working example and the failing one, I noticed these attributes were missing from the state:
"rules": [],
"session_affinity_attributes": null,
"session_affinity_ttl": null,
Adding these manually to the state file resolved the issue for me.
closing this out since this is now quite old and shouldn't be an issue when upgrading.