Skip to content

Commit ff1dadc

Browse files
committed
add
1 parent d5715f8 commit ff1dadc

File tree

4 files changed

+108
-52
lines changed

4 files changed

+108
-52
lines changed

tencentcloud/services/cfw/resource_tc_cfw_nat_instance.go

Lines changed: 22 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -288,6 +288,10 @@ func resourceTencentCloudCfwNatInstanceCreate(d *schema.ResourceData, meta inter
288288
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
289289
}
290290

291+
if result == nil || result.Response == nil {
292+
return resource.NonRetryableError(fmt.Errorf("Create cfw natInstance failed, Response is nil."))
293+
}
294+
291295
response = result
292296
return nil
293297
})
@@ -297,6 +301,10 @@ func resourceTencentCloudCfwNatInstanceCreate(d *schema.ResourceData, meta inter
297301
return err
298302
}
299303

304+
if response.Response.CfwInsId == nil {
305+
return fmt.Errorf("CfwInsId is nil.")
306+
}
307+
300308
instanceId = *response.Response.CfwInsId
301309
d.SetId(instanceId)
302310

@@ -308,8 +316,11 @@ func resourceTencentCloudCfwNatInstanceCreate(d *schema.ResourceData, meta inter
308316
}
309317

310318
if natInstance == nil {
311-
e = fmt.Errorf("cfw nat instance %s not exists", instanceId)
312-
return resource.NonRetryableError(e)
319+
return resource.NonRetryableError(fmt.Errorf("cfw nat instance %s not exists", instanceId))
320+
}
321+
322+
if natInstance.Status == nil {
323+
return resource.NonRetryableError(fmt.Errorf("status is nil"))
313324
}
314325

315326
if *natInstance.Status == 0 {
@@ -346,8 +357,8 @@ func resourceTencentCloudCfwNatInstanceRead(d *schema.ResourceData, meta interfa
346357
}
347358

348359
if natInstance == nil {
360+
log.Printf("[WARN]%s resource `tencentcloud_cfw_nat_instance` [%s] not found, please check if it has been deleted.\n", logId, d.Id())
349361
d.SetId("")
350-
log.Printf("[WARN]%s resource `CfwNatInstance` [%s] not found, please check if it has been deleted.\n", logId, d.Id())
351362
return nil
352363
}
353364

@@ -404,28 +415,28 @@ func resourceTencentCloudCfwNatInstanceRead(d *schema.ResourceData, meta interfa
404415
}
405416
}
406417

407-
if natInstance.ZoneZh != nil {
408-
zoneZh := *natInstance.ZoneZh
409-
zone = ZONE_MAP_CN2EN[zoneZh]
418+
if natInstance.Zone != nil {
419+
zone = *natInstance.Zone
410420
}
411421

412-
if natInstance.ZoneZhBak != nil {
413-
zoneBakZh := *natInstance.ZoneZhBak
414-
zoneBak = ZONE_MAP_CN2EN[zoneBakZh]
422+
if natInstance.ZoneBak != nil {
423+
zoneBak = *natInstance.ZoneBak
415424
}
416425

417426
if zone == zoneBak {
418427
_ = d.Set("cross_a_zone", CROSS_A_ZONE_0)
419428
zoneList := []string{
420429
zone,
421430
}
431+
422432
_ = d.Set("zone_set", zoneList)
423433
} else {
424434
_ = d.Set("cross_a_zone", CROSS_A_ZONE_1)
425435
zoneList := []string{
426436
zone,
427437
zoneBak,
428438
}
439+
429440
_ = d.Set("zone_set", zoneList)
430441
}
431442

@@ -479,20 +490,18 @@ func resourceTencentCloudCfwNatInstanceUpdate(d *schema.ResourceData, meta inter
479490
instanceId = d.Id()
480491
)
481492

482-
immutableArgs := []string{"width", "mode", "new_mode_items", "nat_gw_list", "zone", "zone_bak", "cross_a_zone", "domain", "fw_cidr_info"}
483-
493+
immutableArgs := []string{"width", "mode", "new_mode_items", "nat_gw_list", "zone", "zone_bak", "cross_a_zone"}
484494
for _, v := range immutableArgs {
485495
if d.HasChange(v) {
486496
return fmt.Errorf("argument `%s` cannot be changed", v)
487497
}
488498
}
489499

490-
request.NatInstanceId = &instanceId
491-
492500
if v, ok := d.GetOk("name"); ok {
493501
request.InstanceName = helper.String(v.(string))
494502
}
495503

504+
request.NatInstanceId = &instanceId
496505
err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError {
497506
result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCfwClient().ModifyNatInstance(request)
498507
if e != nil {
Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,25 @@
1-
Provides a resource to create a cfw nat_instance
1+
Provides a resource to create a CFW nat instance
22

33
Example Usage
44

55
If mode is 0
66

77
```hcl
88
resource "tencentcloud_cfw_nat_instance" "example" {
9-
name = "tf_example"
10-
width = 20
11-
mode = 0
9+
name = "tf_example"
10+
cross_a_zone = 1
11+
width = 20
12+
mode = 0
1213
new_mode_items {
1314
vpc_list = [
14-
"vpc-5063ta4i"
15+
"vpc-40hif9or"
1516
]
1617
eips = [
17-
"152.136.168.192"
18+
"119.29.107.37"
1819
]
1920
}
20-
cross_a_zone = 0
21-
zone_set = [
21+
zone_set = [
22+
"ap-guangzhou-6",
2223
"ap-guangzhou-7"
2324
]
2425
}
@@ -35,7 +36,6 @@ resource "tencentcloud_cfw_nat_instance" "example" {
3536
"nat-9wwkz1kr"
3637
]
3738
cross_a_zone = 1
38-
cross_a_zone = 0
3939
zone_set = [
4040
"ap-guangzhou-6",
4141
"ap-guangzhou-7"
@@ -45,8 +45,8 @@ resource "tencentcloud_cfw_nat_instance" "example" {
4545

4646
Import
4747

48-
cfw nat_instance can be imported using the id, e.g.
48+
CFW nat instance can be imported using the id, e.g.
4949

5050
```
5151
terraform import tencentcloud_cfw_nat_instance.example cfwnat-54a21421
52-
```
52+
```

tencentcloud/services/cfw/service_tencentcloud_cfw.go

Lines changed: 65 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -238,6 +238,7 @@ func (me *CfwService) DescribeCfwNatInstanceById(ctx context.Context, natinsId s
238238
logId := tccommon.GetLogId(ctx)
239239

240240
request := cfw.NewDescribeNatFwInstancesInfoRequest()
241+
response := cfw.NewDescribeNatFwInstancesInfoResponse()
241242
request.Offset = common.Int64Ptr(0)
242243
request.Limit = common.Int64Ptr(10)
243244
request.Filter = []*cfw.NatFwFilter{
@@ -253,17 +254,28 @@ func (me *CfwService) DescribeCfwNatInstanceById(ctx context.Context, natinsId s
253254
}
254255
}()
255256

256-
ratelimit.Check(request.GetAction())
257257
var iacExtInfo connectivity.IacExtInfo
258258
iacExtInfo.InstanceId = natinsId
259-
response, err := me.client.UseCfwClient(iacExtInfo).DescribeNatFwInstancesInfo(request)
259+
err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError {
260+
ratelimit.Check(request.GetAction())
261+
result, e := me.client.UseCfwClient(iacExtInfo).DescribeNatFwInstancesInfo(request)
262+
if e != nil {
263+
return tccommon.RetryError(e)
264+
}
265+
266+
if result == nil || result.Response == nil || result.Response.NatinsLst == nil {
267+
return resource.NonRetryableError(fmt.Errorf("Describe nat fw instances info failed, Response is nil."))
268+
}
269+
270+
response = result
271+
return nil
272+
})
273+
260274
if err != nil {
261275
errRet = err
262276
return
263277
}
264278

265-
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), response.ToJsonString())
266-
267279
if len(response.Response.NatinsLst) < 1 {
268280
return
269281
}
@@ -276,6 +288,7 @@ func (me *CfwService) DescribeCfwEipsById(ctx context.Context, instanceId string
276288
logId := tccommon.GetLogId(ctx)
277289

278290
request := cfw.NewDescribeCfwEipsRequest()
291+
response := cfw.NewDescribeCfwEipsResponse()
279292
request.Mode = common.Uint64Ptr(1)
280293
request.NatGatewayId = common.StringPtr("ALL")
281294
request.CfwInstance = common.StringPtr(instanceId)
@@ -286,22 +299,34 @@ func (me *CfwService) DescribeCfwEipsById(ctx context.Context, instanceId string
286299
}
287300
}()
288301

289-
ratelimit.Check(request.GetAction())
302+
err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError {
303+
ratelimit.Check(request.GetAction())
304+
result, e := me.client.UseCfwClient().DescribeCfwEips(request)
305+
if e != nil {
306+
return tccommon.RetryError(e)
307+
}
308+
309+
if result == nil || result.Response == nil || result.Response.NatFwEipList == nil {
310+
return resource.NonRetryableError(fmt.Errorf("Describe cfw eips failed, Response is nil."))
311+
}
312+
313+
response = result
314+
return nil
315+
})
290316

291-
response, err := me.client.UseCfwClient().DescribeCfwEips(request)
292317
if err != nil {
293318
errRet = err
294319
return
295320
}
296321

297-
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), response.ToJsonString())
298-
299322
if len(response.Response.NatFwEipList) < 1 {
300323
return
301324
}
302325

303326
for _, item := range response.Response.NatFwEipList {
304-
gwList = append(gwList, *item.NatGatewayId)
327+
if item.NatGatewayId != nil {
328+
gwList = append(gwList, *item.NatGatewayId)
329+
}
305330
}
306331

307332
return
@@ -319,23 +344,33 @@ func (me *CfwService) DeleteCfwNatInstanceById(ctx context.Context, instanceId s
319344
}
320345
}()
321346

322-
ratelimit.Check(request.GetAction())
347+
err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError {
348+
ratelimit.Check(request.GetAction())
349+
result, e := me.client.UseCfwClient().DeleteNatFwInstance(request)
350+
if e != nil {
351+
return tccommon.RetryError(e)
352+
}
353+
354+
if result == nil || result.Response == nil {
355+
return resource.NonRetryableError(fmt.Errorf("Delete nat fw instance failed, Response is nil."))
356+
}
357+
358+
return nil
359+
})
323360

324-
response, err := me.client.UseCfwClient().DeleteNatFwInstance(request)
325361
if err != nil {
326362
errRet = err
327363
return
328364
}
329365

330-
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), response.ToJsonString())
331-
332366
return
333367
}
334368

335369
func (me *CfwService) DescribeNatFwVpcDnsLstById(ctx context.Context, instanceId string) (vpcList []string, errRet error) {
336370
logId := tccommon.GetLogId(ctx)
337371

338372
request := cfw.NewDescribeNatFwVpcDnsLstRequest()
373+
response := cfw.NewDescribeNatFwVpcDnsLstResponse()
339374
request.NatFwInsId = &instanceId
340375
request.Offset = common.Int64Ptr(0)
341376
request.Limit = common.Int64Ptr(10)
@@ -346,22 +381,34 @@ func (me *CfwService) DescribeNatFwVpcDnsLstById(ctx context.Context, instanceId
346381
}
347382
}()
348383

349-
ratelimit.Check(request.GetAction())
384+
err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError {
385+
ratelimit.Check(request.GetAction())
386+
result, e := me.client.UseCfwClient().DescribeNatFwVpcDnsLst(request)
387+
if e != nil {
388+
return tccommon.RetryError(e)
389+
}
390+
391+
if result == nil || result.Response == nil || result.Response.VpcDnsSwitchLst == nil {
392+
return resource.NonRetryableError(fmt.Errorf("Describe nat fw vpc dns list failed, Response is nil."))
393+
}
394+
395+
response = result
396+
return nil
397+
})
350398

351-
response, err := me.client.UseCfwClient().DescribeNatFwVpcDnsLst(request)
352399
if err != nil {
353400
errRet = err
354401
return
355402
}
356403

357-
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), response.ToJsonString())
358-
359404
if len(response.Response.VpcDnsSwitchLst) < 1 {
360405
return
361406
}
362407

363408
for _, item := range response.Response.VpcDnsSwitchLst {
364-
vpcList = append(vpcList, *item.VpcId)
409+
if item.VpcId != nil {
410+
vpcList = append(vpcList, *item.VpcId)
411+
}
365412
}
366413

367414
return

website/docs/r/cfw_nat_instance.html.markdown

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,32 +4,33 @@ layout: "tencentcloud"
44
page_title: "TencentCloud: tencentcloud_cfw_nat_instance"
55
sidebar_current: "docs-tencentcloud-resource-cfw_nat_instance"
66
description: |-
7-
Provides a resource to create a cfw nat_instance
7+
Provides a resource to create a CFW nat instance
88
---
99

1010
# tencentcloud_cfw_nat_instance
1111

12-
Provides a resource to create a cfw nat_instance
12+
Provides a resource to create a CFW nat instance
1313

1414
## Example Usage
1515

1616
### If mode is 0
1717

1818
```hcl
1919
resource "tencentcloud_cfw_nat_instance" "example" {
20-
name = "tf_example"
21-
width = 20
22-
mode = 0
20+
name = "tf_example"
21+
cross_a_zone = 1
22+
width = 20
23+
mode = 0
2324
new_mode_items {
2425
vpc_list = [
25-
"vpc-5063ta4i"
26+
"vpc-40hif9or"
2627
]
2728
eips = [
28-
"152.136.168.192"
29+
"119.29.107.37"
2930
]
3031
}
31-
cross_a_zone = 0
3232
zone_set = [
33+
"ap-guangzhou-6",
3334
"ap-guangzhou-7"
3435
]
3536
}
@@ -46,7 +47,6 @@ resource "tencentcloud_cfw_nat_instance" "example" {
4647
"nat-9wwkz1kr"
4748
]
4849
cross_a_zone = 1
49-
cross_a_zone = 0
5050
zone_set = [
5151
"ap-guangzhou-6",
5252
"ap-guangzhou-7"
@@ -81,7 +81,7 @@ In addition to all arguments above, the following attributes are exported:
8181

8282
## Import
8383

84-
cfw nat_instance can be imported using the id, e.g.
84+
CFW nat instance can be imported using the id, e.g.
8585

8686
```
8787
terraform import tencentcloud_cfw_nat_instance.example cfwnat-54a21421

0 commit comments

Comments
 (0)