alicloud/resource_alicloud_sls_alert.go (1,376 lines of code) (raw):
// Package alicloud. This file is generated automatically. Please do not modify it manually, thank you!
package alicloud
import (
"fmt"
"log"
"strings"
"time"
"github.com/PaesslerAG/jsonpath"
"github.com/aliyun/terraform-provider-alicloud/alicloud/connectivity"
"github.com/hashicorp/terraform-plugin-sdk/helper/resource"
"github.com/hashicorp/terraform-plugin-sdk/helper/schema"
)
func resourceAliCloudSlsAlert() *schema.Resource {
return &schema.Resource{
Create: resourceAliCloudSlsAlertCreate,
Read: resourceAliCloudSlsAlertRead,
Update: resourceAliCloudSlsAlertUpdate,
Delete: resourceAliCloudSlsAlertDelete,
Importer: &schema.ResourceImporter{
State: schema.ImportStatePassthrough,
},
Timeouts: &schema.ResourceTimeout{
Create: schema.DefaultTimeout(5 * time.Minute),
Update: schema.DefaultTimeout(5 * time.Minute),
Delete: schema.DefaultTimeout(5 * time.Minute),
},
Schema: map[string]*schema.Schema{
"alert_name": {
Type: schema.TypeString,
Required: true,
ForceNew: true,
},
"configuration": {
Type: schema.TypeList,
Required: true,
MaxItems: 1,
Elem: &schema.Resource{
Schema: map[string]*schema.Schema{
"severity_configurations": {
Type: schema.TypeList,
Optional: true,
Elem: &schema.Resource{
Schema: map[string]*schema.Schema{
"severity": {
Type: schema.TypeInt,
Optional: true,
},
"eval_condition": {
Type: schema.TypeList,
Optional: true,
MaxItems: 1,
Elem: &schema.Resource{
Schema: map[string]*schema.Schema{
"condition": {
Type: schema.TypeString,
Optional: true,
},
"count_condition": {
Type: schema.TypeString,
Optional: true,
},
},
},
},
},
},
},
"auto_annotation": {
Type: schema.TypeBool,
Optional: true,
Computed: true,
},
"no_data_fire": {
Type: schema.TypeBool,
Optional: true,
Computed: true,
},
"sink_cms": {
Type: schema.TypeList,
Optional: true,
MaxItems: 1,
Elem: &schema.Resource{
Schema: map[string]*schema.Schema{
"enabled": {
Type: schema.TypeBool,
Optional: true,
},
},
},
},
"dashboard": {
Type: schema.TypeString,
Optional: true,
},
"mute_until": {
Type: schema.TypeInt,
Optional: true,
},
"template_configuration": {
Type: schema.TypeList,
Optional: true,
MaxItems: 1,
Elem: &schema.Resource{
Schema: map[string]*schema.Schema{
"type": {
Type: schema.TypeString,
Optional: true,
},
"annotations": {
Type: schema.TypeMap,
Optional: true,
},
"version": {
Type: schema.TypeString,
Optional: true,
},
"lang": {
Type: schema.TypeString,
Optional: true,
},
"template_id": {
Type: schema.TypeString,
Optional: true,
},
"tokens": {
Type: schema.TypeMap,
Optional: true,
},
},
},
},
"labels": {
Type: schema.TypeList,
Optional: true,
Elem: &schema.Resource{
Schema: map[string]*schema.Schema{
"value": {
Type: schema.TypeString,
Optional: true,
},
"key": {
Type: schema.TypeString,
Optional: true,
},
},
},
},
"group_configuration": {
Type: schema.TypeList,
Optional: true,
MaxItems: 1,
Elem: &schema.Resource{
Schema: map[string]*schema.Schema{
"type": {
Type: schema.TypeString,
Optional: true,
ValidateFunc: StringInSlice([]string{"no_group", "custom", "labels_auto"}, true),
},
"fields": {
Type: schema.TypeList,
Optional: true,
Elem: &schema.Schema{Type: schema.TypeString},
},
},
},
},
"no_data_severity": {
Type: schema.TypeInt,
Optional: true,
},
"type": {
Type: schema.TypeString,
Optional: true,
Computed: true,
},
"annotations": {
Type: schema.TypeList,
Optional: true,
Elem: &schema.Resource{
Schema: map[string]*schema.Schema{
"value": {
Type: schema.TypeString,
Optional: true,
},
"key": {
Type: schema.TypeString,
Optional: true,
},
},
},
},
"condition_configuration": {
Type: schema.TypeList,
Optional: true,
MaxItems: 1,
Elem: &schema.Resource{
Schema: map[string]*schema.Schema{
"condition": {
Type: schema.TypeString,
Optional: true,
},
"count_condition": {
Type: schema.TypeString,
Optional: true,
},
},
},
},
"version": {
Type: schema.TypeString,
Optional: true,
},
"join_configurations": {
Type: schema.TypeList,
Optional: true,
Elem: &schema.Resource{
Schema: map[string]*schema.Schema{
"condition": {
Type: schema.TypeString,
Optional: true,
},
"type": {
Type: schema.TypeString,
Optional: true,
ValidateFunc: StringInSlice([]string{"cross_join", "inner_join", "left_join", "right_join", "full_join", "left_exclude", "right_exclude", "concat", "no_join"}, true),
},
},
},
},
"policy_configuration": {
Type: schema.TypeList,
Optional: true,
MaxItems: 1,
Elem: &schema.Resource{
Schema: map[string]*schema.Schema{
"alert_policy_id": {
Type: schema.TypeString,
Optional: true,
},
"action_policy_id": {
Type: schema.TypeString,
Optional: true,
},
"repeat_interval": {
Type: schema.TypeString,
Optional: true,
},
},
},
},
"sink_event_store": {
Type: schema.TypeList,
Optional: true,
MaxItems: 1,
Elem: &schema.Resource{
Schema: map[string]*schema.Schema{
"project": {
Type: schema.TypeString,
Optional: true,
},
"event_store": {
Type: schema.TypeString,
Optional: true,
},
"endpoint": {
Type: schema.TypeString,
Optional: true,
},
"enabled": {
Type: schema.TypeBool,
Optional: true,
},
"role_arn": {
Type: schema.TypeString,
Optional: true,
},
},
},
},
"query_list": {
Type: schema.TypeList,
Optional: true,
Elem: &schema.Resource{
Schema: map[string]*schema.Schema{
"query": {
Type: schema.TypeString,
Optional: true,
},
"time_span_type": {
Type: schema.TypeString,
Optional: true,
},
"start": {
Type: schema.TypeString,
Optional: true,
},
"store": {
Type: schema.TypeString,
Optional: true,
},
"power_sql_mode": {
Type: schema.TypeString,
Optional: true,
},
"dashboard_id": {
Type: schema.TypeString,
Optional: true,
},
"role_arn": {
Type: schema.TypeString,
Optional: true,
},
"store_type": {
Type: schema.TypeString,
Optional: true,
},
"project": {
Type: schema.TypeString,
Optional: true,
},
"ui": {
Type: schema.TypeString,
Optional: true,
},
"region": {
Type: schema.TypeString,
Optional: true,
},
"end": {
Type: schema.TypeString,
Optional: true,
},
"chart_title": {
Type: schema.TypeString,
Optional: true,
},
},
},
},
"sink_alerthub": {
Type: schema.TypeList,
Optional: true,
MaxItems: 1,
Elem: &schema.Resource{
Schema: map[string]*schema.Schema{
"enabled": {
Type: schema.TypeBool,
Optional: true,
},
},
},
},
"tags": {
Type: schema.TypeList,
Optional: true,
Elem: &schema.Schema{Type: schema.TypeString},
},
"send_resolved": {
Type: schema.TypeBool,
Optional: true,
Computed: true,
},
"threshold": {
Type: schema.TypeInt,
Optional: true,
},
},
},
},
"create_time": {
Type: schema.TypeInt,
Computed: true,
},
"description": {
Type: schema.TypeString,
Optional: true,
},
"display_name": {
Type: schema.TypeString,
Required: true,
},
"project_name": {
Type: schema.TypeString,
Required: true,
ForceNew: true,
},
"schedule": {
Type: schema.TypeList,
Required: true,
MaxItems: 1,
Elem: &schema.Resource{
Schema: map[string]*schema.Schema{
"type": {
Type: schema.TypeString,
Optional: true,
ValidateFunc: StringInSlice([]string{"FixedRate", "Cron"}, true),
},
"time_zone": {
Type: schema.TypeString,
Optional: true,
},
"run_immdiately": {
Type: schema.TypeBool,
Optional: true,
},
"cron_expression": {
Type: schema.TypeString,
Optional: true,
},
"delay": {
Type: schema.TypeInt,
Optional: true,
},
"interval": {
Type: schema.TypeString,
Optional: true,
},
},
},
},
"status": {
Type: schema.TypeString,
Optional: true,
Computed: true,
ValidateFunc: StringInSlice([]string{"ENABLED", "DISABLED"}, true),
},
},
}
}
func resourceAliCloudSlsAlertCreate(d *schema.ResourceData, meta interface{}) error {
client := meta.(*connectivity.AliyunClient)
action := fmt.Sprintf("/alerts")
var request map[string]interface{}
var response map[string]interface{}
query := make(map[string]*string)
body := make(map[string]interface{})
hostMap := make(map[string]*string)
var err error
request = make(map[string]interface{})
hostMap["project"] = StringPointer(d.Get("project_name").(string))
request["name"] = d.Get("alert_name")
request["displayName"] = d.Get("display_name")
if v, ok := d.GetOk("description"); ok {
request["description"] = v
}
objectDataLocalMap := make(map[string]interface{})
if v := d.Get("configuration"); v != nil {
nodeNative, _ := jsonpath.Get("$[0].mute_until", d.Get("configuration"))
if nodeNative != nil && nodeNative != "" {
objectDataLocalMap["muteUntil"] = nodeNative
}
nodeNative1, _ := jsonpath.Get("$[0].version", d.Get("configuration"))
if nodeNative1 != nil && nodeNative1 != "" {
objectDataLocalMap["version"] = nodeNative1
}
nodeNative2, _ := jsonpath.Get("$[0].type", d.Get("configuration"))
if nodeNative2 != nil && nodeNative2 != "" {
objectDataLocalMap["type"] = nodeNative2
}
templateConfiguration := make(map[string]interface{})
nodeNative3, _ := jsonpath.Get("$[0].template_configuration[0].type", d.Get("configuration"))
if nodeNative3 != nil && nodeNative3 != "" {
templateConfiguration["type"] = nodeNative3
}
nodeNative4, _ := jsonpath.Get("$[0].template_configuration[0].version", d.Get("configuration"))
if nodeNative4 != nil && nodeNative4 != "" {
templateConfiguration["version"] = nodeNative4
}
nodeNative5, _ := jsonpath.Get("$[0].template_configuration[0].lang", d.Get("configuration"))
if nodeNative5 != nil && nodeNative5 != "" {
templateConfiguration["lang"] = nodeNative5
}
nodeNative6, _ := jsonpath.Get("$[0].template_configuration[0].template_id", d.Get("configuration"))
if nodeNative6 != nil && nodeNative6 != "" {
templateConfiguration["id"] = nodeNative6
}
nodeNative7, _ := jsonpath.Get("$[0].template_configuration[0].tokens", d.Get("configuration"))
if nodeNative7 != nil && nodeNative7 != "" {
templateConfiguration["tokens"] = nodeNative7
}
nodeNative8, _ := jsonpath.Get("$[0].template_configuration[0].annotations", d.Get("configuration"))
if nodeNative8 != nil && nodeNative8 != "" {
templateConfiguration["aonotations"] = nodeNative8
}
objectDataLocalMap["templateConfiguration"] = templateConfiguration
nodeNative9, _ := jsonpath.Get("$[0].dashboard", d.Get("configuration"))
if nodeNative9 != nil && nodeNative9 != "" {
objectDataLocalMap["dashboard"] = nodeNative9
}
nodeNative10, _ := jsonpath.Get("$[0].threshold", d.Get("configuration"))
if nodeNative10 != nil && nodeNative10 != "" {
objectDataLocalMap["threshold"] = nodeNative10
}
nodeNative11, _ := jsonpath.Get("$[0].no_data_fire", d.Get("configuration"))
if nodeNative11 != nil && nodeNative11 != "" {
objectDataLocalMap["noDataFire"] = nodeNative11
}
nodeNative12, _ := jsonpath.Get("$[0].no_data_severity", d.Get("configuration"))
if nodeNative12 != nil && nodeNative12 != "" {
objectDataLocalMap["noDataSeverity"] = nodeNative12
}
nodeNative13, _ := jsonpath.Get("$[0].send_resolved", d.Get("configuration"))
if nodeNative13 != nil && nodeNative13 != "" {
objectDataLocalMap["sendResolved"] = nodeNative13
}
if v, ok := d.GetOk("configuration"); ok {
localData, err := jsonpath.Get("$[0].query_list", v)
if err != nil {
return WrapError(err)
}
localMaps := make([]interface{}, 0)
for _, dataLoop := range localData.([]interface{}) {
dataLoopTmp := dataLoop.(map[string]interface{})
dataLoopMap := make(map[string]interface{})
dataLoopMap["chartTitle"] = dataLoopTmp["chart_title"]
dataLoopMap["query"] = dataLoopTmp["query"]
dataLoopMap["timeSpanType"] = dataLoopTmp["time_span_type"]
dataLoopMap["start"] = dataLoopTmp["start"]
dataLoopMap["end"] = dataLoopTmp["end"]
dataLoopMap["storeType"] = dataLoopTmp["store_type"]
dataLoopMap["project"] = dataLoopTmp["project"]
dataLoopMap["store"] = dataLoopTmp["store"]
dataLoopMap["region"] = dataLoopTmp["region"]
dataLoopMap["roleArn"] = dataLoopTmp["role_arn"]
dataLoopMap["dashboardId"] = dataLoopTmp["dashboard_id"]
dataLoopMap["powerSqlMode"] = dataLoopTmp["power_sql_mode"]
dataLoopMap["ui"] = dataLoopTmp["ui"]
localMaps = append(localMaps, dataLoopMap)
}
objectDataLocalMap["queryList"] = localMaps
}
if v, ok := d.GetOk("configuration"); ok {
localData1, err := jsonpath.Get("$[0].annotations", v)
if err != nil {
return WrapError(err)
}
localMaps1 := make([]interface{}, 0)
for _, dataLoop1 := range localData1.([]interface{}) {
dataLoop1Tmp := dataLoop1.(map[string]interface{})
dataLoop1Map := make(map[string]interface{})
dataLoop1Map["key"] = dataLoop1Tmp["key"]
dataLoop1Map["value"] = dataLoop1Tmp["value"]
localMaps1 = append(localMaps1, dataLoop1Map)
}
objectDataLocalMap["annotations"] = localMaps1
}
if v, ok := d.GetOk("configuration"); ok {
localData2, err := jsonpath.Get("$[0].labels", v)
if err != nil {
return WrapError(err)
}
localMaps2 := make([]interface{}, 0)
for _, dataLoop2 := range localData2.([]interface{}) {
dataLoop2Tmp := dataLoop2.(map[string]interface{})
dataLoop2Map := make(map[string]interface{})
dataLoop2Map["key"] = dataLoop2Tmp["key"]
dataLoop2Map["value"] = dataLoop2Tmp["value"]
localMaps2 = append(localMaps2, dataLoop2Map)
}
objectDataLocalMap["labels"] = localMaps2
}
conditionConfiguration := make(map[string]interface{})
nodeNative31, _ := jsonpath.Get("$[0].condition_configuration[0].count_condition", d.Get("configuration"))
if nodeNative31 != nil && nodeNative31 != "" {
conditionConfiguration["countCondition"] = nodeNative31
}
nodeNative32, _ := jsonpath.Get("$[0].condition_configuration[0].condition", d.Get("configuration"))
if nodeNative32 != nil && nodeNative32 != "" {
conditionConfiguration["condition"] = nodeNative32
}
objectDataLocalMap["conditionConfiguration"] = conditionConfiguration
if v, ok := d.GetOk("configuration"); ok {
localData3, err := jsonpath.Get("$[0].severity_configurations", v)
if err != nil {
return WrapError(err)
}
localMaps3 := make([]interface{}, 0)
for _, dataLoop3 := range localData3.([]interface{}) {
dataLoop3Tmp := dataLoop3.(map[string]interface{})
dataLoop3Map := make(map[string]interface{})
dataLoop3Map["severity"] = dataLoop3Tmp["severity"]
if !IsNil(dataLoop3Tmp["eval_condition"]) {
localData4 := make(map[string]interface{})
nodeNative34, _ := jsonpath.Get("$[0].condition", dataLoop3Tmp["eval_condition"])
if nodeNative34 != nil && nodeNative34 != "" {
localData4["condition"] = nodeNative34
}
nodeNative35, _ := jsonpath.Get("$[0].count_condition", dataLoop3Tmp["eval_condition"])
if nodeNative35 != nil && nodeNative35 != "" {
localData4["countCondition"] = nodeNative35
}
dataLoop3Map["evalCondition"] = localData4
}
localMaps3 = append(localMaps3, dataLoop3Map)
}
objectDataLocalMap["severityConfigurations"] = localMaps3
}
if v, ok := d.GetOk("configuration"); ok {
localData5, err := jsonpath.Get("$[0].join_configurations", v)
if err != nil {
return WrapError(err)
}
localMaps5 := make([]interface{}, 0)
for _, dataLoop5 := range localData5.([]interface{}) {
dataLoop5Tmp := dataLoop5.(map[string]interface{})
dataLoop5Map := make(map[string]interface{})
dataLoop5Map["type"] = dataLoop5Tmp["type"]
dataLoop5Map["condition"] = dataLoop5Tmp["condition"]
localMaps5 = append(localMaps5, dataLoop5Map)
}
objectDataLocalMap["joinConfigurations"] = localMaps5
}
groupConfiguration := make(map[string]interface{})
nodeNative38, _ := jsonpath.Get("$[0].group_configuration[0].type", d.Get("configuration"))
if nodeNative38 != nil && nodeNative38 != "" {
groupConfiguration["type"] = nodeNative38
}
nodeNative39, _ := jsonpath.Get("$[0].group_configuration[0].fields", v)
if nodeNative39 != nil && nodeNative39 != "" {
groupConfiguration["fields"] = nodeNative39
}
objectDataLocalMap["groupConfiguration"] = groupConfiguration
policyConfiguration := make(map[string]interface{})
nodeNative40, _ := jsonpath.Get("$[0].policy_configuration[0].alert_policy_id", d.Get("configuration"))
if nodeNative40 != nil && nodeNative40 != "" {
policyConfiguration["alertPolicyId"] = nodeNative40
}
nodeNative41, _ := jsonpath.Get("$[0].policy_configuration[0].action_policy_id", d.Get("configuration"))
if nodeNative41 != nil && nodeNative41 != "" {
policyConfiguration["actionPolicyId"] = nodeNative41
}
nodeNative42, _ := jsonpath.Get("$[0].policy_configuration[0].repeat_interval", d.Get("configuration"))
if nodeNative42 != nil && nodeNative42 != "" {
policyConfiguration["repeatInterval"] = nodeNative42
}
objectDataLocalMap["policyConfiguration"] = policyConfiguration
nodeNative43, _ := jsonpath.Get("$[0].auto_annotation", d.Get("configuration"))
if nodeNative43 != nil && nodeNative43 != "" {
objectDataLocalMap["autoAnnotation"] = nodeNative43
}
sinkEventStore := make(map[string]interface{})
nodeNative44, _ := jsonpath.Get("$[0].sink_event_store[0].enabled", d.Get("configuration"))
if nodeNative44 != nil && nodeNative44 != "" {
sinkEventStore["enabled"] = nodeNative44
}
nodeNative45, _ := jsonpath.Get("$[0].sink_event_store[0].endpoint", d.Get("configuration"))
if nodeNative45 != nil && nodeNative45 != "" {
sinkEventStore["endpoint"] = nodeNative45
}
nodeNative46, _ := jsonpath.Get("$[0].sink_event_store[0].project", d.Get("configuration"))
if nodeNative46 != nil && nodeNative46 != "" {
sinkEventStore["project"] = nodeNative46
}
nodeNative47, _ := jsonpath.Get("$[0].sink_event_store[0].event_store", d.Get("configuration"))
if nodeNative47 != nil && nodeNative47 != "" {
sinkEventStore["eventStore"] = nodeNative47
}
nodeNative48, _ := jsonpath.Get("$[0].sink_event_store[0].role_arn", d.Get("configuration"))
if nodeNative48 != nil && nodeNative48 != "" {
sinkEventStore["roleArn"] = nodeNative48
}
objectDataLocalMap["sinkEventStore"] = sinkEventStore
sinkCms := make(map[string]interface{})
nodeNative49, _ := jsonpath.Get("$[0].sink_cms[0].enabled", d.Get("configuration"))
if nodeNative49 != nil && nodeNative49 != "" {
sinkCms["enabled"] = nodeNative49
}
objectDataLocalMap["sinkCms"] = sinkCms
sinkAlerthub := make(map[string]interface{})
nodeNative50, _ := jsonpath.Get("$[0].sink_alerthub[0].enabled", d.Get("configuration"))
if nodeNative50 != nil && nodeNative50 != "" {
sinkAlerthub["enabled"] = nodeNative50
}
objectDataLocalMap["sinkAlerthub"] = sinkAlerthub
nodeNative51, _ := jsonpath.Get("$[0].tags", v)
if nodeNative51 != nil && nodeNative51 != "" {
objectDataLocalMap["tags"] = nodeNative51
}
request["configuration"] = objectDataLocalMap
}
objectDataLocalMap1 := make(map[string]interface{})
if v := d.Get("schedule"); v != nil {
nodeNative52, _ := jsonpath.Get("$[0].type", d.Get("schedule"))
if nodeNative52 != nil && nodeNative52 != "" {
objectDataLocalMap1["type"] = nodeNative52
}
nodeNative53, _ := jsonpath.Get("$[0].cron_expression", d.Get("schedule"))
if nodeNative53 != nil && nodeNative53 != "" {
objectDataLocalMap1["cronExpression"] = nodeNative53
}
nodeNative54, _ := jsonpath.Get("$[0].run_immdiately", d.Get("schedule"))
if nodeNative54 != nil && nodeNative54 != "" {
objectDataLocalMap1["runImmediately"] = nodeNative54
}
nodeNative55, _ := jsonpath.Get("$[0].time_zone", d.Get("schedule"))
if nodeNative55 != nil && nodeNative55 != "" {
objectDataLocalMap1["timeZone"] = nodeNative55
}
nodeNative56, _ := jsonpath.Get("$[0].delay", d.Get("schedule"))
if nodeNative56 != nil && nodeNative56 != "" {
objectDataLocalMap1["delay"] = nodeNative56
}
nodeNative57, _ := jsonpath.Get("$[0].interval", d.Get("schedule"))
if nodeNative57 != nil && nodeNative57 != "" {
objectDataLocalMap1["interval"] = nodeNative57
}
request["schedule"] = objectDataLocalMap1
}
body = request
wait := incrementalWait(3*time.Second, 5*time.Second)
err = resource.Retry(d.Timeout(schema.TimeoutCreate), func() *resource.RetryError {
response, err = client.Do("Sls", roaParam("POST", "2020-12-30", "CreateAlert", action), query, body, nil, hostMap, false)
if err != nil {
if NeedRetry(err) {
wait()
return resource.RetryableError(err)
}
return resource.NonRetryableError(err)
}
addDebug(action, response, request)
return nil
})
if err != nil {
return WrapErrorf(err, DefaultErrorMsg, "alicloud_sls_alert", action, AlibabaCloudSdkGoERROR)
}
d.SetId(fmt.Sprintf("%v:%v", *hostMap["project"], request["name"]))
return resourceAliCloudSlsAlertUpdate(d, meta)
}
func resourceAliCloudSlsAlertRead(d *schema.ResourceData, meta interface{}) error {
client := meta.(*connectivity.AliyunClient)
slsServiceV2 := SlsServiceV2{client}
objectRaw, err := slsServiceV2.DescribeSlsAlert(d.Id())
if err != nil {
if !d.IsNewResource() && NotFoundError(err) {
log.Printf("[DEBUG] Resource alicloud_sls_alert DescribeSlsAlert Failed!!! %s", err)
d.SetId("")
return nil
}
return WrapError(err)
}
d.Set("create_time", objectRaw["createTime"])
d.Set("description", objectRaw["description"])
d.Set("display_name", objectRaw["displayName"])
d.Set("status", objectRaw["status"])
d.Set("alert_name", objectRaw["name"])
configurationMaps := make([]map[string]interface{}, 0)
configurationMap := make(map[string]interface{})
configuration1Raw := make(map[string]interface{})
if objectRaw["configuration"] != nil {
configuration1Raw = objectRaw["configuration"].(map[string]interface{})
}
if len(configuration1Raw) > 0 {
configurationMap["auto_annotation"] = configuration1Raw["autoAnnotation"]
configurationMap["dashboard"] = configuration1Raw["dashboard"]
configurationMap["mute_until"] = configuration1Raw["muteUntil"]
configurationMap["no_data_fire"] = configuration1Raw["noDataFire"]
configurationMap["no_data_severity"] = configuration1Raw["noDataSeverity"]
configurationMap["send_resolved"] = configuration1Raw["sendResolved"]
configurationMap["threshold"] = configuration1Raw["threshold"]
configurationMap["type"] = configuration1Raw["type"]
configurationMap["version"] = configuration1Raw["version"]
annotations1Raw := configuration1Raw["annotations"]
annotationsMaps := make([]map[string]interface{}, 0)
if annotations1Raw != nil {
for _, annotationsChild1Raw := range annotations1Raw.([]interface{}) {
annotationsMap := make(map[string]interface{})
annotationsChild1Raw := annotationsChild1Raw.(map[string]interface{})
annotationsMap["key"] = annotationsChild1Raw["key"]
annotationsMap["value"] = annotationsChild1Raw["value"]
annotationsMaps = append(annotationsMaps, annotationsMap)
}
}
configurationMap["annotations"] = annotationsMaps
conditionConfigurationMaps := make([]map[string]interface{}, 0)
conditionConfigurationMap := make(map[string]interface{})
conditionConfiguration1Raw := make(map[string]interface{})
if configuration1Raw["conditionConfiguration"] != nil {
conditionConfiguration1Raw = configuration1Raw["conditionConfiguration"].(map[string]interface{})
}
if len(conditionConfiguration1Raw) > 0 {
conditionConfigurationMap["condition"] = conditionConfiguration1Raw["condition"]
conditionConfigurationMap["count_condition"] = conditionConfiguration1Raw["countCondition"]
conditionConfigurationMaps = append(conditionConfigurationMaps, conditionConfigurationMap)
}
configurationMap["condition_configuration"] = conditionConfigurationMaps
groupConfigurationMaps := make([]map[string]interface{}, 0)
groupConfigurationMap := make(map[string]interface{})
groupConfiguration1Raw := make(map[string]interface{})
if configuration1Raw["groupConfiguration"] != nil {
groupConfiguration1Raw = configuration1Raw["groupConfiguration"].(map[string]interface{})
}
if len(groupConfiguration1Raw) > 0 {
groupConfigurationMap["type"] = groupConfiguration1Raw["type"]
fields1Raw := make([]interface{}, 0)
if groupConfiguration1Raw["fields"] != nil {
fields1Raw = groupConfiguration1Raw["fields"].([]interface{})
}
groupConfigurationMap["fields"] = fields1Raw
groupConfigurationMaps = append(groupConfigurationMaps, groupConfigurationMap)
}
configurationMap["group_configuration"] = groupConfigurationMaps
joinConfigurations1Raw := configuration1Raw["joinConfigurations"]
joinConfigurationsMaps := make([]map[string]interface{}, 0)
if joinConfigurations1Raw != nil {
for _, joinConfigurationsChild1Raw := range joinConfigurations1Raw.([]interface{}) {
joinConfigurationsMap := make(map[string]interface{})
joinConfigurationsChild1Raw := joinConfigurationsChild1Raw.(map[string]interface{})
joinConfigurationsMap["condition"] = joinConfigurationsChild1Raw["condition"]
joinConfigurationsMap["type"] = joinConfigurationsChild1Raw["type"]
joinConfigurationsMaps = append(joinConfigurationsMaps, joinConfigurationsMap)
}
}
configurationMap["join_configurations"] = joinConfigurationsMaps
labels1Raw := configuration1Raw["labels"]
labelsMaps := make([]map[string]interface{}, 0)
if labels1Raw != nil {
for _, labelsChild1Raw := range labels1Raw.([]interface{}) {
labelsMap := make(map[string]interface{})
labelsChild1Raw := labelsChild1Raw.(map[string]interface{})
labelsMap["key"] = labelsChild1Raw["key"]
labelsMap["value"] = labelsChild1Raw["value"]
labelsMaps = append(labelsMaps, labelsMap)
}
}
configurationMap["labels"] = labelsMaps
policyConfigurationMaps := make([]map[string]interface{}, 0)
policyConfigurationMap := make(map[string]interface{})
policyConfiguration1Raw := make(map[string]interface{})
if configuration1Raw["policyConfiguration"] != nil {
policyConfiguration1Raw = configuration1Raw["policyConfiguration"].(map[string]interface{})
}
if len(policyConfiguration1Raw) > 0 {
policyConfigurationMap["action_policy_id"] = policyConfiguration1Raw["actionPolicyId"]
policyConfigurationMap["alert_policy_id"] = policyConfiguration1Raw["alertPolicyId"]
policyConfigurationMap["repeat_interval"] = policyConfiguration1Raw["repeatInterval"]
policyConfigurationMaps = append(policyConfigurationMaps, policyConfigurationMap)
}
configurationMap["policy_configuration"] = policyConfigurationMaps
queryList1Raw := configuration1Raw["queryList"]
queryListMaps := make([]map[string]interface{}, 0)
if queryList1Raw != nil {
for _, queryListChild1Raw := range queryList1Raw.([]interface{}) {
queryListMap := make(map[string]interface{})
queryListChild1Raw := queryListChild1Raw.(map[string]interface{})
queryListMap["chart_title"] = queryListChild1Raw["chartTitle"]
queryListMap["dashboard_id"] = queryListChild1Raw["dashboardId"]
queryListMap["end"] = queryListChild1Raw["end"]
queryListMap["power_sql_mode"] = queryListChild1Raw["powerSqlMode"]
queryListMap["project"] = queryListChild1Raw["project"]
queryListMap["query"] = queryListChild1Raw["query"]
queryListMap["region"] = queryListChild1Raw["region"]
queryListMap["role_arn"] = queryListChild1Raw["roleArn"]
queryListMap["start"] = queryListChild1Raw["start"]
queryListMap["store"] = queryListChild1Raw["store"]
queryListMap["store_type"] = queryListChild1Raw["storeType"]
queryListMap["time_span_type"] = queryListChild1Raw["timeSpanType"]
queryListMap["ui"] = queryListChild1Raw["ui"]
queryListMaps = append(queryListMaps, queryListMap)
}
}
configurationMap["query_list"] = queryListMaps
severityConfigurations1Raw := configuration1Raw["severityConfigurations"]
severityConfigurationsMaps := make([]map[string]interface{}, 0)
if severityConfigurations1Raw != nil {
for _, severityConfigurationsChild1Raw := range severityConfigurations1Raw.([]interface{}) {
severityConfigurationsMap := make(map[string]interface{})
severityConfigurationsChild1Raw := severityConfigurationsChild1Raw.(map[string]interface{})
severityConfigurationsMap["severity"] = severityConfigurationsChild1Raw["severity"]
evalConditionMaps := make([]map[string]interface{}, 0)
evalConditionMap := make(map[string]interface{})
evalCondition1Raw := make(map[string]interface{})
if severityConfigurationsChild1Raw["evalCondition"] != nil {
evalCondition1Raw = severityConfigurationsChild1Raw["evalCondition"].(map[string]interface{})
}
if len(evalCondition1Raw) > 0 {
evalConditionMap["condition"] = evalCondition1Raw["condition"]
evalConditionMap["count_condition"] = evalCondition1Raw["countCondition"]
evalConditionMaps = append(evalConditionMaps, evalConditionMap)
}
severityConfigurationsMap["eval_condition"] = evalConditionMaps
severityConfigurationsMaps = append(severityConfigurationsMaps, severityConfigurationsMap)
}
}
configurationMap["severity_configurations"] = severityConfigurationsMaps
sinkAlerthubMaps := make([]map[string]interface{}, 0)
sinkAlerthubMap := make(map[string]interface{})
sinkAlerthub1Raw := make(map[string]interface{})
if configuration1Raw["sinkAlerthub"] != nil {
sinkAlerthub1Raw = configuration1Raw["sinkAlerthub"].(map[string]interface{})
}
if len(sinkAlerthub1Raw) > 0 {
sinkAlerthubMap["enabled"] = sinkAlerthub1Raw["enabled"]
sinkAlerthubMaps = append(sinkAlerthubMaps, sinkAlerthubMap)
}
configurationMap["sink_alerthub"] = sinkAlerthubMaps
sinkCmsMaps := make([]map[string]interface{}, 0)
sinkCmsMap := make(map[string]interface{})
sinkCms1Raw := make(map[string]interface{})
if configuration1Raw["sinkCms"] != nil {
sinkCms1Raw = configuration1Raw["sinkCms"].(map[string]interface{})
}
if len(sinkCms1Raw) > 0 {
sinkCmsMap["enabled"] = sinkCms1Raw["enabled"]
sinkCmsMaps = append(sinkCmsMaps, sinkCmsMap)
}
configurationMap["sink_cms"] = sinkCmsMaps
sinkEventStoreMaps := make([]map[string]interface{}, 0)
sinkEventStoreMap := make(map[string]interface{})
sinkEventStore1Raw := make(map[string]interface{})
if configuration1Raw["sinkEventStore"] != nil {
sinkEventStore1Raw = configuration1Raw["sinkEventStore"].(map[string]interface{})
}
if len(sinkEventStore1Raw) > 0 {
sinkEventStoreMap["enabled"] = sinkEventStore1Raw["enabled"]
sinkEventStoreMap["endpoint"] = sinkEventStore1Raw["endpoint"]
sinkEventStoreMap["event_store"] = sinkEventStore1Raw["eventStore"]
sinkEventStoreMap["project"] = sinkEventStore1Raw["project"]
sinkEventStoreMap["role_arn"] = sinkEventStore1Raw["roleArn"]
sinkEventStoreMaps = append(sinkEventStoreMaps, sinkEventStoreMap)
}
configurationMap["sink_event_store"] = sinkEventStoreMaps
tags1Raw := make([]interface{}, 0)
if configuration1Raw["tags"] != nil {
tags1Raw = configuration1Raw["tags"].([]interface{})
}
configurationMap["tags"] = tags1Raw
templateConfigurationMaps := make([]map[string]interface{}, 0)
templateConfigurationMap := make(map[string]interface{})
templateConfiguration1Raw := make(map[string]interface{})
if configuration1Raw["templateConfiguration"] != nil {
templateConfiguration1Raw = configuration1Raw["templateConfiguration"].(map[string]interface{})
}
if len(templateConfiguration1Raw) > 0 {
templateConfigurationMap["annotations"] = templateConfiguration1Raw["aonotations"]
templateConfigurationMap["lang"] = templateConfiguration1Raw["lang"]
templateConfigurationMap["template_id"] = templateConfiguration1Raw["id"]
templateConfigurationMap["tokens"] = templateConfiguration1Raw["tokens"]
templateConfigurationMap["type"] = templateConfiguration1Raw["type"]
templateConfigurationMap["version"] = templateConfiguration1Raw["version"]
templateConfigurationMaps = append(templateConfigurationMaps, templateConfigurationMap)
}
configurationMap["template_configuration"] = templateConfigurationMaps
configurationMaps = append(configurationMaps, configurationMap)
}
d.Set("configuration", configurationMaps)
scheduleMaps := make([]map[string]interface{}, 0)
scheduleMap := make(map[string]interface{})
schedule1Raw := make(map[string]interface{})
if objectRaw["schedule"] != nil {
schedule1Raw = objectRaw["schedule"].(map[string]interface{})
}
if len(schedule1Raw) > 0 {
scheduleMap["cron_expression"] = schedule1Raw["cronExpression"]
scheduleMap["delay"] = schedule1Raw["delay"]
scheduleMap["interval"] = schedule1Raw["interval"]
scheduleMap["run_immdiately"] = schedule1Raw["runImmediately"]
scheduleMap["time_zone"] = schedule1Raw["timeZone"]
scheduleMap["type"] = schedule1Raw["type"]
scheduleMaps = append(scheduleMaps, scheduleMap)
}
d.Set("schedule", scheduleMaps)
parts := strings.Split(d.Id(), ":")
d.Set("project_name", parts[0])
d.Set("alert_name", parts[1])
return nil
}
func resourceAliCloudSlsAlertUpdate(d *schema.ResourceData, meta interface{}) error {
client := meta.(*connectivity.AliyunClient)
var request map[string]interface{}
var response map[string]interface{}
var query map[string]*string
var body map[string]interface{}
update := false
parts := strings.Split(d.Id(), ":")
alertName := parts[1]
action := fmt.Sprintf("/alerts/%s", alertName)
var err error
request = make(map[string]interface{})
query = make(map[string]*string)
body = make(map[string]interface{})
hostMap := make(map[string]*string)
hostMap["project"] = StringPointer(parts[0])
if !d.IsNewResource() && d.HasChange("display_name") {
update = true
}
request["displayName"] = d.Get("display_name")
if !d.IsNewResource() && d.HasChange("description") {
update = true
}
request["description"] = d.Get("description")
if d.HasChange("configuration") {
update = true
}
objectDataLocalMap := make(map[string]interface{})
if v := d.Get("configuration"); v != nil {
nodeNative, _ := jsonpath.Get("$[0].mute_until", v)
if nodeNative != nil && nodeNative != "" {
objectDataLocalMap["muteUntil"] = nodeNative
}
nodeNative1, _ := jsonpath.Get("$[0].version", v)
if nodeNative1 != nil && nodeNative1 != "" {
objectDataLocalMap["version"] = nodeNative1
}
nodeNative2, _ := jsonpath.Get("$[0].type", v)
if nodeNative2 != nil && nodeNative2 != "" {
objectDataLocalMap["type"] = nodeNative2
}
templateConfiguration := make(map[string]interface{})
nodeNative3, _ := jsonpath.Get("$[0].template_configuration[0].type", v)
if nodeNative3 != nil && nodeNative3 != "" {
templateConfiguration["type"] = nodeNative3
}
nodeNative4, _ := jsonpath.Get("$[0].template_configuration[0].version", v)
if nodeNative4 != nil && nodeNative4 != "" {
templateConfiguration["version"] = nodeNative4
}
nodeNative5, _ := jsonpath.Get("$[0].template_configuration[0].lang", v)
if nodeNative5 != nil && nodeNative5 != "" {
templateConfiguration["lang"] = nodeNative5
}
nodeNative6, _ := jsonpath.Get("$[0].template_configuration[0].template_id", v)
if nodeNative6 != nil && nodeNative6 != "" {
templateConfiguration["id"] = nodeNative6
}
nodeNative7, _ := jsonpath.Get("$[0].template_configuration[0].tokens", v)
if nodeNative7 != nil && nodeNative7 != "" {
templateConfiguration["tokens"] = nodeNative7
}
nodeNative8, _ := jsonpath.Get("$[0].template_configuration[0].annotations", v)
if nodeNative8 != nil && nodeNative8 != "" {
templateConfiguration["aonotations"] = nodeNative8
}
objectDataLocalMap["templateConfiguration"] = templateConfiguration
nodeNative9, _ := jsonpath.Get("$[0].dashboard", v)
if nodeNative9 != nil && nodeNative9 != "" {
objectDataLocalMap["dashboard"] = nodeNative9
}
nodeNative10, _ := jsonpath.Get("$[0].threshold", v)
if nodeNative10 != nil && nodeNative10 != "" {
objectDataLocalMap["threshold"] = nodeNative10
}
nodeNative11, _ := jsonpath.Get("$[0].no_data_fire", v)
if nodeNative11 != nil && nodeNative11 != "" {
objectDataLocalMap["noDataFire"] = nodeNative11
}
nodeNative12, _ := jsonpath.Get("$[0].no_data_severity", v)
if nodeNative12 != nil && nodeNative12 != "" {
objectDataLocalMap["noDataSeverity"] = nodeNative12
}
nodeNative13, _ := jsonpath.Get("$[0].send_resolved", v)
if nodeNative13 != nil && nodeNative13 != "" {
objectDataLocalMap["sendResolved"] = nodeNative13
}
if v, ok := d.GetOk("configuration"); ok {
localData, err := jsonpath.Get("$[0].query_list", v)
if err != nil {
return WrapError(err)
}
localMaps := make([]interface{}, 0)
for _, dataLoop := range localData.([]interface{}) {
dataLoopTmp := dataLoop.(map[string]interface{})
dataLoopMap := make(map[string]interface{})
dataLoopMap["chartTitle"] = dataLoopTmp["chart_title"]
dataLoopMap["query"] = dataLoopTmp["query"]
dataLoopMap["timeSpanType"] = dataLoopTmp["time_span_type"]
dataLoopMap["start"] = dataLoopTmp["start"]
dataLoopMap["end"] = dataLoopTmp["end"]
dataLoopMap["storeType"] = dataLoopTmp["store_type"]
dataLoopMap["project"] = dataLoopTmp["project"]
dataLoopMap["store"] = dataLoopTmp["store"]
dataLoopMap["region"] = dataLoopTmp["region"]
dataLoopMap["roleArn"] = dataLoopTmp["role_arn"]
dataLoopMap["powerSqlMode"] = dataLoopTmp["power_sql_mode"]
dataLoopMap["dashboardId"] = dataLoopTmp["dashboard_id"]
dataLoopMap["ui"] = dataLoopTmp["ui"]
localMaps = append(localMaps, dataLoopMap)
}
objectDataLocalMap["queryList"] = localMaps
}
if v, ok := d.GetOk("configuration"); ok {
localData1, err := jsonpath.Get("$[0].annotations", v)
if err != nil {
return WrapError(err)
}
localMaps1 := make([]interface{}, 0)
for _, dataLoop1 := range localData1.([]interface{}) {
dataLoop1Tmp := dataLoop1.(map[string]interface{})
dataLoop1Map := make(map[string]interface{})
dataLoop1Map["key"] = dataLoop1Tmp["key"]
dataLoop1Map["value"] = dataLoop1Tmp["value"]
localMaps1 = append(localMaps1, dataLoop1Map)
}
objectDataLocalMap["annotations"] = localMaps1
}
if v, ok := d.GetOk("configuration"); ok {
localData2, err := jsonpath.Get("$[0].labels", v)
if err != nil {
return WrapError(err)
}
localMaps2 := make([]interface{}, 0)
for _, dataLoop2 := range localData2.([]interface{}) {
dataLoop2Tmp := dataLoop2.(map[string]interface{})
dataLoop2Map := make(map[string]interface{})
dataLoop2Map["key"] = dataLoop2Tmp["key"]
dataLoop2Map["value"] = dataLoop2Tmp["value"]
localMaps2 = append(localMaps2, dataLoop2Map)
}
objectDataLocalMap["labels"] = localMaps2
}
conditionConfiguration := make(map[string]interface{})
nodeNative31, _ := jsonpath.Get("$[0].condition_configuration[0].condition", v)
if nodeNative31 != nil && nodeNative31 != "" {
conditionConfiguration["condition"] = nodeNative31
}
nodeNative32, _ := jsonpath.Get("$[0].condition_configuration[0].count_condition", v)
if nodeNative32 != nil && nodeNative32 != "" {
conditionConfiguration["countCondition"] = nodeNative32
}
objectDataLocalMap["conditionConfiguration"] = conditionConfiguration
if v, ok := d.GetOk("configuration"); ok {
localData3, err := jsonpath.Get("$[0].severity_configurations", v)
if err != nil {
return WrapError(err)
}
localMaps3 := make([]interface{}, 0)
for _, dataLoop3 := range localData3.([]interface{}) {
dataLoop3Tmp := dataLoop3.(map[string]interface{})
dataLoop3Map := make(map[string]interface{})
dataLoop3Map["severity"] = dataLoop3Tmp["severity"]
if !IsNil(dataLoop3Tmp["eval_condition"]) {
localData4 := make(map[string]interface{})
nodeNative34, _ := jsonpath.Get("$[0].condition", dataLoop3Tmp["eval_condition"])
if nodeNative34 != nil && nodeNative34 != "" {
localData4["condition"] = nodeNative34
}
nodeNative35, _ := jsonpath.Get("$[0].count_condition", dataLoop3Tmp["eval_condition"])
if nodeNative35 != nil && nodeNative35 != "" {
localData4["countCondition"] = nodeNative35
}
dataLoop3Map["evalCondition"] = localData4
}
localMaps3 = append(localMaps3, dataLoop3Map)
}
objectDataLocalMap["severityConfigurations"] = localMaps3
}
if v, ok := d.GetOk("configuration"); ok {
localData5, err := jsonpath.Get("$[0].join_configurations", v)
if err != nil {
return WrapError(err)
}
localMaps5 := make([]interface{}, 0)
for _, dataLoop5 := range localData5.([]interface{}) {
dataLoop5Tmp := dataLoop5.(map[string]interface{})
dataLoop5Map := make(map[string]interface{})
dataLoop5Map["type"] = dataLoop5Tmp["type"]
dataLoop5Map["condition"] = dataLoop5Tmp["condition"]
localMaps5 = append(localMaps5, dataLoop5Map)
}
objectDataLocalMap["joinConfigurations"] = localMaps5
}
groupConfiguration := make(map[string]interface{})
nodeNative38, _ := jsonpath.Get("$[0].group_configuration[0].type", v)
if nodeNative38 != nil && nodeNative38 != "" {
groupConfiguration["type"] = nodeNative38
}
nodeNative39, _ := jsonpath.Get("$[0].group_configuration[0].fields", d.Get("configuration"))
if nodeNative39 != nil && nodeNative39 != "" {
groupConfiguration["fields"] = nodeNative39
}
objectDataLocalMap["groupConfiguration"] = groupConfiguration
policyConfiguration := make(map[string]interface{})
nodeNative40, _ := jsonpath.Get("$[0].policy_configuration[0].alert_policy_id", v)
if nodeNative40 != nil && nodeNative40 != "" {
policyConfiguration["alertPolicyId"] = nodeNative40
}
nodeNative41, _ := jsonpath.Get("$[0].policy_configuration[0].action_policy_id", v)
if nodeNative41 != nil && nodeNative41 != "" {
policyConfiguration["actionPolicyId"] = nodeNative41
}
nodeNative42, _ := jsonpath.Get("$[0].policy_configuration[0].repeat_interval", v)
if nodeNative42 != nil && nodeNative42 != "" {
policyConfiguration["repeatInterval"] = nodeNative42
}
objectDataLocalMap["policyConfiguration"] = policyConfiguration
nodeNative43, _ := jsonpath.Get("$[0].auto_annotation", v)
if nodeNative43 != nil && nodeNative43 != "" {
objectDataLocalMap["autoAnnotation"] = nodeNative43
}
sinkEventStore := make(map[string]interface{})
nodeNative44, _ := jsonpath.Get("$[0].sink_event_store[0].enabled", v)
if nodeNative44 != nil && nodeNative44 != "" {
sinkEventStore["enabled"] = nodeNative44
}
nodeNative45, _ := jsonpath.Get("$[0].sink_event_store[0].endpoint", v)
if nodeNative45 != nil && nodeNative45 != "" {
sinkEventStore["endpoint"] = nodeNative45
}
nodeNative46, _ := jsonpath.Get("$[0].sink_event_store[0].project", v)
if nodeNative46 != nil && nodeNative46 != "" {
sinkEventStore["project"] = nodeNative46
}
nodeNative47, _ := jsonpath.Get("$[0].sink_event_store[0].event_store", v)
if nodeNative47 != nil && nodeNative47 != "" {
sinkEventStore["eventStore"] = nodeNative47
}
nodeNative48, _ := jsonpath.Get("$[0].sink_event_store[0].role_arn", v)
if nodeNative48 != nil && nodeNative48 != "" {
sinkEventStore["roleArn"] = nodeNative48
}
objectDataLocalMap["sinkEventStore"] = sinkEventStore
sinkCms := make(map[string]interface{})
nodeNative49, _ := jsonpath.Get("$[0].sink_cms[0].enabled", v)
if nodeNative49 != nil && nodeNative49 != "" {
sinkCms["enabled"] = nodeNative49
}
objectDataLocalMap["sinkCms"] = sinkCms
sinkAlerthub := make(map[string]interface{})
nodeNative50, _ := jsonpath.Get("$[0].sink_alerthub[0].enabled", v)
if nodeNative50 != nil && nodeNative50 != "" {
sinkAlerthub["enabled"] = nodeNative50
}
objectDataLocalMap["sinkAlerthub"] = sinkAlerthub
nodeNative51, _ := jsonpath.Get("$[0].tags", d.Get("configuration"))
if nodeNative51 != nil && nodeNative51 != "" {
objectDataLocalMap["tags"] = nodeNative51
}
request["configuration"] = objectDataLocalMap
}
if d.HasChange("schedule") {
update = true
}
objectDataLocalMap1 := make(map[string]interface{})
if v := d.Get("schedule"); v != nil {
nodeNative52, _ := jsonpath.Get("$[0].type", v)
if nodeNative52 != nil && nodeNative52 != "" {
objectDataLocalMap1["type"] = nodeNative52
}
nodeNative53, _ := jsonpath.Get("$[0].cron_expression", v)
if nodeNative53 != nil && nodeNative53 != "" {
objectDataLocalMap1["cronExpression"] = nodeNative53
}
nodeNative54, _ := jsonpath.Get("$[0].run_immdiately", v)
if nodeNative54 != nil && nodeNative54 != "" {
objectDataLocalMap1["runImmediately"] = nodeNative54
}
nodeNative55, _ := jsonpath.Get("$[0].time_zone", v)
if nodeNative55 != nil && nodeNative55 != "" {
objectDataLocalMap1["timeZone"] = nodeNative55
}
nodeNative56, _ := jsonpath.Get("$[0].delay", v)
if nodeNative56 != nil && nodeNative56 != "" {
objectDataLocalMap1["delay"] = nodeNative56
}
nodeNative57, _ := jsonpath.Get("$[0].interval", v)
if nodeNative57 != nil && nodeNative57 != "" {
objectDataLocalMap1["interval"] = nodeNative57
}
request["schedule"] = objectDataLocalMap1
}
body = request
if update {
wait := incrementalWait(3*time.Second, 5*time.Second)
err = resource.Retry(d.Timeout(schema.TimeoutUpdate), func() *resource.RetryError {
response, err = client.Do("Sls", roaParam("PUT", "2020-12-30", "UpdateAlert", action), query, body, nil, hostMap, false)
if err != nil {
if NeedRetry(err) {
wait()
return resource.RetryableError(err)
}
return resource.NonRetryableError(err)
}
addDebug(action, response, request)
return nil
})
if err != nil {
return WrapErrorf(err, DefaultErrorMsg, d.Id(), action, AlibabaCloudSdkGoERROR)
}
}
if d.HasChange("status") {
client := meta.(*connectivity.AliyunClient)
slsServiceV2 := SlsServiceV2{client}
object, err := slsServiceV2.DescribeSlsAlert(d.Id())
if err != nil {
return WrapError(err)
}
target := d.Get("status").(string)
if object["status"].(string) != target {
if target == "ENABLED" {
parts = strings.Split(d.Id(), ":")
alertName = parts[1]
action = fmt.Sprintf("/alerts/%s?action=enable", alertName)
request = make(map[string]interface{})
query = make(map[string]*string)
body = make(map[string]interface{})
hostMap := make(map[string]*string)
hostMap["project"] = StringPointer(parts[0])
body = request
wait := incrementalWait(3*time.Second, 5*time.Second)
err = resource.Retry(d.Timeout(schema.TimeoutUpdate), func() *resource.RetryError {
response, err = client.Do("Sls", roaParam("PUT", "2020-12-30", "EnableAlert", action), query, body, nil, hostMap, false)
if err != nil {
if NeedRetry(err) {
wait()
return resource.RetryableError(err)
}
return resource.NonRetryableError(err)
}
addDebug(action, response, request)
return nil
})
if err != nil {
return WrapErrorf(err, DefaultErrorMsg, d.Id(), action, AlibabaCloudSdkGoERROR)
}
}
if target == "DISABLED" {
parts = strings.Split(d.Id(), ":")
alertName = parts[1]
action = fmt.Sprintf("/alerts/%s?action=disable", alertName)
request = make(map[string]interface{})
query = make(map[string]*string)
body = make(map[string]interface{})
hostMap := make(map[string]*string)
hostMap["project"] = StringPointer(parts[0])
body = request
wait := incrementalWait(3*time.Second, 5*time.Second)
err = resource.Retry(d.Timeout(schema.TimeoutUpdate), func() *resource.RetryError {
response, err = client.Do("Sls", roaParam("PUT", "2020-12-30", "DisableAlert", action), query, body, nil, hostMap, false)
if err != nil {
if NeedRetry(err) {
wait()
return resource.RetryableError(err)
}
return resource.NonRetryableError(err)
}
addDebug(action, response, request)
return nil
})
if err != nil {
return WrapErrorf(err, DefaultErrorMsg, d.Id(), action, AlibabaCloudSdkGoERROR)
}
}
}
}
return resourceAliCloudSlsAlertRead(d, meta)
}
func resourceAliCloudSlsAlertDelete(d *schema.ResourceData, meta interface{}) error {
client := meta.(*connectivity.AliyunClient)
parts := strings.Split(d.Id(), ":")
alertName := parts[1]
action := fmt.Sprintf("/alerts/%s", alertName)
var request map[string]interface{}
var response map[string]interface{}
query := make(map[string]*string)
body := make(map[string]interface{})
hostMap := make(map[string]*string)
var err error
request = make(map[string]interface{})
hostMap["project"] = StringPointer(parts[0])
body = request
wait := incrementalWait(3*time.Second, 5*time.Second)
err = resource.Retry(d.Timeout(schema.TimeoutDelete), func() *resource.RetryError {
response, err = client.Do("Sls", roaParam("DELETE", "2020-12-30", "DeleteAlert", action), query, body, nil, hostMap, false)
if err != nil {
if NeedRetry(err) {
wait()
return resource.RetryableError(err)
}
return resource.NonRetryableError(err)
}
addDebug(action, response, request)
return nil
})
if err != nil {
return WrapErrorf(err, DefaultErrorMsg, d.Id(), action, AlibabaCloudSdkGoERROR)
}
return nil
}