From cb7a08c691b72337faff400480b777d605aba5ac Mon Sep 17 00:00:00 2001 From: James Bardin Date: Thu, 21 Jan 2021 12:46:37 -0500 Subject: [PATCH] fix null check and shadowed state variable The tainted state was checked against `cty.NilVal`, however it was always being set to a null value. The refreshed state value was being shadowed, and not used in the following plan. --- terraform/node_resource_abstract_instance.go | 2 +- terraform/node_resource_plan_instance.go | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/terraform/node_resource_abstract_instance.go b/terraform/node_resource_abstract_instance.go index 1393d1abe..ad5574c85 100644 --- a/terraform/node_resource_abstract_instance.go +++ b/terraform/node_resource_abstract_instance.go @@ -905,7 +905,7 @@ func (n *NodeAbstractResourceInstance) plan( // If our prior value was tainted then we actually want this to appear // as a replace change, even though so far we've been treating it as a // create. - if action == plans.Create && priorValTainted != cty.NilVal { + if action == plans.Create && !priorValTainted.IsNull() { if createBeforeDestroy { action = plans.CreateThenDelete } else { diff --git a/terraform/node_resource_plan_instance.go b/terraform/node_resource_plan_instance.go index e6cfc1dc7..1f57e85c8 100644 --- a/terraform/node_resource_plan_instance.go +++ b/terraform/node_resource_plan_instance.go @@ -128,11 +128,12 @@ func (n *NodePlannableResourceInstance) managedResourceExecute(ctx EvalContext) // Refresh, maybe if !n.skipRefresh { - instanceRefreshState, refreshDiags := n.refresh(ctx, instanceRefreshState) + s, refreshDiags := n.refresh(ctx, instanceRefreshState) diags = diags.Append(refreshDiags) if diags.HasErrors() { return diags } + instanceRefreshState = s diags = diags.Append(n.writeResourceInstanceState(ctx, instanceRefreshState, n.Dependencies, refreshState)) if diags.HasErrors() {