From 559799599e6cb0bdf0eb4c2ae5eb50059bad111e Mon Sep 17 00:00:00 2001 From: Chris Marchesi Date: Sat, 28 May 2016 22:48:28 -0700 Subject: [PATCH] core: Ensure EvalReadDataApply is called on expanded destroy nodes During accpeptance tests of some of the first data sources (see hashicorp/terraform#6881 and hashicorp/terraform#6911), "unknown resource type" errors have been coming up. Traced it down to the ResourceCountTransformer, which transforms destroy nodes to a graphNodeExpandedResourceDestroy node. This node's EvalTree() was still indiscriminately using EvalApply for all resource types, versus EvalReadDataApply. This accounts for both cases via EvalIf. --- terraform/transform_resource.go | 31 ++++++++++++++++++++++++------- 1 file changed, 24 insertions(+), 7 deletions(-) diff --git a/terraform/transform_resource.go b/terraform/transform_resource.go index 0b2df921a..2100c107b 100644 --- a/terraform/transform_resource.go +++ b/terraform/transform_resource.go @@ -894,13 +894,30 @@ func (n *graphNodeExpandedResourceDestroy) EvalTree() EvalNode { &EvalRequireState{ State: &state, }, - &EvalApply{ - Info: info, - State: &state, - Diff: &diffApply, - Provider: &provider, - Output: &state, - Error: &err, + // Make sure we handle data sources properly. + &EvalIf{ + If: func(ctx EvalContext) (bool, error) { + if n.Resource.Mode == config.DataResourceMode { + return true, nil + } + + return false, nil + }, + + Then: &EvalReadDataApply{ + Info: info, + Diff: &diffApply, + Provider: &provider, + Output: &state, + }, + Else: &EvalApply{ + Info: info, + State: &state, + Diff: &diffApply, + Provider: &provider, + Output: &state, + Error: &err, + }, }, &EvalWriteState{ Name: n.stateId(),