61 lines
2.3 KiB
Go
61 lines
2.3 KiB
Go
package customdiff
|
|
|
|
import (
|
|
"github.com/hashicorp/terraform/helper/schema"
|
|
)
|
|
|
|
// ResourceConditionFunc is a function type that makes a boolean decision based
|
|
// on an entire resource diff.
|
|
type ResourceConditionFunc func(d *schema.ResourceDiff, meta interface{}) bool
|
|
|
|
// ValueChangeConditionFunc is a function type that makes a boolean decision
|
|
// by comparing two values.
|
|
type ValueChangeConditionFunc func(old, new, meta interface{}) bool
|
|
|
|
// ValueConditionFunc is a function type that makes a boolean decision based
|
|
// on a given value.
|
|
type ValueConditionFunc func(value, meta interface{}) bool
|
|
|
|
// If returns a CustomizeDiffFunc that calls the given condition
|
|
// function and then calls the given CustomizeDiffFunc only if the condition
|
|
// function returns true.
|
|
//
|
|
// This can be used to include conditional customizations when composing
|
|
// customizations using All and Sequence, but should generally be used only in
|
|
// simple scenarios. Prefer directly writing a CustomizeDiffFunc containing
|
|
// a conditional branch if the given CustomizeDiffFunc is already a
|
|
// locally-defined function, since this avoids obscuring the control flow.
|
|
func If(cond ResourceConditionFunc, f schema.CustomizeDiffFunc) schema.CustomizeDiffFunc {
|
|
return func(d *schema.ResourceDiff, meta interface{}) error {
|
|
if cond(d, meta) {
|
|
return f(d, meta)
|
|
}
|
|
return nil
|
|
}
|
|
}
|
|
|
|
// IfValueChange returns a CustomizeDiffFunc that calls the given condition
|
|
// function with the old and new values of the given key and then calls the
|
|
// given CustomizeDiffFunc only if the condition function returns true.
|
|
func IfValueChange(key string, cond ValueChangeConditionFunc, f schema.CustomizeDiffFunc) schema.CustomizeDiffFunc {
|
|
return func(d *schema.ResourceDiff, meta interface{}) error {
|
|
old, new := d.GetChange(key)
|
|
if cond(old, new, meta) {
|
|
return f(d, meta)
|
|
}
|
|
return nil
|
|
}
|
|
}
|
|
|
|
// IfValue returns a CustomizeDiffFunc that calls the given condition
|
|
// function with the new values of the given key and then calls the
|
|
// given CustomizeDiffFunc only if the condition function returns true.
|
|
func IfValue(key string, cond ValueConditionFunc, f schema.CustomizeDiffFunc) schema.CustomizeDiffFunc {
|
|
return func(d *schema.ResourceDiff, meta interface{}) error {
|
|
if cond(d.Get(key), meta) {
|
|
return f(d, meta)
|
|
}
|
|
return nil
|
|
}
|
|
}
|