diff --git a/internal/terraform/eval_import.go b/internal/terraform/eval_import.go index e8118e7ec3..6626d50e4b 100644 --- a/internal/terraform/eval_import.go +++ b/internal/terraform/eval_import.go @@ -55,6 +55,10 @@ func evaluateImportIdExpression(expr hcl.Expression, ctx EvalContext, keyData in }) } + // Import data may have marks, which we can discard because the id is only + // sent to the provider. + importIdVal, _ = importIdVal.Unmark() + var importId string err := gocty.FromCtyValue(importIdVal, &importId) if err != nil { diff --git a/internal/terraform/node_resource_plan.go b/internal/terraform/node_resource_plan.go index 11e454fac7..550872b7f5 100644 --- a/internal/terraform/node_resource_plan.go +++ b/internal/terraform/node_resource_plan.go @@ -10,10 +10,8 @@ import ( "github.com/hashicorp/hcl/v2" "github.com/hashicorp/terraform/internal/addrs" "github.com/hashicorp/terraform/internal/dag" - "github.com/hashicorp/terraform/internal/instances" "github.com/hashicorp/terraform/internal/states" "github.com/hashicorp/terraform/internal/tfdiags" - "github.com/zclconf/go-cty/cty" ) // nodeExpandPlannableResource represents an addrs.ConfigResource and implements @@ -332,20 +330,13 @@ func (n nodeExpandPlannableResource) expandResourceImports(ctx EvalContext, addr imports.Put(to, importID) } - // FIXME: This won't work for lists like a dynamic block, but we still - // want the same errors because the values must be known for import. - forEach, forEachDiags := evaluateForEachExpression(imp.Config.ForEach, ctx) + forEachData, forEachDiags := newForEachEvaluator(imp.Config.ForEach, ctx).ImportValues() diags = diags.Append(forEachDiags) if forEachDiags.HasErrors() { return imports, diags } - for k, v := range forEach { - keyData := instances.RepetitionData{ - EachKey: cty.StringVal(k), - EachValue: v, - } - + for _, keyData := range forEachData { importID, evalDiags := evaluateImportIdExpression(imp.ID, ctx, keyData) diags = diags.Append(evalDiags) if diags.HasErrors() {