Skip to content

fix(ccn): [118696791] CCN instance support route_ecmp_flag and route_overlap_flag #2746

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
Jul 26, 2024
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/2746.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
```release-note:enhancement
resource/tencentcloud_ccn: support route_ecmp_flag and route_overlap_flag
```
4 changes: 2 additions & 2 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ require (
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/clb v1.0.961
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cloudaudit v1.0.544
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cls v1.0.970
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.970
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.971
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.960
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cwp v1.0.762
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cynosdb v1.0.692
Expand Down Expand Up @@ -96,7 +96,7 @@ require (
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tse v1.0.857
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tsf v1.0.674
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vod v1.0.860
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc v1.0.964
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc v1.0.971
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/waf v1.0.833
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/wedata v1.0.792
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/wss v1.0.199
Expand Down
14 changes: 8 additions & 6 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -956,20 +956,20 @@ github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.955 h1:kr5K
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.955/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.958 h1:WoN2lhvQVTFnY4woYvpQKRzdHeEiB+m9lsHC3TOFdXQ=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.958/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.960 h1:hde8uWA3624nGUvC8QPf9njcyBZ7A9weqscRrqyM1Rk=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.960/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.963 h1:lUVCMP5eiSHc2HGfSVc07Tytn4p6DklJkKldObRvJrU=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.963/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.964 h1:ET3EulYQvWrdD5FNwOP+196w5Vbniy/uRGucM5ILExQ=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.964/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.959 h1:GZUqSDQkttkhH2hxWNj5apDo1/YhQwML0Q68wW60LSA=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.959/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.960 h1:hde8uWA3624nGUvC8QPf9njcyBZ7A9weqscRrqyM1Rk=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.960/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.961 h1:UqinjIsO+Y48BQYSxrD6aHQe8SD+Wsbvj+jU9V9VvWM=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.961/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.963 h1:lUVCMP5eiSHc2HGfSVc07Tytn4p6DklJkKldObRvJrU=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.963/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.964 h1:ET3EulYQvWrdD5FNwOP+196w5Vbniy/uRGucM5ILExQ=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.964/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.970 h1:IsF+IWWOfzhbyxP1jFYU3w4kZXWfDH4QaNLXgIy3Sgg=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.970/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.971 h1:T5zEH1QM1XX+hJoAe4krnSjrnsTgHv1KfGC4Sos0Y4M=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.971/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/csip v1.0.860 h1:F3esKBIT3HW9+7Gt8cVgf8X06VdGIczpgLBUECzSEzU=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/csip v1.0.860/go.mod h1:NZo1WplQcC314kMlCRUoy8NQju2BnolIJj7NAWgsuhY=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.624 h1:nEZqsoqt1pEoaP9JjkHQy3/H00suCfzlHW1qOm2nYD8=
Expand Down Expand Up @@ -1116,6 +1116,8 @@ github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc v1.0.963 h1:6Hl5u9j
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc v1.0.963/go.mod h1:I/v4TeM6kXoYesJ67MpDqJMRLDEypA4c0QjZBYwaka8=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc v1.0.964 h1:+HsB7iMFYfDAYD0Xoj1tBsqLT1R6h/94DiooYJnorr8=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc v1.0.964/go.mod h1:ohfNiTUrMTR50FAUe4wALZVYa1404YQvYB57pvVVADM=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc v1.0.971 h1:eQsRAk1n6z4du93ebKe1XyQpTELY0YIJ4Y7jvMLdNNg=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc v1.0.971/go.mod h1:QpI0wEhuqhVI3jZbakGNzsJlt7YJdB8rqY9b/SI+NMM=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/waf v1.0.833 h1:avaBlZ+Qqv7bfMg/u0jlRsbEBbE18CfqKWbfGc84PLg=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/waf v1.0.833/go.mod h1:fUWG217b//46Oa3VXxC5mgeYeewVAbF+lc81uET89EM=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/wedata v1.0.792 h1:NLgKNOIHWa38AmW7dyfI9Jlcp2Kr9VRD94f48pPNmxM=
Expand Down
106 changes: 95 additions & 11 deletions tencentcloud/services/ccn/resource_tc_ccn.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,11 @@ package ccn
import (
"context"
"fmt"
"log"
"strings"

vpc "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc/v20170312"

tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common"
svctag "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tag"

Expand Down Expand Up @@ -67,6 +70,18 @@ func ResourceTencentCloudCcn() *schema.Resource {
"`INTER_REGION_LIMIT` is the inter-regional speed limit. " +
"The default is `OUTER_REGION_LIMIT`.",
},
"route_ecmp_flag": {
Type: schema.TypeBool,
Optional: true,
Default: false,
Description: "Whether to enable the equivalent routing function. `true`: enabled, `false`: disabled.",
},
"route_overlap_flag": {
Type: schema.TypeBool,
Optional: true,
Default: false,
Description: "Whether to enable the routing overlap function. `true`: enabled, `false`: disabled.",
},
"tags": {
Type: schema.TypeMap,
Optional: true,
Expand Down Expand Up @@ -142,6 +157,39 @@ func resourceTencentCloudCcnCreate(d *schema.ResourceData, meta interface{}) err
}
}

// set ECMP/Overlap
request := vpc.NewModifyCcnAttributeRequest()
request.CcnId = &info.ccnId
if temp, ok := d.GetOkExists("route_ecmp_flag"); ok {
request.RouteECMPFlag = helper.Bool(temp.(bool))
}

if temp, ok := d.GetOkExists("route_overlap_flag"); ok {
request.RouteOverlapFlag = helper.Bool(temp.(bool))
}

err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError {
result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVpcClient().ModifyCcnAttribute(request)
if e != nil {
return tccommon.RetryError(e)
} else {
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
}

if result == nil {
e = fmt.Errorf("update ModifyCcnAttribute failed")
return resource.NonRetryableError(e)
}

_ = result
return nil
})

if err != nil {
log.Printf("[CRITAL]%s update ModifyCcnAttribute failed, reason:%s\n", logId, err.Error())
return err
}

return resourceTencentCloudCcnRead(d, meta)
}

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

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

var (
logId = tccommon.GetLogId(tccommon.ContextNil)
ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId)
service = VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()}
name string
description string
change bool
logId = tccommon.GetLogId(tccommon.ContextNil)
ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId)
service = VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()}
change bool
)

request := vpc.NewModifyCcnAttributeRequest()
request.CcnId = helper.String(d.Id())

if d.HasChange("name") {
name = d.Get("name").(string)
if temp, ok := d.GetOk("name"); ok {
request.CcnName = helper.String(temp.(string))
}

change = true
}

if d.HasChange("description") {
if temp, ok := d.GetOk("description"); ok {
description = temp.(string)
request.CcnName = helper.String(temp.(string))
}

if description == "" {
return fmt.Errorf("can not set description='' ")
change = true
}

if d.HasChange("route_ecmp_flag") {
if temp, ok := d.GetOkExists("route_ecmp_flag"); ok {
request.RouteECMPFlag = helper.Bool(temp.(bool))
}

change = true
}

if d.HasChange("route_overlap_flag") {
if temp, ok := d.GetOkExists("route_overlap_flag"); ok {
request.RouteOverlapFlag = helper.Bool(temp.(bool))
}

change = true
}

d.Partial(true)
if change {
if err := service.ModifyCcnAttribute(ctx, d.Id(), name, description); err != nil {
err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError {
result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVpcClient().ModifyCcnAttribute(request)
if e != nil {
return tccommon.RetryError(e)
} else {
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
}

if result == nil {
e = fmt.Errorf("update ModifyCcnAttribute failed")
return resource.NonRetryableError(e)
}

_ = result
return nil
})

if err != nil {
log.Printf("[CRITAL]%s update ModifyCcnAttribute failed, reason:%s\n", logId, err.Error())
return err
}
}
Expand Down
4 changes: 4 additions & 0 deletions tencentcloud/services/ccn/resource_tc_ccn.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@ resource "tencentcloud_ccn" "example" {
qos = "AG"
charge_type = "PREPAID"
bandwidth_limit_type = "INTER_REGION_LIMIT"
route_ecmp_flag = true
route_overlap_flag = true
tags = {
createBy = "terraform"
}
Expand All @@ -26,6 +28,8 @@ resource "tencentcloud_ccn" "example" {
qos = "AG"
charge_type = "POSTPAID"
bandwidth_limit_type = "OUTER_REGION_LIMIT"
route_ecmp_flag = false
route_overlap_flag = false
tags = {
createBy = "terraform"
}
Expand Down
11 changes: 10 additions & 1 deletion tencentcloud/services/ccn/service_tencentcloud_ccn.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,8 @@ type CcnBasicInfo struct {
bandWithLimitType string
instanceCount int64
createTime string
ecmpFlag bool
overlapFlag bool
}

type CcnInstanceBind struct {
Expand Down Expand Up @@ -205,6 +207,8 @@ getMoreData:
basicInfo.state = *item.State
basicInfo.chargeType = *item.InstanceChargeType
basicInfo.bandWithLimitType = *item.BandwidthLimitType
basicInfo.ecmpFlag = *item.RouteECMPFlag
basicInfo.overlapFlag = *item.RouteOverlapFlag

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

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

logId := tccommon.GetLogId(ctx)
request := vpc.NewModifyCcnAttributeRequest()
Expand All @@ -363,9 +367,14 @@ func (me *VpcService) ModifyCcnAttribute(ctx context.Context, ccnId, name, descr
if name != "" {
request.CcnName = &name
}

if description != "" {
request.CcnDescription = &description
}

request.RouteECMPFlag = &ecmpFlag
request.RouteOverlapFlag = &overlapFlag

ratelimit.Check(request.GetAction())
response, err := me.client.UseVpcClient().ModifyCcnAttribute(request)

Expand Down

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading
Loading