Merge branch 'b-data-resource-destroy'

This commit is contained in:
James Nugent 2016-05-20 15:07:32 -05:00
commit 50e095ddeb
2 changed files with 31 additions and 17 deletions

View File

@ -12,12 +12,14 @@ type EvalReadDataDiff struct {
OutputState **InstanceState
Config **ResourceConfig
Info *InstanceInfo
// Set Previous when re-evaluating diff during apply, to ensure that
// the "Destroy" flag is preserved.
Previous **InstanceDiff
}
func (n *EvalReadDataDiff) Eval(ctx EvalContext) (interface{}, error) {
// TODO: test
provider := *n.Provider
config := *n.Config
err := ctx.Hook(func(h Hook) (HookAction, error) {
return h.PreDiff(n.Info, nil)
@ -26,6 +28,16 @@ func (n *EvalReadDataDiff) Eval(ctx EvalContext) (interface{}, error) {
return nil, err
}
var diff *InstanceDiff
if n.Previous != nil && *n.Previous != nil && (*n.Previous).Destroy {
// If we're re-diffing for a diff that was already planning to
// destroy, then we'll just continue with that plan.
diff = &InstanceDiff{Destroy: true}
} else {
provider := *n.Provider
config := *n.Config
diff, err := provider.ReadDataDiff(n.Info, config)
if err != nil {
return nil, err
@ -42,6 +54,7 @@ func (n *EvalReadDataDiff) Eval(ctx EvalContext) (interface{}, error) {
RequiresNew: true,
Type: DiffAttrOutput,
}
}
err = ctx.Hook(func(h Hook) (HookAction, error) {
return h.PostDiff(n.Info, diff)
@ -83,7 +96,7 @@ func (n *EvalReadDataApply) Eval(ctx EvalContext) (interface{}, error) {
// If the diff is for *destroying* this resource then we'll
// just drop its state and move on, since data resources don't
// support an actual "destroy" action.
if diff.Destroy {
if diff != nil && diff.Destroy {
if n.Output != nil {
*n.Output = nil
}

View File

@ -810,6 +810,7 @@ func (n *graphNodeExpandedResource) dataResourceEvalNodes(resource *Resource, in
&EvalReadDataDiff{
Info: info,
Config: &config,
Previous: &diff,
Provider: &provider,
Output: &diff,
},