Skip to content

Commit a54c43e

Browse files
authored
feat(vpc): [122289664] add new resource (#3217)
* add * add * add
1 parent 11ba824 commit a54c43e

11 files changed

+362
-0
lines changed

.changelog/3217.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
```release-note:new-resource
2+
tencentcloud_route_table_entry_config
3+
```

tencentcloud/provider.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1213,6 +1213,7 @@ func Provider() *schema.Provider {
12131213
"tencentcloud_subnet": vpc.ResourceTencentCloudVpcSubnet(),
12141214
"tencentcloud_route_entry": vpc.ResourceTencentCloudRouteEntry(),
12151215
"tencentcloud_route_table_entry": vpc.ResourceTencentCloudVpcRouteEntry(),
1216+
"tencentcloud_route_table_entry_config": vpc.ResourceTencentCloudRouteTableEntryConfig(),
12161217
"tencentcloud_route_table": vpc.ResourceTencentCloudVpcRouteTable(),
12171218
"tencentcloud_route_table_association": vpc.ResourceTencentCloudRouteTableAssociation(),
12181219
"tencentcloud_dnat": vpc.ResourceTencentCloudDnat(),

tencentcloud/provider.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1283,6 +1283,7 @@ tencentcloud_vpc_private_nat_gateway
12831283
tencentcloud_route_table_association
12841284
tencentcloud_route_entry
12851285
tencentcloud_route_table_entry
1286+
tencentcloud_route_table_entry_config
12861287
tencentcloud_dnat
12871288
tencentcloud_nat_gateway
12881289
tencentcloud_nat_gateway_snat

tencentcloud/services/vpc/resource_tc_route_table_entry.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ func ResourceTencentCloudVpcRouteEntry() *schema.Resource {
5858
"disabled": {
5959
Type: schema.TypeBool,
6060
Optional: true,
61+
Computed: true,
6162
Description: "Whether the entry is disabled, default is `false`.",
6263
},
6364
"description": {

tencentcloud/services/vpc/resource_tc_route_table_entry.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
Provides a resource to create an entry of a routing table.
22

3+
~> **NOTE:** When setting the route item switch, do not use it together with resource `tencentcloud_route_table_entry_config`.
4+
35
Example Usage
46

57
```hcl
Lines changed: 195 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,195 @@
1+
package vpc
2+
3+
import (
4+
"context"
5+
"fmt"
6+
"log"
7+
"strings"
8+
9+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
10+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
11+
vpc "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc/v20170312"
12+
13+
tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common"
14+
"github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper"
15+
)
16+
17+
func ResourceTencentCloudRouteTableEntryConfig() *schema.Resource {
18+
return &schema.Resource{
19+
Create: resourceTencentCloudRouteTableEntryConfigCreate,
20+
Read: resourceTencentCloudRouteTableEntryConfigRead,
21+
Update: resourceTencentCloudRouteTableEntryConfigUpdate,
22+
Delete: resourceTencentCloudRouteTableEntryConfigDelete,
23+
Importer: &schema.ResourceImporter{
24+
State: schema.ImportStatePassthrough,
25+
},
26+
Schema: map[string]*schema.Schema{
27+
"route_table_id": {
28+
Type: schema.TypeString,
29+
Required: true,
30+
ForceNew: true,
31+
Description: "Route table ID.",
32+
},
33+
34+
"route_item_id": {
35+
Type: schema.TypeString,
36+
Required: true,
37+
ForceNew: true,
38+
Description: "ID of route table entry.",
39+
},
40+
41+
"disabled": {
42+
Type: schema.TypeBool,
43+
Required: true,
44+
Description: "Whether the entry is disabled.",
45+
},
46+
},
47+
}
48+
}
49+
50+
func resourceTencentCloudRouteTableEntryConfigCreate(d *schema.ResourceData, meta interface{}) error {
51+
defer tccommon.LogElapsed("resource.tencentcloud_route_table_entry_config.create")()
52+
defer tccommon.InconsistentCheck(d, meta)()
53+
54+
var (
55+
routeTableId string
56+
routeItemId string
57+
)
58+
59+
if v, ok := d.GetOk("route_table_id"); ok {
60+
routeTableId = v.(string)
61+
}
62+
63+
if v, ok := d.GetOk("route_item_id"); ok {
64+
routeItemId = v.(string)
65+
}
66+
67+
d.SetId(strings.Join([]string{routeTableId, routeItemId}, tccommon.FILED_SP))
68+
69+
return resourceTencentCloudRouteTableEntryConfigUpdate(d, meta)
70+
}
71+
72+
func resourceTencentCloudRouteTableEntryConfigRead(d *schema.ResourceData, meta interface{}) error {
73+
defer tccommon.LogElapsed("resource.tencentcloud_route_table_entry_config.read")()
74+
defer tccommon.InconsistentCheck(d, meta)()
75+
76+
var (
77+
logId = tccommon.GetLogId(tccommon.ContextNil)
78+
ctx = tccommon.NewResourceLifeCycleHandleFuncContext(context.Background(), logId, d, meta)
79+
service = VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()}
80+
)
81+
82+
items := strings.Split(d.Id(), tccommon.FILED_SP)
83+
if len(items) < 2 {
84+
return fmt.Errorf("id is broken,%s", d.Id())
85+
}
86+
87+
routeTableId := items[0]
88+
routeItemId := items[1]
89+
err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError {
90+
info, has, e := service.DescribeRouteTable(ctx, routeTableId)
91+
if e != nil {
92+
return tccommon.RetryError(e)
93+
}
94+
95+
if has == 0 {
96+
d.SetId("")
97+
return nil
98+
}
99+
100+
if has != 1 {
101+
e = fmt.Errorf("one routeTable id get %d routeTable infos", has)
102+
return resource.NonRetryableError(e)
103+
}
104+
105+
for _, v := range info.entryInfos {
106+
if v.routeItemId == routeItemId {
107+
_ = d.Set("route_table_id", routeTableId)
108+
_ = d.Set("route_item_id", routeItemId)
109+
_ = d.Set("disabled", !v.enabled)
110+
return nil
111+
}
112+
}
113+
114+
d.SetId("")
115+
return nil
116+
})
117+
118+
if err != nil {
119+
return err
120+
}
121+
122+
return nil
123+
}
124+
125+
func resourceTencentCloudRouteTableEntryConfigUpdate(d *schema.ResourceData, meta interface{}) error {
126+
defer tccommon.LogElapsed("resource.tencentcloud_route_table_entry_config.update")()
127+
defer tccommon.InconsistentCheck(d, meta)()
128+
129+
var (
130+
logId = tccommon.GetLogId(tccommon.ContextNil)
131+
ctx = tccommon.NewResourceLifeCycleHandleFuncContext(context.Background(), logId, d, meta)
132+
disabled bool
133+
)
134+
135+
items := strings.Split(d.Id(), tccommon.FILED_SP)
136+
if len(items) < 2 {
137+
return fmt.Errorf("id is broken,%s", d.Id())
138+
}
139+
140+
routeTableId := items[0]
141+
routeItemId := items[1]
142+
143+
if v, ok := d.GetOkExists("disabled"); ok {
144+
disabled = v.(bool)
145+
}
146+
147+
if disabled {
148+
request := vpc.NewDisableRoutesRequest()
149+
request.RouteTableId = &routeTableId
150+
request.RouteItemIds = helper.Strings([]string{routeItemId})
151+
err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError {
152+
result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVpcClient().DisableRoutesWithContext(ctx, request)
153+
if e != nil {
154+
return tccommon.RetryError(e)
155+
} else {
156+
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
157+
}
158+
159+
return nil
160+
})
161+
162+
if err != nil {
163+
log.Printf("[CRITAL]%s disable route table entry config failed, reason:%+v", logId, err)
164+
return err
165+
}
166+
} else {
167+
request := vpc.NewEnableRoutesRequest()
168+
request.RouteTableId = &routeTableId
169+
request.RouteItemIds = helper.Strings([]string{routeItemId})
170+
err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError {
171+
result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVpcClient().EnableRoutesWithContext(ctx, request)
172+
if e != nil {
173+
return tccommon.RetryError(e)
174+
} else {
175+
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
176+
}
177+
178+
return nil
179+
})
180+
181+
if err != nil {
182+
log.Printf("[CRITAL]%s enable route table entry config failed, reason:%+v", logId, err)
183+
return err
184+
}
185+
}
186+
187+
return resourceTencentCloudRouteTableEntryConfigRead(d, meta)
188+
}
189+
190+
func resourceTencentCloudRouteTableEntryConfigDelete(d *schema.ResourceData, meta interface{}) error {
191+
defer tccommon.LogElapsed("resource.tencentcloud_route_table_entry_config.delete")()
192+
defer tccommon.InconsistentCheck(d, meta)()
193+
194+
return nil
195+
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
Provides a resource to create a vpc route table entry config
2+
3+
~> **NOTE:** When setting the route item switch, do not use it together with resource `tencentcloud_route_table_entry`.
4+
5+
Example Usage
6+
7+
Enable route item
8+
9+
```hcl
10+
resource "tencentcloud_route_table_entry_config" "example" {
11+
route_table_id = "rtb-8425lgjy"
12+
route_item_id = "rti-4f6efqwn"
13+
disabled = false
14+
}
15+
```
16+
17+
Disable route item
18+
19+
```hcl
20+
resource "tencentcloud_route_table_entry_config" "example" {
21+
route_table_id = "rtb-8425lgjy"
22+
route_item_id = "rti-4f6efqwn"
23+
disabled = true
24+
}
25+
```
26+
27+
Import
28+
29+
vpc route table entry config can be imported using the id, e.g.
30+
31+
```
32+
terraform import tencentcloud_route_table_entry_config.example rtb-8425lgjy#rti-4f6efqwn
33+
```
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
package vpc_test
2+
3+
import (
4+
"testing"
5+
6+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
7+
8+
tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest"
9+
)
10+
11+
func TestAccTencentCloudRouteTableEntryConfigResource_basic(t *testing.T) {
12+
t.Parallel()
13+
resource.Test(t, resource.TestCase{
14+
PreCheck: func() {
15+
tcacctest.AccPreCheck(t)
16+
},
17+
Providers: tcacctest.AccProviders,
18+
Steps: []resource.TestStep{
19+
{
20+
Config: testAccRouteTableEntryConfig,
21+
Check: resource.ComposeTestCheckFunc(
22+
resource.TestCheckResourceAttrSet("tencentcloud_route_table_entry_config.example", "id"),
23+
resource.TestCheckResourceAttrSet("tencentcloud_route_table_entry_config.example", "route_table_id"),
24+
resource.TestCheckResourceAttrSet("tencentcloud_route_table_entry_config.example", "route_item_id"),
25+
resource.TestCheckResourceAttrSet("tencentcloud_route_table_entry_config.example", "disabled"),
26+
),
27+
},
28+
{
29+
Config: testAccRouteTableEntryConfigUpdate,
30+
Check: resource.ComposeTestCheckFunc(
31+
resource.TestCheckResourceAttrSet("tencentcloud_route_table_entry_config.example", "id"),
32+
resource.TestCheckResourceAttrSet("tencentcloud_route_table_entry_config.example", "route_table_id"),
33+
resource.TestCheckResourceAttrSet("tencentcloud_route_table_entry_config.example", "route_item_id"),
34+
resource.TestCheckResourceAttrSet("tencentcloud_route_table_entry_config.example", "disabled"),
35+
),
36+
},
37+
{
38+
ResourceName: "tencentcloud_route_table_entry_config.example",
39+
ImportState: true,
40+
ImportStateVerify: true,
41+
},
42+
},
43+
})
44+
}
45+
46+
const testAccRouteTableEntryConfig = `
47+
resource "tencentcloud_route_table_entry_config" "example" {
48+
route_table_id = "rtb-8425lgjy"
49+
route_item_id = "rti-4f6efqwn"
50+
disabled = false
51+
}
52+
`
53+
54+
const testAccRouteTableEntryConfigUpdate = `
55+
resource "tencentcloud_route_table_entry_config" "example" {
56+
route_table_id = "rtb-8425lgjy"
57+
route_item_id = "rti-4f6efqwn"
58+
disabled = true
59+
}
60+
`

website/docs/r/route_table_entry.html.markdown

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ description: |-
1111

1212
Provides a resource to create an entry of a routing table.
1313

14+
~> **NOTE:** When setting the route item switch, do not use it together with resource `tencentcloud_route_table_entry_config`.
15+
1416
## Example Usage
1517

1618
```hcl
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
---
2+
subcategory: "Virtual Private Cloud(VPC)"
3+
layout: "tencentcloud"
4+
page_title: "TencentCloud: tencentcloud_route_table_entry_config"
5+
sidebar_current: "docs-tencentcloud-resource-route_table_entry_config"
6+
description: |-
7+
Provides a resource to create a vpc route table entry config
8+
---
9+
10+
# tencentcloud_route_table_entry_config
11+
12+
Provides a resource to create a vpc route table entry config
13+
14+
~> **NOTE:** When setting the route item switch, do not use it together with resource `tencentcloud_route_table_entry`.
15+
16+
## Example Usage
17+
18+
### Enable route item
19+
20+
```hcl
21+
resource "tencentcloud_route_table_entry_config" "example" {
22+
route_table_id = "rtb-8425lgjy"
23+
route_item_id = "rti-4f6efqwn"
24+
disabled = false
25+
}
26+
```
27+
28+
### Disable route item
29+
30+
```hcl
31+
resource "tencentcloud_route_table_entry_config" "example" {
32+
route_table_id = "rtb-8425lgjy"
33+
route_item_id = "rti-4f6efqwn"
34+
disabled = true
35+
}
36+
```
37+
38+
## Argument Reference
39+
40+
The following arguments are supported:
41+
42+
* `disabled` - (Required, Bool) Whether the entry is disabled.
43+
* `route_item_id` - (Required, String, ForceNew) ID of route table entry.
44+
* `route_table_id` - (Required, String, ForceNew) Route table ID.
45+
46+
## Attributes Reference
47+
48+
In addition to all arguments above, the following attributes are exported:
49+
50+
* `id` - ID of the resource.
51+
52+
53+
54+
## Import
55+
56+
vpc route table entry config can be imported using the id, e.g.
57+
58+
```
59+
terraform import tencentcloud_route_table_entry_config.example rtb-8425lgjy#rti-4f6efqwn
60+
```
61+

0 commit comments

Comments
 (0)