github.com/cmalfait/terraform@v0.11.12-beta1/helper/customdiff/condition.go (about)

     1  package customdiff
     2  
     3  import (
     4  	"github.com/hashicorp/terraform/helper/schema"
     5  )
     6  
     7  // ResourceConditionFunc is a function type that makes a boolean decision based
     8  // on an entire resource diff.
     9  type ResourceConditionFunc func(d *schema.ResourceDiff, meta interface{}) bool
    10  
    11  // ValueChangeConditionFunc is a function type that makes a boolean decision
    12  // by comparing two values.
    13  type ValueChangeConditionFunc func(old, new, meta interface{}) bool
    14  
    15  // ValueConditionFunc is a function type that makes a boolean decision based
    16  // on a given value.
    17  type ValueConditionFunc func(value, meta interface{}) bool
    18  
    19  // If returns a CustomizeDiffFunc that calls the given condition
    20  // function and then calls the given CustomizeDiffFunc only if the condition
    21  // function returns true.
    22  //
    23  // This can be used to include conditional customizations when composing
    24  // customizations using All and Sequence, but should generally be used only in
    25  // simple scenarios. Prefer directly writing a CustomizeDiffFunc containing
    26  // a conditional branch if the given CustomizeDiffFunc is already a
    27  // locally-defined function, since this avoids obscuring the control flow.
    28  func If(cond ResourceConditionFunc, f schema.CustomizeDiffFunc) schema.CustomizeDiffFunc {
    29  	return func(d *schema.ResourceDiff, meta interface{}) error {
    30  		if cond(d, meta) {
    31  			return f(d, meta)
    32  		}
    33  		return nil
    34  	}
    35  }
    36  
    37  // IfValueChange returns a CustomizeDiffFunc that calls the given condition
    38  // function with the old and new values of the given key and then calls the
    39  // given CustomizeDiffFunc only if the condition function returns true.
    40  func IfValueChange(key string, cond ValueChangeConditionFunc, f schema.CustomizeDiffFunc) schema.CustomizeDiffFunc {
    41  	return func(d *schema.ResourceDiff, meta interface{}) error {
    42  		old, new := d.GetChange(key)
    43  		if cond(old, new, meta) {
    44  			return f(d, meta)
    45  		}
    46  		return nil
    47  	}
    48  }
    49  
    50  // IfValue returns a CustomizeDiffFunc that calls the given condition
    51  // function with the new values of the given key and then calls the
    52  // given CustomizeDiffFunc only if the condition function returns true.
    53  func IfValue(key string, cond ValueConditionFunc, f schema.CustomizeDiffFunc) schema.CustomizeDiffFunc {
    54  	return func(d *schema.ResourceDiff, meta interface{}) error {
    55  		if cond(d.Get(key), meta) {
    56  			return f(d, meta)
    57  		}
    58  		return nil
    59  	}
    60  }