terraform-provider-datadog: datadog_screenboard - panic: interface conversion: interface {} is string, not float64

Terraform Version

$ terraform -v
Terraform v0.11.10
+ provider.datadog v1.5.0

Affected Resource(s)

  • datadog_screenboard

Terraform Configuration Files

resource "datadog_screenboard" "example" {
  title     = "Datadog Terraform Testing"
  read_only = false

  widget {
    type        = "timeseries"
    x           = 25
    y           = 5
    title       = "graph title terraform"
    title_size  = 16
    title_align = "right"
    legend      = true
    legend_size = 16

    time {
      live_span = "1d"
    }

    tile_def {
      viz = "timeseries"

      request {
        q    = "avg:system.cpu.user{*}"
        type = "line"

        style {
          palette = "purple"
          type    = "dashed"
          width   = "thin"
        }
      }

      marker {
        label = "test marker"
        type  = "error dashed"
        value = "y < 6"
      }

      event {
        q = "test event"
      }
    }
  }
}

Panic Output

https://gist.github.com/sudomateo/14662ec6cd8684cef2a8f6d6b9499649

Expected Behavior

The terraform apply command should have created the datadog_screenboard resource successfully.

Actual Behavior

The terraform apply command produced a panic as noted above.

Steps to Reproduce

  1. Create main.tf with the content above.
  2. Run terraform init to download the Datadog provider plugin.
  3. Run terraform plan to verify the plan output.
  4. Run terraform apply to apply the plan. Enter yes when prompted.
  5. Note the crash.

Important Factoids

After testing with previous commits, it seems that this issue was introduced by commit 19ba2e52a2ee8218716157608b40a215c15d798c. However, you’ll have to build using commit bd8075f19b50ff62cc391c5238054dc390143eb9 if you want to compile the provider plugin successfully.

Also, even the acceptance tests are failing:

$ pwd
/Users/msanabria/go/src/github.com/terraform-providers/terraform-provider-datadog/datadog

$ TF_ACC=1 go test -run TestAccDatadogScreenboard_update -v -timeout 120m
=== RUN   TestAccDatadogScreenboard_update
panic: interface conversion: interface {} is string, not float64

goroutine 1931 [running]:
github.com/terraform-providers/terraform-provider-datadog/datadog.setJSONNumberFromDict(0xc0005b6330, 0x19780e4, 0x9, 0xc0000f6120)
	/Users/msanabria/go/src/github.com/terraform-providers/terraform-provider-datadog/datadog/resource_datadog_screenboard.go:601 +0x13d
github.com/terraform-providers/terraform-provider-datadog/datadog.setFromDict(0xc0005b6330, 0x19780e4, 0x9, 0x17fc940, 0xc0000f6120)
	/Users/msanabria/go/src/github.com/terraform-providers/terraform-provider-datadog/datadog/resource_datadog_screenboard.go:624 +0x24d
github.com/terraform-providers/terraform-provider-datadog/datadog.batchSetFromDict(0xc0005b6330, 0xc000554a38, 0xa, 0xa)
	/Users/msanabria/go/src/github.com/terraform-providers/terraform-provider-datadog/datadog/resource_datadog_screenboard.go:644 +0x7e
github.com/terraform-providers/terraform-provider-datadog/datadog.buildTileDef(0x181e300, 0xc000350ba0, 0x1977607)
	/Users/msanabria/go/src/github.com/terraform-providers/terraform-provider-datadog/datadog/resource_datadog_screenboard.go:795 +0x1dc
github.com/terraform-providers/terraform-provider-datadog/datadog.buildWidgets(0xc0005554b8, 0x1978162, 0x9, 0x1823ea0)
	/Users/msanabria/go/src/github.com/terraform-providers/terraform-provider-datadog/datadog/resource_datadog_screenboard.go:940 +0x882
github.com/terraform-providers/terraform-provider-datadog/datadog.buildScreenboard(0xc000280150, 0xc000555548, 0x102d321, 0x19ba9a8)
	/Users/msanabria/go/src/github.com/terraform-providers/terraform-provider-datadog/datadog/resource_datadog_screenboard.go:963 +0x3c3
github.com/terraform-providers/terraform-provider-datadog/datadog.resourceDatadogScreenboardCreate(0xc000280150, 0x1970080, 0xc00063de40, 0x24, 0x21dec60)
	/Users/msanabria/go/src/github.com/terraform-providers/terraform-provider-datadog/datadog/resource_datadog_screenboard.go:969 +0x35
github.com/terraform-providers/terraform-provider-datadog/vendor/github.com/hashicorp/terraform/helper/schema.(*Resource).Apply(0xc0002817a0, 0xc0004140f0, 0xc00047e480, 0x1970080, 0xc00063de40, 0xc0003cc001, 0x43, 0x0)
	/Users/msanabria/go/src/github.com/terraform-providers/terraform-provider-datadog/vendor/github.com/hashicorp/terraform/helper/schema/resource.go:225 +0x351
github.com/terraform-providers/terraform-provider-datadog/vendor/github.com/hashicorp/terraform/helper/schema.(*Provider).Apply(0xc0002818f0, 0xc0001f61e0, 0xc0004140f0, 0xc00047e480, 0x1, 0x107e533, 0x0)
	/Users/msanabria/go/src/github.com/terraform-providers/terraform-provider-datadog/vendor/github.com/hashicorp/terraform/helper/schema/provider.go:283 +0x9c
github.com/terraform-providers/terraform-provider-datadog/vendor/github.com/hashicorp/terraform/terraform.(*EvalApply).Eval(0xc0003f3e40, 0x1b06360, 0xc0001c3d40, 0x2, 0x2, 0x197355f, 0x4)
	/Users/msanabria/go/src/github.com/terraform-providers/terraform-provider-datadog/vendor/github.com/hashicorp/terraform/terraform/eval_apply.go:57 +0x226
github.com/terraform-providers/terraform-provider-datadog/vendor/github.com/hashicorp/terraform/terraform.EvalRaw(0x1af7500, 0xc0003f3e40, 0x1b06360, 0xc0001c3d40, 0x0, 0x0, 0x0, 0x0)
	/Users/msanabria/go/src/github.com/terraform-providers/terraform-provider-datadog/vendor/github.com/hashicorp/terraform/terraform/eval.go:53 +0x156
github.com/terraform-providers/terraform-provider-datadog/vendor/github.com/hashicorp/terraform/terraform.(*EvalSequence).Eval(0xc000351ba0, 0x1b06360, 0xc0001c3d40, 0x2, 0x2, 0x197355f, 0x4)
	/Users/msanabria/go/src/github.com/terraform-providers/terraform-provider-datadog/vendor/github.com/hashicorp/terraform/terraform/eval_sequence.go:14 +0x9c
github.com/terraform-providers/terraform-provider-datadog/vendor/github.com/hashicorp/terraform/terraform.EvalRaw(0x1af7a40, 0xc000351ba0, 0x1b06360, 0xc0001c3d40, 0x18660c0, 0x2156502, 0x182bf20, 0xc0003b6570)
	/Users/msanabria/go/src/github.com/terraform-providers/terraform-provider-datadog/vendor/github.com/hashicorp/terraform/terraform/eval.go:53 +0x156
github.com/terraform-providers/terraform-provider-datadog/vendor/github.com/hashicorp/terraform/terraform.Eval(0x1af7a40, 0xc000351ba0, 0x1b06360, 0xc0001c3d40, 0xc000351ba0, 0x1af7a40, 0xc000351ba0, 0x19bab48)
	/Users/msanabria/go/src/github.com/terraform-providers/terraform-provider-datadog/vendor/github.com/hashicorp/terraform/terraform/eval.go:34 +0x4d
github.com/terraform-providers/terraform-provider-datadog/vendor/github.com/hashicorp/terraform/terraform.(*Graph).walk.func1(0x19412e0, 0xc00040e000, 0x0, 0x0)
	/Users/msanabria/go/src/github.com/terraform-providers/terraform-provider-datadog/vendor/github.com/hashicorp/terraform/terraform/graph.go:126 +0xc45
github.com/terraform-providers/terraform-provider-datadog/vendor/github.com/hashicorp/terraform/dag.(*Walker).walkVertex(0xc0003702a0, 0x19412e0, 0xc00040e000, 0xc00063d680)
	/Users/msanabria/go/src/github.com/terraform-providers/terraform-provider-datadog/vendor/github.com/hashicorp/terraform/dag/walk.go:387 +0x367
created by github.com/terraform-providers/terraform-provider-datadog/vendor/github.com/hashicorp/terraform/dag.(*Walker).Update
	/Users/msanabria/go/src/github.com/terraform-providers/terraform-provider-datadog/vendor/github.com/hashicorp/terraform/dag/walk.go:310 +0x986
exit status 2
FAIL	github.com/terraform-providers/terraform-provider-datadog/datadog	1.165s

About this issue

  • Original URL
  • State: closed
  • Created 6 years ago
  • Reactions: 2
  • Comments: 24 (9 by maintainers)

Commits related to this issue

Most upvoted comments

Yeah, it seems if I jump from 0.14 to 0.16 I have to delete the board, state rm it from my state file then re-create the dashboard. No reason to open this, but others may find this report helpful.

The root cause is fixed locally (bypass the conversion logic that assumes everything is a float) but the fix is taking more time than expected due to recent changes to the client. In particular, the client changed the type for some of the Precision fields on the different structs that support it from string to json.Number, making impossible to encode valid configs like precision: "*". I opened https://github.com/zorkian/go-datadog-api/pull/193 to revert all the fields to the string type but in the meantime https://github.com/zorkian/go-datadog-api/pull/190 was merged and acceptance tests don’t pass anymore, opened https://github.com/zorkian/go-datadog-api/issues/192 to discuss the issue.

From doing some digging – this is happening on state retrieval, so the HCL isn’t what I need to show – it look as though I have a "height": "", in my response. Looks like I didn’t specify a height and am entrusting Datadog to do the right thing? 😃

Hey @masci, I’m getting this error now in 1.6.0 for Screenboard.height:

json: cannot unmarshal string into Go struct field Screenboard.height of type int

versions:

$ terraform -v
Terraform v0.11.10
+ provider.datadog v1.6.0