diff --git a/internal/services/consumption/consumption_budget_base.go b/internal/services/consumption/consumption_budget_base.go index 66352fad38fc..a6994bcea0b8 100644 --- a/internal/services/consumption/consumption_budget_base.go +++ b/internal/services/consumption/consumption_budget_base.go @@ -12,7 +12,6 @@ import ( "github.com/hashicorp/go-azure-helpers/lang/response" "github.com/hashicorp/go-azure-sdk/resource-manager/consumption/2019-10-01/budgets" "github.com/hashicorp/terraform-provider-azurerm/helpers/tf" - "github.com/hashicorp/terraform-provider-azurerm/internal/features" "github.com/hashicorp/terraform-provider-azurerm/internal/sdk" "github.com/hashicorp/terraform-provider-azurerm/internal/services/consumption/validate" "github.com/hashicorp/terraform-provider-azurerm/internal/tf/pluginsdk" @@ -153,13 +152,10 @@ func (br consumptionBudgetBaseResource) arguments(fields map[string]*pluginsdk.S ValidateFunc: validation.IntBetween(0, 1000), }, // Issue: https://github.com/Azure/azure-rest-api-specs/issues/16240 - // Toggling between these two values doesn't work at the moment and also doesn't throw an error - // but it seems unlikely that a user would switch the threshold_type of their budgets frequently "threshold_type": { Type: pluginsdk.TypeString, Optional: true, Default: string(budgets.ThresholdTypeActual), - ForceNew: true, // TODO: remove this when the above issue is fixed ValidateFunc: validation.StringInSlice([]string{ string(budgets.ThresholdTypeActual), "Forecasted", @@ -244,82 +240,6 @@ func (br consumptionBudgetBaseResource) arguments(fields map[string]*pluginsdk.S }, } - if !features.FourPointOhBeta() { - output["filter"].Elem.(*pluginsdk.Resource).Schema["not"] = &pluginsdk.Schema{ - Type: pluginsdk.TypeList, - Optional: true, - MaxItems: 1, - Deprecated: "This property has been deprecated as the API no longer supports it and will be removed in version 4.0 of the provider.", - AtLeastOneOf: []string{"filter.0.dimension", "filter.0.tag", "filter.0.not"}, - Elem: &pluginsdk.Resource{ - Schema: map[string]*pluginsdk.Schema{ - "dimension": { - Type: pluginsdk.TypeList, - MaxItems: 1, - Optional: true, - ExactlyOneOf: []string{"filter.0.not.0.tag"}, - Elem: &pluginsdk.Resource{ - Schema: map[string]*pluginsdk.Schema{ - "name": { - Type: pluginsdk.TypeString, - Required: true, - ValidateFunc: validation.StringInSlice(getDimensionNames(), false), - }, - "operator": { - Type: pluginsdk.TypeString, - Optional: true, - Default: "In", - ValidateFunc: validation.StringInSlice([]string{ - "In", - }, false), - }, - "values": { - Type: pluginsdk.TypeList, - MinItems: 1, - Required: true, - Elem: &pluginsdk.Schema{ - Type: pluginsdk.TypeString, - ValidateFunc: validation.StringIsNotEmpty, - }, - }, - }, - }, - }, - "tag": { - Type: pluginsdk.TypeList, - MaxItems: 1, - Optional: true, - ExactlyOneOf: []string{"filter.0.not.0.dimension"}, - Elem: &pluginsdk.Resource{ - Schema: map[string]*pluginsdk.Schema{ - "name": { - Type: pluginsdk.TypeString, - Required: true, - }, - "operator": { - Type: pluginsdk.TypeString, - Optional: true, - Default: "In", - ValidateFunc: validation.StringInSlice([]string{ - "In", - }, false), - }, - "values": { - Type: pluginsdk.TypeList, - Required: true, - Elem: &pluginsdk.Schema{ - Type: pluginsdk.TypeString, - ValidateFunc: validation.StringIsNotEmpty, - }, - }, - }, - }, - }, - }, - }, - } - } - // Consumption Budgets for Management Groups have a different notification schema, // here we override the notification schema in the base resource for k, v := range fields { @@ -384,7 +304,7 @@ func (br consumptionBudgetBaseResource) readFunc(scopeFieldName string) sdk.Reso } metadata.ResourceData.Set("name", id.BudgetName) - //lintignore:R001 + // lintignore:R001 metadata.ResourceData.Set(scopeFieldName, id.Scope) if model := resp.Model; model != nil { @@ -700,22 +620,6 @@ func expandConsumptionBudgetFilter(i []interface{}) *budgets.BudgetFilter { filter := budgets.BudgetFilter{} - if !features.FourPointOhBeta() { - notBlock := input["not"].([]interface{}) - if len(notBlock) != 0 && notBlock[0] != nil { - not := notBlock[0].(map[string]interface{}) - - tags := expandConsumptionBudgetFilterTag(not["tag"].([]interface{})) - dimensions := expandConsumptionBudgetFilterDimensions(not["dimension"].([]interface{})) - - if len(dimensions) != 0 { - filter.Not = &dimensions[0] - } else if len(tags) != 0 { - filter.Not = &tags[0] - } - } - } - tags := expandConsumptionBudgetFilterTag(input["tag"].(*pluginsdk.Set).List()) dimensions := expandConsumptionBudgetFilterDimensions(input["dimension"].(*pluginsdk.Set).List()) @@ -756,24 +660,6 @@ func flattenConsumptionBudgetFilter(input *budgets.BudgetFilter) []interface{} { filterBlock := make(map[string]interface{}) - if !features.FourPointOhBeta() { - notBlock := make(map[string]interface{}) - - if input.Not != nil { - if input.Not.Dimensions != nil { - notBlock["dimension"] = []interface{}{flattenConsumptionBudgetComparisonExpression(input.Not.Dimensions)} - } - - if input.Not.Tags != nil { - notBlock["tag"] = []interface{}{flattenConsumptionBudgetComparisonExpression(input.Not.Tags)} - } - - if len(notBlock) != 0 { - filterBlock["not"] = []interface{}{notBlock} - } - } - } - if input.And != nil { for _, v := range *input.And { if v.Dimensions != nil { diff --git a/internal/services/consumption/consumption_budget_management_group_resource.go b/internal/services/consumption/consumption_budget_management_group_resource.go index d3703daab6b9..2895b985ae13 100644 --- a/internal/services/consumption/consumption_budget_management_group_resource.go +++ b/internal/services/consumption/consumption_budget_management_group_resource.go @@ -54,14 +54,10 @@ func (r ManagementGroupConsumptionBudget) Arguments() map[string]*pluginsdk.Sche Required: true, ValidateFunc: validation.IntBetween(0, 1000), }, - // Issue: https://github.com/Azure/azure-rest-api-specs/issues/16240 - // Toggling between these two values doesn't work at the moment and also doesn't throw an error - // but it seems unlikely that a user would switch the threshold_type of their budgets frequently "threshold_type": { Type: pluginsdk.TypeString, Optional: true, Default: string(budgets.ThresholdTypeActual), - ForceNew: true, // TODO: remove this when the above issue is fixed ValidateFunc: validation.StringInSlice([]string{ string(budgets.ThresholdTypeActual), "Forecasted", diff --git a/internal/services/consumption/consumption_budget_resource_group_resource_test.go b/internal/services/consumption/consumption_budget_resource_group_resource_test.go index a0eb6810140f..235f8229e2db 100644 --- a/internal/services/consumption/consumption_budget_resource_group_resource_test.go +++ b/internal/services/consumption/consumption_budget_resource_group_resource_test.go @@ -404,12 +404,10 @@ resource "azurerm_consumption_budget_resource_group" "test" { } notification { - enabled = true - threshold = 90.0 - operator = "EqualTo" - // We don't update the value of threshold_type because toggling between the two seems to be broken - // See the comment on threshold_type in the schema for more details - threshold_type = "Forecasted" + enabled = true + threshold = 90.0 + operator = "EqualTo" + threshold_type = "Actual" contact_emails = [ "baz@example.com", diff --git a/website/docs/r/consumption_budget_management_group.html.markdown b/website/docs/r/consumption_budget_management_group.html.markdown index 31dbdb2cd9c6..2a606f399f54 100644 --- a/website/docs/r/consumption_budget_management_group.html.markdown +++ b/website/docs/r/consumption_budget_management_group.html.markdown @@ -112,7 +112,7 @@ A `notification` block supports the following: * `contact_emails` - (Required) Specifies a list of email addresses to send the budget notification to when the threshold is exceeded. -* `threshold_type` - (Optional) The type of threshold for the notification. This determines whether the notification is triggered by forecasted costs or actual costs. The allowed values are `Actual` and `Forecasted`. Default is `Actual`. Changing this forces a new resource to be created. +* `threshold_type` - (Optional) The type of threshold for the notification. This determines whether the notification is triggered by forecasted costs or actual costs. The allowed values are `Actual` and `Forecasted`. Default is `Actual`. * `enabled` - (Optional) Should the notification be enabled? Defaults to `true`. diff --git a/website/docs/r/consumption_budget_resource_group.html.markdown b/website/docs/r/consumption_budget_resource_group.html.markdown index 3f9700574558..45231361aad5 100644 --- a/website/docs/r/consumption_budget_resource_group.html.markdown +++ b/website/docs/r/consumption_budget_resource_group.html.markdown @@ -120,7 +120,7 @@ A `notification` block supports the following: * `threshold` - (Required) Threshold value associated with a notification. Notification is sent when the cost exceeded the threshold. It is always percent and has to be between 0 and 1000. -* `threshold_type` - (Optional) The type of threshold for the notification. This determines whether the notification is triggered by forecasted costs or actual costs. The allowed values are `Actual` and `Forecasted`. Default is `Actual`. Changing this forces a new resource to be created. +* `threshold_type` - (Optional) The type of threshold for the notification. This determines whether the notification is triggered by forecasted costs or actual costs. The allowed values are `Actual` and `Forecasted`. Default is `Actual`. * `contact_emails` - (Optional) Specifies a list of email addresses to send the budget notification to when the threshold is exceeded. diff --git a/website/docs/r/consumption_budget_subscription.html.markdown b/website/docs/r/consumption_budget_subscription.html.markdown index 17c20a26f1c0..2fcc3027873b 100644 --- a/website/docs/r/consumption_budget_subscription.html.markdown +++ b/website/docs/r/consumption_budget_subscription.html.markdown @@ -124,7 +124,7 @@ A `notification` block supports the following: * `threshold` - (Required) Threshold value associated with a notification. Notification is sent when the cost exceeded the threshold. It is always percent and has to be between 0 and 1000. -* `threshold_type` - (Optional) The type of threshold for the notification. This determines whether the notification is triggered by forecasted costs or actual costs. The allowed values are `Actual` and `Forecasted`. Default is `Actual`. Changing this forces a new resource to be created. +* `threshold_type` - (Optional) The type of threshold for the notification. This determines whether the notification is triggered by forecasted costs or actual costs. The allowed values are `Actual` and `Forecasted`. Default is `Actual`. * `contact_emails` - (Optional) Specifies a list of email addresses to send the budget notification to when the threshold is exceeded.