Skip to content

Commit 5f1f8e1

Browse files
authoredApr 11, 2025··
fix(vpc): [138577325] tencentcloud_eni_ipv6_address update code and doc (#3300)
* add * add
1 parent 9dcb452 commit 5f1f8e1

File tree

5 files changed

+146
-68
lines changed

5 files changed

+146
-68
lines changed
 

‎.changelog/3300.txt

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
```release-note:enhancement
2+
resource/tencentcloud_eni_ipv6_address: update code and doc
3+
```

‎tencentcloud/services/vpc/resource_tc_eni_ipv6_address.go

+39-22
Original file line numberDiff line numberDiff line change
@@ -100,17 +100,18 @@ func resourceTencentCloudEniIpv6AddressCreate(d *schema.ResourceData, meta inter
100100
defer tccommon.LogElapsed("resource.tencentcloud_eni_ipv6_address.create")()
101101
defer tccommon.InconsistentCheck(d, meta)()
102102

103-
logId := tccommon.GetLogId(tccommon.ContextNil)
104-
105103
var (
104+
logId = tccommon.GetLogId(tccommon.ContextNil)
105+
ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId)
106+
vpcService = VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()}
106107
request = vpc.NewAssignIpv6AddressesRequest()
107108
response = vpc.NewAssignIpv6AddressesResponse()
108109
networkInterfaceId string
109110
)
110111

111112
if v, ok := d.GetOk("network_interface_id"); ok {
112-
networkInterfaceId = v.(string)
113113
request.NetworkInterfaceId = helper.String(v.(string))
114+
networkInterfaceId = v.(string)
114115
}
115116

116117
if v, ok := d.GetOk("ipv6_addresses"); ok {
@@ -120,21 +121,27 @@ func resourceTencentCloudEniIpv6AddressCreate(d *schema.ResourceData, meta inter
120121
if v, ok := dMap["address"]; ok {
121122
ipv6Address.Address = helper.String(v.(string))
122123
}
124+
123125
if v, ok := dMap["primary"]; ok {
124126
ipv6Address.Primary = helper.Bool(v.(bool))
125127
}
128+
126129
if v, ok := dMap["address_id"]; ok {
127130
ipv6Address.AddressId = helper.String(v.(string))
128131
}
132+
129133
if v, ok := dMap["description"]; ok {
130134
ipv6Address.Description = helper.String(v.(string))
131135
}
136+
132137
if v, ok := dMap["is_wan_ip_blocked"]; ok {
133138
ipv6Address.IsWanIpBlocked = helper.Bool(v.(bool))
134139
}
140+
135141
if v, ok := dMap["state"]; ok {
136142
ipv6Address.State = helper.String(v.(string))
137143
}
144+
138145
request.Ipv6Addresses = append(request.Ipv6Addresses, &ipv6Address)
139146
}
140147
}
@@ -150,40 +157,51 @@ func resourceTencentCloudEniIpv6AddressCreate(d *schema.ResourceData, meta inter
150157
} else {
151158
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
152159
}
160+
161+
if result == nil || result.Response == nil {
162+
return resource.NonRetryableError(fmt.Errorf("Create vpc ipv6EniAddress failed, Response is nil."))
163+
}
164+
153165
response = result
154166
return nil
155167
})
168+
156169
if err != nil {
157170
log.Printf("[CRITAL]%s create vpc ipv6EniAddress failed, reason:%+v", logId, err)
158171
return err
159172
}
160173

161-
addressSet := response.Response.Ipv6AddressSet
162-
if len(addressSet) < 1 {
174+
if response.Response.Ipv6AddressSet == nil || len(response.Response.Ipv6AddressSet) < 1 {
163175
return fmt.Errorf("assign ipv6 addresses failed.")
164176
}
165177

166-
time.Sleep(5 * time.Second)
167-
168178
d.SetId(networkInterfaceId)
169179

180+
// wait
181+
if response.Response.RequestId != nil {
182+
err = vpcService.DescribeVpcTaskResult(ctx, response.Response.RequestId)
183+
if err != nil {
184+
return err
185+
}
186+
} else {
187+
time.Sleep(15 * time.Second)
188+
}
189+
170190
return resourceTencentCloudEniIpv6AddressRead(d, meta)
171191
}
172192

173193
func resourceTencentCloudEniIpv6AddressRead(d *schema.ResourceData, meta interface{}) error {
174194
defer tccommon.LogElapsed("resource.tencentcloud_eni_ipv6_address.read")()
175195
defer tccommon.InconsistentCheck(d, meta)()
176196

177-
logId := tccommon.GetLogId(tccommon.ContextNil)
178-
179-
ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId)
180-
181-
service := VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()}
182-
183-
networkInterfaceId := d.Id()
197+
var (
198+
logId = tccommon.GetLogId(tccommon.ContextNil)
199+
ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId)
200+
service = VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()}
201+
networkInterfaceId = d.Id()
202+
)
184203

185204
enis, err := service.DescribeEniById(ctx, []string{networkInterfaceId})
186-
187205
if err != nil {
188206
return err
189207
}
@@ -195,7 +213,6 @@ func resourceTencentCloudEniIpv6AddressRead(d *schema.ResourceData, meta interfa
195213
}
196214

197215
eni := enis[0]
198-
199216
ipv6s := make([]map[string]interface{}, 0, len(eni.Ipv6AddressSet))
200217
for _, ipv6 := range eni.Ipv6AddressSet {
201218
ipv6s = append(ipv6s, map[string]interface{}{
@@ -219,14 +236,14 @@ func resourceTencentCloudEniIpv6AddressDelete(d *schema.ResourceData, meta inter
219236
defer tccommon.LogElapsed("resource.tencentcloud_eni_ipv6_address.delete")()
220237
defer tccommon.InconsistentCheck(d, meta)()
221238

222-
logId := tccommon.GetLogId(tccommon.ContextNil)
223-
ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId)
224-
225-
service := VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()}
226-
networkInterfaceId := d.Id()
239+
var (
240+
logId = tccommon.GetLogId(tccommon.ContextNil)
241+
ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId)
242+
service = VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()}
243+
networkInterfaceId = d.Id()
244+
)
227245

228246
enis, err := service.DescribeEniById(ctx, []string{networkInterfaceId})
229-
230247
if err != nil {
231248
return err
232249
}
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,21 @@
1-
Provides a resource to create a vpc eni_ipv6_address
1+
Provides a resource to create a vpc eni ipv6 address
22

33
Example Usage
44

55
```hcl
6-
data "tencentcloud_availability_zones" "zones" {}
7-
86
resource "tencentcloud_vpc" "vpc" {
97
name = "vpc-example"
108
cidr_block = "10.0.0.0/16"
119
}
1210
1311
resource "tencentcloud_subnet" "subnet" {
14-
availability_zone = data.tencentcloud_availability_zones.zones.zones.0.name
12+
availability_zone = "ap-guangzhou-6"
1513
name = "subnet-example"
1614
vpc_id = tencentcloud_vpc.vpc.id
1715
cidr_block = "10.0.0.0/16"
1816
is_multicast = false
1917
}
2018
21-
resource "tencentcloud_eni" "eni" {
22-
name = "eni-example"
23-
vpc_id = tencentcloud_vpc.vpc.id
24-
subnet_id = tencentcloud_subnet.subnet.id
25-
description = "eni desc."
26-
ipv4_count = 1
27-
}
28-
2919
resource "tencentcloud_vpc_ipv6_cidr_block" "example" {
3020
vpc_id = tencentcloud_vpc.vpc.id
3121
}
@@ -34,20 +24,33 @@ resource "tencentcloud_vpc_ipv6_subnet_cidr_block" "example" {
3424
vpc_id = tencentcloud_vpc.vpc.id
3525
ipv6_subnet_cidr_blocks {
3626
subnet_id = tencentcloud_subnet.subnet.id
37-
ipv6_cidr_block = "2402:4e00:1018:6700::/64"
27+
ipv6_cidr_block = "2402:4e00:1015:7500::/64"
3828
}
3929
}
4030
41-
resource "tencentcloud_eni_ipv6_address" "ipv6_eni_address" {
42-
network_interface_id = tencentcloud_eni.eni.id
31+
resource "tencentcloud_eni" "example" {
32+
name = "tf-example"
33+
vpc_id = tencentcloud_vpc.vpc.id
34+
subnet_id = tencentcloud_subnet.subnet.id
35+
description = "eni description."
36+
ipv4_count = 1
37+
38+
depends_on = [
39+
tencentcloud_vpc_ipv6_cidr_block.example,
40+
tencentcloud_vpc_ipv6_subnet_cidr_block.example
41+
]
42+
}
43+
44+
resource "tencentcloud_eni_ipv6_address" "example" {
45+
network_interface_id = tencentcloud_eni.example.id
4346
ipv6_address_count = 1
4447
}
4548
```
4649

4750
Import
4851

49-
vpc eni_ipv6_address can be imported using the id, e.g.
52+
vpc eni ipv6 address can be imported using the id, e.g.
5053

5154
```
52-
terraform import tencentcloud_eni_ipv6_address.ipv6_eni_address eni_id
55+
terraform import tencentcloud_eni_ipv6_address.example eni-fxrx5d1d
5356
```

‎tencentcloud/services/vpc/service_tencentcloud_vpc.go

+63-11
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import (
1212
"strconv"
1313
"strings"
1414
"sync"
15+
"time"
1516

1617
tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common"
1718

@@ -5830,6 +5831,7 @@ func (me *VpcService) DescribeVpcEndPointServiceById(ctx context.Context, endPoi
58305831
logId := tccommon.GetLogId(ctx)
58315832

58325833
request := vpc.NewDescribeVpcEndPointServiceRequest()
5834+
response := vpc.NewDescribeVpcEndPointServiceResponse()
58335835
request.EndPointServiceIds = []*string{&endPointServiceId}
58345836

58355837
defer func() {
@@ -5841,23 +5843,40 @@ func (me *VpcService) DescribeVpcEndPointServiceById(ctx context.Context, endPoi
58415843
ratelimit.Check(request.GetAction())
58425844

58435845
var (
5844-
offset uint64 = 0
5845-
limit uint64 = 20
5846+
offset uint64 = 0
5847+
limit uint64 = 20
5848+
instances = make([]*vpc.EndPointService, 0)
58465849
)
5847-
instances := make([]*vpc.EndPointService, 0)
5850+
58485851
for {
58495852
request.Offset = &offset
58505853
request.Limit = &limit
5851-
response, err := me.client.UseVpcClient().DescribeVpcEndPointService(request)
5854+
5855+
err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError {
5856+
result, e := me.client.UseVpcClient().DescribeVpcEndPointService(request)
5857+
if e != nil {
5858+
return tccommon.RetryError(e)
5859+
} else {
5860+
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
5861+
}
5862+
5863+
if result == nil || result.Response == nil {
5864+
return resource.RetryableError(fmt.Errorf("Describe vpc endPointService failed, Response is nil."))
5865+
}
5866+
5867+
response = result
5868+
return nil
5869+
})
5870+
58525871
if err != nil {
58535872
errRet = err
58545873
return
58555874
}
5856-
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), response.ToJsonString())
58575875

58585876
if response == nil || len(response.Response.EndPointServiceSet) < 1 {
58595877
break
58605878
}
5879+
58615880
instances = append(instances, response.Response.EndPointServiceSet...)
58625881
if len(response.Response.EndPointServiceSet) < int(limit) {
58635882
break
@@ -5869,6 +5888,7 @@ func (me *VpcService) DescribeVpcEndPointServiceById(ctx context.Context, endPoi
58695888
if len(instances) < 1 {
58705889
return
58715890
}
5891+
58725892
endPointService = instances[0]
58735893
return
58745894
}
@@ -5885,14 +5905,22 @@ func (me *VpcService) DeleteVpcEndPointServiceById(ctx context.Context, endPoint
58855905
}
58865906
}()
58875907

5888-
ratelimit.Check(request.GetAction())
5908+
err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError {
5909+
ratelimit.Check(request.GetAction())
5910+
result, e := me.client.UseVpcClient().DeleteVpcEndPointService(request)
5911+
if e != nil {
5912+
return tccommon.RetryError(e)
5913+
} else {
5914+
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
5915+
}
5916+
5917+
return nil
5918+
})
58895919

5890-
response, err := me.client.UseVpcClient().DeleteVpcEndPointService(request)
58915920
if err != nil {
58925921
errRet = err
58935922
return
58945923
}
5895-
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), response.ToJsonString())
58965924

58975925
return
58985926
}
@@ -7000,6 +7028,7 @@ func (me *VpcService) DeleteEniIpv6AddressById(ctx context.Context, networkInter
70007028
logId := tccommon.GetLogId(ctx)
70017029

70027030
request := vpc.NewUnassignIpv6AddressesRequest()
7031+
response := vpc.NewUnassignIpv6AddressesResponse()
70037032
request.NetworkInterfaceId = &networkInterfaceId
70047033

70057034
for _, ipv6Address := range ipv6Addresses {
@@ -7014,14 +7043,37 @@ func (me *VpcService) DeleteEniIpv6AddressById(ctx context.Context, networkInter
70147043
}
70157044
}()
70167045

7017-
ratelimit.Check(request.GetAction())
7046+
err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError {
7047+
ratelimit.Check(request.GetAction())
7048+
result, e := me.client.UseVpcClient().UnassignIpv6Addresses(request)
7049+
if e != nil {
7050+
return tccommon.RetryError(e)
7051+
} else {
7052+
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
7053+
}
7054+
7055+
if result == nil || result.Response == nil {
7056+
return resource.NonRetryableError(fmt.Errorf("Delete vpc ipv6EniAddress failed, Response is nil."))
7057+
}
7058+
7059+
response = result
7060+
return nil
7061+
})
70187062

7019-
response, err := me.client.UseVpcClient().UnassignIpv6Addresses(request)
70207063
if err != nil {
70217064
errRet = err
70227065
return
70237066
}
7024-
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), response.ToJsonString())
7067+
7068+
// wait
7069+
if response.Response.RequestId != nil {
7070+
err = me.DescribeVpcTaskResult(ctx, response.Response.RequestId)
7071+
if err != nil {
7072+
return err
7073+
}
7074+
} else {
7075+
time.Sleep(15 * time.Second)
7076+
}
70257077

70267078
return
70277079
}

‎website/docs/r/eni_ipv6_address.html.markdown

+21-18
Original file line numberDiff line numberDiff line change
@@ -4,39 +4,29 @@ layout: "tencentcloud"
44
page_title: "TencentCloud: tencentcloud_eni_ipv6_address"
55
sidebar_current: "docs-tencentcloud-resource-eni_ipv6_address"
66
description: |-
7-
Provides a resource to create a vpc eni_ipv6_address
7+
Provides a resource to create a vpc eni ipv6 address
88
---
99

1010
# tencentcloud_eni_ipv6_address
1111

12-
Provides a resource to create a vpc eni_ipv6_address
12+
Provides a resource to create a vpc eni ipv6 address
1313

1414
## Example Usage
1515

1616
```hcl
17-
data "tencentcloud_availability_zones" "zones" {}
18-
1917
resource "tencentcloud_vpc" "vpc" {
2018
name = "vpc-example"
2119
cidr_block = "10.0.0.0/16"
2220
}
2321
2422
resource "tencentcloud_subnet" "subnet" {
25-
availability_zone = data.tencentcloud_availability_zones.zones.zones.0.name
23+
availability_zone = "ap-guangzhou-6"
2624
name = "subnet-example"
2725
vpc_id = tencentcloud_vpc.vpc.id
2826
cidr_block = "10.0.0.0/16"
2927
is_multicast = false
3028
}
3129
32-
resource "tencentcloud_eni" "eni" {
33-
name = "eni-example"
34-
vpc_id = tencentcloud_vpc.vpc.id
35-
subnet_id = tencentcloud_subnet.subnet.id
36-
description = "eni desc."
37-
ipv4_count = 1
38-
}
39-
4030
resource "tencentcloud_vpc_ipv6_cidr_block" "example" {
4131
vpc_id = tencentcloud_vpc.vpc.id
4232
}
@@ -45,12 +35,25 @@ resource "tencentcloud_vpc_ipv6_subnet_cidr_block" "example" {
4535
vpc_id = tencentcloud_vpc.vpc.id
4636
ipv6_subnet_cidr_blocks {
4737
subnet_id = tencentcloud_subnet.subnet.id
48-
ipv6_cidr_block = "2402:4e00:1018:6700::/64"
38+
ipv6_cidr_block = "2402:4e00:1015:7500::/64"
4939
}
5040
}
5141
52-
resource "tencentcloud_eni_ipv6_address" "ipv6_eni_address" {
53-
network_interface_id = tencentcloud_eni.eni.id
42+
resource "tencentcloud_eni" "example" {
43+
name = "tf-example"
44+
vpc_id = tencentcloud_vpc.vpc.id
45+
subnet_id = tencentcloud_subnet.subnet.id
46+
description = "eni description."
47+
ipv4_count = 1
48+
49+
depends_on = [
50+
tencentcloud_vpc_ipv6_cidr_block.example,
51+
tencentcloud_vpc_ipv6_subnet_cidr_block.example
52+
]
53+
}
54+
55+
resource "tencentcloud_eni_ipv6_address" "example" {
56+
network_interface_id = tencentcloud_eni.example.id
5457
ipv6_address_count = 1
5558
}
5659
```
@@ -82,9 +85,9 @@ In addition to all arguments above, the following attributes are exported:
8285

8386
## Import
8487

85-
vpc eni_ipv6_address can be imported using the id, e.g.
88+
vpc eni ipv6 address can be imported using the id, e.g.
8689

8790
```
88-
terraform import tencentcloud_eni_ipv6_address.ipv6_eni_address eni_id
91+
terraform import tencentcloud_eni_ipv6_address.example eni-fxrx5d1d
8992
```
9093

0 commit comments

Comments
 (0)
Please sign in to comment.