Open
Description
I have multiple templates that all use the same files (but have different vars).
When modifying more than one simultanously I always get an error from the file API on apply:
Log
2025-04-17T05:33:51.0920085Z coderd_template.templates["kubernetes"]: Modifying... [id=24f0a052-c445-42d1-a220-76394b0d2340]
2025-04-17T05:33:51.1042285Z coderd_template.templates["powershell"]: Modifying... [id=4022a9b8-ce13-41d8-ab4f-11bcc8f906a7]
2025-04-17T05:33:51.1105831Z coderd_template.templates["debian"]: Modifying... [id=5655ead2-2e39-477b-b944-9e8073d32ba8]
2025-04-17T05:33:51.1616036Z 2025-04-17T05:33:51.160Z [ERROR] provider.terraform-provider-coderd_v0.0.10: Response contains error diagnostic: tf_resource_type=coderd_template @module=sdk.proto diagnostic_summary="Provisioner Error" tf_proto_version=6.8 @caller=github.com/hashicorp/terraform-plugin-go@v0.26.0/tfprotov6/internal/diag/diagnostics.go:58
2025-04-17T05:33:51.1619883Z diagnostic_detail=
2025-04-17T05:33:51.1622922Z | failed to upload directory: POST https://<REDACTED>/api/v2/files: unexpected status code 500: Internal error saving file.
2025-04-17T05:33:51.1625917Z | \tError: pq: duplicate key value violates unique constraint "files_hash_created_by_key"
2025-04-17T05:33:51.1628940Z diagnostic_severity=ERROR tf_provider_addr=registry.terraform.io/coder/coderd tf_req_id=e0fe0334-b637-7894-6a23-46f1e5479bdb tf_rpc=ApplyResourceChange timestamp=2025-04-17T05:33:51.160Z
2025-04-17T05:33:51.1632235Z 2025-04-17T05:33:51.162Z [ERROR] provider.terraform-provider-coderd_v0.0.10: Response contains error diagnostic: tf_rpc=ApplyResourceChange @caller=github.com/hashicorp/terraform-plugin-go@v0.26.0/tfprotov6/internal/diag/diagnostics.go:58
2025-04-17T05:33:51.1636138Z diagnostic_detail=
2025-04-17T05:33:51.1639451Z | failed to upload directory: POST https://<REDACTED>/api/v2/files: unexpected status code 500: Internal error saving file.
2025-04-17T05:33:51.1640899Z | \tError: pq: duplicate key value violates unique constraint "files_hash_created_by_key"
2025-04-17T05:33:51.1643867Z diagnostic_severity=ERROR tf_req_id=78e54071-0a68-ff3f-99cc-c6db34233240 tf_resource_type=coderd_template @module=sdk.proto diagnostic_summary="Provisioner Error" tf_proto_version=6.8 tf_provider_addr=registry.terraform.io/coder/coderd timestamp=2025-04-17T05:33:51.161Z
2025-04-17T05:33:51.1665104Z 2025-04-17T05:33:51.166Z [ERROR] vertex "coderd_template.templates[\"debian\"]" error: Provisioner Error
2025-04-17T05:33:51.1667533Z 2025-04-17T05:33:51.166Z [ERROR] vertex "coderd_template.templates[\"powershell\"]" error: Provisioner Error
2025-04-17T05:33:59.9327162Z coderd_template.templates["kubernetes"]: Modifications complete after 9s [id=24f0a052-c445-42d1-a220-76394b0d2340]
2025-04-17T05:34:00.0456919Z ╷
2025-04-17T05:34:00.0459249Z │ Error: Provisioner Error
2025-04-17T05:34:00.0459761Z │
2025-04-17T05:34:00.0460095Z │ with coderd_template.templates["powershell"],
2025-04-17T05:34:00.0460513Z │ on templates.tf line 13, in resource "coderd_template" "templates":
2025-04-17T05:34:00.0460923Z │ 13: resource "coderd_template" "templates" {
2025-04-17T05:34:00.0461309Z │
2025-04-17T05:34:00.0461605Z │ failed to upload directory: POST
2025-04-17T05:34:00.0462009Z │ https://<REDACTED>/api/v2/files: unexpected status code 500:
2025-04-17T05:34:00.0462358Z │ Internal error saving file.
2025-04-17T05:34:00.0462718Z │ Error: pq: duplicate key value violates unique constraint
2025-04-17T05:34:00.0463067Z │ "files_hash_created_by_key"
2025-04-17T05:34:00.0463319Z │
2025-04-17T05:34:00.0463549Z ╵
2025-04-17T05:34:00.0463772Z ╷
2025-04-17T05:34:00.0464093Z │ Error: Provisioner Error
2025-04-17T05:34:00.0464362Z │
2025-04-17T05:34:00.0464671Z │ with coderd_template.templates["debian"],
2025-04-17T05:34:00.0465078Z │ on templates.tf line 13, in resource "coderd_template" "templates":
2025-04-17T05:34:00.0465471Z │ 13: resource "coderd_template" "templates" {
2025-04-17T05:34:00.0465736Z │
2025-04-17T05:34:00.0466020Z │ failed to upload directory: POST
2025-04-17T05:34:00.0466422Z │ https://<REDACTED>/api/v2/files: unexpected status code 500:
2025-04-17T05:34:00.0466762Z │ Internal error saving file.
2025-04-17T05:34:00.0467134Z │ Error: pq: duplicate key value violates unique constraint
2025-04-17T05:34:00.0467459Z │ "files_hash_created_by_key"
2025-04-17T05:34:00.0467709Z │
2025-04-17T05:34:00.0467932Z ╵
As seen in the log, the first template is successfully modified, but the other two fail.
If I run terraform plan && terraform apply
again, the next template is okay and only one is failed.
If I run it again afterwards, all succeed. It seems that there can be only be one modify at the same time?
Template definition
resource "coderd_template" "templates" {
for_each = local.templates
name = each.value.name
description = each.value.description
icon = each.value.icon
default_ttl_ms = 7200000
versions = [
{
name = data.external.current_commit[each.key].result.commit
message = data.external.current_commit[each.key].result.message
directory = "./template"
active = true
tf_vars = concat(local.default_vars, [
{
name = "ado_projects"
value = jsonencode(each.value.ado_projects)
},
{
name = "default_ado_project"
value = each.value.default_ado_project
},
{
name = "image_variants"
value = jsonencode(each.value.image_variants)
},
{
name = "default_image_variant"
value = each.value.default_image_variant
},
{
name = "repository"
value = each.value.image_repository
},
{
name = "bash_aliases"
value = jsonencode(each.value.bash_aliases)
}
])
}
]
}
Planned changes
Terraform will perform the following actions:
# coderd_template.templates["debian"] will be updated in-place
~ resource "coderd_template" "templates" {
~ display_name = "debian" -> (known after apply)
id = "5655ead2-2e39-477b-b944-9e8073d32ba8"
~ max_port_share_level = "public" -> (known after apply)
name = "debian"
~ organization_id = "<REDACTED>" -> (known after apply)
~ versions = [
~ {
~ id = "e8bb03e4-d363-435f-9358-c0404b111edc" -> (known after apply)
~ message = "Merged PR 17172: fix: spaces in alias and alias read #40634" -> "Merged PR 17174: fix: defaults #40644"
~ name = "4d1ac972b5f9bb934f1e15ebef0536ffa24d2220" -> "8da2d897e1d9c8422f10d41bb6088a564ee9c4df"
~ tf_vars = [
- {
- name = "ado_projects" -> null
- value = jsonencode(
{
- Debian-Project-1 = {
- image_variant = "bullseye"
- repository = "Debian-Project-1"
}
- Debian-Project-2 = {
- image_variant = "bullseye"
- repository = "Debian-Project-2"
}
}
) -> null
},
+ {
+ name = "ado_projects"
+ value = jsonencode(
{
+ Debian-Project-1 = {
+ image_variant = "Default"
+ repository = "Debian-Project-1"
}
+ Debian-Project-2 = {
+ image_variant = "Default"
+ repository = "Debian-Project-2"
}
}
)
},
# (9 unchanged elements hidden)
]
# (3 unchanged attributes hidden)
},
]
# (14 unchanged attributes hidden)
}
# coderd_template.templates["kubernetes"] will be updated in-place
~ resource "coderd_template" "templates" {
~ display_name = "kubernetes" -> (known after apply)
id = "24f0a052-c445-42d1-a220-76394b0d2340"
~ max_port_share_level = "public" -> (known after apply)
name = "kubernetes"
~ organization_id = "<REDACTED>" -> (known after apply)
~ versions = [
~ {
~ id = "10d894a4-c968-41ae-80a8-64bce744a72e" -> (known after apply)
~ message = "Merged PR 17172: fix: spaces in alias and alias read #40634" -> "Merged PR 17174: fix: defaults #40644"
~ name = "4d1ac972b5f9bb934f1e15ebef0536ffa24d2220" -> "8da2d897e1d9c8422f10d41bb6088a564ee9c4df"
~ tf_vars = [
- {
- name = "ado_projects" -> null
- value = jsonencode(
{
- Gitops-Project = {
- image_variant = "bullseye"
- repository = "Gitops-Project"
}
}
) -> null
},
+ {
+ name = "ado_projects"
+ value = jsonencode(
{
+ Gitops-Project = {
+ image_variant = "Default"
+ repository = "Gitops-Project"
}
}
)
},
# (9 unchanged elements hidden)
]
# (3 unchanged attributes hidden)
},
]
# (14 unchanged attributes hidden)
}
# coderd_template.templates["powershell"] will be updated in-place
~ resource "coderd_template" "templates" {
~ display_name = "powershell" -> (known after apply)
id = "4022a9b8-ce13-41d8-ab4f-11bcc8f906a7"
~ max_port_share_level = "public" -> (known after apply)
name = "powershell"
~ organization_id = "<REDACTED>" -> (known after apply)
~ versions = [
~ {
~ id = "24c31fc8-d197-476a-92d7-378b25bfb9b7" -> (known after apply)
~ message = "Merged PR 17172: fix: spaces in alias and alias read #40634" -> "Merged PR 17174: fix: defaults #40644"
~ name = "4d1ac972b5f9bb934f1e15ebef0536ffa24d2220" -> "8da2d897e1d9c8422f10d41bb6088a564ee9c4df"
~ tf_vars = [
- {
- name = "ado_projects" -> null
- value = jsonencode(
{
- PS-Project-1 = {
- image_variant = "default"
- repository = "PS-Project-1"
}
- PS-Project-2 = {
- image_variant = "default"
- repository = "PS-Project-2"
}
}
) -> null
},
+ {
+ name = "ado_projects"
+ value = jsonencode(
{
+ PS-Project-1 = {
+ image_variant = "Default"
+ repository = "PS-Project-1"
}
+ PS-Project-2 = {
+ image_variant = "Default"
+ repository = "PS-Project-2"
}
}
)
},
# (9 unchanged elements hidden)
]
# (3 unchanged attributes hidden)
},
]
# (14 unchanged attributes hidden)
}
Plan: 0 to add, 3 to change, 0 to destroy.
Edit: Added the plan and collapsed template
Edit Edit: Added timestamps to the log