alicloud/service_alicloud_cms.go (866 lines of code) (raw):
package alicloud
import (
"encoding/json"
"fmt"
"time"
"github.com/PaesslerAG/jsonpath"
"strconv"
"github.com/aliyun/alibaba-cloud-sdk-go/sdk/requests"
"github.com/aliyun/alibaba-cloud-sdk-go/services/cms"
"github.com/aliyun/terraform-provider-alicloud/alicloud/connectivity"
"github.com/hashicorp/terraform-plugin-sdk/helper/resource"
"github.com/hashicorp/terraform-plugin-sdk/helper/schema"
)
type CmsService struct {
client *connectivity.AliyunClient
}
type IspCities []map[string]string
func (s *CmsService) BuildCmsCommonRequest(region string) *requests.CommonRequest {
request := requests.NewCommonRequest()
return request
}
func (s *CmsService) BuildCmsAlarmRequest(id string) *requests.CommonRequest {
request := s.BuildCmsCommonRequest(s.client.RegionId)
request.QueryParams["Id"] = id
return request
}
func (s *CmsService) DescribeAlarm(id string) (object map[string]interface{}, err error) {
var response map[string]interface{}
action := "DescribeMetricRuleList"
client := s.client
request := map[string]interface{}{
"RuleIds": id,
}
idExist := false
wait := incrementalWait(3*time.Second, 3*time.Second)
err = resource.Retry(6*time.Minute, func() *resource.RetryError {
response, err = client.RpcPost("Cms", "2019-01-01", action, nil, request, false)
if err != nil {
if NeedRetry(err) {
wait()
return resource.RetryableError(err)
}
return resource.NonRetryableError(err)
}
return nil
})
addDebug(action, response, request)
if err != nil {
if IsExpectedErrors(err, []string{"InternalError", "ResourceNotFound"}) {
return object, WrapErrorf(NotFoundErr("Cms:Alarm", id), NotFoundMsg, ProviderERROR, fmt.Sprint(response["RequestId"]))
}
return object, WrapErrorf(err, DefaultErrorMsg, id, action, AlibabaCloudSdkGoERROR)
}
resp, err := jsonpath.Get("$.Alarms.Alarm", response)
if err != nil {
return object, WrapErrorf(err, FailedGetAttributeMsg, id, "$.Alarms.Alarm", response)
}
if v, ok := resp.([]interface{}); !ok || len(v) < 1 {
return object, WrapErrorf(NotFoundErr("Cms:Alarm", id), NotFoundWithResponse, response)
}
for _, v := range resp.([]interface{}) {
if fmt.Sprint(v.(map[string]interface{})["RuleId"]) == id {
idExist = true
return v.(map[string]interface{}), nil
}
}
if !idExist {
return object, WrapErrorf(NotFoundErr("Cms:Alarm", id), NotFoundWithResponse, response)
}
return object, nil
}
func (s *CmsService) WaitForCmsAlarm(id string, enabled bool, timeout int) error {
if timeout <= 0 {
timeout = DefaultTimeout
}
for {
alarm, err := s.DescribeAlarm(id)
if err != nil {
return err
}
if alarm["EnableState"] == enabled {
break
}
timeout = timeout - DefaultIntervalShort
if timeout <= 0 {
return GetTimeErrorFromString(GetTimeoutMessage("Alarm", strconv.FormatBool(enabled)))
}
time.Sleep(DefaultIntervalShort * time.Second)
}
return nil
}
func (s *CmsService) BuildJsonWebhook(webhook string) string {
if webhook != "" {
return fmt.Sprintf("{\"method\":\"post\",\"url\":\"%s\"}", webhook)
}
return ""
}
func (s *CmsService) ExtractWebhookFromJson(webhookJson string) (string, error) {
byt := []byte(webhookJson)
var dat map[string]interface{}
if err := json.Unmarshal(byt, &dat); err != nil {
return "", err
}
return dat["url"].(string), nil
}
func (s *CmsService) DescribeSiteMonitor(id, keyword string) (siteMonitor cms.SiteMonitor, err error) {
listRequest := cms.CreateDescribeSiteMonitorListRequest()
listRequest.Keyword = keyword
listRequest.TaskId = id
var raw interface{}
wait := incrementalWait(3*time.Second, 3*time.Second)
err = resource.Retry(5*time.Minute, func() *resource.RetryError {
raw, err = s.client.WithCmsClient(func(cmsClient *cms.Client) (interface{}, error) {
return cmsClient.DescribeSiteMonitorList(listRequest)
})
if err != nil {
if IsExpectedErrors(err, []string{ThrottlingUser, "ExceedingQuota"}) {
wait()
return resource.RetryableError(err)
}
return resource.NonRetryableError(err)
}
return nil
})
if err != nil {
return siteMonitor, WrapError(err)
}
list := raw.(*cms.DescribeSiteMonitorListResponse)
if len(list.SiteMonitors.SiteMonitor) < 1 {
return siteMonitor, GetNotFoundErrorFromString(GetNotFoundMessage("Site Monitor", id))
}
for _, v := range list.SiteMonitors.SiteMonitor {
if v.TaskName == keyword || v.TaskId == id {
return v, nil
}
}
return siteMonitor, GetNotFoundErrorFromString(GetNotFoundMessage("Site Monitor", id))
}
func (s *CmsService) GetIspCities(id string) (ispCities IspCities, err error) {
request := cms.CreateDescribeSiteMonitorAttributeRequest()
request.TaskId = id
var raw interface{}
wait := incrementalWait(3*time.Second, 3*time.Second)
err = resource.Retry(5*time.Minute, func() *resource.RetryError {
raw, err = s.client.WithCmsClient(func(cmsClient *cms.Client) (interface{}, error) {
return cmsClient.DescribeSiteMonitorAttribute(request)
})
if err != nil {
if IsExpectedErrors(err, []string{ThrottlingUser, "ExceedingQuota"}) {
wait()
return resource.RetryableError(err)
}
return resource.NonRetryableError(err)
}
return nil
})
if err != nil {
return nil, WrapError(err)
}
response := raw.(*cms.DescribeSiteMonitorAttributeResponse)
ispCity := response.SiteMonitors.IspCities.IspCity
var list []map[string]string
for _, element := range ispCity {
list = append(list, map[string]string{"city": element.City, "isp": element.Isp})
}
return list, nil
}
func (s *CmsService) DescribeCmsAlarmContact(id string) (object cms.Contact, err error) {
request := cms.CreateDescribeContactListRequest()
request.RegionId = s.client.RegionId
request.ContactName = id
var response *cms.DescribeContactListResponse
wait := incrementalWait(3*time.Second, 3*time.Second)
err = resource.Retry(5*time.Minute, func() *resource.RetryError {
raw, err := s.client.WithCmsClient(func(cmsClient *cms.Client) (interface{}, error) {
return cmsClient.DescribeContactList(request)
})
if err != nil {
if NeedRetry(err) {
wait()
return resource.RetryableError(err)
}
return resource.NonRetryableError(err)
}
addDebug(request.GetActionName(), raw, request.RpcRequest, request)
response, _ = raw.(*cms.DescribeContactListResponse)
return nil
})
if err != nil {
if IsExpectedErrors(err, []string{"ContactNotExists", "ResourceNotFound"}) {
err = WrapErrorf(NotFoundErr("CmsAlarmContact", id), NotFoundMsg, ProviderERROR)
return
}
err = WrapErrorf(err, DefaultErrorMsg, id, request.GetActionName(), AlibabaCloudSdkGoERROR)
return
}
if response.Code != "200" {
err = Error("DescribeContactList failed for %s", response.Message)
return
}
if len(response.Contacts.Contact) < 1 {
err = WrapErrorf(NotFoundErr("CmsAlarmContact", id), NotFoundMsg, ProviderERROR, response.RequestId)
return
}
return response.Contacts.Contact[0], nil
}
func (s *CmsService) DescribeCmsAlarmContactGroup(id string) (object cms.ContactGroup, err error) {
request := cms.CreateDescribeContactGroupListRequest()
request.RegionId = s.client.RegionId
request.PageNumber = requests.NewInteger(1)
request.PageSize = requests.NewInteger(20)
for {
var raw interface{}
wait := incrementalWait(3*time.Second, 3*time.Second)
err = resource.Retry(5*time.Minute, func() *resource.RetryError {
raw, err = s.client.WithCmsClient(func(cmsClient *cms.Client) (interface{}, error) {
return cmsClient.DescribeContactGroupList(request)
})
if err != nil {
if NeedRetry(err) {
wait()
return resource.RetryableError(err)
}
return resource.NonRetryableError(err)
}
return nil
})
if err != nil {
if IsExpectedErrors(err, []string{"ContactGroupNotExists", "ResourceNotFound"}) {
err = WrapErrorf(NotFoundErr("CmsAlarmContactGroup", id), NotFoundMsg, ProviderERROR)
return object, err
}
err = WrapErrorf(err, DefaultErrorMsg, id, request.GetActionName(), AlibabaCloudSdkGoERROR)
return object, err
}
addDebug(request.GetActionName(), raw, request.RpcRequest, request)
response, _ := raw.(*cms.DescribeContactGroupListResponse)
if response.Code != "200" {
err = Error("DescribeContactGroupList failed for %s", response.Message)
return object, err
}
if len(response.ContactGroupList.ContactGroup) < 1 {
err = WrapErrorf(NotFoundErr("CmsAlarmContactGroup", id), NotFoundMsg, ProviderERROR, response.RequestId)
return object, err
}
for _, object := range response.ContactGroupList.ContactGroup {
if object.Name == id {
return object, nil
}
}
if len(response.ContactGroupList.ContactGroup) < PageSizeMedium {
break
}
if page, err := getNextpageNumber(request.PageNumber); err != nil {
return object, WrapError(err)
} else {
request.PageNumber = page
}
}
err = WrapErrorf(NotFoundErr("CmsAlarmContactGroup", id), NotFoundMsg, ProviderERROR)
return
}
func (s *CmsService) DescribeCmsGroupMetricRule(id string) (object map[string]interface{}, err error) {
var response map[string]interface{}
action := "DescribeMetricRuleList"
client := s.client
request := map[string]interface{}{
"RuleIds": id,
}
idExist := false
wait := incrementalWait(3*time.Second, 3*time.Second)
err = resource.Retry(6*time.Minute, func() *resource.RetryError {
response, err = client.RpcPost("Cms", "2019-01-01", action, nil, request, false)
if err != nil {
if IsExpectedErrors(err, []string{"ExceedingQuota"}) || NeedRetry(err) {
wait()
return resource.RetryableError(err)
}
return resource.NonRetryableError(err)
}
return nil
})
addDebug(action, response, request)
if err != nil {
if IsExpectedErrors(err, []string{"GroupMetricRuleNotExists", "ResourceNotFound", "ResourceNotFoundError"}) {
return object, WrapErrorf(NotFoundErr("Cms:GroupMetricRule", id), NotFoundMsg, ProviderERROR, fmt.Sprint(response["RequestId"]))
}
return object, WrapErrorf(err, DefaultErrorMsg, id, action, AlibabaCloudSdkGoERROR)
}
resp, err := jsonpath.Get("$.Alarms.Alarm", response)
if err != nil {
return object, WrapErrorf(err, FailedGetAttributeMsg, id, "$.Alarms.Alarm", response)
}
if v, ok := resp.([]interface{}); !ok || len(v) < 1 {
return object, WrapErrorf(NotFoundErr("Cms:GroupMetricRule", id), NotFoundWithResponse, response)
}
for _, v := range resp.([]interface{}) {
if fmt.Sprint(v.(map[string]interface{})["RuleId"]) == id {
idExist = true
return v.(map[string]interface{}), nil
}
}
if !idExist {
return object, WrapErrorf(NotFoundErr("Cms:GroupMetricRule", id), NotFoundWithResponse, response)
}
return object, nil
}
func (s *CmsService) SetResourceTags(d *schema.ResourceData, resourceType string) error {
client := s.client
if d.HasChange("tags") {
added, removed := parsingTags(d)
removedTagKeys := make([]string, 0)
for _, v := range removed {
if !ignoredTags(v, "") {
removedTagKeys = append(removedTagKeys, v)
}
}
if len(removedTagKeys) > 0 {
action := "RemoveTags"
request := map[string]interface{}{
"RegionId": s.client.RegionId,
"GroupIds.1": d.Id(),
}
oraw, _ := d.GetChange("tags")
removedTags := oraw.(map[string]interface{})
count := 1
for _, key := range removedTagKeys {
request[fmt.Sprintf("Tag.%d.Key", count)] = key
request[fmt.Sprintf("Tag.%d.Value", count)] = removedTags[key]
}
wait := incrementalWait(2*time.Second, 1*time.Second)
err := resource.Retry(10*time.Minute, func() *resource.RetryError {
response, err := client.RpcPost("Cms", "2019-01-01", action, nil, request, 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 len(added) > 0 {
action := "AddTags"
request := map[string]interface{}{
"RegionId": s.client.RegionId,
"GroupIds.1": d.Id(),
}
count := 1
for key, value := range added {
request[fmt.Sprintf("Tag.%d.Key", count)] = key
request[fmt.Sprintf("Tag.%d.Value", count)] = value
count++
}
wait := incrementalWait(2*time.Second, 1*time.Second)
err := resource.Retry(10*time.Minute, func() *resource.RetryError {
response, err := client.RpcPost("Cms", "2019-01-01", action, nil, request, 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)
}
}
d.SetPartial("tags")
}
return nil
}
func (s *CmsService) DescribeCmsMonitorGroup(id string) (object map[string]interface{}, err error) {
var response map[string]interface{}
client := s.client
action := "DescribeMonitorGroups"
request := map[string]interface{}{
"RegionId": s.client.RegionId,
"GroupId": id,
}
response, err = client.RpcPost("Cms", "2019-01-01", action, nil, request, false)
if err != nil {
err = WrapErrorf(err, DefaultErrorMsg, id, action, AlibabaCloudSdkGoERROR)
return
}
addDebug(action, response, request)
if IsExpectedErrorCodes(fmt.Sprintf("%v", response["Code"]), []string{"GroupsNotExists", "ResourceNotFound"}) {
err = WrapErrorf(NotFoundErr("CmsMonitorGroup", id), NotFoundMsg, ProviderERROR)
return object, err
}
if fmt.Sprintf(`%v`, response["Code"]) != "200" {
err = Error("DescribeMonitorGroups failed for %s", response["Message"].(string))
return object, err
}
v, err := jsonpath.Get("$.Resources.Resource", response)
if err != nil {
return object, WrapErrorf(err, FailedGetAttributeMsg, id, "$.Resources.Resource", response)
}
if len(v.([]interface{})) < 1 {
return object, WrapErrorf(NotFoundErr("CloudMonitorService", id), NotFoundWithResponse, response)
} else {
if fmt.Sprint(formatInt(v.([]interface{})[0].(map[string]interface{})["GroupId"])) != id {
return object, WrapErrorf(NotFoundErr("CloudMonitorService", id), NotFoundWithResponse, response)
}
}
object = v.([]interface{})[0].(map[string]interface{})
return object, nil
}
func (s *CmsService) DescribeCmsMonitorGroupInstances(id string) (object []map[string]interface{}, err error) {
var response map[string]interface{}
client := s.client
action := "DescribeMonitorGroupInstances"
request := map[string]interface{}{
"RegionId": s.client.RegionId,
"GroupId": id,
}
request["PageSize"] = PageSizeMedium
request["PageNumber"] = 1
for {
wait := incrementalWait(3*time.Second, 3*time.Second)
err = resource.Retry(5*time.Minute, func() *resource.RetryError {
response, err = client.RpcPost("Cms", "2019-01-01", action, nil, request, false)
if err != nil {
if NeedRetry(err) {
wait()
return resource.RetryableError(err)
}
return resource.NonRetryableError(err)
}
return nil
})
addDebug(action, response, request)
if err != nil {
if IsExpectedErrors(err, []string{"ResourceNotFound", "ResourceNotFoundError"}) {
err = WrapErrorf(NotFoundErr("CmsMonitorGroupInstances", id), NotFoundMsg, ProviderERROR)
return object, err
}
return object, WrapErrorf(err, DefaultErrorMsg, id, action, AlibabaCloudSdkGoERROR)
}
v, err := jsonpath.Get("$.Resources.Resource", response)
if err != nil {
return object, WrapErrorf(err, FailedGetAttributeMsg, id, "$.Resources.Resource", response)
}
if len(v.([]interface{})) < 1 {
break
}
for _, v := range v.([]interface{}) {
object = append(object, v.(map[string]interface{}))
}
if len(v.([]interface{})) < request["PageSize"].(int) {
break
}
request["PageNumber"] = request["PageNumber"].(int) + 1
}
if len(object) < 1 {
return object, WrapErrorf(NotFoundErr("CmsMonitorGroupInstances", id), NotFoundWithResponse, response)
}
return object, nil
}
func (s *CmsService) DescribeCmsMetricRuleTemplate(id string) (object map[string]interface{}, err error) {
var response map[string]interface{}
action := "DescribeMetricRuleTemplateAttribute"
client := s.client
request := map[string]interface{}{
"TemplateId": id,
}
wait := incrementalWait(3*time.Second, 3*time.Second)
err = resource.Retry(5*time.Minute, func() *resource.RetryError {
response, err = client.RpcPost("Cms", "2019-01-01", action, nil, request, false)
if err != nil {
if NeedRetry(err) {
wait()
return resource.RetryableError(err)
}
return resource.NonRetryableError(err)
}
return nil
})
addDebug(action, response, request)
if err != nil {
if IsExpectedErrors(err, []string{"ResourceNotFound"}) {
return object, WrapErrorf(NotFoundErr("Cms:MetricRuleTemplate", id), NotFoundMsg, ProviderERROR, fmt.Sprint(response["RequestId"]))
}
return object, WrapErrorf(err, DefaultErrorMsg, id, action, AlibabaCloudSdkGoERROR)
}
v, err := jsonpath.Get("$.Resource", response)
if err != nil {
return object, WrapErrorf(err, FailedGetAttributeMsg, id, "$.Resource", response)
}
object = v.(map[string]interface{})
return object, nil
}
func (s *CmsService) DescribeCmsDynamicTagGroup(id string) (object map[string]interface{}, err error) {
var response map[string]interface{}
action := "DescribeDynamicTagRuleList"
client := s.client
request := map[string]interface{}{
"TagRegionId": s.client.RegionId,
"DynamicTagRuleId": id,
"PageSize": PageSizeLarge,
"PageNumber": 1,
}
idExist := false
for {
wait := incrementalWait(3*time.Second, 3*time.Second)
err = resource.Retry(5*time.Minute, func() *resource.RetryError {
response, err = client.RpcPost("Cms", "2019-01-01", action, nil, request, false)
if err != nil {
if NeedRetry(err) {
wait()
return resource.RetryableError(err)
}
return resource.NonRetryableError(err)
}
return nil
})
addDebug(action, response, request)
if err != nil {
return object, WrapErrorf(err, DefaultErrorMsg, id, action, AlibabaCloudSdkGoERROR)
}
resp, err := jsonpath.Get("$.TagGroupList.TagGroup", response)
if err != nil {
return object, WrapErrorf(err, FailedGetAttributeMsg, id, "$.TagGroupList.TagGroup", response)
}
if v, ok := resp.([]interface{}); !ok || len(v) < 1 {
return object, WrapErrorf(NotFoundErr("Cms:DynamicTagGroup", id), NotFoundWithResponse, response)
}
for _, v := range resp.([]interface{}) {
if fmt.Sprint(v.(map[string]interface{})["DynamicTagRuleId"]) == id {
idExist = true
return v.(map[string]interface{}), nil
}
}
if len(resp.([]interface{})) < request["PageSize"].(int) {
break
}
request["PageNumber"] = request["PageNumber"].(int) + 1
}
if !idExist {
return object, WrapErrorf(NotFoundErr("Cms:DynamicTagGroup", id), NotFoundWithResponse, response)
}
return object, nil
}
func (s *CmsService) DescribeCmsNamespace(id string) (object map[string]interface{}, err error) {
var response map[string]interface{}
action := "DescribeHybridMonitorNamespaceList"
client := s.client
request := map[string]interface{}{
"Namespace": id,
"PageSize": PageSizeLarge,
"PageNumber": 1,
}
idExist := false
for {
wait := incrementalWait(3*time.Second, 3*time.Second)
err = resource.Retry(5*time.Minute, func() *resource.RetryError {
response, err = client.RpcPost("Cms", "2019-01-01", action, nil, request, false)
if err != nil {
if NeedRetry(err) {
wait()
return resource.RetryableError(err)
}
return resource.NonRetryableError(err)
}
return nil
})
addDebug(action, response, request)
if err != nil {
return object, WrapErrorf(err, DefaultErrorMsg, id, action, AlibabaCloudSdkGoERROR)
}
resp, err := jsonpath.Get("$.DescribeHybridMonitorNamespace", response)
if err != nil {
return object, WrapErrorf(err, FailedGetAttributeMsg, id, "$.DescribeHybridMonitorNamespace", response)
}
if v, ok := resp.([]interface{}); !ok || len(v) < 1 {
return object, WrapErrorf(NotFoundErr("CloudMonitorService:Namespace", id), NotFoundWithResponse, response)
}
for _, v := range resp.([]interface{}) {
if fmt.Sprint(v.(map[string]interface{})["Namespace"]) == id {
idExist = true
return v.(map[string]interface{}), nil
}
}
if len(resp.([]interface{})) < request["PageSize"].(int) {
break
}
request["PageNumber"] = request["PageNumber"].(int) + 1
}
if !idExist {
return object, WrapErrorf(NotFoundErr("CloudMonitorService:Namespace", id), NotFoundWithResponse, response)
}
return object, nil
}
func (s *CmsService) DescribeCmsSlsGroup(id string) (object map[string]interface{}, err error) {
var response map[string]interface{}
client := s.client
action := "DescribeHybridMonitorSLSGroup"
request := map[string]interface{}{
"SLSGroupName": id,
}
wait := incrementalWait(3*time.Second, 3*time.Second)
err = resource.Retry(5*time.Minute, func() *resource.RetryError {
response, err = client.RpcPost("Cms", "2019-01-01", action, nil, request, false)
if err != nil {
if NeedRetry(err) {
wait()
return resource.RetryableError(err)
}
return resource.NonRetryableError(err)
}
return nil
})
addDebug(action, response, request)
if err != nil {
return object, WrapErrorf(err, DefaultErrorMsg, id, action, AlibabaCloudSdkGoERROR)
}
if IsExpectedErrorCodes(fmt.Sprint(response["Code"]), []string{"400"}) {
return object, WrapErrorf(NotFoundErr("CloudMonitorService:SlsGroup", id), NotFoundMsg, ProviderERROR)
}
v, err := jsonpath.Get("$.List", response)
if err != nil {
return object, WrapErrorf(err, FailedGetAttributeMsg, id, "$.List", response)
}
if len(v.([]interface{})) < 1 {
return object, WrapErrorf(NotFoundErr("CloudMonitorService", id), NotFoundWithResponse, response)
} else {
if fmt.Sprint(v.([]interface{})[0].(map[string]interface{})["SLSGroupName"]) != id {
return object, WrapErrorf(NotFoundErr("CloudMonitorService", id), NotFoundWithResponse, response)
}
}
object = v.([]interface{})[0].(map[string]interface{})
return object, nil
}
func (s *CmsService) DescribeCmsHybridMonitorSlsTask(id string) (object map[string]interface{}, err error) {
var response map[string]interface{}
client := s.client
action := "DescribeHybridMonitorTaskList"
request := map[string]interface{}{
"TaskId": id,
}
wait := incrementalWait(3*time.Second, 3*time.Second)
err = resource.Retry(5*time.Minute, func() *resource.RetryError {
response, err = client.RpcPost("Cms", "2019-01-01", action, nil, request, false)
if err != nil {
if NeedRetry(err) {
wait()
return resource.RetryableError(err)
}
return resource.NonRetryableError(err)
}
return nil
})
addDebug(action, response, request)
if err != nil {
return object, WrapErrorf(err, DefaultErrorMsg, id, action, AlibabaCloudSdkGoERROR)
}
if IsExpectedErrorCodes(fmt.Sprint(response["Code"]), []string{"ResourceNotFound"}) {
return object, WrapErrorf(NotFoundErr("CloudMonitorService:HybridMonitorSlsTask", id), NotFoundMsg, ProviderERROR)
}
v, err := jsonpath.Get("$.TaskList", response)
if err != nil {
return object, WrapErrorf(err, FailedGetAttributeMsg, id, "$.TaskList", response)
}
if len(v.([]interface{})) < 1 {
return object, WrapErrorf(NotFoundErr("CloudMonitorService", id), NotFoundWithResponse, response)
} else {
if fmt.Sprint(v.([]interface{})[0].(map[string]interface{})["TaskId"]) != id {
return object, WrapErrorf(NotFoundErr("CloudMonitorService", id), NotFoundWithResponse, response)
}
}
object = v.([]interface{})[0].(map[string]interface{})
return object, nil
}
func (s *CmsService) DescribeCmsHybridMonitorFcTask(id string) (object map[string]interface{}, err error) {
var response map[string]interface{}
client := s.client
action := "DescribeHybridMonitorTaskList"
parts, err := ParseResourceId(id, 2)
if err != nil {
err = WrapError(err)
return
}
request := map[string]interface{}{
"TargetUserId": parts[0],
"Namespace": parts[1],
"TaskType": "aliyun_fc",
}
wait := incrementalWait(3*time.Second, 3*time.Second)
err = resource.Retry(5*time.Minute, func() *resource.RetryError {
response, err = client.RpcPost("Cms", "2019-01-01", action, nil, request, false)
if err != nil {
if NeedRetry(err) {
wait()
return resource.RetryableError(err)
}
return resource.NonRetryableError(err)
}
return nil
})
addDebug(action, response, request)
if err != nil {
return object, WrapErrorf(err, DefaultErrorMsg, id, action, AlibabaCloudSdkGoERROR)
}
if IsExpectedErrorCodes(fmt.Sprint(response["Code"]), []string{"ResourceNotFound"}) {
return object, WrapErrorf(NotFoundErr("CloudMonitorService:HybridMonitorFcTask", id), NotFoundMsg, ProviderERROR)
}
v, err := jsonpath.Get("$.TaskList", response)
if err != nil {
return object, WrapErrorf(err, FailedGetAttributeMsg, id, "$.TaskList", response)
}
if len(v.([]interface{})) < 1 {
return object, WrapErrorf(NotFoundErr("CloudMonitorService", id), NotFoundWithResponse, response)
}
object = v.([]interface{})[0].(map[string]interface{})
return object, nil
}
func (s *CmsService) DescribeCmsEventRule(id string) (object map[string]interface{}, err error) {
var response map[string]interface{}
action := "DescribeEventRuleList"
client := s.client
request := map[string]interface{}{
"NamePrefix": id,
}
idExist := false
wait := incrementalWait(3*time.Second, 3*time.Second)
err = resource.Retry(5*time.Minute, func() *resource.RetryError {
response, err = client.RpcPost("Cms", "2019-01-01", action, nil, request, false)
if err != nil {
if NeedRetry(err) {
wait()
return resource.RetryableError(err)
}
return resource.NonRetryableError(err)
}
return nil
})
addDebug(action, response, request)
if err != nil {
return object, WrapErrorf(err, DefaultErrorMsg, id, action, AlibabaCloudSdkGoERROR)
}
resp, err := jsonpath.Get("$.EventRules.EventRule", response)
if err != nil {
return object, WrapErrorf(err, FailedGetAttributeMsg, id, "$.EventRules.EventRule", response)
}
if v, ok := resp.([]interface{}); !ok || len(v) < 1 {
return object, WrapErrorf(NotFoundErr("Cms:EventRule", id), NotFoundWithResponse, response)
}
for _, v := range resp.([]interface{}) {
if fmt.Sprint(v.(map[string]interface{})["Name"]) == id {
idExist = true
return v.(map[string]interface{}), nil
}
}
if !idExist {
return object, WrapErrorf(NotFoundErr("Cms:EventRule", id), NotFoundWithResponse, response)
}
return object, nil
}
func (s *CmsService) DescribeMetricRuleTargets(id string) (objects []interface{}, err error) {
var response map[string]interface{}
action := "DescribeMetricRuleTargets"
client := s.client
request := map[string]interface{}{
"RuleId": id,
}
wait := incrementalWait(3*time.Second, 3*time.Second)
err = resource.Retry(6*time.Minute, func() *resource.RetryError {
response, err = client.RpcPost("Cms", "2019-01-01", action, nil, request, false)
if err != nil {
if NeedRetry(err) {
wait()
return resource.RetryableError(err)
}
return resource.NonRetryableError(err)
}
return nil
})
addDebug(action, response, request)
if err != nil {
return objects, WrapErrorf(err, DefaultErrorMsg, id, action, AlibabaCloudSdkGoERROR)
}
resp, err := jsonpath.Get("$.Targets.Target", response)
if err != nil {
return objects, WrapErrorf(err, FailedGetAttributeMsg, id, "$.Targets.Target", response)
}
if v, ok := resp.([]interface{}); !ok || len(v) < 1 {
return objects, WrapErrorf(NotFoundErr("Cms:GroupMetricRule", id), NotFoundWithResponse, response)
}
objects = resp.([]interface{})
return objects, nil
}
func (s *CmsService) DescribeCmsMetricRuleBlackList(id string) (object map[string]interface{}, err error) {
client := s.client
request := map[string]interface{}{
"Ids.1": id,
}
var response map[string]interface{}
action := "DescribeMetricRuleBlackList"
wait := incrementalWait(3*time.Second, 3*time.Second)
err = resource.Retry(5*time.Minute, func() *resource.RetryError {
resp, err := client.RpcPost("Cms", "2019-01-01", action, nil, request, false)
if err != nil {
if NeedRetry(err) {
wait()
return resource.RetryableError(err)
}
return resource.NonRetryableError(err)
}
response = resp
addDebug(action, response, request)
return nil
})
if err != nil {
return object, WrapErrorf(err, DefaultErrorMsg, id, action, AlibabaCloudSdkGoERROR)
}
v, err := jsonpath.Get("$.DescribeMetricRuleBlackList[0]", response)
totalCount, _ := jsonpath.Get("$.Total", response)
total, _ := totalCount.(json.Number).Int64()
if err != nil && total == 0 {
err = WrapErrorf(NotFoundErr("Cms", id), NotFoundMsg, ProviderERROR)
return object, err
}
return v.(map[string]interface{}), nil
}
func (s *CmsService) CmsMetricRuleBlackListStateRefreshFunc(d *schema.ResourceData, failStates []string) resource.StateRefreshFunc {
return func() (interface{}, string, error) {
object, err := s.DescribeCmsMetricRuleBlackList(d.Id())
if err != nil {
if NotFoundError(err) {
return nil, "", nil
}
return nil, "", WrapError(err)
}
for _, failState := range failStates {
if fmt.Sprint(object[""]) == failState {
return object, fmt.Sprint(object[""]), WrapError(Error(FailedToReachTargetStatus, fmt.Sprint(object[""])))
}
}
return object, fmt.Sprint(object[""]), nil
}
}
func (s *CmsService) CmsDynamicTagGroupStateRefreshFunc(id string, failStates []string) resource.StateRefreshFunc {
return func() (interface{}, string, error) {
object, err := s.DescribeCmsDynamicTagGroup(id)
if err != nil {
if NotFoundError(err) {
// Set this to nil as if we didn't find anything.
return nil, "", nil
}
return nil, "", WrapError(err)
}
for _, failState := range failStates {
if fmt.Sprint(object["Status"]) == failState {
return object, fmt.Sprint(object["Status"]), WrapError(Error(FailedToReachTargetStatus, fmt.Sprint(object["Status"])))
}
}
return object, fmt.Sprint(object["Status"]), nil
}
}