From c1315b3f09c49e38db0aee32a1f8c8a754f53f32 Mon Sep 17 00:00:00 2001 From: Martin Atkins Date: Sun, 1 May 2016 19:01:48 -0700 Subject: [PATCH] core: EvalValidate calls appropriate validator for resource mode data resources are a separate namespace of resources than managed resources, so we need to call a different provider method depending on what mode of resource we're visiting. Managed resources use ValidateResource, while data resources use ValidateDataSource, since at the provider level of abstraction each provider has separate sets of resources and data sources respectively. --- terraform/eval_validate.go | 13 ++++++++++++- terraform/transform_resource.go | 1 + 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/terraform/eval_validate.go b/terraform/eval_validate.go index 791cbfd26b..ed5c167cf9 100644 --- a/terraform/eval_validate.go +++ b/terraform/eval_validate.go @@ -107,6 +107,7 @@ type EvalValidateResource struct { Config **ResourceConfig ResourceName string ResourceType string + ResourceMode config.ResourceMode } func (n *EvalValidateResource) Eval(ctx EvalContext) (interface{}, error) { @@ -114,7 +115,17 @@ func (n *EvalValidateResource) Eval(ctx EvalContext) (interface{}, error) { provider := *n.Provider cfg := *n.Config - warns, errs := provider.ValidateResource(n.ResourceType, cfg) + var warns []string + var errs []error + // Provider entry point varies depending on resource mode, because + // managed resources and data resources are two distinct concepts + // in the provider abstraction. + switch n.ResourceMode { + case config.ManagedResourceMode: + warns, errs = provider.ValidateResource(n.ResourceType, cfg) + case config.DataResourceMode: + warns, errs = provider.ValidateDataSource(n.ResourceType, cfg) + } // If the resouce name doesn't match the name regular // expression, show a warning. diff --git a/terraform/transform_resource.go b/terraform/transform_resource.go index f617d24fae..a761bf17ff 100644 --- a/terraform/transform_resource.go +++ b/terraform/transform_resource.go @@ -230,6 +230,7 @@ func (n *graphNodeExpandedResource) EvalTree() EvalNode { Config: &resourceConfig, ResourceName: n.Resource.Name, ResourceType: n.Resource.Type, + ResourceMode: n.Resource.Mode, }) // Validate all the provisioners