From ac526d8d5d2fb685544f40ec2eb61be85890cd41 Mon Sep 17 00:00:00 2001 From: James Bardin Date: Thu, 1 Oct 2020 16:04:35 -0400 Subject: [PATCH] always load instance state when -refresh=false The loading of the initial instance state was inadvertently skipped when -refresh=false, causing all resources to appear to be missing from the state during plan. --- terraform/context_plan_test.go | 8 +++++- terraform/node_resource_plan_instance.go | 31 ++++++++++++------------ 2 files changed, 22 insertions(+), 17 deletions(-) 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,