github.com/blacked/terraform@v0.6.2-0.20150806163846-669c4ad71586/terraform/eval_check_prevent_destroy.go (about) 1 package terraform 2 3 import ( 4 "fmt" 5 6 "github.com/hashicorp/terraform/config" 7 ) 8 9 // EvalPreventDestroy is an EvalNode implementation that returns an 10 // error if a resource has PreventDestroy configured and the diff 11 // would destroy the resource. 12 type EvalCheckPreventDestroy struct { 13 Resource *config.Resource 14 Diff **InstanceDiff 15 } 16 17 func (n *EvalCheckPreventDestroy) Eval(ctx EvalContext) (interface{}, error) { 18 if n.Diff == nil || *n.Diff == nil || n.Resource == nil { 19 return nil, nil 20 } 21 22 diff := *n.Diff 23 preventDestroy := n.Resource.Lifecycle.PreventDestroy 24 25 if diff.Destroy && preventDestroy { 26 return nil, fmt.Errorf(preventDestroyErrStr, n.Resource.Id()) 27 } 28 29 return nil, nil 30 } 31 32 const preventDestroyErrStr = `%s: plan would destroy, but resource has prevent_destroy set. To avoid this error, either disable prevent_destroy, or change your config so the plan does not destroy this resource.`