Skip to content

Commit

Permalink
split into different resources
Browse files Browse the repository at this point in the history
  • Loading branch information
njuCZ committed May 25, 2020
1 parent 6442ab9 commit a71857b
Show file tree
Hide file tree
Showing 10 changed files with 1,349 additions and 1,108 deletions.
178 changes: 74 additions & 104 deletions azurerm/internal/services/monitor/action_rule.go
Expand Up @@ -2,7 +2,6 @@ package monitor

import (
"github.com/hashicorp/terraform-plugin-sdk/helper/schema"
"github.com/hashicorp/terraform-plugin-sdk/helper/validation"
"github.com/terraform-providers/terraform-provider-azurerm/azurerm/utils"

"github.com/Azure/azure-sdk-for-go/services/preview/alertsmanagement/mgmt/2019-05-05/alertsmanagement"
Expand All @@ -28,109 +27,7 @@ var weekDayMap = map[string]int{
"Saturday": 6,
}

func schemaActionRuleAlertContextCondtion() *schema.Schema {
return schemaActionRuleCondtion(
validation.StringInSlice([]string{
string(alertsmanagement.Equals),
string(alertsmanagement.NotEquals),
string(alertsmanagement.Contains),
string(alertsmanagement.DoesNotContain),
}, false),
validation.StringIsNotEmpty,
)
}

func schemaActionRuleAlertRuleIDCondtion() *schema.Schema {
return schemaActionRuleCondtion(
validation.StringInSlice([]string{
string(alertsmanagement.Equals),
string(alertsmanagement.NotEquals),
string(alertsmanagement.Contains),
string(alertsmanagement.DoesNotContain),
}, false),
validation.StringIsNotEmpty,
)
}

func schemaActionRuleDescriptionCondtion() *schema.Schema {
return schemaActionRuleCondtion(
validation.StringInSlice([]string{
string(alertsmanagement.Equals),
string(alertsmanagement.NotEquals),
string(alertsmanagement.Contains),
string(alertsmanagement.DoesNotContain),
}, false),
validation.StringIsNotEmpty,
)
}

func schemaActionRuleMonitorCondtion() *schema.Schema {
return schemaActionRuleCondtion(
validation.StringInSlice([]string{
string(alertsmanagement.Equals),
string(alertsmanagement.NotEquals),
}, false),
validation.StringInSlice([]string{
string(alertsmanagement.Fired),
string(alertsmanagement.Resolved),
}, false),
)
}

func schemaActionRuleMonitorServiceCondtion() *schema.Schema {
return schemaActionRuleCondtion(
validation.StringInSlice([]string{
string(alertsmanagement.Equals),
string(alertsmanagement.NotEquals),
}, false),
// the supported type list is not consistent with the swagger and sdk
// https://github.com/Azure/azure-rest-api-specs/issues/9076
// directly use string constant
validation.StringInSlice([]string{
"ActivityLog Administrative",
"ActivityLog Autoscale",
"ActivityLog Policy",
"ActivityLog Recommendation",
"ActivityLog Security",
"Application Insights",
"Azure Backup",
"Data Box Edge",
"Data Box Gateway",
"Health Platform",
"Log Analytics",
"Platform",
"Resource Health",
}, false),
)
}

func schemaActionRuleSeverityCondtion() *schema.Schema {
return schemaActionRuleCondtion(
validation.StringInSlice([]string{
string(alertsmanagement.Equals),
string(alertsmanagement.NotEquals),
}, false),
validation.StringInSlice([]string{
string(alertsmanagement.Sev0),
string(alertsmanagement.Sev1),
string(alertsmanagement.Sev2),
string(alertsmanagement.Sev3),
string(alertsmanagement.Sev4),
}, false),
)
}

func schemaActionRuleTargetResourceTypeCondtion() *schema.Schema {
return schemaActionRuleCondtion(
validation.StringInSlice([]string{
string(alertsmanagement.Equals),
string(alertsmanagement.NotEquals),
}, false),
validation.StringIsNotEmpty,
)
}

func schemaActionRuleCondtion(operatorValidateFunc, valuesValidateFunc schema.SchemaValidateFunc) *schema.Schema {
func schemaActionRuleCondition(operatorValidateFunc, valuesValidateFunc schema.SchemaValidateFunc) *schema.Schema {
return &schema.Schema{
Type: schema.TypeList,
Optional: true,
Expand Down Expand Up @@ -168,6 +65,35 @@ func expandArmActionRuleCondition(input []interface{}) *alertsmanagement.Conditi
}
}

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

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

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

return &alertsmanagement.Conditions{
AlertContext: expandArmActionRuleCondition(v["alert_context"].([]interface{})),
AlertRuleID: expandArmActionRuleCondition(v["alert_rule_id"].([]interface{})),
Description: expandArmActionRuleCondition(v["description"].([]interface{})),
MonitorCondition: expandArmActionRuleCondition(v["monitor"].([]interface{})),
MonitorService: expandArmActionRuleCondition(v["monitor_service"].([]interface{})),
Severity: expandArmActionRuleCondition(v["severity"].([]interface{})),
TargetResourceType: expandArmActionRuleCondition(v["target_resource_type"].([]interface{})),
}
}

func flattenArmActionRuleCondition(input *alertsmanagement.Condition) []interface{} {
if input == nil {
return make([]interface{}, 0)
Expand All @@ -184,3 +110,47 @@ func flattenArmActionRuleCondition(input *alertsmanagement.Condition) []interfac
},
}
}

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

var scopeType alertsmanagement.ScopeType
if input.ScopeType != "" {
scopeType = input.ScopeType
}
return []interface{}{
map[string]interface{}{
"type": scopeType,
"resource_ids": utils.FlattenStringSlice(input.Values),
},
}
}

func flattenArmActionRuleConditions(input *alertsmanagement.Conditions) []interface{} {
if input == nil {
return make([]interface{}, 0)
}
return []interface{}{
map[string]interface{}{
"alert_context": flattenArmActionRuleCondition(input.AlertContext),
"alert_rule_id": flattenArmActionRuleCondition(input.AlertRuleID),
"description": flattenArmActionRuleCondition(input.Description),
"monitor": flattenArmActionRuleCondition(input.MonitorCondition),
"monitor_service": flattenArmActionRuleCondition(input.MonitorService),
"severity": flattenArmActionRuleCondition(input.Severity),
"target_resource_type": flattenArmActionRuleCondition(input.TargetResourceType),
},
}
}

func FlattenInt32Slice(input *[]int32) []interface{} {
result := make([]interface{}, 0)
if input != nil {
for _, item := range *input {
result = append(result, item)
}
}
return result
}

0 comments on commit a71857b

Please sign in to comment.