coder / terraform-provider-coder

https://coder.com
Mozilla Public License 2.0
31 stars 20 forks source link

Duplicate resource errors when using indexed resources #303

Open bamhm182 opened 3 days ago

bamhm182 commented 3 days ago

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
ethanndickson commented 3 days ago

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.