terraform-provider-coder icon indicating copy to clipboard operation
terraform-provider-coder copied to clipboard

Duplicate resource errors when using indexed resources

Open bamhm182 opened this issue 1 year ago • 1 comments

Problem

When creating multiple resources within a count or for_each loop, you end up with multiple resources using the same label as seen in the terraform graph output. The ConvertState function within providers/terraform/resources.go sees references to these resources as a problem since they share the same label and fails to let you use them.

Use Case

Below is a simple example which creates 5 random passwords and attempts to make coder_metadata resources for them. While this instance uses coder_metadata, a similar result also occurs with many of the other coder_* resource types.

terraform {
  required_providers {
    coder = { source = "coder/coder" }
    random = { source = "hashicorp/random" }
  }
}

resource "random_password" "passwords" {
  count = 5
  length = 20
}

resource "coder_metadata" "meta_passwords" {
  count = length(random_password.passwords)
  resource_id = random_password.passwords[count.index].id
}

What I Want

5 coder_metadata resources, one for each of the generated random_password resources.

What I Get

Error during the build
template import provision for start: duplicate metadata resource: random_password.passwords

bamhm182 avatar Nov 13 '24 02:11 bamhm182

Yeah, this is an unfortunate limitation of the current design. We'd need ConvertState to intercept resources that use count and then append whatever index it is to the resource label. I'm not sure if/when this will get prioritised.

EDIT: Had an idea for a simpler solution, one could add a name_override field to coder_agent, and if present, the resource name would get ignored.

ethanndickson avatar Nov 13 '24 06:11 ethanndickson