From ea5ed53be79755082ddbda80e3af02e9fad99bb8 Mon Sep 17 00:00:00 2001 From: Vladimir Lazarenko Date: Tue, 5 Jan 2021 22:38:03 +0100 Subject: [PATCH] New data source: `azurerm_eventgrid_domain_topic` (#10050) Fixes #9340 --- .../eventgrid_domain_topic_data_source.go | 65 +++++++++++++++++++ ...eventgrid_domain_topic_data_source_test.go | 39 +++++++++++ .../services/eventgrid/registration.go | 3 +- .../d/eventgrid_domain_topic.html.markdown | 45 +++++++++++++ 4 files changed, 151 insertions(+), 1 deletion(-) create mode 100644 azurerm/internal/services/eventgrid/eventgrid_domain_topic_data_source.go create mode 100644 azurerm/internal/services/eventgrid/eventgrid_domain_topic_data_source_test.go create mode 100644 website/docs/d/eventgrid_domain_topic.html.markdown diff --git a/azurerm/internal/services/eventgrid/eventgrid_domain_topic_data_source.go b/azurerm/internal/services/eventgrid/eventgrid_domain_topic_data_source.go new file mode 100644 index 000000000000..5af3df16b8ab --- /dev/null +++ b/azurerm/internal/services/eventgrid/eventgrid_domain_topic_data_source.go @@ -0,0 +1,65 @@ +package eventgrid + +import ( + "fmt" + "time" + + "github.com/hashicorp/terraform-plugin-sdk/helper/schema" + "github.com/hashicorp/terraform-plugin-sdk/helper/validation" + "github.com/terraform-providers/terraform-provider-azurerm/azurerm/helpers/azure" + "github.com/terraform-providers/terraform-provider-azurerm/azurerm/internal/clients" + "github.com/terraform-providers/terraform-provider-azurerm/azurerm/internal/timeouts" + "github.com/terraform-providers/terraform-provider-azurerm/azurerm/utils" +) + +func dataSourceEventGridDomainTopic() *schema.Resource { + return &schema.Resource{ + Read: dataSourceEventGridDomainTopicRead, + + Timeouts: &schema.ResourceTimeout{ + Read: schema.DefaultTimeout(5 * time.Minute), + }, + + Schema: map[string]*schema.Schema{ + "name": { + Type: schema.TypeString, + Required: true, + ValidateFunc: validation.StringIsNotEmpty, + }, + + "domain_name": { + Type: schema.TypeString, + Required: true, + ValidateFunc: validation.StringIsNotEmpty, + }, + + "resource_group_name": azure.SchemaResourceGroupNameForDataSource(), + }, + } +} + +func dataSourceEventGridDomainTopicRead(d *schema.ResourceData, meta interface{}) error { + client := meta.(*clients.Client).EventGrid.DomainTopicsClient + ctx, cancel := timeouts.ForRead(meta.(*clients.Client).StopContext, d) + defer cancel() + + name := d.Get("name").(string) + resourceGroup := d.Get("resource_group_name").(string) + domainName := d.Get("domain_name").(string) + + resp, err := client.Get(ctx, resourceGroup, domainName, name) + if err != nil { + if utils.ResponseWasNotFound(resp.Response) { + return fmt.Errorf("Error: EventGrid Domain Topic %s (Resource Group %s) was not found: %+v", name, resourceGroup, err) + } + + return fmt.Errorf("Error making Read request on EventGrid Domain Topic '%s': %+v", name, err) + } + + d.SetId(*resp.ID) + d.Set("name", name) + d.Set("resource_group_name", resourceGroup) + d.Set("domain_name", domainName) + + return nil +} diff --git a/azurerm/internal/services/eventgrid/eventgrid_domain_topic_data_source_test.go b/azurerm/internal/services/eventgrid/eventgrid_domain_topic_data_source_test.go new file mode 100644 index 000000000000..988be68be3f6 --- /dev/null +++ b/azurerm/internal/services/eventgrid/eventgrid_domain_topic_data_source_test.go @@ -0,0 +1,39 @@ +package eventgrid_test + +import ( + "fmt" + "testing" + + "github.com/hashicorp/terraform-plugin-sdk/helper/resource" + "github.com/terraform-providers/terraform-provider-azurerm/azurerm/internal/acceptance" + "github.com/terraform-providers/terraform-provider-azurerm/azurerm/internal/acceptance/check" +) + +type EventGridDomainTopicDataSource struct { +} + +func TestAccEventGridDomainTopicDataSource_basic(t *testing.T) { + data := acceptance.BuildTestData(t, "data.azurerm_eventgrid_domain_topic", "test") + r := EventGridDomainTopicDataSource{} + + data.DataSourceTest(t, []resource.TestStep{ + { + Config: r.basic(data), + Check: resource.ComposeTestCheckFunc( + check.That(data.ResourceName).Key("domain_name").Exists(), + ), + }, + }) +} + +func (EventGridDomainTopicDataSource) basic(data acceptance.TestData) string { + return fmt.Sprintf(` +%s + +data "azurerm_eventgrid_domain_topic" "test" { + name = azurerm_eventgrid_domain_topic.test.name + domain_name = azurerm_eventgrid_domain_topic.test.domain_name + resource_group_name = azurerm_resource_group.test.name +} +`, EventGridDomainTopicResource{}.basic(data)) +} diff --git a/azurerm/internal/services/eventgrid/registration.go b/azurerm/internal/services/eventgrid/registration.go index e81b33ddbdc4..cad10fdd74cc 100644 --- a/azurerm/internal/services/eventgrid/registration.go +++ b/azurerm/internal/services/eventgrid/registration.go @@ -21,7 +21,8 @@ func (r Registration) WebsiteCategories() []string { // SupportedDataSources returns the supported Data Sources supported by this Service func (r Registration) SupportedDataSources() map[string]*schema.Resource { return map[string]*schema.Resource{ - "azurerm_eventgrid_topic": dataSourceEventGridTopic(), + "azurerm_eventgrid_topic": dataSourceEventGridTopic(), + "azurerm_eventgrid_domain_topic": dataSourceEventGridDomainTopic(), } } diff --git a/website/docs/d/eventgrid_domain_topic.html.markdown b/website/docs/d/eventgrid_domain_topic.html.markdown new file mode 100644 index 000000000000..19e12deef2e1 --- /dev/null +++ b/website/docs/d/eventgrid_domain_topic.html.markdown @@ -0,0 +1,45 @@ +--- +subcategory: "Messaging" +layout: "azurerm" +page_title: "Azure Resource Manager: azurerm_eventgrid_domain_topic" +description: |- + Gets information about an existing EventGrid Domain Topic + +--- + +# Data Source: azurerm_eventgrid_domain_topic + +Use this data source to access information about an existing EventGrid Domain Topic + +## Example Usage + +```hcl +data "azurerm_eventgrid_domain_topic" "example" { + name = "my-eventgrid-domain-topic" + resource_group_name = "example-resources" +} +``` + +## Argument Reference + +The following arguments are supported: + +* `name` - The name of the EventGrid Domain Topic resource. + +* `domain_name` - The name of the EventGrid Domain Topic domain. + +* `resource_group_name` - The name of the resource group in which the EventGrid Domain Topic exists. + +## Attributes Reference + +The following attributes are exported: + +* `id` - The EventGrid Domain Topic ID. + +* `domain_name` - The EventGrid Domain Topic Domain name. + +## Timeouts + +The `timeouts` block allows you to specify [timeouts](https://www.terraform.io/docs/configuration/resources.html#timeouts) for certain actions: + +* `read` - (Defaults to 5 minutes) Used when retrieving the EventGrid Domain Topic.