Skip to content

Commit 22fa91b

Browse files
authored
fix(ccn): [118696791] CCN instance support route_ecmp_flag and route_overlap_flag (#2746)
* add * add
1 parent 71be8a4 commit 22fa91b

File tree

12 files changed

+219
-46
lines changed

12 files changed

+219
-46
lines changed

.changelog/2746.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
```release-note:enhancement
2+
resource/tencentcloud_ccn: support route_ecmp_flag and route_overlap_flag
3+
```

go.mod

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ require (
4646
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/clb v1.0.961
4747
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cloudaudit v1.0.544
4848
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cls v1.0.970
49-
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.970
49+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.971
5050
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.960
5151
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cwp v1.0.762
5252
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cynosdb v1.0.692
@@ -96,7 +96,7 @@ require (
9696
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tse v1.0.857
9797
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tsf v1.0.674
9898
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vod v1.0.860
99-
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc v1.0.964
99+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc v1.0.971
100100
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/waf v1.0.833
101101
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/wedata v1.0.792
102102
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/wss v1.0.199

go.sum

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -956,20 +956,20 @@ github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.955 h1:kr5K
956956
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.955/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
957957
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.958 h1:WoN2lhvQVTFnY4woYvpQKRzdHeEiB+m9lsHC3TOFdXQ=
958958
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.958/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
959-
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.960 h1:hde8uWA3624nGUvC8QPf9njcyBZ7A9weqscRrqyM1Rk=
960-
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.960/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
961-
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.963 h1:lUVCMP5eiSHc2HGfSVc07Tytn4p6DklJkKldObRvJrU=
962-
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.963/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
963-
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.964 h1:ET3EulYQvWrdD5FNwOP+196w5Vbniy/uRGucM5ILExQ=
964-
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.964/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
965959
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.959 h1:GZUqSDQkttkhH2hxWNj5apDo1/YhQwML0Q68wW60LSA=
966960
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.959/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
967961
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.960 h1:hde8uWA3624nGUvC8QPf9njcyBZ7A9weqscRrqyM1Rk=
968962
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.960/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
969963
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.961 h1:UqinjIsO+Y48BQYSxrD6aHQe8SD+Wsbvj+jU9V9VvWM=
970964
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.961/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
965+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.963 h1:lUVCMP5eiSHc2HGfSVc07Tytn4p6DklJkKldObRvJrU=
966+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.963/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
967+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.964 h1:ET3EulYQvWrdD5FNwOP+196w5Vbniy/uRGucM5ILExQ=
968+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.964/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
971969
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.970 h1:IsF+IWWOfzhbyxP1jFYU3w4kZXWfDH4QaNLXgIy3Sgg=
972970
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.970/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
971+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.971 h1:T5zEH1QM1XX+hJoAe4krnSjrnsTgHv1KfGC4Sos0Y4M=
972+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.971/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
973973
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/csip v1.0.860 h1:F3esKBIT3HW9+7Gt8cVgf8X06VdGIczpgLBUECzSEzU=
974974
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/csip v1.0.860/go.mod h1:NZo1WplQcC314kMlCRUoy8NQju2BnolIJj7NAWgsuhY=
975975
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.624 h1:nEZqsoqt1pEoaP9JjkHQy3/H00suCfzlHW1qOm2nYD8=
@@ -1116,6 +1116,8 @@ github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc v1.0.963 h1:6Hl5u9j
11161116
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc v1.0.963/go.mod h1:I/v4TeM6kXoYesJ67MpDqJMRLDEypA4c0QjZBYwaka8=
11171117
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc v1.0.964 h1:+HsB7iMFYfDAYD0Xoj1tBsqLT1R6h/94DiooYJnorr8=
11181118
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc v1.0.964/go.mod h1:ohfNiTUrMTR50FAUe4wALZVYa1404YQvYB57pvVVADM=
1119+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc v1.0.971 h1:eQsRAk1n6z4du93ebKe1XyQpTELY0YIJ4Y7jvMLdNNg=
1120+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc v1.0.971/go.mod h1:QpI0wEhuqhVI3jZbakGNzsJlt7YJdB8rqY9b/SI+NMM=
11191121
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/waf v1.0.833 h1:avaBlZ+Qqv7bfMg/u0jlRsbEBbE18CfqKWbfGc84PLg=
11201122
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/waf v1.0.833/go.mod h1:fUWG217b//46Oa3VXxC5mgeYeewVAbF+lc81uET89EM=
11211123
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/wedata v1.0.792 h1:NLgKNOIHWa38AmW7dyfI9Jlcp2Kr9VRD94f48pPNmxM=

tencentcloud/services/ccn/resource_tc_ccn.go

Lines changed: 95 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,11 @@ package ccn
33
import (
44
"context"
55
"fmt"
6+
"log"
67
"strings"
78

9+
vpc "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc/v20170312"
10+
811
tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common"
912
svctag "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tag"
1013

@@ -67,6 +70,18 @@ func ResourceTencentCloudCcn() *schema.Resource {
6770
"`INTER_REGION_LIMIT` is the inter-regional speed limit. " +
6871
"The default is `OUTER_REGION_LIMIT`.",
6972
},
73+
"route_ecmp_flag": {
74+
Type: schema.TypeBool,
75+
Optional: true,
76+
Default: false,
77+
Description: "Whether to enable the equivalent routing function. `true`: enabled, `false`: disabled.",
78+
},
79+
"route_overlap_flag": {
80+
Type: schema.TypeBool,
81+
Optional: true,
82+
Default: false,
83+
Description: "Whether to enable the routing overlap function. `true`: enabled, `false`: disabled.",
84+
},
7085
"tags": {
7186
Type: schema.TypeMap,
7287
Optional: true,
@@ -142,6 +157,39 @@ func resourceTencentCloudCcnCreate(d *schema.ResourceData, meta interface{}) err
142157
}
143158
}
144159

160+
// set ECMP/Overlap
161+
request := vpc.NewModifyCcnAttributeRequest()
162+
request.CcnId = &info.ccnId
163+
if temp, ok := d.GetOkExists("route_ecmp_flag"); ok {
164+
request.RouteECMPFlag = helper.Bool(temp.(bool))
165+
}
166+
167+
if temp, ok := d.GetOkExists("route_overlap_flag"); ok {
168+
request.RouteOverlapFlag = helper.Bool(temp.(bool))
169+
}
170+
171+
err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError {
172+
result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVpcClient().ModifyCcnAttribute(request)
173+
if e != nil {
174+
return tccommon.RetryError(e)
175+
} else {
176+
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
177+
}
178+
179+
if result == nil {
180+
e = fmt.Errorf("update ModifyCcnAttribute failed")
181+
return resource.NonRetryableError(e)
182+
}
183+
184+
_ = result
185+
return nil
186+
})
187+
188+
if err != nil {
189+
log.Printf("[CRITAL]%s update ModifyCcnAttribute failed, reason:%s\n", logId, err.Error())
190+
return err
191+
}
192+
145193
return resourceTencentCloudCcnRead(d, meta)
146194
}
147195

@@ -174,6 +222,8 @@ func resourceTencentCloudCcnRead(d *schema.ResourceData, meta interface{}) error
174222
_ = d.Set("create_time", info.createTime)
175223
_ = d.Set("charge_type", info.chargeType)
176224
_ = d.Set("bandwidth_limit_type", info.bandWithLimitType)
225+
_ = d.Set("route_ecmp_flag", info.ecmpFlag)
226+
_ = d.Set("route_overlap_flag", info.overlapFlag)
177227

178228
return nil
179229
})
@@ -197,34 +247,68 @@ func resourceTencentCloudCcnUpdate(d *schema.ResourceData, meta interface{}) err
197247
defer tccommon.LogElapsed("resource.tencentcloud_ccn.update")()
198248

199249
var (
200-
logId = tccommon.GetLogId(tccommon.ContextNil)
201-
ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId)
202-
service = VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()}
203-
name string
204-
description string
205-
change bool
250+
logId = tccommon.GetLogId(tccommon.ContextNil)
251+
ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId)
252+
service = VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()}
253+
change bool
206254
)
207255

256+
request := vpc.NewModifyCcnAttributeRequest()
257+
request.CcnId = helper.String(d.Id())
258+
208259
if d.HasChange("name") {
209-
name = d.Get("name").(string)
260+
if temp, ok := d.GetOk("name"); ok {
261+
request.CcnName = helper.String(temp.(string))
262+
}
263+
210264
change = true
211265
}
212266

213267
if d.HasChange("description") {
214268
if temp, ok := d.GetOk("description"); ok {
215-
description = temp.(string)
269+
request.CcnName = helper.String(temp.(string))
216270
}
217271

218-
if description == "" {
219-
return fmt.Errorf("can not set description='' ")
272+
change = true
273+
}
274+
275+
if d.HasChange("route_ecmp_flag") {
276+
if temp, ok := d.GetOkExists("route_ecmp_flag"); ok {
277+
request.RouteECMPFlag = helper.Bool(temp.(bool))
278+
}
279+
280+
change = true
281+
}
282+
283+
if d.HasChange("route_overlap_flag") {
284+
if temp, ok := d.GetOkExists("route_overlap_flag"); ok {
285+
request.RouteOverlapFlag = helper.Bool(temp.(bool))
220286
}
221287

222288
change = true
223289
}
224290

225291
d.Partial(true)
226292
if change {
227-
if err := service.ModifyCcnAttribute(ctx, d.Id(), name, description); err != nil {
293+
err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError {
294+
result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVpcClient().ModifyCcnAttribute(request)
295+
if e != nil {
296+
return tccommon.RetryError(e)
297+
} else {
298+
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
299+
}
300+
301+
if result == nil {
302+
e = fmt.Errorf("update ModifyCcnAttribute failed")
303+
return resource.NonRetryableError(e)
304+
}
305+
306+
_ = result
307+
return nil
308+
})
309+
310+
if err != nil {
311+
log.Printf("[CRITAL]%s update ModifyCcnAttribute failed, reason:%s\n", logId, err.Error())
228312
return err
229313
}
230314
}

tencentcloud/services/ccn/resource_tc_ccn.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ resource "tencentcloud_ccn" "example" {
1111
qos = "AG"
1212
charge_type = "PREPAID"
1313
bandwidth_limit_type = "INTER_REGION_LIMIT"
14+
route_ecmp_flag = true
15+
route_overlap_flag = true
1416
tags = {
1517
createBy = "terraform"
1618
}
@@ -26,6 +28,8 @@ resource "tencentcloud_ccn" "example" {
2628
qos = "AG"
2729
charge_type = "POSTPAID"
2830
bandwidth_limit_type = "OUTER_REGION_LIMIT"
31+
route_ecmp_flag = false
32+
route_overlap_flag = false
2933
tags = {
3034
createBy = "terraform"
3135
}

tencentcloud/services/ccn/service_tencentcloud_ccn.go

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@ type CcnBasicInfo struct {
2828
bandWithLimitType string
2929
instanceCount int64
3030
createTime string
31+
ecmpFlag bool
32+
overlapFlag bool
3133
}
3234

3335
type CcnInstanceBind struct {
@@ -205,6 +207,8 @@ getMoreData:
205207
basicInfo.state = *item.State
206208
basicInfo.chargeType = *item.InstanceChargeType
207209
basicInfo.bandWithLimitType = *item.BandwidthLimitType
210+
basicInfo.ecmpFlag = *item.RouteECMPFlag
211+
basicInfo.overlapFlag = *item.RouteOverlapFlag
208212

209213
if has[basicInfo.ccnId] {
210214
errRet = fmt.Errorf("get repeated ccn_id[%s] when doing DescribeCcns", basicInfo.ccnId)
@@ -354,7 +358,7 @@ func (me *VpcService) DeleteCcn(ctx context.Context, ccnId string) (errRet error
354358
return
355359
}
356360

357-
func (me *VpcService) ModifyCcnAttribute(ctx context.Context, ccnId, name, description string) (errRet error) {
361+
func (me *VpcService) ModifyCcnAttribute(ctx context.Context, ccnId, name, description string, ecmpFlag, overlapFlag bool) (errRet error) {
358362

359363
logId := tccommon.GetLogId(ctx)
360364
request := vpc.NewModifyCcnAttributeRequest()
@@ -363,9 +367,14 @@ func (me *VpcService) ModifyCcnAttribute(ctx context.Context, ccnId, name, descr
363367
if name != "" {
364368
request.CcnName = &name
365369
}
370+
366371
if description != "" {
367372
request.CcnDescription = &description
368373
}
374+
375+
request.RouteECMPFlag = &ecmpFlag
376+
request.RouteOverlapFlag = &overlapFlag
377+
369378
ratelimit.Check(request.GetAction())
370379
response, err := me.client.UseVpcClient().ModifyCcnAttribute(request)
371380

vendor/github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/http/request.go

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc/v20170312/client.go

Lines changed: 2 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc/v20170312/errors.go

Lines changed: 3 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)