package terraform import ( "log" "github.com/hashicorp/terraform/config" ) // EvalInterpolate is an EvalNode implementation that takes a raw // configuration and interpolates it. type EvalInterpolate struct { Config *config.RawConfig Resource *Resource Output **ResourceConfig ContinueOnErr bool } func (n *EvalInterpolate) Eval(ctx EvalContext) (interface{}, error) { rc, err := ctx.Interpolate(n.Config, n.Resource) if err != nil { if n.ContinueOnErr { log.Printf("[WARN] Interpolation %q failed: %s", n.Config.Key, err) return nil, EvalEarlyExitError{} } return nil, err } if n.Output != nil { *n.Output = rc } return nil, nil } // EvalInterpolateProvider is an EvalNode implementation that takes a // ProviderConfig and interpolates it. Provider configurations are the only // "inherited" type of configuration we have, and the original raw config may // have a different interpolation scope. type EvalInterpolateProvider struct { Config *config.ProviderConfig Resource *Resource Output **ResourceConfig } func (n *EvalInterpolateProvider) Eval(ctx EvalContext) (interface{}, error) { rc, err := ctx.InterpolateProvider(n.Config, n.Resource) if err != nil { return nil, err } if n.Output != nil { *n.Output = rc } return nil, nil }