package terraform
-import "github.com/hashicorp/terraform/config"
+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
+ 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
}