diff --git a/terraform/context_plan_test.go b/terraform/context_plan_test.go index c8f6e3fd4..b81f730af 100644 --- a/terraform/context_plan_test.go +++ b/terraform/context_plan_test.go @@ -6164,3 +6164,50 @@ resource "test_instance" "b" { _, diags := ctx.Plan() assertNoErrors(t, diags) } + +func TestContext2Plan_targetedModuleInstance(t *testing.T) { + m := testModule(t, "plan-targeted") + p := testProvider("aws") + p.DiffFn = testDiffFn + ctx := testContext2(t, &ContextOpts{ + Config: m, + Providers: map[addrs.Provider]providers.Factory{ + addrs.NewDefaultProvider("aws"): testProviderFuncFixed(p), + }, + Targets: []addrs.Targetable{ + addrs.RootModuleInstance.Child("mod", addrs.IntKey(0)), + }, + }) + + plan, diags := ctx.Plan() + if diags.HasErrors() { + t.Fatalf("unexpected errors: %s", diags.Err()) + } + schema := p.GetSchemaReturn.ResourceTypes["aws_instance"] + ty := schema.ImpliedType() + + if len(plan.Changes.Resources) != 1 { + t.Fatal("expected 1 changes, got", len(plan.Changes.Resources)) + } + + for _, res := range plan.Changes.Resources { + ric, err := res.Decode(ty) + if err != nil { + t.Fatal(err) + } + + switch i := ric.Addr.String(); i { + case "module.mod[0].aws_instance.foo": + if res.Action != plans.Create { + t.Fatalf("resource %s should be created", i) + } + checkVals(t, objectVal(t, schema, map[string]cty.Value{ + "id": cty.UnknownVal(cty.String), + "num": cty.NumberIntVal(2), + "type": cty.StringVal("aws_instance"), + }), ric.After) + default: + t.Fatal("unknown instance:", i) + } + } +} diff --git a/terraform/testdata/plan-targeted/main.tf b/terraform/testdata/plan-targeted/main.tf index 1b6cdae67..ab00a845f 100644 --- a/terraform/testdata/plan-targeted/main.tf +++ b/terraform/testdata/plan-targeted/main.tf @@ -3,5 +3,10 @@ resource "aws_instance" "foo" { } resource "aws_instance" "bar" { - foo = "${aws_instance.foo.num}" + foo = aws_instance.foo.num +} + +module "mod" { + source = "./mod" + count = 1 } diff --git a/terraform/testdata/plan-targeted/mod/main.tf b/terraform/testdata/plan-targeted/mod/main.tf new file mode 100644 index 000000000..98f5ee87e --- /dev/null +++ b/terraform/testdata/plan-targeted/mod/main.tf @@ -0,0 +1,3 @@ +resource "aws_instance" "foo" { + num = "2" +} diff --git a/terraform/transform_targets.go b/terraform/transform_targets.go index abbc92d4f..0989390e4 100644 --- a/terraform/transform_targets.go +++ b/terraform/transform_targets.go @@ -145,6 +145,8 @@ func (t *TargetsTransformer) nodeIsTarget(v dag.Vertex, targets []addrs.Targetab targetAddr = target.ContainingResource().Config() case addrs.AbsResource: targetAddr = target.Config() + case addrs.ModuleInstance: + targetAddr = target.Module() } }