diff --git a/config/config.go b/config/config.go index cd11c027d..da981019c 100644 --- a/config/config.go +++ b/config/config.go @@ -610,6 +610,15 @@ func (c *Config) Validate() error { "%s: lifecycle ignore_changes cannot contain interpolations", n)) } + + // If it is a data source then it can't have provisioners + if r.Mode == DataResourceMode { + if _, ok := r.RawConfig.Raw["provisioner"]; ok { + errs = append(errs, fmt.Errorf( + "%s: data sources cannot have provisioners", + n)) + } + } } for source, vs := range vars { diff --git a/config/config_test.go b/config/config_test.go index f6303e8e7..61dafa65d 100644 --- a/config/config_test.go +++ b/config/config_test.go @@ -161,6 +161,13 @@ func TestConfigValidate_table(t *testing.T) { true, "non-existent module 'foo'", }, + + { + "data source with provisioners", + "validate-data-provisioner", + true, + "data sources cannot have", + }, } for i, tc := range cases { diff --git a/config/test-fixtures/validate-data-provisioner/main.tf b/config/test-fixtures/validate-data-provisioner/main.tf new file mode 100644 index 000000000..ff7c3c0cb --- /dev/null +++ b/config/test-fixtures/validate-data-provisioner/main.tf @@ -0,0 +1,3 @@ +data "foo" "bar" { + provisioner "local-exec" {} +}