From 137469c0157a2e517481814920d0d12cfb92e75e Mon Sep 17 00:00:00 2001 From: Vidhi Kothari Date: Wed, 6 Apr 2022 11:09:53 +0530 Subject: [PATCH] Update parameters to remove redundancy --- .../datadog/datadog_monitors_resource.go | 40 ++--- .../datadog/datadog_monitors_resource_test.go | 154 +++++++++--------- website/docs/r/datadog_monitors.html.markdown | 52 +++--- 3 files changed, 120 insertions(+), 126 deletions(-) diff --git a/internal/services/datadog/datadog_monitors_resource.go b/internal/services/datadog/datadog_monitors_resource.go index 95dabb44b1d8..cda55750af16 100644 --- a/internal/services/datadog/datadog_monitors_resource.go +++ b/internal/services/datadog/datadog_monitors_resource.go @@ -50,7 +50,7 @@ func resourceDatadogMonitor() *pluginsdk.Resource { "location": azure.SchemaLocation(), - "datadog_organization_properties": { + "datadog_organization": { Type: pluginsdk.TypeList, Required: true, MaxItems: 1, @@ -116,7 +116,7 @@ func resourceDatadogMonitor() *pluginsdk.Resource { Required: true, }, - "user_info": { + "user": { Type: pluginsdk.TypeList, Required: true, MaxItems: 1, @@ -129,7 +129,7 @@ func resourceDatadogMonitor() *pluginsdk.Resource { ValidateFunc: validate.DatadogUsersName, }, - "email_address": { + "email": { Type: pluginsdk.TypeString, Required: true, ForceNew: true, @@ -152,16 +152,11 @@ func resourceDatadogMonitor() *pluginsdk.Resource { Default: true, }, - "liftr_resource_category": { + "resource_category": { Type: pluginsdk.TypeString, Computed: true, }, - "liftr_resource_preference": { - Type: pluginsdk.TypeInt, - Computed: true, - }, - "marketplace_subscription_status": { Type: pluginsdk.TypeString, Computed: true, @@ -204,8 +199,8 @@ func resourceDatadogMonitorCreate(d *pluginsdk.ResourceData, meta interface{}) e Name: utils.String(d.Get("sku_name").(string)), }, Properties: &datadog.MonitorProperties{ - DatadogOrganizationProperties: expandMonitorOrganizationProperties(d.Get("datadog_organization_properties").([]interface{})), - UserInfo: expandMonitorUserInfo(d.Get("user_info").([]interface{})), + DatadogOrganizationProperties: expandMonitorOrganizationProperties(d.Get("datadog_organization").([]interface{})), + UserInfo: expandMonitorUserInfo(d.Get("user").([]interface{})), MonitoringStatus: monitoringStatus, }, Tags: tags.Expand(d.Get("tags").(map[string]interface{})), @@ -249,15 +244,14 @@ func resourceDatadogMonitorRead(d *pluginsdk.ResourceData, meta interface{}) err return fmt.Errorf("setting `identity`: %+v", err) } if props := resp.Properties; props != nil { - if err := d.Set("datadog_organization_properties", flattenMonitorOrganizationProperties(props.DatadogOrganizationProperties, d)); err != nil { - return fmt.Errorf("setting `datadog_organization_properties`: %+v", err) + if err := d.Set("datadog_organization", flattenMonitorOrganizationProperties(props.DatadogOrganizationProperties, d)); err != nil { + return fmt.Errorf("setting `datadog_organization`: %+v", err) } - if err := d.Set("user_info", flattenMonitorUserInfo(props.UserInfo, d)); err != nil { - return fmt.Errorf("setting `user_info`: %+v", err) + if err := d.Set("user", flattenMonitorUserInfo(props.UserInfo, d)); err != nil { + return fmt.Errorf("setting `user`: %+v", err) } d.Set("monitoring_enabled", props.MonitoringStatus == datadog.MonitoringStatusEnabled) - d.Set("liftr_resource_category", props.LiftrResourceCategory) - d.Set("liftr_resource_preference", props.LiftrResourcePreference) + d.Set("resource_category", props.LiftrResourceCategory) d.Set("marketplace_subscription_status", props.MarketplaceSubscriptionStatus) } skuName := "" @@ -354,7 +348,7 @@ func expandMonitorUserInfo(input []interface{}) *datadog.UserInfo { v := input[0].(map[string]interface{}) return &datadog.UserInfo{ Name: utils.String(v["name"].(string)), - EmailAddress: utils.String(v["email_address"].(string)), + EmailAddress: utils.String(v["email"].(string)), PhoneNumber: utils.String(v["phone_number"].(string)), } } @@ -387,7 +381,7 @@ func flattenMonitorIdentityProperties(input *datadog.IdentityProperties) []inter func flattenMonitorOrganizationProperties(input *datadog.OrganizationProperties, d *pluginsdk.ResourceData) []interface{} { - organisationProperties := d.Get("datadog_organization_properties").([]interface{}) + organisationProperties := d.Get("datadog_organization").([]interface{}) if len(organisationProperties) == 0 { return make([]interface{}, 0) } @@ -425,7 +419,7 @@ func flattenMonitorOrganizationProperties(input *datadog.OrganizationProperties, func flattenMonitorUserInfo(input *datadog.UserInfo, d *pluginsdk.ResourceData) []interface{} { - userInfo := d.Get("user_info").([]interface{}) + userInfo := d.Get("user").([]interface{}) if len(userInfo) == 0 { return make([]interface{}, 0) } @@ -433,9 +427,9 @@ func flattenMonitorUserInfo(input *datadog.UserInfo, d *pluginsdk.ResourceData) v := userInfo[0].(map[string]interface{}) return []interface{}{ map[string]interface{}{ - "name": utils.String(v["name"].(string)), - "email_address": utils.String(v["email_address"].(string)), - "phone_number": utils.String(v["phone_number"].(string)), + "name": utils.String(v["name"].(string)), + "email": utils.String(v["email"].(string)), + "phone_number": utils.String(v["phone_number"].(string)), }, } } diff --git a/internal/services/datadog/datadog_monitors_resource_test.go b/internal/services/datadog/datadog_monitors_resource_test.go index a1c6d7a39195..7ce3b5ce45ad 100644 --- a/internal/services/datadog/datadog_monitors_resource_test.go +++ b/internal/services/datadog/datadog_monitors_resource_test.go @@ -25,19 +25,19 @@ func TestAccDatadogMonitor_basic(t *testing.T) { check.That(data.ResourceName).ExistsInAzure(r), ), }, - data.ImportStep("user_info", - "user_info.0.name", - "user_info.0.email_address", - "datadog_organization_properties", - "datadog_organization_properties.0", - "datadog_organization_properties.0.id", - "datadog_organization_properties.0.name", - "datadog_organization_properties.0.api_key", - "datadog_organization_properties.0.application_key", - "datadog_organization_properties.0.enterprise_app_id", - "datadog_organization_properties.0.linking_auth_code", - "datadog_organization_properties.0.linking_client_id", - "datadog_organization_properties.0.redirect_uri"), + data.ImportStep("user", + "user.0.name", + "user.0.email", + "datadog_organization", + "datadog_organization.0", + "datadog_organization.0.id", + "datadog_organization.0.name", + "datadog_organization.0.api_key", + "datadog_organization.0.application_key", + "datadog_organization.0.enterprise_app_id", + "datadog_organization.0.linking_auth_code", + "datadog_organization.0.linking_client_id", + "datadog_organization.0.redirect_uri"), }) } @@ -65,19 +65,19 @@ func TestAccDatadogMonitor_complete(t *testing.T) { check.That(data.ResourceName).ExistsInAzure(r), ), }, - data.ImportStep("user_info", - "user_info.0.name", - "user_info.0.email_address", - "datadog_organization_properties", - "datadog_organization_properties.0", - "datadog_organization_properties.0.id", - "datadog_organization_properties.0.name", - "datadog_organization_properties.0.api_key", - "datadog_organization_properties.0.application_key", - "datadog_organization_properties.0.enterprise_app_id", - "datadog_organization_properties.0.linking_auth_code", - "datadog_organization_properties.0.linking_client_id", - "datadog_organization_properties.0.redirect_uri"), + data.ImportStep("user", + "user.0.name", + "user.0.email", + "datadog_organization", + "datadog_organization.0", + "datadog_organization.0.id", + "datadog_organization.0.name", + "datadog_organization.0.api_key", + "datadog_organization.0.application_key", + "datadog_organization.0.enterprise_app_id", + "datadog_organization.0.linking_auth_code", + "datadog_organization.0.linking_client_id", + "datadog_organization.0.redirect_uri"), }) } @@ -91,57 +91,57 @@ func TestAccDatadogMonitor_update(t *testing.T) { check.That(data.ResourceName).ExistsInAzure(r), ), }, - data.ImportStep("user_info", - "user_info.0.name", - "user_info.0.email_address", - "datadog_organization_properties", - "datadog_organization_properties.0", - "datadog_organization_properties.0.id", - "datadog_organization_properties.0.name", - "datadog_organization_properties.0.api_key", - "datadog_organization_properties.0.application_key", - "datadog_organization_properties.0.enterprise_app_id", - "datadog_organization_properties.0.linking_auth_code", - "datadog_organization_properties.0.linking_client_id", - "datadog_organization_properties.0.redirect_uri"), + data.ImportStep("user", + "user.0.name", + "user.0.email", + "datadog_organization", + "datadog_organization.0", + "datadog_organization.0.id", + "datadog_organization.0.name", + "datadog_organization.0.api_key", + "datadog_organization.0.application_key", + "datadog_organization.0.enterprise_app_id", + "datadog_organization.0.linking_auth_code", + "datadog_organization.0.linking_client_id", + "datadog_organization.0.redirect_uri"), { Config: r.update(data), Check: acceptance.ComposeTestCheckFunc( check.That(data.ResourceName).ExistsInAzure(r), ), }, - data.ImportStep("user_info", - "user_info.0.name", - "user_info.0.email_address", - "datadog_organization_properties", - "datadog_organization_properties.0", - "datadog_organization_properties.0.id", - "datadog_organization_properties.0.name", - "datadog_organization_properties.0.api_key", - "datadog_organization_properties.0.application_key", - "datadog_organization_properties.0.enterprise_app_id", - "datadog_organization_properties.0.linking_auth_code", - "datadog_organization_properties.0.linking_client_id", - "datadog_organization_properties.0.redirect_uri"), + data.ImportStep("user", + "user.0.name", + "user.0.email", + "datadog_organization", + "datadog_organization.0", + "datadog_organization.0.id", + "datadog_organization.0.name", + "datadog_organization.0.api_key", + "datadog_organization.0.application_key", + "datadog_organization.0.enterprise_app_id", + "datadog_organization.0.linking_auth_code", + "datadog_organization.0.linking_client_id", + "datadog_organization.0.redirect_uri"), { Config: r.basic(data), Check: acceptance.ComposeTestCheckFunc( check.That(data.ResourceName).ExistsInAzure(r), ), }, - data.ImportStep("user_info", - "user_info.0.name", - "user_info.0.email_address", - "datadog_organization_properties", - "datadog_organization_properties.0", - "datadog_organization_properties.0.id", - "datadog_organization_properties.0.name", - "datadog_organization_properties.0.api_key", - "datadog_organization_properties.0.application_key", - "datadog_organization_properties.0.enterprise_app_id", - "datadog_organization_properties.0.linking_auth_code", - "datadog_organization_properties.0.linking_client_id", - "datadog_organization_properties.0.redirect_uri"), + data.ImportStep("user", + "user.0.name", + "user.0.email", + "datadog_organization", + "datadog_organization.0", + "datadog_organization.0.id", + "datadog_organization.0.name", + "datadog_organization.0.api_key", + "datadog_organization.0.application_key", + "datadog_organization.0.enterprise_app_id", + "datadog_organization.0.linking_auth_code", + "datadog_organization.0.linking_client_id", + "datadog_organization.0.redirect_uri"), }) } @@ -180,13 +180,13 @@ func (r DatadogMonitorResource) basic(data acceptance.TestData) string { name = "acctest-datadog-%d" resource_group_name = azurerm_resource_group.test.name location = "EAST US 2 EUAP" - datadog_organization_properties { + datadog_organization { api_key = "XXX" application_key = "XXX" } - user_info { + user { name = "Vidhi Kothari" - email_address = "vidhi.kothari@microsoft.com" + email = "vidhi.kothari@microsoft.com" } sku_name = "Linked" identity { @@ -210,13 +210,13 @@ func (r DatadogMonitorResource) update(data acceptance.TestData) string { name = "acctest-datadog-%d" resource_group_name = azurerm_resource_group.test.name location = "EAST US 2 EUAP" - datadog_organization_properties { + datadog_organization { api_key = "XXX" application_key = "XXX" } - user_info { + user { name = "Vidhi Kothari" - email_address = "vidhi.kothari@microsoft.com" + email = "vidhi.kothari@microsoft.com" } sku_name = "Linked" identity { @@ -237,13 +237,13 @@ func (r DatadogMonitorResource) requiresImport(data acceptance.TestData) string name = azurerm_datadog_monitor.test.name resource_group_name = azurerm_resource_group.test.name location = azurerm_datadog_monitor.test.location - datadog_organization_properties { + datadog_organization { api_key = "XXX" application_key = "XXX" } - user_info { + user { name = "Vidhi Kothari" - email_address = "vidhi.kothari@microsoft.com" + email = "vidhi.kothari@microsoft.com" } sku_name = "Linked" identity { @@ -260,7 +260,7 @@ func (r DatadogMonitorResource) complete(data acceptance.TestData) string { name = "acctest-datadog-%d" resource_group_name = azurerm_resource_group.test.name location = azurerm_resource_group.test.location - datadog_organization_properties { + datadog_organization { api_key = "XXX" application_key = "XXX" enterprise_app_id = "" @@ -272,9 +272,9 @@ func (r DatadogMonitorResource) complete(data acceptance.TestData) string { type = "SystemAssigned" } sku_name = "Linked" - user_info { + user { name = "Vidhi Kothari" - email_address = "vidhi.kothari@microsoft.com" + email = "vidhi.kothari@microsoft.com" phone_number = "" } monitoring_enabled = true diff --git a/website/docs/r/datadog_monitors.html.markdown b/website/docs/r/datadog_monitors.html.markdown index 9a2cac7750ea..8ec935bd2128 100644 --- a/website/docs/r/datadog_monitors.html.markdown +++ b/website/docs/r/datadog_monitors.html.markdown @@ -22,17 +22,15 @@ resource "azurerm_datadog_monitor" "example" { name = "example-monitor" resource_group_name = azurerm_resource_group.example.name location = azurerm_resource_group.example.location - datadog_organization_properties { + datadog_organization { api_key = "XXXX" application_key = "XXXX" } - user_info { - name = "Example" - email_address = "abc@xyz.com" - } - sku { - name = "Linked" + user { + name = "Example" + email = "abc@xyz.com" } + sku_name = "Linked" identity { type = "SystemAssigned" } @@ -49,23 +47,23 @@ The following arguments are supported: * `location` - (Required) The Azure Region where the datadog Monitor should exist. Changing this forces a new datadog Monitor to be created. +* `sku_name` - (Required) The name which should be used for this sku. + * `identity` - (Required) A `identity` block as defined below. -* `sku` - (Required) A `sku` block as defined below. +* `user` - (Required) A `user` block as defined below. -* `user_info` - (Required) A `user_info` block as defined below. +* `datadog_organization` - (Required) A `datadog_organization` block as defined below. --- -* `datadog_organization_properties` - (Required) A `datadog_organization_properties` block as defined below. - -* `monitoring_status` - (Optional) Flag specifying if the resource monitoring is enabled or disabled. Possible values are "true" and "false" is allowed. +* `monitoring_enabled` - (Optional) Flag specifying if the resource monitoring is enabled or disabled. Possible values are "true" and "false" is allowed. * `tags` - (Optional) A mapping of tags which should be assigned to the datadog Monitor. --- -A `datadog_organization_properties` block exports the following: +A `datadog_organization` block exports the following: * `api_key` - (Required) Api key associated to the Datadog organization. Changing this forces a new datadog Monitor to be created. @@ -88,17 +86,11 @@ An `identity` block supports the following: > **NOTE:** The assigned `principal_id` and `tenant_id` can be retrieved after the identity `type` has been set to `SystemAssigned` and the datadog Monitor has been created. More details are available below. --- -An `sku` block exports the following: - -* `name` - (Required) The name which should be used for this sku. - ---- - -An `user_info` block exports the following: +An `user` block exports the following: * `name` - (Required) The name which should be used for this user_info. -* `email_address` - (Required) Email of the user used by Datadog for contacting them if needed. Changing this forces a new datadog Monitor to be created. +* `email` - (Required) Email of the user used by Datadog for contacting them if needed. Changing this forces a new datadog Monitor to be created. * `phone_number` - (Optional) Phone number of the user used by Datadog for contacting them if needed. @@ -110,14 +102,10 @@ In addition to the Arguments listed above - the following Attributes are exporte * `identity` - A `identity` block as defined below. -* `liftr_resource_category` - The catogory of resource logs flowing. - -* `liftr_resource_preference` - The priority of the resource. +* `resource_category` - The catogory of resource logs flowing. * `marketplace_subscription_status` - Flag specifying the Marketplace Subscription Status of the resource. If payment is not made in time, the resource will go in Suspended state. -* `type` - The type of the monitor resource. - --- An `identity` block exports the following: @@ -128,6 +116,18 @@ An `identity` block exports the following: -> You can access the Principal ID via `${azurerm_datadog_monitor.example.identity.0.principal_id}` and the Tenant ID via `${azurerm_datadog_monitor.example.identity.0.tenant_id}` +## Role Assignment + +To enable metrics flow, perform role assignment on the identity created above. `Monitoring reader` role is required. + +### Role assignment on the monitor created +```hcl +resource "azurerm_role_assignment" "example" { + scope = data.azurerm_subscription.primary.id + role_definition_id = "/subscriptions/5a611eed-e33a-44e8-92b1-3f6bf835905e/providers/Microsoft.Authorization/roleDefinitions/43d0d8ad-25c7-4714-9337-8ba259a9fe05" + principal_id = azurerm_datadog_monitor.example.identity.0.principal_id +} +``` ## Timeouts The `timeouts` block allows you to specify [timeouts](https://www.terraform.io/docs/configuration/resources.html#timeouts) for certain actions: