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 OutputState **InstanceState
Config **ResourceConfig Config **ResourceConfig
Info *InstanceInfo 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) { func (n *EvalReadDataDiff) Eval(ctx EvalContext) (interface{}, error) {
// TODO: test // TODO: test
provider := *n.Provider
config := *n.Config
err := ctx.Hook(func(h Hook) (HookAction, error) { err := ctx.Hook(func(h Hook) (HookAction, error) {
return h.PreDiff(n.Info, nil) return h.PreDiff(n.Info, nil)
@ -26,21 +28,32 @@ func (n *EvalReadDataDiff) Eval(ctx EvalContext) (interface{}, error) {
return nil, err return nil, err
} }
diff, err := provider.ReadDataDiff(n.Info, config) var diff *InstanceDiff
if err != nil {
return nil, err
}
if diff == nil {
diff = new(InstanceDiff)
}
// id is always computed, because we're always "creating a new resource" if n.Previous != nil && *n.Previous != nil && (*n.Previous).Destroy {
diff.init() // If we're re-diffing for a diff that was already planning to
diff.Attributes["id"] = &ResourceAttrDiff{ // destroy, then we'll just continue with that plan.
Old: "", diff = &InstanceDiff{Destroy: true}
NewComputed: true, } else {
RequiresNew: true, provider := *n.Provider
Type: DiffAttrOutput, config := *n.Config
diff, err := provider.ReadDataDiff(n.Info, config)
if err != nil {
return nil, err
}
if diff == nil {
diff = new(InstanceDiff)
}
// id is always computed, because we're always "creating a new resource"
diff.init()
diff.Attributes["id"] = &ResourceAttrDiff{
Old: "",
NewComputed: true,
RequiresNew: true,
Type: DiffAttrOutput,
}
} }
err = ctx.Hook(func(h Hook) (HookAction, error) { err = ctx.Hook(func(h Hook) (HookAction, error) {
@ -83,7 +96,7 @@ func (n *EvalReadDataApply) Eval(ctx EvalContext) (interface{}, error) {
// If the diff is for *destroying* this resource then we'll // If the diff is for *destroying* this resource then we'll
// just drop its state and move on, since data resources don't // just drop its state and move on, since data resources don't
// support an actual "destroy" action. // support an actual "destroy" action.
if diff.Destroy { if diff != nil && diff.Destroy {
if n.Output != nil { if n.Output != nil {
*n.Output = nil *n.Output = nil
} }

View File

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