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