-
Notifications
You must be signed in to change notification settings - Fork 6
Open
Description
coder/coderd Version: v0.0.12
Running into the following error for both the tf_vars and provisioner_tags attributes
│ Error: Value Conversion Error
│
│ with module.ai-coder-com-coder.coderd_template.this,
│ on ../modules/template/main.tf line 77, in resource "coderd_template" "this":
│ 77: resource "coderd_template" "this" {
│
│ An unexpected error was encountered trying to build a value. This is always an error in the provider. Please report the following to the provider developer:
│
│ Received unknown value, however the target type cannot handle unknown values. Use the corresponding `types` package type or a custom type that handles unknown values.
│
│ Path: [0].tf_vars
│ Target Type: []provider.Variable
│ Suggested Type: basetypes.SetValue
Full trace output:
2026-02-23T12:12:30.572-0800 [ERROR] provider.terraform-provider-coderd_v0.0.12: Response contains error diagnostic: tf_proto_version=6.9 tf_rpc=ValidateResourceConfig @module=sdk.proto diagnostic_attribute="ElementKeyInt(0).AttributeName(\"tf_vars\")" diagnostic_severity=ERROR diagnostic_summary="Value Conversion Error" tf_provider_addr=registry.terraform.io/coder/coderd tf_req_id=4c9eed24-af71-1c06-0acd-8d0342e91694 tf_resource_type=coderd_template @caller=github.com/hashicorp/terraform-plugin-go@v0.28.0/tfprotov6/internal/diag/diagnostics.go:58
diagnostic_detail=
| An unexpected error was encountered trying to build a value. This is always an error in the provider. Please report the following to the provider developer:
|
| Received unknown value, however the target type cannot handle unknown values. Use the corresponding `types` package type or a custom type that handles unknown values.
|
| Path: [0].tf_vars
| Target Type: []provider.Variable
| Suggested Type: basetypes.SetValue
timestamp=2026-02-23T12:12:30.548-0800
2026-02-23T12:12:30.572-0800 [ERROR] provider.terraform-provider-coderd_v0.0.12: Response contains error diagnostic: tf_proto_version=6.9 diagnostic_attribute="ElementKeyInt(0).AttributeName(\"tf_vars\")" tf_provider_addr=registry.terraform.io/coder/coderd tf_req_id=86de3acb-51e9-701e-efea-e819f02dd0ce tf_resource_type=coderd_template tf_rpc=ValidateResourceConfig @caller=github.com/hashicorp/terraform-plugin-go@v0.28.0/tfprotov6/internal/diag/diagnostics.go:58 @module=sdk.proto
diagnostic_detail=
| An unexpected error was encountered trying to build a value. This is always an error in the provider. Please report the following to the provider developer:
|
| Received unknown value, however the target type cannot handle unknown values. Use the corresponding `types` package type or a custom type that handles unknown values.
|
| Path: [0].tf_vars
| Target Type: []provider.Variable
| Suggested Type: basetypes.SetValue
diagnostic_severity=ERROR diagnostic_summary="Value Conversion Error" timestamp=2026-02-23T12:12:30.548-0800
2026-02-23T12:12:30.572-0800 [TRACE] provider.terraform-provider-coderd_v0.0.12: Served request: @caller=github.com/hashicorp/terraform-plugin-go@v0.28.0/tfprotov6/tf6server/server.go:781 tf_provider_addr=registry.terraform.io/coder/coderd tf_req_id=4c9eed24-af71-1c06-0acd-8d0342e91694 tf_resource_type=coderd_template tf_rpc=ValidateResourceConfig @module=sdk.proto tf_proto_version=6.9 timestamp=2026-02-23T12:12:30.548-0800
2026-02-23T12:12:30.572-0800 [TRACE] provider.terraform-provider-coderd_v0.0.12: Served request: @caller=github.com/hashicorp/terraform-plugin-go@v0.28.0/tfprotov6/tf6server/server.go:781 @module=sdk.proto tf_proto_version=6.9 tf_provider_addr=registry.terraform.io/coder/coderd tf_req_id=86de3acb-51e9-701e-efea-e819f02dd0ce tf_resource_type=coderd_template tf_rpc=ValidateResourceConfig timestamp=2026-02-23T12:12:30.548-0800
Don't think we're handling the tf_vars or provisioner_tags sections correctly where it fails to convert the input even when it's converted to a set explicitly.
This is how I currently pass in variables to tf_vars:
variable "templates" {
type = map(object({
path = string
display_name = optional(string, "")
icon = optional(string, "")
description = optional(string, "")
platform = optional(string, "linux_amd64")
vars = optional(map(string), {})
tags = optional(map(string), {})
}))
}
resource "coderd_template" "this" {
for_each = var.templates
depends_on = [ null_resource.upgrade-and-init ]
name = each.key
organization_id = var.org_id
display_name = each.value.display_name == "" ? each.key : each.value.display_name
description = each.value.description
icon = each.value.icon
require_active_version = true
acl = null
# At least 1 template must be stable.
# We'll keep track of this via Terraform.
versions = [{
name = "stable-${formatdate("YYYY-MM-DD_hh-mm-ss", time_static.this[each.key].rfc3339)}"
description = "Stable Version."
directory = each.value.path
provisioner_tags = toset([ for k, v in each.value.tags : { name = k, value = tostring(v)}])
tf_vars = toset([ for k, v in each.value.vars : { name = k, value = tostring(v)}])
active = true
}]
}
And the TF file consuming these would look something like:
module "ai-coder-com-coder" {
source = "../modules/template"
providers = {
coderd = coderd.ai-coder-com
}
access_url = var.ai_coder_com_access_url
token = var.ai_coder_com_token
org_id = data.coderd_organization.coder.id
templates = {
"memorycard" = {
path = "${path.module}/../deployments/ai.coder.com/coder/memorycard"
description = "Work on a AI-powered Vite.js app running a memory card game on Coder!"
display_name = "Memory Game App"
icon = "https://raw.githubusercontent.com/devicons/devicon/54cfe13ac10eaa1ef817a343ab0a9437eb3c2e08/icons/vitejs/vitejs-original.svg"
tags = {}
vars = {
gh_username = var.ai_coder_com_bot_gh_username
gh_email = var.ai_coder_com_bot_gh_email
gh_token = var.ai_coder_com_bot_gh_token
aws_region = "us-east-2"
aws_account_id = var.ai_coder_com_bot_aws_account_id
namespace = "coder-ws"
}
}
}
}
The values I pass in are static strings stored in auto.tfvars.json, so although the error states that they're not resolved, they will be resolving at some point later in the Terraform apply lifecycle. I verified by statically passing in a set directly to coderd_template that this works. For example:
resource "coderd_template" "this" {
for_each = var.templates
depends_on = [ null_resource.upgrade-and-init ]
name = each.key
organization_id = var.org_id
display_name = each.value.display_name == "" ? each.key : each.value.display_name
description = each.value.description
icon = each.value.icon
require_active_version = true
acl = null
# At least 1 template must be stable.
# We'll keep track of this via Terraform.
versions = [{
name = "stable-${formatdate("YYYY-MM-DD_hh-mm-ss", time_static.this[each.key].rfc3339)}"
description = "Stable Version."
directory = each.value.path
provisioner_tags = [{ name = "a", value = "b" }]
tf_vars = [{ name = "a", value = "b" }]
active = true
}]
}
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels