Create_before_destroy icw depends_on resource list

Conceptually I’ve got the following:

resource a a {
  foreach [ some-key-value-map]
  lifecycle {
    create_before_destroy = true
  }
}

resource b b {
  depends_on [a.a]
  foreach = [ some-other-key-value-map ]
}

Now when I rename a key in some-key-value-map a resource is created and destroyed. So far so good.
However, a resource in b.b is implicitly dependent on this, however I consistently refer to the renamed key in this resource in b.b.

Without create_before_destroy set to true, this fails, as the apply execution is as follows:

1a. create a.a[newkey] // these are executed parallel
1b. destroy a.a[oldkey] // these are executed parallel
2 update b.b[...]

This fails as the old resource is still referenced in the not-yet-updated b.b[...].
So far this is all expected.

However, I would’ve expected that introducing the create_before_destroy would’ve shown the following order of exection:

  1. create a.a[newkey]
  2. update b.b[...]
  3. destroy a.a[oldkey]

I expect this because the depends_on is on the whole of a.a. The aforementioned plus the explanantion in terraform/docs/destroying.md at main · hashicorp/terraform · GitHub expected me to have the desired execution order stated above where the destroy of a.a[oldkey] would be the last step.

Can someone explain me why the expected execution order is not happening for me?

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.