github.com/tomaszheflik/terraform@v0.7.3-0.20160827060421-32f990b41594/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.GetDestroy() && preventDestroy {
    26  		return nil, fmt.Errorf(preventDestroyErrStr, n.Resource.Id())
    27  	}
    28  
    29  	return nil, nil
    30  }
    31  
    32  const preventDestroyErrStr = `%s: the plan would destroy this resource, but it currently has lifecycle.prevent_destroy set to true. To avoid this error and continue with the plan, either disable lifecycle.prevent_destroy or adjust the scope of the plan using the -target flag.`