Skip to content

Commit

Permalink
switch remaining alertsmanagement references over to go-azure-sdk (#2…
Browse files Browse the repository at this point in the history
  • Loading branch information
stephybun committed Apr 3, 2024
1 parent 9e958a0 commit 0c06281
Show file tree
Hide file tree
Showing 97 changed files with 4,678 additions and 6,258 deletions.
Expand Up @@ -5,23 +5,21 @@ package applicationinsights

import (
"fmt"
"net/http"
"strings"
"time"

"github.com/Azure/azure-sdk-for-go/services/preview/alertsmanagement/mgmt/2019-06-01-preview/alertsmanagement" // nolint: staticcheck
"github.com/hashicorp/go-azure-helpers/lang/pointer"
"github.com/hashicorp/go-azure-helpers/lang/response"
"github.com/hashicorp/go-azure-helpers/resourcemanager/commonschema"
"github.com/hashicorp/go-azure-helpers/resourcemanager/location"
"github.com/hashicorp/go-azure-helpers/resourcemanager/tags"
"github.com/hashicorp/go-azure-sdk/resource-manager/alertsmanagement/2019-06-01/smartdetectoralertrules"
billing "github.com/hashicorp/go-azure-sdk/resource-manager/applicationinsights/2015-05-01/componentfeaturesandpricingapis"
components "github.com/hashicorp/go-azure-sdk/resource-manager/applicationinsights/2020-02-02/componentsapis"
"github.com/hashicorp/go-azure-sdk/resource-manager/operationalinsights/2020-08-01/workspaces"
"github.com/hashicorp/terraform-provider-azurerm/helpers/tf"
"github.com/hashicorp/terraform-provider-azurerm/internal/clients"
"github.com/hashicorp/terraform-provider-azurerm/internal/services/applicationinsights/migration"
monitorParse "github.com/hashicorp/terraform-provider-azurerm/internal/services/monitor/parse"
"github.com/hashicorp/terraform-provider-azurerm/internal/tf/pluginsdk"
"github.com/hashicorp/terraform-provider-azurerm/internal/tf/validation"
"github.com/hashicorp/terraform-provider-azurerm/internal/timeouts"
Expand Down Expand Up @@ -293,24 +291,28 @@ func resourceApplicationInsightsCreateUpdate(d *pluginsdk.ResourceData, meta int
err = pluginsdk.Retry(d.Timeout(pluginsdk.TimeoutCreate), func() *pluginsdk.RetryError {
time.Sleep(30 * time.Second)
ruleName := fmt.Sprintf("Failure Anomalies - %s", id.ComponentName)
ruleId := monitorParse.NewSmartDetectorAlertRuleID(id.SubscriptionId, id.ResourceGroupName, ruleName)
result, err := ruleClient.Get(ctx, ruleId.ResourceGroup, ruleId.Name, pointer.To(true))
ruleId := smartdetectoralertrules.NewSmartDetectorAlertRuleID(id.SubscriptionId, id.ResourceGroupName, ruleName)
result, err := ruleClient.Get(ctx, ruleId, smartdetectoralertrules.DefaultGetOperationOptions())
if err != nil {
if utils.ResponseWasNotFound(result.Response) {
if response.WasNotFound(result.HttpResponse) {
return pluginsdk.RetryableError(fmt.Errorf("expected %s to be created but was not found, retrying", ruleId))
}
return pluginsdk.NonRetryableError(fmt.Errorf("making Read request for %s: %+v", ruleId, err))
}

if result.AlertRuleProperties != nil {
result.AlertRuleProperties.State = alertsmanagement.AlertRuleStateDisabled
updateRuleResult, err := ruleClient.CreateOrUpdate(ctx, ruleId.ResourceGroup, ruleId.Name, result)
if err != nil {
if !utils.ResponseWasNotFound(updateRuleResult.Response) {
return pluginsdk.NonRetryableError(fmt.Errorf("issuing disable request for %s: %+v", ruleId, err))
if model := result.Model; model != nil {
if props := model.Properties; props != nil {
props.State = smartdetectoralertrules.AlertRuleStateDisabled
updateRuleResult, err := ruleClient.CreateOrUpdate(ctx, ruleId, *model)
if err != nil {
if !response.WasNotFound(updateRuleResult.HttpResponse) {
return pluginsdk.NonRetryableError(fmt.Errorf("issuing disable request for %s: %+v", ruleId, err))
}
}

}
}

return nil
})
if err != nil {
Expand Down Expand Up @@ -426,9 +428,9 @@ func resourceApplicationInsightsDelete(d *pluginsdk.ResourceData, meta interface
// if disable_generated_rule=true, the generated rule is not automatically deleted.
if meta.(*clients.Client).Features.ApplicationInsights.DisableGeneratedRule {
ruleName := fmt.Sprintf("Failure Anomalies - %s", id.ComponentName)
ruleId := monitorParse.NewSmartDetectorAlertRuleID(id.SubscriptionId, id.ResourceGroupName, ruleName)
deleteResp, deleteErr := ruleClient.Delete(ctx, ruleId.ResourceGroup, ruleId.Name)
if deleteErr != nil && deleteResp.StatusCode != http.StatusNotFound {
ruleId := smartdetectoralertrules.NewSmartDetectorAlertRuleID(id.SubscriptionId, id.ResourceGroupName, ruleName)
deleteResp, deleteErr := ruleClient.Delete(ctx, ruleId)
if deleteErr != nil && !response.WasNotFound(deleteResp.HttpResponse) {
return fmt.Errorf("deleting %s: %+v", ruleId, deleteErr)
}
}
Expand Down
125 changes: 63 additions & 62 deletions internal/services/monitor/action_rule.go
Expand Up @@ -7,9 +7,10 @@ import (
"context"
"fmt"

"github.com/Azure/azure-sdk-for-go/services/preview/alertsmanagement/mgmt/2019-06-01-preview/alertsmanagement" // nolint: staticcheck
"github.com/hashicorp/go-azure-helpers/lang/pointer"
"github.com/hashicorp/go-azure-sdk/resource-manager/alertsmanagement/2019-05-05-preview/actionrules"
"github.com/hashicorp/go-azure-sdk/resource-manager/alertsmanagement/2019-05-05-preview/alertsmanagements"
"github.com/hashicorp/terraform-provider-azurerm/internal/clients"
"github.com/hashicorp/terraform-provider-azurerm/internal/services/monitor/parse"
"github.com/hashicorp/terraform-provider-azurerm/internal/tf/pluginsdk"
"github.com/hashicorp/terraform-provider-azurerm/internal/tf/validation"
"github.com/hashicorp/terraform-provider-azurerm/utils"
Expand Down Expand Up @@ -50,48 +51,48 @@ func schemaActionRuleConditions() *pluginsdk.Schema {
Schema: map[string]*pluginsdk.Schema{
"alert_context": schemaActionRuleCondition(
[]string{
string(alertsmanagement.Equals),
string(alertsmanagement.NotEquals),
string(alertsmanagement.Contains),
string(alertsmanagement.DoesNotContain),
string(actionrules.OperatorEquals),
string(actionrules.OperatorNotEquals),
string(actionrules.OperatorContains),
string(actionrules.OperatorDoesNotContain),
},
nil,
),

"alert_rule_id": schemaActionRuleCondition(
[]string{
string(alertsmanagement.Equals),
string(alertsmanagement.NotEquals),
string(alertsmanagement.Contains),
string(alertsmanagement.DoesNotContain),
string(actionrules.OperatorEquals),
string(actionrules.OperatorNotEquals),
string(actionrules.OperatorContains),
string(actionrules.OperatorDoesNotContain),
}, nil,
),

"description": schemaActionRuleCondition(
[]string{
string(alertsmanagement.Equals),
string(alertsmanagement.NotEquals),
string(alertsmanagement.Contains),
string(alertsmanagement.DoesNotContain),
string(actionrules.OperatorEquals),
string(actionrules.OperatorNotEquals),
string(actionrules.OperatorContains),
string(actionrules.OperatorDoesNotContain),
},
nil,
),

"monitor": schemaActionRuleCondition(
[]string{
string(alertsmanagement.Equals),
string(alertsmanagement.NotEquals),
string(actionrules.OperatorEquals),
string(actionrules.OperatorNotEquals),
},
[]string{
string(alertsmanagement.Fired),
string(alertsmanagement.Resolved),
string(alertsmanagements.MonitorConditionFired),
string(alertsmanagements.MonitorConditionResolved),
},
),

"monitor_service": schemaActionRuleCondition(
[]string{
string(alertsmanagement.Equals),
string(alertsmanagement.NotEquals),
string(actionrules.OperatorEquals),
string(actionrules.OperatorNotEquals),
},
// the supported type list is not consistent with the swagger and sdk
// https://github.com/Azure/azure-rest-api-specs/issues/9076
Expand Down Expand Up @@ -120,22 +121,22 @@ func schemaActionRuleConditions() *pluginsdk.Schema {

"severity": schemaActionRuleCondition(
[]string{
string(alertsmanagement.Equals),
string(alertsmanagement.NotEquals),
string(actionrules.OperatorEquals),
string(actionrules.OperatorNotEquals),
},
[]string{
string(alertsmanagement.Sev0),
string(alertsmanagement.Sev1),
string(alertsmanagement.Sev2),
string(alertsmanagement.Sev3),
string(alertsmanagement.Sev4),
string(actionrules.SeveritySevZero),
string(actionrules.SeveritySevOne),
string(actionrules.SeveritySevTwo),
string(actionrules.SeveritySevThree),
string(actionrules.SeveritySevFour),
},
),

"target_resource_type": schemaActionRuleCondition(
[]string{
string(alertsmanagement.Equals),
string(alertsmanagement.NotEquals),
string(actionrules.OperatorEquals),
string(actionrules.OperatorNotEquals),
},
nil,
),
Expand Down Expand Up @@ -179,39 +180,39 @@ func schemaActionRuleCondition(operatorValidateItems, valuesValidateItems []stri
}
}

func expandActionRuleCondition(input []interface{}) *alertsmanagement.Condition {
func expandActionRuleCondition(input []interface{}) *actionrules.Condition {
if len(input) == 0 {
return nil
}

v := input[0].(map[string]interface{})
return &alertsmanagement.Condition{
Operator: alertsmanagement.Operator(v["operator"].(string)),
return &actionrules.Condition{
Operator: pointer.To(actionrules.Operator(v["operator"].(string))),
Values: utils.ExpandStringSlice(v["values"].(*pluginsdk.Set).List()),
}
}

func expandActionRuleScope(input []interface{}) *alertsmanagement.Scope {
func expandActionRuleScope(input []interface{}) *actionrules.Scope {
if len(input) == 0 {
return nil
}

v := input[0].(map[string]interface{})
return &alertsmanagement.Scope{
ScopeType: alertsmanagement.ScopeType(v["type"].(string)),
return &actionrules.Scope{
ScopeType: pointer.To(actionrules.ScopeType(v["type"].(string))),
Values: utils.ExpandStringSlice(v["resource_ids"].(*pluginsdk.Set).List()),
}
}

func expandActionRuleConditions(input []interface{}) *alertsmanagement.Conditions {
func expandActionRuleConditions(input []interface{}) *actionrules.Conditions {
if len(input) == 0 {
return nil
}
v := input[0].(map[string]interface{})

return &alertsmanagement.Conditions{
return &actionrules.Conditions{
AlertContext: expandActionRuleCondition(v["alert_context"].([]interface{})),
AlertRuleID: expandActionRuleCondition(v["alert_rule_id"].([]interface{})),
AlertRuleId: expandActionRuleCondition(v["alert_rule_id"].([]interface{})),
Description: expandActionRuleCondition(v["description"].([]interface{})),
MonitorCondition: expandActionRuleCondition(v["monitor"].([]interface{})),
MonitorService: expandActionRuleCondition(v["monitor_service"].([]interface{})),
Expand All @@ -220,14 +221,14 @@ func expandActionRuleConditions(input []interface{}) *alertsmanagement.Condition
}
}

func flattenActionRuleCondition(input *alertsmanagement.Condition) []interface{} {
func flattenActionRuleCondition(input *actionrules.Condition) []interface{} {
if input == nil {
return make([]interface{}, 0)
}

var operator string
if input.Operator != "" {
operator = string(input.Operator)
if input.Operator != nil {
operator = string(*input.Operator)
}
return []interface{}{
map[string]interface{}{
Expand All @@ -237,14 +238,14 @@ func flattenActionRuleCondition(input *alertsmanagement.Condition) []interface{}
}
}

func flattenActionRuleScope(input *alertsmanagement.Scope) []interface{} {
func flattenActionRuleScope(input *actionrules.Scope) []interface{} {
if input == nil {
return make([]interface{}, 0)
}

var scopeType alertsmanagement.ScopeType
if input.ScopeType != "" {
scopeType = input.ScopeType
var scopeType actionrules.ScopeType
if input.ScopeType != nil {
scopeType = *input.ScopeType
}
return []interface{}{
map[string]interface{}{
Expand All @@ -254,14 +255,14 @@ func flattenActionRuleScope(input *alertsmanagement.Scope) []interface{} {
}
}

func flattenActionRuleConditions(input *alertsmanagement.Conditions) []interface{} {
func flattenActionRuleConditions(input *actionrules.Conditions) []interface{} {
if input == nil {
return make([]interface{}, 0)
}
return []interface{}{
map[string]interface{}{
"alert_context": flattenActionRuleCondition(input.AlertContext),
"alert_rule_id": flattenActionRuleCondition(input.AlertRuleID),
"alert_rule_id": flattenActionRuleCondition(input.AlertRuleId),
"description": flattenActionRuleCondition(input.Description),
"monitor": flattenActionRuleCondition(input.MonitorCondition),
"monitor_service": flattenActionRuleCondition(input.MonitorService),
Expand All @@ -271,36 +272,36 @@ func flattenActionRuleConditions(input *alertsmanagement.Conditions) []interface
}
}

func importMonitorActionRule(actionRuleType alertsmanagement.Type) pluginsdk.ImporterFunc {
func importMonitorActionRule(actionRuleType actionrules.ActionRuleType) pluginsdk.ImporterFunc {
return func(ctx context.Context, d *pluginsdk.ResourceData, meta interface{}) (data []*pluginsdk.ResourceData, err error) {
id, err := parse.ActionRuleID(d.Id())
id, err := actionrules.ParseActionRuleID(d.Id())
if err != nil {
return nil, err
}

client := meta.(*clients.Client).Monitor.ActionRulesClient

actionRule, err := client.GetByName(ctx, id.ResourceGroup, id.Name)
actionRule, err := client.GetByName(ctx, *id)
if err != nil {
return nil, fmt.Errorf("retrieving Monitor Action Rule %q (Resource Group %q): %+v", id.Name, id.ResourceGroup, err)
return nil, fmt.Errorf("retrieving %s: %+v", id, err)
}

if actionRule.Properties == nil {
return nil, fmt.Errorf("retrieving Monitor Action Rule %q (Resource Group %q): `properties` was nil", id.Name, id.ResourceGroup)
if actionRule.Model == nil {
return nil, fmt.Errorf("retrieving %s: `properties` was nil", id)
}

var t alertsmanagement.Type
switch actionRule.Properties.(type) {
case alertsmanagement.Suppression:
t = alertsmanagement.TypeSuppression
case alertsmanagement.ActionGroup:
t = alertsmanagement.TypeActionGroup
case alertsmanagement.Diagnostics:
t = alertsmanagement.TypeDiagnostics
var t actionrules.ActionRuleType
switch actionRule.Model.Properties.(type) {
case actionrules.Suppression:
t = actionrules.ActionRuleTypeSuppression
case actionrules.ActionGroup:
t = actionrules.ActionRuleTypeActionGroup
case actionrules.Diagnostics:
t = actionrules.ActionRuleTypeDiagnostics
}

if t != actionRuleType {
return nil, fmt.Errorf("Monitor Action Rule has mismatched kind, expected: %q, got %q", actionRuleType, t)
return nil, fmt.Errorf("%s has mismatched kind, expected: %q, got %q", id, actionRuleType, t)
}

return []*pluginsdk.ResourceData{d}, nil
Expand Down

0 comments on commit 0c06281

Please sign in to comment.