Skip to content

Commit 7e32ef6

Browse files
author
mikatong
committed
support region
1 parent feeed69 commit 7e32ef6

File tree

12 files changed

+1191
-85
lines changed

12 files changed

+1191
-85
lines changed

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ require (
6767
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/live v1.0.777
6868
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/mariadb v1.0.672
6969
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/mongodb v1.0.1096
70-
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/monitor v1.0.1066
70+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/monitor v1.0.1149
7171
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/mps v1.0.853
7272
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/organization v1.0.1038
7373
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/postgres v1.0.1156

go.sum

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1031,6 +1031,8 @@ github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/mongodb v1.0.1096 h1:cX
10311031
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/mongodb v1.0.1096/go.mod h1:YhKow73Lzn/iRvvDT0/XBnXsSypr29QZCDU6c4reVRg=
10321032
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/monitor v1.0.1066 h1:NBQgNznZRuNQ7AEHPtjFRq588IFEIvClBVtHdR/Q7Wo=
10331033
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/monitor v1.0.1066/go.mod h1:kgZ+YsYoqSplH7rlz1PwheZPZVU67tLpLXJDKLkM950=
1034+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/monitor v1.0.1149 h1:E9riu3snI31isF2lmzRe8CJ3giBbmeFFCXRcajtpjF0=
1035+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/monitor v1.0.1149/go.mod h1:+LRDn2y0FXXf1qkivSnRNCUhJ0JDx7OA8YPjNEQtimE=
10341036
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/mps v1.0.853 h1:abGpWsAtEuF2QIYKm2m9/hv9OqyHwWNLsd5+67z86BE=
10351037
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/mps v1.0.853/go.mod h1:xIprIT+IW+3Fj05GCWmgvxJOhICqFGoW4Ef77cDD2JQ=
10361038
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/mqtt v1.0.1130 h1:2xpOVOz7a/qpDBmT6iRqu2JkaO2qy/KY/d0MhuZwPEU=

tencentcloud/connectivity/client.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -849,6 +849,14 @@ func (me *TencentCloudClient) UseMonitorClient() *monitor.Client {
849849
return me.monitorConn
850850
}
851851

852+
func (me *TencentCloudClient) UseMonitorClientRegion(region string) *monitor.Client {
853+
cpf := me.NewClientProfile(300)
854+
monitorConn, _ := monitor.NewClient(me.Credential, region, cpf)
855+
monitorConn.WithHttpTransport(&LogRoundTripper{})
856+
857+
return monitorConn
858+
}
859+
852860
// UseEsClient returns es client for service
853861
func (me *TencentCloudClient) UseEsClient(iacExtInfo ...IacExtInfo) *es.Client {
854862
var logRoundTripper LogRoundTripper

tencentcloud/services/monitor/extension_monitor.go

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,3 +90,41 @@ var MonitorRegionMap = map[string]string{
9090
"ap-jakarta": "jkt",
9191
"sa-saopaulo": "sao",
9292
}
93+
94+
var MonitorRegionMapName = map[string]string{
95+
"gz": "ap-guangzhou",
96+
"szjr": "ap-shenzhen-fsi",
97+
"gzopen": "ap-guangzhou-open",
98+
"szx": "ap-shenzhen",
99+
"sh": "ap-shanghai",
100+
"shjr": "ap-shanghai-fsi",
101+
"nj": "ap-nanjing",
102+
"jnec": "ap-jinan-ec",
103+
"hzec": "ap-hangzhou-ec",
104+
"fzec": "ap-fuzhou-ec",
105+
"bj": "ap-beijing",
106+
"tsn": "ap-tianjin",
107+
"sjwec": "ap-shijiazhuang-ec",
108+
"bjjr": "ap-beijing-fsi",
109+
"whec": "ap-wuhan-ec",
110+
"csec": "ap-changsha-ec",
111+
"cd": "ap-chengdu",
112+
"cq": "ap-chongqing",
113+
"tpe": "ap-taipei",
114+
"hk": "ap-hongkong",
115+
"sg": "ap-singapore",
116+
"th": "ap-bangkok",
117+
"in": "ap-mumbai",
118+
"kr": "ap-seoul",
119+
"jp": "ap-tokyo",
120+
"usw": "na-siliconvalley",
121+
"use": "na-ashburn",
122+
"ca": "na-toronto",
123+
"de": "eu-frankfurt",
124+
"ru": "eu-moscow",
125+
"qy": "ap-qingyuan",
126+
"xbec": "ap-xibei-ec",
127+
"hfeec": "ap-hefei-ec",
128+
"jkt": "ap-jakarta",
129+
"sao": "sa-saopaulo",
130+
}

tencentcloud/services/monitor/resource_tc_monitor_policy_binding_object.go

Lines changed: 73 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"context"
55
"encoding/json"
66
"fmt"
7+
"strconv"
78
"time"
89

910
tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common"
@@ -42,6 +43,9 @@ func ResourceTencentCloudMonitorPolicyBindingObject() *schema.Resource {
4243
if vmap["dimensions_json"] != nil {
4344
hashMap["dimensions_json"] = vmap["dimensions_json"]
4445
}
46+
if vmap["region"] != nil {
47+
hashMap["region"] = vmap["region"]
48+
}
4549
b, _ := json.Marshal(hashMap)
4650
return helper.HashString(string(b))
4751
},
@@ -58,6 +62,13 @@ func ResourceTencentCloudMonitorPolicyBindingObject() *schema.Resource {
5862
Computed: true,
5963
Description: "Object unique ID.",
6064
},
65+
"region": {
66+
Type: schema.TypeString,
67+
Optional: true,
68+
Computed: true,
69+
ForceNew: true,
70+
Description: "Region.",
71+
},
6172
},
6273
},
6374
},
@@ -93,13 +104,19 @@ func resourceTencentMonitorPolicyBindingObjectCreate(d *schema.ResourceData, met
93104
m := v.(map[string]interface{})
94105
var dimension monitor.BindingPolicyObjectDimension
95106
var dimensionsJson = m["dimensions_json"].(string)
96-
var region = MonitorRegionMap[monitorService.client.Region]
107+
var region string
97108

98-
if region == "" {
99-
return fmt.Errorf("monitor not support region `%s` bind", monitorService.client.Region)
109+
if v, ok := m["region"]; ok && v.(string) != "" {
110+
region = v.(string)
111+
} else {
112+
region = monitorService.client.Region
113+
}
114+
if v, ok := MonitorRegionMap[region]; ok {
115+
dimension.Region = helper.String(v)
116+
} else {
117+
return fmt.Errorf("monitor not support region `%s` bind", region)
100118
}
101119
dimension.Dimensions = &dimensionsJson
102-
dimension.Region = &region
103120
request.Dimensions = append(request.Dimensions, &dimension)
104121
}
105122

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

143-
objects, err := monitorService.DescribeBindingAlarmPolicyObjectList(ctx, policyId)
144-
160+
if info.OriginId == nil {
161+
return fmt.Errorf("OriginId is nil")
162+
}
163+
originId, err := strconv.Atoi(*info.OriginId)
164+
if err != nil {
165+
return err
166+
}
167+
regionList, err := monitorService.DescribePolicyObjectCount(ctx, originId)
145168
if err != nil {
146169
return err
147170
}
148171

149172
newDimensions := make([]interface{}, 0, 10)
173+
for _, regionInfo := range regionList {
174+
if regionInfo.Count != nil && *regionInfo.Count == 0 {
175+
continue
176+
}
177+
region := MonitorRegionMapName[*regionInfo.Region]
178+
objects, err := monitorService.DescribeBindingAlarmPolicyObjectList(ctx, policyId, region)
179+
if err != nil {
180+
return err
181+
}
182+
183+
for _, item := range objects {
184+
dimensionsJson := item.Dimensions
185+
uniqueId := item.UniqueId
186+
newDimension := map[string]interface{}{
187+
"dimensions_json": dimensionsJson,
188+
"unique_id": uniqueId,
189+
"region": region,
190+
}
191+
newDimensions = append(newDimensions, newDimension)
150192

151-
for _, item := range objects {
152-
dimensionsJson := item.Dimensions
153-
uniqueId := item.UniqueId
154-
newDimensions = append(newDimensions, map[string]interface{}{
155-
"dimensions_json": dimensionsJson,
156-
"unique_id": uniqueId,
157-
})
193+
}
158194
}
159195

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

181-
objects, err := monitorService.DescribeBindingAlarmPolicyObjectList(ctx, policyId)
182-
217+
if info.OriginId == nil {
218+
return fmt.Errorf("OriginId is nil")
219+
}
220+
originId, err := strconv.Atoi(*info.OriginId)
183221
if err != nil {
184222
return err
185223
}
186-
getUniqueId := func(dimensionsJson string) (has bool, uniqueId string) {
187-
for _, item := range objects {
188-
if *item.Dimensions == dimensionsJson {
189-
uniqueId = *item.UniqueId
190-
has = true
191-
return
192-
}
193-
}
194-
return
224+
regionList, err := monitorService.DescribePolicyObjectCount(ctx, originId)
225+
if err != nil {
226+
return err
195227
}
196228

197-
dimensions := d.Get("dimensions").(*schema.Set).List()
198-
uniqueIds := make([]*string, 0, len(dimensions))
199-
for _, v := range dimensions {
200-
m := v.(map[string]interface{})
201-
var dimensionsJson = m["dimensions_json"].(string)
202-
var has, uniqueId = getUniqueId(dimensionsJson)
203-
if has {
204-
uniqueIds = append(uniqueIds, &uniqueId)
229+
for _, regionInfo := range regionList {
230+
if regionInfo.Count != nil && *regionInfo.Count == 0 {
231+
continue
205232
}
206-
}
207233

208-
var (
209-
request = monitor.NewUnBindingPolicyObjectRequest()
210-
)
234+
request := monitor.NewUnBindingAllPolicyObjectRequest()
235+
request.Module = helper.String("monitor")
236+
request.GroupId = helper.Int64(0)
237+
request.PolicyId = &policyId
211238

212-
request.Module = helper.String("monitor")
213-
request.GroupId = helper.Int64(0)
214-
request.PolicyId = &policyId
215-
request.UniqueId = uniqueIds
216-
217-
if err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError {
218-
ratelimit.Check(request.GetAction())
219-
if _, err = monitorService.client.UseMonitorClient().UnBindingPolicyObject(request); err != nil {
220-
return tccommon.RetryError(err, tccommon.InternalError)
239+
region := MonitorRegionMapName[*regionInfo.Region]
240+
if err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError {
241+
ratelimit.Check(request.GetAction())
242+
if _, e := monitorService.client.UseMonitorClientRegion(region).UnBindingAllPolicyObject(request); e != nil {
243+
return tccommon.RetryError(e, tccommon.InternalError)
244+
}
245+
return nil
246+
}); err != nil {
247+
return err
221248
}
222-
return nil
223-
}); err != nil {
224-
return err
225249
}
250+
226251
return nil
227252
}
Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
package monitor_test
2+
3+
import (
4+
"testing"
5+
6+
tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest"
7+
8+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
9+
)
10+
11+
func TestAccTencentCloudMonitorPolicyBindingObjectResource_basic(t *testing.T) {
12+
t.Parallel()
13+
resource.Test(t, resource.TestCase{
14+
PreCheck: func() { tcacctest.AccPreCheck(t) },
15+
Providers: tcacctest.AccProviders,
16+
Steps: []resource.TestStep{
17+
{
18+
Config: testAccMonitorPolicyBindingObjectBasic,
19+
Check: resource.ComposeTestCheckFunc(
20+
resource.TestCheckResourceAttr("tencentcloud_monitor_policy_binding_object.binding_object", "dimensions.#", "1"),
21+
),
22+
},
23+
{
24+
ResourceName: "tencentcloud_monitor_policy_binding_object.binding_object",
25+
ImportState: true,
26+
ImportStateVerify: true,
27+
},
28+
},
29+
})
30+
}
31+
32+
func TestAccTencentCloudMonitorPolicyBindingObjectResource_multiRegion(t *testing.T) {
33+
t.Parallel()
34+
resource.Test(t, resource.TestCase{
35+
PreCheck: func() { tcacctest.AccPreCheck(t) },
36+
Providers: tcacctest.AccProviders,
37+
Steps: []resource.TestStep{
38+
{
39+
Config: testAccMonitorPolicyBindingObjectMultiRegion,
40+
Check: resource.ComposeTestCheckFunc(
41+
resource.TestCheckResourceAttr("tencentcloud_monitor_policy_binding_object.binding_multi_region_object", "dimensions.#", "2"),
42+
),
43+
},
44+
{
45+
ResourceName: "tencentcloud_monitor_policy_binding_object.binding_multi_region_object",
46+
ImportState: true,
47+
ImportStateVerify: true,
48+
},
49+
},
50+
})
51+
}
52+
53+
const testAccMonitorPolicyBindingObjectBasic string = `
54+
resource "tencentcloud_monitor_policy_binding_object" "binding_object" {
55+
policy_id = "policy-dkfebnac"
56+
dimensions {
57+
dimensions_json = jsonencode(
58+
{
59+
unInstanceId = "ins-df0kqv1o"
60+
}
61+
)
62+
}
63+
}
64+
`
65+
66+
const testAccMonitorPolicyBindingObjectMultiRegion string = `
67+
resource "tencentcloud_monitor_policy_binding_object" "binding_multi_region_object" {
68+
policy_id = "policy-dkfebnac"
69+
dimensions {
70+
dimensions_json = jsonencode(
71+
{
72+
unInstanceId = "ins-2ferl9zf"
73+
}
74+
)
75+
region = "ap-shanghai"
76+
}
77+
dimensions {
78+
dimensions_json = jsonencode(
79+
{
80+
unInstanceId = "ins-df0kqv1o"
81+
}
82+
)
83+
region = "ap-guangzhou"
84+
}
85+
}
86+
`

tencentcloud/services/monitor/service_tencentcloud_monitor.go

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -275,7 +275,7 @@ func (me *MonitorService) DescribeBindingPolicyObjectList(ctx context.Context, g
275275
return
276276
}
277277

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

281281
var (
@@ -298,7 +298,7 @@ func (me *MonitorService) DescribeBindingAlarmPolicyObjectList(ctx context.Conte
298298
}
299299
if err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError {
300300
ratelimit.Check(requestList.GetAction())
301-
if responseList, err = me.client.UseMonitorClient().DescribeBindingPolicyObjectList(requestList); err != nil {
301+
if responseList, err = me.client.UseMonitorClientRegion(region).DescribeBindingPolicyObjectList(requestList); err != nil {
302302
return tccommon.RetryError(err, tccommon.InternalError)
303303
}
304304
objects = append(objects, responseList.Response.List...)
@@ -2676,3 +2676,26 @@ func (me *MonitorService) DescribeMonitorTmpMultipleWritesById(ctx context.Conte
26762676
ret = response.Response
26772677
return
26782678
}
2679+
2680+
func (me *MonitorService) DescribePolicyObjectCount(ctx context.Context, groupId int) (regionList []*monitor.RegionPolicyObjectCount, errRet error) {
2681+
2682+
request := monitor.NewDescribePolicyObjectCountRequest()
2683+
request.Module = helper.String("monitor")
2684+
request.GroupId = helper.IntInt64(groupId)
2685+
2686+
err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError {
2687+
ratelimit.Check(request.GetAction())
2688+
response, e := me.client.UseMonitorClient().DescribePolicyObjectCount(request)
2689+
if e != nil {
2690+
return tccommon.RetryError(e, tccommon.InternalError)
2691+
}
2692+
regionList = response.Response.RegionList
2693+
return nil
2694+
})
2695+
if err != nil {
2696+
errRet = err
2697+
return
2698+
}
2699+
2700+
return
2701+
}

0 commit comments

Comments
 (0)