diff --git a/terraform/context_plan_test.go b/terraform/context_plan_test.go index adf93cc7c..58c601211 100644 --- a/terraform/context_plan_test.go +++ b/terraform/context_plan_test.go @@ -6403,12 +6403,18 @@ resource "test_instance" "a" { SkipRefresh: true, }) - _, diags := ctx.Plan() + plan, diags := ctx.Plan() assertNoErrors(t, diags) if p.ReadResourceCalled { t.Fatal("Resource should not have been refreshed") } + + for _, c := range plan.Changes.Resources { + if c.Action != plans.NoOp { + t.Fatalf("expected no changes, got %s for %q", c.Action, c.Addr) + } + } } func TestContext2Plan_dataInModuleDependsOn(t *testing.T) { diff --git a/terraform/node_resource_plan_instance.go b/terraform/node_resource_plan_instance.go index cca60dcac..3ffe99460 100644 --- a/terraform/node_resource_plan_instance.go +++ b/terraform/node_resource_plan_instance.go @@ -146,24 +146,23 @@ func (n *NodePlannableResourceInstance) managedResourceExecute(ctx EvalContext, return err } + instanceRefreshState, err = n.ReadResourceInstanceState(ctx, addr) + if err != nil { + return err + } + refreshLifecycle := &EvalRefreshLifecycle{ + Addr: addr, + Config: n.Config, + State: &instanceRefreshState, + ForceCreateBeforeDestroy: n.ForceCreateBeforeDestroy, + } + _, err = refreshLifecycle.Eval(ctx) + if err != nil { + return err + } + // Refresh, maybe if !skipRefresh { - instanceRefreshState, err = n.ReadResourceInstanceState(ctx, addr) - if err != nil { - return err - } - - refreshLifecycle := &EvalRefreshLifecycle{ - Addr: addr, - Config: n.Config, - State: &instanceRefreshState, - ForceCreateBeforeDestroy: n.ForceCreateBeforeDestroy, - } - _, err = refreshLifecycle.Eval(ctx) - if err != nil { - return err - } - refresh := &EvalRefresh{ Addr: addr.Resource, ProviderAddr: n.ResolvedProvider,