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}
0 commit comments