Skip to content

fix(monitor): [123970932]support region #3357

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
May 14, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .changelog/3357.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
```release-note:enhancement
resource/tencentcloud_monitor_policy_binding_object: add region
```
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ require (
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/live v1.0.777
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/mariadb v1.0.672
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/mongodb v1.0.1096
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/monitor v1.0.1066
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/monitor v1.0.1149
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/mps v1.0.853
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/organization v1.0.1038
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/postgres v1.0.1156
Expand Down
2 changes: 2 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -1031,6 +1031,8 @@ github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/mongodb v1.0.1096 h1:cX
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/mongodb v1.0.1096/go.mod h1:YhKow73Lzn/iRvvDT0/XBnXsSypr29QZCDU6c4reVRg=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/monitor v1.0.1066 h1:NBQgNznZRuNQ7AEHPtjFRq588IFEIvClBVtHdR/Q7Wo=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/monitor v1.0.1066/go.mod h1:kgZ+YsYoqSplH7rlz1PwheZPZVU67tLpLXJDKLkM950=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/monitor v1.0.1149 h1:E9riu3snI31isF2lmzRe8CJ3giBbmeFFCXRcajtpjF0=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/monitor v1.0.1149/go.mod h1:+LRDn2y0FXXf1qkivSnRNCUhJ0JDx7OA8YPjNEQtimE=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/mps v1.0.853 h1:abGpWsAtEuF2QIYKm2m9/hv9OqyHwWNLsd5+67z86BE=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/mps v1.0.853/go.mod h1:xIprIT+IW+3Fj05GCWmgvxJOhICqFGoW4Ef77cDD2JQ=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/mqtt v1.0.1130 h1:2xpOVOz7a/qpDBmT6iRqu2JkaO2qy/KY/d0MhuZwPEU=
Expand Down
8 changes: 8 additions & 0 deletions tencentcloud/connectivity/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -849,6 +849,14 @@ func (me *TencentCloudClient) UseMonitorClient() *monitor.Client {
return me.monitorConn
}

func (me *TencentCloudClient) UseMonitorClientRegion(region string) *monitor.Client {
cpf := me.NewClientProfile(300)
monitorConn, _ := monitor.NewClient(me.Credential, region, cpf)
monitorConn.WithHttpTransport(&LogRoundTripper{})

return monitorConn
}

// UseEsClient returns es client for service
func (me *TencentCloudClient) UseEsClient(iacExtInfo ...IacExtInfo) *es.Client {
var logRoundTripper LogRoundTripper
Expand Down
38 changes: 38 additions & 0 deletions tencentcloud/services/monitor/extension_monitor.go
Original file line number Diff line number Diff line change
Expand Up @@ -90,3 +90,41 @@ var MonitorRegionMap = map[string]string{
"ap-jakarta": "jkt",
"sa-saopaulo": "sao",
}

var MonitorRegionMapName = map[string]string{
"gz": "ap-guangzhou",
"szjr": "ap-shenzhen-fsi",
"gzopen": "ap-guangzhou-open",
"szx": "ap-shenzhen",
"sh": "ap-shanghai",
"shjr": "ap-shanghai-fsi",
"nj": "ap-nanjing",
"jnec": "ap-jinan-ec",
"hzec": "ap-hangzhou-ec",
"fzec": "ap-fuzhou-ec",
"bj": "ap-beijing",
"tsn": "ap-tianjin",
"sjwec": "ap-shijiazhuang-ec",
"bjjr": "ap-beijing-fsi",
"whec": "ap-wuhan-ec",
"csec": "ap-changsha-ec",
"cd": "ap-chengdu",
"cq": "ap-chongqing",
"tpe": "ap-taipei",
"hk": "ap-hongkong",
"sg": "ap-singapore",
"th": "ap-bangkok",
"in": "ap-mumbai",
"kr": "ap-seoul",
"jp": "ap-tokyo",
"usw": "na-siliconvalley",
"use": "na-ashburn",
"ca": "na-toronto",
"de": "eu-frankfurt",
"ru": "eu-moscow",
"qy": "ap-qingyuan",
"xbec": "ap-xibei-ec",
"hfeec": "ap-hefei-ec",
"jkt": "ap-jakarta",
"sao": "sa-saopaulo",
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import (
"context"
"encoding/json"
"fmt"
"strconv"
"time"

tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common"
Expand Down Expand Up @@ -42,6 +43,9 @@ func ResourceTencentCloudMonitorPolicyBindingObject() *schema.Resource {
if vmap["dimensions_json"] != nil {
hashMap["dimensions_json"] = vmap["dimensions_json"]
}
if vmap["region"] != nil {
hashMap["region"] = vmap["region"]
}
b, _ := json.Marshal(hashMap)
return helper.HashString(string(b))
},
Expand All @@ -58,6 +62,13 @@ func ResourceTencentCloudMonitorPolicyBindingObject() *schema.Resource {
Computed: true,
Description: "Object unique ID.",
},
"region": {
Type: schema.TypeString,
Optional: true,
Computed: true,
ForceNew: true,
Description: "Region.",
},
},
},
},
Expand Down Expand Up @@ -93,13 +104,19 @@ func resourceTencentMonitorPolicyBindingObjectCreate(d *schema.ResourceData, met
m := v.(map[string]interface{})
var dimension monitor.BindingPolicyObjectDimension
var dimensionsJson = m["dimensions_json"].(string)
var region = MonitorRegionMap[monitorService.client.Region]
var region string

if region == "" {
return fmt.Errorf("monitor not support region `%s` bind", monitorService.client.Region)
if v, ok := m["region"]; ok && v.(string) != "" {
region = v.(string)
} else {
region = monitorService.client.Region
}
if v, ok := MonitorRegionMap[region]; ok {
dimension.Region = helper.String(v)
} else {
return fmt.Errorf("monitor not support region `%s` bind", region)
}
dimension.Dimensions = &dimensionsJson
dimension.Region = &region
request.Dimensions = append(request.Dimensions, &dimension)
}

Expand Down Expand Up @@ -140,21 +157,40 @@ func resourceTencentMonitorPolicyBindingObjectRead(d *schema.ResourceData, meta
return fmt.Errorf("alarm policy %s not exist", policyId)
}

objects, err := monitorService.DescribeBindingAlarmPolicyObjectList(ctx, policyId)

if info.OriginId == nil {
return fmt.Errorf("OriginId is nil")
}
originId, err := strconv.Atoi(*info.OriginId)
if err != nil {
return err
}
regionList, err := monitorService.DescribePolicyObjectCount(ctx, originId)
if err != nil {
return err
}

newDimensions := make([]interface{}, 0, 10)
for _, regionInfo := range regionList {
if regionInfo.Count != nil && *regionInfo.Count == 0 {
continue
}
region := MonitorRegionMapName[*regionInfo.Region]
objects, err := monitorService.DescribeBindingAlarmPolicyObjectList(ctx, policyId, region)
if err != nil {
return err
}

for _, item := range objects {
dimensionsJson := item.Dimensions
uniqueId := item.UniqueId
newDimension := map[string]interface{}{
"dimensions_json": dimensionsJson,
"unique_id": uniqueId,
"region": region,
}
newDimensions = append(newDimensions, newDimension)

for _, item := range objects {
dimensionsJson := item.Dimensions
uniqueId := item.UniqueId
newDimensions = append(newDimensions, map[string]interface{}{
"dimensions_json": dimensionsJson,
"unique_id": uniqueId,
})
}
}

return d.Set("dimensions", newDimensions)
Expand All @@ -178,50 +214,39 @@ func resourceTencentMonitorPolicyBindingObjectDelete(d *schema.ResourceData, met
return fmt.Errorf("alarm policy %s not exist", policyId)
}

objects, err := monitorService.DescribeBindingAlarmPolicyObjectList(ctx, policyId)

if info.OriginId == nil {
return fmt.Errorf("OriginId is nil")
}
originId, err := strconv.Atoi(*info.OriginId)
if err != nil {
return err
}
getUniqueId := func(dimensionsJson string) (has bool, uniqueId string) {
for _, item := range objects {
if *item.Dimensions == dimensionsJson {
uniqueId = *item.UniqueId
has = true
return
}
}
return
regionList, err := monitorService.DescribePolicyObjectCount(ctx, originId)
if err != nil {
return err
}

dimensions := d.Get("dimensions").(*schema.Set).List()
uniqueIds := make([]*string, 0, len(dimensions))
for _, v := range dimensions {
m := v.(map[string]interface{})
var dimensionsJson = m["dimensions_json"].(string)
var has, uniqueId = getUniqueId(dimensionsJson)
if has {
uniqueIds = append(uniqueIds, &uniqueId)
for _, regionInfo := range regionList {
if regionInfo.Count != nil && *regionInfo.Count == 0 {
continue
}
}

var (
request = monitor.NewUnBindingPolicyObjectRequest()
)
request := monitor.NewUnBindingAllPolicyObjectRequest()
request.Module = helper.String("monitor")
request.GroupId = helper.Int64(0)
request.PolicyId = &policyId

request.Module = helper.String("monitor")
request.GroupId = helper.Int64(0)
request.PolicyId = &policyId
request.UniqueId = uniqueIds

if err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError {
ratelimit.Check(request.GetAction())
if _, err = monitorService.client.UseMonitorClient().UnBindingPolicyObject(request); err != nil {
return tccommon.RetryError(err, tccommon.InternalError)
region := MonitorRegionMapName[*regionInfo.Region]
if err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError {
ratelimit.Check(request.GetAction())
if _, e := monitorService.client.UseMonitorClientRegion(region).UnBindingAllPolicyObject(request); e != nil {
return tccommon.RetryError(e, tccommon.InternalError)
}
return nil
}); err != nil {
return err
}
return nil
}); err != nil {
return err
}

return nil
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
package monitor_test

import (
"testing"

tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest"

"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
)

func TestAccTencentCloudMonitorPolicyBindingObjectResource_basic(t *testing.T) {
t.Parallel()
resource.Test(t, resource.TestCase{
PreCheck: func() { tcacctest.AccPreCheck(t) },
Providers: tcacctest.AccProviders,
Steps: []resource.TestStep{
{
Config: testAccMonitorPolicyBindingObjectBasic,
Check: resource.ComposeTestCheckFunc(
resource.TestCheckResourceAttr("tencentcloud_monitor_policy_binding_object.binding_object", "dimensions.#", "1"),
),
},
{
ResourceName: "tencentcloud_monitor_policy_binding_object.binding_object",
ImportState: true,
ImportStateVerify: true,
},
},
})
}

func TestAccTencentCloudMonitorPolicyBindingObjectResource_multiRegion(t *testing.T) {
t.Parallel()
resource.Test(t, resource.TestCase{
PreCheck: func() { tcacctest.AccPreCheck(t) },
Providers: tcacctest.AccProviders,
Steps: []resource.TestStep{
{
Config: testAccMonitorPolicyBindingObjectMultiRegion,
Check: resource.ComposeTestCheckFunc(
resource.TestCheckResourceAttr("tencentcloud_monitor_policy_binding_object.binding_multi_region_object", "dimensions.#", "2"),
),
},
{
ResourceName: "tencentcloud_monitor_policy_binding_object.binding_multi_region_object",
ImportState: true,
ImportStateVerify: true,
},
},
})
}

const testAccMonitorPolicyBindingObjectBasic string = `
resource "tencentcloud_monitor_policy_binding_object" "binding_object" {
policy_id = "policy-dkfebnac"
dimensions {
dimensions_json = jsonencode(
{
unInstanceId = "ins-df0kqv1o"
}
)
}
}
`

const testAccMonitorPolicyBindingObjectMultiRegion string = `
resource "tencentcloud_monitor_policy_binding_object" "binding_multi_region_object" {
policy_id = "policy-dkfebnac"
dimensions {
dimensions_json = jsonencode(
{
unInstanceId = "ins-2ferl9zf"
}
)
region = "ap-shanghai"
}
dimensions {
dimensions_json = jsonencode(
{
unInstanceId = "ins-df0kqv1o"
}
)
region = "ap-guangzhou"
}
}
`
27 changes: 25 additions & 2 deletions tencentcloud/services/monitor/service_tencentcloud_monitor.go
Original file line number Diff line number Diff line change
Expand Up @@ -275,7 +275,7 @@ func (me *MonitorService) DescribeBindingPolicyObjectList(ctx context.Context, g
return
}

func (me *MonitorService) DescribeBindingAlarmPolicyObjectList(ctx context.Context, policyId string) (
func (me *MonitorService) DescribeBindingAlarmPolicyObjectList(ctx context.Context, policyId string, region string) (
objects []*monitor.DescribeBindingPolicyObjectListInstance, errRet error) {

var (
Expand All @@ -298,7 +298,7 @@ func (me *MonitorService) DescribeBindingAlarmPolicyObjectList(ctx context.Conte
}
if err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError {
ratelimit.Check(requestList.GetAction())
if responseList, err = me.client.UseMonitorClient().DescribeBindingPolicyObjectList(requestList); err != nil {
if responseList, err = me.client.UseMonitorClientRegion(region).DescribeBindingPolicyObjectList(requestList); err != nil {
return tccommon.RetryError(err, tccommon.InternalError)
}
objects = append(objects, responseList.Response.List...)
Expand Down Expand Up @@ -2676,3 +2676,26 @@ func (me *MonitorService) DescribeMonitorTmpMultipleWritesById(ctx context.Conte
ret = response.Response
return
}

func (me *MonitorService) DescribePolicyObjectCount(ctx context.Context, groupId int) (regionList []*monitor.RegionPolicyObjectCount, errRet error) {

request := monitor.NewDescribePolicyObjectCountRequest()
request.Module = helper.String("monitor")
request.GroupId = helper.IntInt64(groupId)

err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError {
ratelimit.Check(request.GetAction())
response, e := me.client.UseMonitorClient().DescribePolicyObjectCount(request)
if e != nil {
return tccommon.RetryError(e, tccommon.InternalError)
}
regionList = response.Response.RegionList
return nil
})
if err != nil {
errRet = err
return
}

return
}
Loading
Loading