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.
This commit is contained in:
Chris Marchesi 2016-05-28 22:48:28 -07:00
parent a3a8b534ed
commit 559799599e
1 changed files with 24 additions and 7 deletions

View File

@ -894,7 +894,23 @@ func (n *graphNodeExpandedResourceDestroy) EvalTree() EvalNode {
&EvalRequireState{ &EvalRequireState{
State: &state, State: &state,
}, },
&EvalApply{ // 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, Info: info,
State: &state, State: &state,
Diff: &diffApply, Diff: &diffApply,
@ -902,6 +918,7 @@ func (n *graphNodeExpandedResourceDestroy) EvalTree() EvalNode {
Output: &state, Output: &state,
Error: &err, Error: &err,
}, },
},
&EvalWriteState{ &EvalWriteState{
Name: n.stateId(), Name: n.stateId(),
ResourceType: n.Resource.Type, ResourceType: n.Resource.Type,