diff --git a/google/data_source_pubsub_topic.go b/google/data_source_pubsub_topic.go new file mode 100644 index 00000000000..7ed76168361 --- /dev/null +++ b/google/data_source_pubsub_topic.go @@ -0,0 +1,30 @@ +package google + +import ( + "fmt" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" +) + +func dataSourceGooglePubsubService() *schema.Resource { + + dsSchema := datasourceSchemaFromResourceSchema(resourcePubsubTopic().Schema) + addRequiredFieldsToSchema(dsSchema, "name") + addOptionalFieldsToSchema(dsSchema, "project") + + return &schema.Resource{ + Read: dataSourceGooglePubsubServiceRead, + Schema: dsSchema, + } +} + +func dataSourceGooglePubsubServiceRead(d *schema.ResourceData, meta interface{}) error { + config := meta.(*Config) + + id, err := replaceVars(d, config, "namespaces/{{project}}/topics/{{name}}") + if err != nil { + return fmt.Errorf("Error constructing id: %s", err) + } + d.SetId(id) + return resourcePubsubTopicRead(d, meta) +} diff --git a/google/data_source_pubsub_topic_test.go b/google/data_source_pubsub_topic_test.go new file mode 100644 index 00000000000..9f8263df112 --- /dev/null +++ b/google/data_source_pubsub_topic_test.go @@ -0,0 +1,76 @@ +package google + +import ( + "testing" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +func TestAccDataSourceGooglePubsubTopic_basic(t *testing.T) { + t.Parallel() + + context := map[string]interface{}{ + "random_suffix": randString(t, 10), + } + + vcrTest(t, resource.TestCase{ + PreCheck: func() { testAccPreCheck(t) }, + Providers: testAccProviders, + CheckDestroy: testAccCheckPubsubTopicDestroyProducer(t), + Steps: []resource.TestStep{ + { + Config: testAccDataSourceGooglePubsubTopic_basic(context), + Check: resource.ComposeTestCheckFunc( + checkDataSourceStateMatchesResourceState("data.google_pubsub_topic.foo", "google_pubsub_topic.foo"), + ), + }, + }, + }) +} + +func TestAccDataSourceGooglePubsubTopic_optionalProject(t *testing.T) { + t.Parallel() + + context := map[string]interface{}{ + "random_suffix": randString(t, 10), + } + + vcrTest(t, resource.TestCase{ + PreCheck: func() { testAccPreCheck(t) }, + Providers: testAccProviders, + CheckDestroy: testAccCheckPubsubTopicDestroyProducer(t), + Steps: []resource.TestStep{ + { + Config: testAccDataSourceGooglePubsubTopic_optionalProject(context), + Check: resource.ComposeTestCheckFunc( + checkDataSourceStateMatchesResourceState("data.google_pubsub_topic.foo", "google_pubsub_topic.foo"), + ), + }, + }, + }) +} + +func testAccDataSourceGooglePubsubTopic_basic(context map[string]interface{}) string { + return Nprintf(` +resource "google_pubsub_topic" "foo" { + name = "tf-test-pubsub-%{random_suffix}" +} + +data "google_pubsub_topic" "foo" { + name = google_pubsub_topic.foo.name + project = google_pubsub_topic.foo.project +} +`, context) +} + +func testAccDataSourceGooglePubsubTopic_optionalProject(context map[string]interface{}) string { + return Nprintf(` +resource "google_pubsub_topic" "foo" { + name = "tf-test-pubsub-%{random_suffix}" +} + +data "google_pubsub_topic" "foo" { + name = google_pubsub_topic.foo.name +} +`, context) +} diff --git a/google/provider.go b/google/provider.go index 6789a1351c1..5556c379659 100644 --- a/google/provider.go +++ b/google/provider.go @@ -565,6 +565,7 @@ func Provider() *schema.Provider { "google_client_openid_userinfo": dataSourceGoogleClientOpenIDUserinfo(), "google_cloudfunctions_function": dataSourceGoogleCloudFunctionsFunction(), "google_cloud_run_service": dataSourceGoogleCloudRunService(), + "google_pubsub_topic": dataSourceGooglePubsubService(), "google_composer_image_versions": dataSourceGoogleComposerImageVersions(), "google_compute_address": dataSourceGoogleComputeAddress(), "google_compute_backend_service": dataSourceGoogleComputeBackendService(),