diff --git a/builtin/providers/test/provider.go b/builtin/providers/test/provider.go index 4afae201ae..400bc30f9d 100644 --- a/builtin/providers/test/provider.go +++ b/builtin/providers/test/provider.go @@ -16,6 +16,13 @@ func Provider() terraform.ResourceProvider { Optional: true, }, }, + ProviderMetaSchema: map[string]*schema.Schema{ + // Optionally allow specifying information at a module-level + "foo": { + Type: schema.TypeString, + Optional: true, + }, + }, ResourcesMap: map[string]*schema.Resource{ "test_resource": testResource(), "test_resource_gh12183": testResourceGH12183(), @@ -36,6 +43,7 @@ func Provider() terraform.ResourceProvider { "test_resource_computed_set": testResourceComputedSet(), "test_resource_config_mode": testResourceConfigMode(), "test_resource_nested_id": testResourceNestedId(), + "test_resource_provider_meta": testResourceProviderMeta(), "test_undeleteable": testResourceUndeleteable(), "test_resource_required_min": testResourceRequiredMin(), }, diff --git a/builtin/providers/test/resource_provider_meta.go b/builtin/providers/test/resource_provider_meta.go new file mode 100644 index 0000000000..c05adb1702 --- /dev/null +++ b/builtin/providers/test/resource_provider_meta.go @@ -0,0 +1,95 @@ +package test + +import ( + "fmt" + + "github.com/hashicorp/terraform/helper/schema" +) + +func testResourceProviderMeta() *schema.Resource { + return &schema.Resource{ + Create: testResourceProviderMetaCreate, + Read: testResourceProviderMetaRead, + Update: testResourceProviderMetaUpdate, + Delete: testResourceProviderMetaDelete, + + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + + Schema: map[string]*schema.Schema{ + "optional": { + Type: schema.TypeString, + Optional: true, + }, + }, + } +} + +type providerMeta struct { + Foo string `cty:"foo"` +} + +func testResourceProviderMetaCreate(d *schema.ResourceData, meta interface{}) error { + d.SetId("testId") + var m providerMeta + + err := d.GetProviderMeta(&m) + if err != nil { + return err + } + + if m.Foo != "bar" { + return fmt.Errorf("expected provider_meta.foo to be %q, was %q", + "bar", m.Foo) + } + + return testResourceProviderMetaRead(d, meta) +} + +func testResourceProviderMetaRead(d *schema.ResourceData, meta interface{}) error { + var m providerMeta + + err := d.GetProviderMeta(&m) + if err != nil { + return err + } + + if m.Foo != "bar" { + return fmt.Errorf("expected provider_meta.foo to be %q, was %q", + "bar", m.Foo) + } + + return nil +} + +func testResourceProviderMetaUpdate(d *schema.ResourceData, meta interface{}) error { + var m providerMeta + + err := d.GetProviderMeta(&m) + if err != nil { + return err + } + + if m.Foo != "bar" { + return fmt.Errorf("expected provider_meta.foo to be %q, was %q", + "bar", m.Foo) + } + return testResourceProviderMetaRead(d, meta) +} + +func testResourceProviderMetaDelete(d *schema.ResourceData, meta interface{}) error { + d.SetId("") + var m providerMeta + + err := d.GetProviderMeta(&m) + if err != nil { + return err + } + + if m.Foo != "bar" { + return fmt.Errorf("expected provider_meta.foo to be %q, was %q", + "bar", m.Foo) + } + return nil +} diff --git a/builtin/providers/test/resource_provider_meta_test.go b/builtin/providers/test/resource_provider_meta_test.go new file mode 100644 index 0000000000..3b92d0a409 --- /dev/null +++ b/builtin/providers/test/resource_provider_meta_test.go @@ -0,0 +1,29 @@ +package test + +import ( + "strings" + "testing" + + "github.com/hashicorp/terraform/helper/resource" +) + +func TestResourceProviderMeta_basic(t *testing.T) { + resource.UnitTest(t, resource.TestCase{ + Providers: testAccProviders, + CheckDestroy: testAccCheckResourceDestroy, + Steps: []resource.TestStep{ + resource.TestStep{ + Config: strings.TrimSpace(` +terraform { + provider_meta "test" { + foo = "bar" + } +} + +resource "test_resource_provider_meta" "foo" { +} + `), + }, + }, + }) +}