Skip to content
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
4 changes: 2 additions & 2 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ require (
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/clb v1.0.283
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cloudaudit v1.0.199
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cls v1.0.377
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.397
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.398
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.385
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cynosdb v1.0.359
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dayu v1.0.335
Expand All @@ -57,7 +57,7 @@ require (
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tdmq v1.0.268
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tke v1.0.381
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vod v1.0.199
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc v1.0.392
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc v1.0.398
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/wss v1.0.199
github.com/tencentyun/cos-go-sdk-v5 v0.7.33
github.com/yangwenmai/ratelimit v0.0.0-20180104140304-44221c2292e1
Expand Down
4 changes: 4 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -487,6 +487,8 @@ github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.392 h1:Uqcm
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.392/go.mod h1:7sCQWVkxcsR38nffDW057DRGk8mUjK1Ing/EFOK8s8Y=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.397 h1:oYU+ghWYDEXSpU8aogzPYHiuZAI1291BMroSG0WKdAc=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.397/go.mod h1:7sCQWVkxcsR38nffDW057DRGk8mUjK1Ing/EFOK8s8Y=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.398 h1:+VbaPRPCKAplIvwj9oGEOTbZmYiEX9AeqaTCPqLzwS8=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.398/go.mod h1:7sCQWVkxcsR38nffDW057DRGk8mUjK1Ing/EFOK8s8Y=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.385 h1:8bwloRxRwSADSK48KxaUeO9JHmmgniNGJbA7Or/HUEk=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.385/go.mod h1:PMxA0L4o8Fbx/6+ju1cAMAU7x2bV4C6e/LTqVe745yM=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cynosdb v1.0.359 h1:cNKqelPgUxrJkLY0Azd2QHr/UMYOPPnmqs88clt2akk=
Expand Down Expand Up @@ -542,6 +544,8 @@ github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vod v1.0.199 h1:6Yt74l4
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vod v1.0.199/go.mod h1:Yw6OQ33z3s4k0HVYTNSffB12qOzEJ2Zf1Vj4+5S3sRs=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc v1.0.392 h1:nx8MQ8yJ3srpfEAlKLQKtOsBCBc30QJ3Q0RsSOGSphQ=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc v1.0.392/go.mod h1:IAl660UAxdUtp1rHUwbUwxFCVqwk61xAIRbBk6QtTy8=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc v1.0.398 h1:1JVKMl+yjZbntwAW0A6esjQI1/dXXqjQ9+OLai7ZS2w=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc v1.0.398/go.mod h1:+TD/TRnb5WrLcE2SL3db7ROOpwED5gBfbC19gaXnGxs=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/wss v1.0.199 h1:hMBLtiJPnZ9GvA677cTB6ELBR6B68wCR2QY1sNoGQc4=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/wss v1.0.199/go.mod h1:nnY91/H3j/Gu7V/oCA6Zeg8T5D3q36EUdBh4EjmHwqY=
github.com/tencentyun/cos-go-sdk-v5 v0.7.33 h1:5jmJU7U/1nf/7ZPDkrUL8KlF1oDUzTHsdtLNY6x0hq4=
Expand Down
3 changes: 2 additions & 1 deletion tencentcloud/resource_tc_mysql_readonly_instance.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,12 +28,13 @@ package tencentcloud
import (
"context"
"fmt"
"log"

"github.com/hashicorp/terraform-plugin-sdk/helper/resource"
"github.com/hashicorp/terraform-plugin-sdk/helper/schema"
cdb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdb/v20170320"
sdkError "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors"
"github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper"
"log"
)

func resourceTencentCloudMysqlReadonlyInstance() *schema.Resource {
Expand Down
2 changes: 1 addition & 1 deletion tencentcloud/resource_tc_route_entry.go
Original file line number Diff line number Diff line change
Expand Up @@ -147,7 +147,7 @@ func resourceTencentCloudRouteEntryCreate(d *schema.ResourceData, meta interface
return fmt.Errorf("The value of next_type is invalid")
}

_, err := service.CreateRoutes(ctx, routeTableId, destinationCidrBlock, routeTypeNewMap[nextType], nextHub, "")
_, err := service.CreateRoutes(ctx, routeTableId, destinationCidrBlock, routeTypeNewMap[nextType], nextHub, "", true)
if err != nil {
return err
}
Expand Down
57 changes: 56 additions & 1 deletion tencentcloud/resource_tc_route_table_entry.go
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,9 @@ import (
"strconv"
"strings"

vpc "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc/v20170312"
"github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper"

"github.com/hashicorp/terraform-plugin-sdk/helper/resource"
"github.com/hashicorp/terraform-plugin-sdk/helper/schema"
"github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors"
Expand All @@ -60,6 +63,7 @@ func resourceTencentCloudVpcRouteEntry() *schema.Resource {
return &schema.Resource{
Create: resourceTencentCloudVpcRouteEntryCreate,
Read: resourceTencentCloudVpcRouteEntryRead,
Update: resourceTencentCloudVpcRouteEntryUpdate,
Delete: resourceTencentCloudVpcRouteEntryDelete,
Importer: &schema.ResourceImporter{
State: schema.ImportStatePassthrough,
Expand Down Expand Up @@ -92,6 +96,12 @@ func resourceTencentCloudVpcRouteEntry() *schema.Resource {
ForceNew: true,
Description: "ID of next-hop gateway. Note: when `next_type` is EIP, GatewayId should be `0`.",
},
// Name enabled will lead to exist route table diff fail (null -> false cannot diff).
"disabled": {
Type: schema.TypeBool,
Optional: true,
Description: "Whether the entry is disabled, default is `false`.",
},
"description": {
Type: schema.TypeString,
Optional: true,
Expand All @@ -116,6 +126,7 @@ func resourceTencentCloudVpcRouteEntryCreate(d *schema.ResourceData, meta interf
destinationCidrBlock = ""
nextType = ""
nextHub = ""
disabled = false
)

if temp, ok := d.GetOk("description"); ok {
Expand All @@ -134,6 +145,10 @@ func resourceTencentCloudVpcRouteEntryCreate(d *schema.ResourceData, meta interf
nextHub = temp.(string)
}

if temp, ok := d.GetOk("disabled"); ok {
disabled = temp.(bool)
}

if routeTableId == "" || destinationCidrBlock == "" || nextType == "" || nextHub == "" {
return fmt.Errorf("some needed fields is empty string")
}
Expand All @@ -142,14 +157,25 @@ func resourceTencentCloudVpcRouteEntryCreate(d *schema.ResourceData, meta interf
return fmt.Errorf("if next_type is %s, next_hub can only be \"0\" ", GATE_WAY_TYPE_EIP)
}

entryId, err := service.CreateRoutes(ctx, routeTableId, destinationCidrBlock, nextType, nextHub, description)
// route cannot disable on create
entryId, err := service.CreateRoutes(ctx, routeTableId, destinationCidrBlock, nextType, nextHub, description, true)

if err != nil {
return err
}

d.SetId(fmt.Sprintf("%d.%s", entryId, routeTableId))

if disabled {
request := vpc.NewDisableRoutesRequest()
request.RouteTableId = &routeTableId
request.RouteIds = []*uint64{helper.Int64Uint64(entryId)}
err := service.DisableRoutes(ctx, request)
if err != nil {
return err
}
}

return nil
}

Expand Down Expand Up @@ -189,6 +215,8 @@ func resourceTencentCloudVpcRouteEntryRead(d *schema.ResourceData, meta interfac
_ = d.Set("destination_cidr_block", v.destinationCidr)
_ = d.Set("next_type", v.nextType)
_ = d.Set("next_hub", v.nextBub)

_ = d.Set("disabled", !v.enabled)
return nil
}
}
Expand All @@ -201,6 +229,33 @@ func resourceTencentCloudVpcRouteEntryRead(d *schema.ResourceData, meta interfac
return nil
}

func resourceTencentCloudVpcRouteEntryUpdate(d *schema.ResourceData, meta interface{}) error {
logId := getLogId(contextNil)
ctx := context.WithValue(context.TODO(), logIdKey, logId)
client := meta.(*TencentCloudClient).apiV3Conn
service := VpcService{client}

items := strings.Split(d.Id(), ".")
if len(items) != 2 {
return fmt.Errorf("entry id be destroyed, we can not get route table id")
}

id := items[0]
routeTableId := items[1]
routeEntryId, err := strconv.ParseUint(id, 10, 64)
if err != nil {
return fmt.Errorf("parse route entry id %s fail: %s", id, routeTableId)
}

if d.HasChange("disabled") {
disabled := d.Get("disabled").(bool)
if err := service.SwitchRouteEnabled(ctx, routeTableId, routeEntryId, !disabled); err != nil {
return err
}
}
return resourceTencentCloudVpcRouteEntryRead(d, meta)
}

func resourceTencentCloudVpcRouteEntryDelete(d *schema.ResourceData, meta interface{}) error {
defer logElapsed("resource.tencentcloud_route_table_entry.delete")()

Expand Down
79 changes: 76 additions & 3 deletions tencentcloud/resource_tc_route_table_entry_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package tencentcloud
import (
"context"
"fmt"
"log"
"strconv"
"strings"
"testing"
Expand All @@ -16,6 +17,7 @@ func TestAccTencentCloudVpcV3RouteEntryBasic(t *testing.T) {
t.Parallel()
resource.Test(t, resource.TestCase{
PreCheck: func() {
log.Printf("TF: \n%s", testAccVpcRouteEntryConfig)
testAccPreCheck(t)
},
Providers: testAccProviders,
Expand All @@ -33,9 +35,22 @@ func TestAccTencentCloudVpcV3RouteEntryBasic(t *testing.T) {
),
},
{
ResourceName: "tencentcloud_route_table_entry.foo",
ImportState: true,
ImportStateVerify: true,
Config: testAccVpcRouteEntryUpdate,
Check: resource.ComposeTestCheckFunc(
resource.TestCheckResourceAttr("tencentcloud_route_table_entry.foo", "disabled", "true"),
),
},
{
Config: testAccVpcRouteEntryUpdate2,
Check: resource.ComposeTestCheckFunc(
resource.TestCheckResourceAttr("tencentcloud_route_table_entry.foo", "disabled", "false"),
),
},
{
ResourceName: "tencentcloud_route_table_entry.foo",
ImportState: true,
ImportStateVerify: true,
ImportStateVerifyIgnore: []string{"enabled"},
},
},
})
Expand Down Expand Up @@ -157,3 +172,61 @@ resource "tencentcloud_route_table_entry" "foo" {
description = var.instance_name
}
`
const testAccVpcRouteEntryUpdate = defaultVpcVariable + `
resource "tencentcloud_vpc" "foo" {
name = var.instance_name
cidr_block = var.vpc_cidr
}

resource "tencentcloud_route_table" "foo" {
name = var.instance_name
vpc_id = tencentcloud_vpc.foo.id
}

resource "tencentcloud_subnet" "foo" {
name = var.instance_name
vpc_id = tencentcloud_vpc.foo.id
availability_zone = var.availability_zone
cidr_block = var.subnet_cidr
is_multicast = false
route_table_id = tencentcloud_route_table.foo.id
}

resource "tencentcloud_route_table_entry" "foo" {
route_table_id = tencentcloud_route_table.foo.id
destination_cidr_block = "10.0.0.0/24"
next_type = "EIP"
next_hub = "0"
description = var.instance_name
disabled = true
}
`
const testAccVpcRouteEntryUpdate2 = defaultVpcVariable + `
resource "tencentcloud_vpc" "foo" {
name = var.instance_name
cidr_block = var.vpc_cidr
}

resource "tencentcloud_route_table" "foo" {
name = var.instance_name
vpc_id = tencentcloud_vpc.foo.id
}

resource "tencentcloud_subnet" "foo" {
name = var.instance_name
vpc_id = tencentcloud_vpc.foo.id
availability_zone = var.availability_zone
cidr_block = var.subnet_cidr
is_multicast = false
route_table_id = tencentcloud_route_table.foo.id
}

resource "tencentcloud_route_table_entry" "foo" {
route_table_id = tencentcloud_route_table.foo.id
destination_cidr_block = "10.0.0.0/24"
next_type = "EIP"
next_hub = "0"
description = var.instance_name
disabled = false
}
`
63 changes: 62 additions & 1 deletion tencentcloud/service_tencentcloud_vpc.go
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@ type VpcRouteEntryBasicInfo struct {
nextBub string
description string
entryType string
enabled bool
}

// route table basic information
Expand Down Expand Up @@ -812,6 +813,7 @@ getMoreData:
entry.description = *v.RouteDescription
entry.routeEntryId = int64(*v.RouteId)
entry.entryType = *v.RouteType
entry.enabled = *v.Enabled
basicInfo.entryInfos = append(basicInfo.entryInfos, entry)
}
if hasTableMap[basicInfo.routeTableId] {
Expand Down Expand Up @@ -985,7 +987,7 @@ func (me *VpcService) DeleteRoutes(ctx context.Context, routeTableId string, ent
}

func (me *VpcService) CreateRoutes(ctx context.Context,
routeTableId, destinationCidrBlock, nextType, nextHub, description string) (entryId int64, errRet error) {
routeTableId, destinationCidrBlock, nextType, nextHub, description string, enabled bool) (entryId int64, errRet error) {

logId := getLogId(ctx)
request := vpc.NewCreateRoutesRequest()
Expand All @@ -1006,6 +1008,7 @@ func (me *VpcService) CreateRoutes(ctx context.Context,
route.RouteDescription = &description
route.GatewayType = &nextType
route.GatewayId = &nextHub
route.Enabled = &enabled
request.Routes = []*vpc.Route{&route}
ratelimit.Check(request.GetAction())
response, err := me.client.UseVpcClient().CreateRoutes(request)
Expand Down Expand Up @@ -1051,6 +1054,64 @@ func (me *VpcService) CreateRoutes(ctx context.Context,
return
}

func (me *VpcService) SwitchRouteEnabled(ctx context.Context, routeTableId string, routeId uint64, enabled bool) error {
if enabled {
request := vpc.NewEnableRoutesRequest()
request.RouteTableId = &routeTableId
request.RouteIds = []*uint64{&routeId}
return me.EnableRoutes(ctx, request)
} else {
request := vpc.NewDisableRoutesRequest()
request.RouteTableId = &routeTableId
request.RouteIds = []*uint64{&routeId}
return me.DisableRoutes(ctx, request)
}
}

func (me *VpcService) EnableRoutes(ctx context.Context, request *vpc.EnableRoutesRequest) (errRet error) {
logId := getLogId(ctx)
defer func() {
if errRet != nil {
log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n",
logId, request.GetAction(), request.ToJsonString(), errRet.Error())
}
}()

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

if err != nil {
errRet = err
return
}

log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n",
logId, request.GetAction(), request.ToJsonString(), response.ToJsonString())

return
}
func (me *VpcService) DisableRoutes(ctx context.Context, request *vpc.DisableRoutesRequest) (errRet error) {
logId := getLogId(ctx)
defer func() {
if errRet != nil {
log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n",
logId, request.GetAction(), request.ToJsonString(), errRet.Error())
}
}()

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

if err != nil {
errRet = err
return
}

log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n",
logId, request.GetAction(), request.ToJsonString(), response.ToJsonString())

return
}
func (me *VpcService) CreateSecurityGroup(ctx context.Context, name, desc string, projectId *int) (id string, err error) {
logId := getLogId(ctx)

Expand Down

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

Loading