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
2 changes: 2 additions & 0 deletions tencentcloud/provider.go
Original file line number Diff line number Diff line change
Expand Up @@ -723,6 +723,7 @@ VPN Connections(VPN)
tencentcloud_vpn_connection_reset
tencentcloud_vpn_customer_gateway_configuration_download
tencentcloud_vpn_gateway_ssl_client_cert
tencentcloud_vpn_gateway_ccn_routes

MapReduce(EMR)
Data Source
Expand Down Expand Up @@ -1494,6 +1495,7 @@ func Provider() terraform.ResourceProvider {
"tencentcloud_vpn_connection_reset": resourceTencentCloudVpnConnectionReset(),
"tencentcloud_vpn_customer_gateway_configuration_download": resourceTencentCloudVpnCustomerGatewayConfigurationDownload(),
"tencentcloud_vpn_gateway_ssl_client_cert": resourceTencentCloudVpnGatewaySslClientCert(),
"tencentcloud_vpn_gateway_ccn_routes": resourceTencentCloudVpnGatewayCcnRoutes(),
"tencentcloud_ha_vip": resourceTencentCloudHaVip(),
"tencentcloud_ha_vip_eip_attachment": resourceTencentCloudHaVipEipAttachment(),
"tencentcloud_security_group": resourceTencentCloudSecurityGroup(),
Expand Down
177 changes: 177 additions & 0 deletions tencentcloud/resource_tc_vpn_gateway_ccn_routes.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,177 @@
/*
Provides a resource to create a vpn_gateway_ccn_routes

Example Usage

```hcl
resource "tencentcloud_vpn_gateway_ccn_routes" "vpn_gateway_ccn_routes" {
destination_cidr_block = "192.168.1.0/24"
route_id = "vpnr-akdy0757"
status = "DISABLE"
vpn_gateway_id = "vpngw-lie1a4u7"
}

```

Import

vpc vpn_gateway_ccn_routes can be imported using the id, e.g.

```
terraform import tencentcloud_vpn_gateway_ccn_routes.vpn_gateway_ccn_routes vpn_gateway_id#ccn_routes_id
```
*/
package tencentcloud

import (
"context"
"fmt"
"log"
"strings"

"github.com/hashicorp/terraform-plugin-sdk/helper/resource"
"github.com/hashicorp/terraform-plugin-sdk/helper/schema"
vpc "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc/v20170312"
"github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper"
)

func resourceTencentCloudVpnGatewayCcnRoutes() *schema.Resource {
return &schema.Resource{
Create: resourceTencentCloudVpnGatewayCcnRoutesCreate,
Read: resourceTencentCloudVpnGatewayCcnRoutesRead,
Update: resourceTencentCloudVpnGatewayCcnRoutesUpdate,
Delete: resourceTencentCloudVpnGatewayCcnRoutesDelete,
Importer: &schema.ResourceImporter{
State: schema.ImportStatePassthrough,
},
Schema: map[string]*schema.Schema{
"vpn_gateway_id": {
Required: true,
ForceNew: true,
Type: schema.TypeString,
Description: "VPN GATEWAY INSTANCE ID.",
},
"route_id": {
Type: schema.TypeString,
ForceNew: true,
Required: true,
Description: "Route Id.",
},
"status": {
Type: schema.TypeString,
Required: true,
Description: "Whether routing information is enabled. `ENABLE`: Enable Route, `DISABLE`: Disable Route.",
},
"destination_cidr_block": {
Type: schema.TypeString,
Required: true,
ForceNew: true,
Description: "Routing CIDR.",
},
},
}
}

func resourceTencentCloudVpnGatewayCcnRoutesCreate(d *schema.ResourceData, meta interface{}) error {
defer logElapsed("resource.tencentcloud_vpn_gateway_ccn_routes.create")()
defer inconsistentCheck(d, meta)()

var (
vpnGwId string
routeId string
)

if v, ok := d.GetOk("vpn_gateway_id"); ok {
vpnGwId = v.(string)
}

if v, ok := d.GetOk("route_id"); ok {
routeId = v.(string)
}

d.SetId(vpnGwId + FILED_SP + routeId)

return resourceTencentCloudVpnGatewayCcnRoutesUpdate(d, meta)
}

func resourceTencentCloudVpnGatewayCcnRoutesRead(d *schema.ResourceData, meta interface{}) error {
defer logElapsed("resource.tencentcloud_vpn_gateway_ccn_routes.read")()
defer inconsistentCheck(d, meta)()

logId := getLogId(contextNil)

ctx := context.WithValue(context.TODO(), logIdKey, logId)

service := VpcService{client: meta.(*TencentCloudClient).apiV3Conn}

idSplit := strings.Split(d.Id(), FILED_SP)
if len(idSplit) != 2 {
return fmt.Errorf("id is broken,%s", d.Id())
}
vpnGatewayId := idSplit[0]
routeId := idSplit[1]

vpnGatewayCcnRoutes, err := service.DescribeVpcVpnGatewayCcnRoutesById(ctx, vpnGatewayId, routeId)
if err != nil {
return err
}

if vpnGatewayCcnRoutes == nil {
d.SetId("")
log.Printf("[WARN]%s resource `VpcVpnGatewayCcnRoutes` [%s] not found, please check if it has been deleted.\n", logId, d.Id())
return nil
}

_ = d.Set("vpn_gateway_id", vpnGatewayId)
_ = d.Set("route_id", vpnGatewayCcnRoutes.RouteId)
_ = d.Set("status", vpnGatewayCcnRoutes.Status)
_ = d.Set("destination_cidr_block", vpnGatewayCcnRoutes.DestinationCidrBlock)

return nil
}

func resourceTencentCloudVpnGatewayCcnRoutesUpdate(d *schema.ResourceData, meta interface{}) error {
defer logElapsed("resource.tencentcloud_vpn_gateway_ccn_routes.update")()
defer inconsistentCheck(d, meta)()

logId := getLogId(contextNil)

request := vpc.NewModifyVpnGatewayCcnRoutesRequest()

idSplit := strings.Split(d.Id(), FILED_SP)
if len(idSplit) != 2 {
return fmt.Errorf("id is broken,%s", d.Id())
}
vpnGatewayId := idSplit[0]
routeId := idSplit[1]

request.VpnGatewayId = &vpnGatewayId
route := vpc.VpngwCcnRoutes{}
route.RouteId = &routeId
route.Status = helper.String(d.Get("status").(string))
route.DestinationCidrBlock = helper.String(d.Get("destination_cidr_block").(string))
request.Routes = append(request.Routes, &route)

err := resource.Retry(writeRetryTimeout, func() *resource.RetryError {
result, e := meta.(*TencentCloudClient).apiV3Conn.UseVpcClient().ModifyVpnGatewayCcnRoutes(request)
if e != nil {
return retryError(e)
} else {
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
}
return nil
})
if err != nil {
log.Printf("[CRITAL]%s update vpnGatewayCcnRoutes failed, reason:%+v", logId, err)
return err
}

return resourceTencentCloudVpnGatewayCcnRoutesRead(d, meta)
}

func resourceTencentCloudVpnGatewayCcnRoutesDelete(d *schema.ResourceData, meta interface{}) error {
defer logElapsed("resource.tencentcloud_vpn_gateway_ccn_routes.delete")()
defer inconsistentCheck(d, meta)()

return nil
}
39 changes: 39 additions & 0 deletions tencentcloud/resource_tc_vpn_gateway_ccn_routes_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
package tencentcloud

import (
"testing"

"github.com/hashicorp/terraform-plugin-sdk/helper/resource"
)

func TestAccTencentCloudNeedFixVpnGatewayCcnRoutesResource_basic(t *testing.T) {
t.Parallel()
resource.Test(t, resource.TestCase{
PreCheck: func() {
testAccPreCheck(t)
},
Providers: testAccProviders,
Steps: []resource.TestStep{
{
Config: testAccVpcVpnGatewayCcnRoutes,
Check: resource.ComposeTestCheckFunc(resource.TestCheckResourceAttrSet("tencentcloud_vpn_gateway_ccn_routes.vpn_gateway_ccn_routes", "id")),
},
{
ResourceName: "tencentcloud_vpn_gateway_ccn_routes.vpn_gateway_ccn_routes",
ImportState: true,
ImportStateVerify: true,
},
},
})
}

const testAccVpcVpnGatewayCcnRoutes = `

resource "tencentcloud_vpn_gateway_ccn_routes" "vpn_gateway_ccn_routes" {
destination_cidr_block = "192.168.1.0/24"
route_id = "vpnr-akdy0757"
status = "DISABLE"
vpn_gateway_id = "vpngw-lie1a4u7"
}

`
34 changes: 34 additions & 0 deletions tencentcloud/service_tencentcloud_vpc.go
Original file line number Diff line number Diff line change
Expand Up @@ -6052,3 +6052,37 @@ func (me *VpcService) DescribeVpnCustomerGatewayVendors(ctx context.Context) (vp
vpnCustomerGatewayVendors = response.Response.CustomerGatewayVendorSet
return
}

func (me *VpcService) DescribeVpcVpnGatewayCcnRoutesById(ctx context.Context, vpnGatewayId string, routeId string) (vpnGatewayCcnRoutes *vpc.VpngwCcnRoutes, errRet error) {
logId := getLogId(ctx)

request := vpc.NewDescribeVpnGatewayCcnRoutesRequest()
request.VpnGatewayId = &vpnGatewayId

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().DescribeVpnGatewayCcnRoutes(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())

if len(response.Response.RouteSet) < 1 {
return
}

for _, route := range response.Response.RouteSet {
if *route.RouteId == routeId {
vpnGatewayCcnRoutes = route
break
}
}
return
}
49 changes: 49 additions & 0 deletions website/docs/r/vpn_gateway_ccn_routes.html.markdown
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
---
subcategory: "VPN Connections(VPN)"
layout: "tencentcloud"
page_title: "TencentCloud: tencentcloud_vpn_gateway_ccn_routes"
sidebar_current: "docs-tencentcloud-resource-vpn_gateway_ccn_routes"
description: |-
Provides a resource to create a vpn_gateway_ccn_routes
---

# tencentcloud_vpn_gateway_ccn_routes

Provides a resource to create a vpn_gateway_ccn_routes

## Example Usage

```hcl
resource "tencentcloud_vpn_gateway_ccn_routes" "vpn_gateway_ccn_routes" {
destination_cidr_block = "192.168.1.0/24"
route_id = "vpnr-akdy0757"
status = "DISABLE"
vpn_gateway_id = "vpngw-lie1a4u7"
}
```

## Argument Reference

The following arguments are supported:

* `destination_cidr_block` - (Required, String, ForceNew) Routing CIDR.
* `route_id` - (Required, String, ForceNew) Route Id.
* `status` - (Required, String) Whether routing information is enabled. `ENABLE`: Enable Route, `DISABLE`: Disable Route.
* `vpn_gateway_id` - (Required, String, ForceNew) VPN GATEWAY INSTANCE ID.

## Attributes Reference

In addition to all arguments above, the following attributes are exported:

* `id` - ID of the resource.



## Import

vpc vpn_gateway_ccn_routes can be imported using the id, e.g.

```
terraform import tencentcloud_vpn_gateway_ccn_routes.vpn_gateway_ccn_routes vpn_gateway_id#ccn_routes_id
```

3 changes: 3 additions & 0 deletions website/tencentcloud.erb
Original file line number Diff line number Diff line change
Expand Up @@ -2931,6 +2931,9 @@
<li>
<a href="/docs/providers/tencentcloud/r/vpn_gateway.html">tencentcloud_vpn_gateway</a>
</li>
<li>
<a href="/docs/providers/tencentcloud/r/vpn_gateway_ccn_routes.html">tencentcloud_vpn_gateway_ccn_routes</a>
</li>
<li>
<a href="/docs/providers/tencentcloud/r/vpn_gateway_route.html">tencentcloud_vpn_gateway_route</a>
</li>
Expand Down