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
3 changes: 3 additions & 0 deletions .changelog/3616.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
```release-note:enhancement
resource/tencentcloud_cfw_nat_instance: optimiz read function code logic
```
35 changes: 22 additions & 13 deletions tencentcloud/services/cfw/resource_tc_cfw_nat_instance.go
Original file line number Diff line number Diff line change
Expand Up @@ -288,6 +288,10 @@ func resourceTencentCloudCfwNatInstanceCreate(d *schema.ResourceData, meta inter
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
}

if result == nil || result.Response == nil {
return resource.NonRetryableError(fmt.Errorf("Create cfw natInstance failed, Response is nil."))
}

response = result
return nil
})
Expand All @@ -297,6 +301,10 @@ func resourceTencentCloudCfwNatInstanceCreate(d *schema.ResourceData, meta inter
return err
}

if response.Response.CfwInsId == nil {
return fmt.Errorf("CfwInsId is nil.")
}

instanceId = *response.Response.CfwInsId
d.SetId(instanceId)

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

if natInstance == nil {
e = fmt.Errorf("cfw nat instance %s not exists", instanceId)
return resource.NonRetryableError(e)
return resource.NonRetryableError(fmt.Errorf("cfw nat instance %s not exists", instanceId))
}

if natInstance.Status == nil {
return resource.NonRetryableError(fmt.Errorf("status is nil"))
}

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

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

Expand Down Expand Up @@ -404,28 +415,28 @@ func resourceTencentCloudCfwNatInstanceRead(d *schema.ResourceData, meta interfa
}
}

if natInstance.ZoneZh != nil {
zoneZh := *natInstance.ZoneZh
zone = ZONE_MAP_CN2EN[zoneZh]
if natInstance.Zone != nil {
zone = *natInstance.Zone
}

if natInstance.ZoneZhBak != nil {
zoneBakZh := *natInstance.ZoneZhBak
zoneBak = ZONE_MAP_CN2EN[zoneBakZh]
if natInstance.ZoneBak != nil {
zoneBak = *natInstance.ZoneBak
}

if zone == zoneBak {
_ = d.Set("cross_a_zone", CROSS_A_ZONE_0)
zoneList := []string{
zone,
}

_ = d.Set("zone_set", zoneList)
} else {
_ = d.Set("cross_a_zone", CROSS_A_ZONE_1)
zoneList := []string{
zone,
zoneBak,
}

_ = d.Set("zone_set", zoneList)
}

Expand Down Expand Up @@ -479,20 +490,18 @@ func resourceTencentCloudCfwNatInstanceUpdate(d *schema.ResourceData, meta inter
instanceId = d.Id()
)

immutableArgs := []string{"width", "mode", "new_mode_items", "nat_gw_list", "zone", "zone_bak", "cross_a_zone", "domain", "fw_cidr_info"}

immutableArgs := []string{"width", "mode", "new_mode_items", "nat_gw_list", "zone", "zone_bak", "cross_a_zone"}
for _, v := range immutableArgs {
if d.HasChange(v) {
return fmt.Errorf("argument `%s` cannot be changed", v)
}
}

request.NatInstanceId = &instanceId

if v, ok := d.GetOk("name"); ok {
request.InstanceName = helper.String(v.(string))
}

request.NatInstanceId = &instanceId
err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError {
result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCfwClient().ModifyNatInstance(request)
if e != nil {
Expand Down
33 changes: 17 additions & 16 deletions tencentcloud/services/cfw/resource_tc_cfw_nat_instance.md
Original file line number Diff line number Diff line change
@@ -1,24 +1,25 @@
Provides a resource to create a cfw nat_instance
Provides a resource to create a CFW nat instance

Example Usage

If mode is 0

```hcl
resource "tencentcloud_cfw_nat_instance" "example" {
name = "tf_example"
width = 20
mode = 0
name = "tf_example"
cross_a_zone = 1
width = 20
mode = 0
new_mode_items {
vpc_list = [
"vpc-5063ta4i"
"vpc-40hif9or"
]
eips = [
"152.136.168.192"
"119.29.107.37"
]
}
cross_a_zone = 0
zone_set = [
zone_set = [
"ap-guangzhou-6",
"ap-guangzhou-7"
]
}
Expand All @@ -28,15 +29,15 @@ If mode is 1

```hcl
resource "tencentcloud_cfw_nat_instance" "example" {
name = "tf_example"
width = 20
mode = 1
name = "tf_example"
cross_a_zone = 1
width = 20
mode = 1
nat_gw_list = [
"nat-9wwkz1kr"
]
cross_a_zone = 1
cross_a_zone = 0
zone_set = [

zone_set = [
"ap-guangzhou-6",
"ap-guangzhou-7"
]
Expand All @@ -45,8 +46,8 @@ resource "tencentcloud_cfw_nat_instance" "example" {

Import

cfw nat_instance can be imported using the id, e.g.
CFW nat instance can be imported using the id, e.g.

```
terraform import tencentcloud_cfw_nat_instance.example cfwnat-54a21421
```
```
83 changes: 65 additions & 18 deletions tencentcloud/services/cfw/service_tencentcloud_cfw.go
Original file line number Diff line number Diff line change
Expand Up @@ -238,6 +238,7 @@ func (me *CfwService) DescribeCfwNatInstanceById(ctx context.Context, natinsId s
logId := tccommon.GetLogId(ctx)

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

ratelimit.Check(request.GetAction())
var iacExtInfo connectivity.IacExtInfo
iacExtInfo.InstanceId = natinsId
response, err := me.client.UseCfwClient(iacExtInfo).DescribeNatFwInstancesInfo(request)
err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError {
ratelimit.Check(request.GetAction())
result, e := me.client.UseCfwClient(iacExtInfo).DescribeNatFwInstancesInfo(request)
if e != nil {
return tccommon.RetryError(e)
}

if result == nil || result.Response == nil || result.Response.NatinsLst == nil {
return resource.NonRetryableError(fmt.Errorf("Describe nat fw instances info failed, Response is nil."))
}

response = result
return nil
})

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.NatinsLst) < 1 {
return
}
Expand All @@ -276,6 +288,7 @@ func (me *CfwService) DescribeCfwEipsById(ctx context.Context, instanceId string
logId := tccommon.GetLogId(ctx)

request := cfw.NewDescribeCfwEipsRequest()
response := cfw.NewDescribeCfwEipsResponse()
request.Mode = common.Uint64Ptr(1)
request.NatGatewayId = common.StringPtr("ALL")
request.CfwInstance = common.StringPtr(instanceId)
Expand All @@ -286,22 +299,34 @@ func (me *CfwService) DescribeCfwEipsById(ctx context.Context, instanceId string
}
}()

ratelimit.Check(request.GetAction())
err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError {
ratelimit.Check(request.GetAction())
result, e := me.client.UseCfwClient().DescribeCfwEips(request)
if e != nil {
return tccommon.RetryError(e)
}

if result == nil || result.Response == nil || result.Response.NatFwEipList == nil {
return resource.NonRetryableError(fmt.Errorf("Describe cfw eips failed, Response is nil."))
}

response = result
return nil
})

response, err := me.client.UseCfwClient().DescribeCfwEips(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.NatFwEipList) < 1 {
return
}

for _, item := range response.Response.NatFwEipList {
gwList = append(gwList, *item.NatGatewayId)
if item.NatGatewayId != nil {
gwList = append(gwList, *item.NatGatewayId)
}
}

return
Expand All @@ -319,23 +344,33 @@ func (me *CfwService) DeleteCfwNatInstanceById(ctx context.Context, instanceId s
}
}()

ratelimit.Check(request.GetAction())
err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError {
ratelimit.Check(request.GetAction())
result, e := me.client.UseCfwClient().DeleteNatFwInstance(request)
if e != nil {
return tccommon.RetryError(e)
}

if result == nil || result.Response == nil {
return resource.NonRetryableError(fmt.Errorf("Delete nat fw instance failed, Response is nil."))
}

return nil
})

response, err := me.client.UseCfwClient().DeleteNatFwInstance(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 *CfwService) DescribeNatFwVpcDnsLstById(ctx context.Context, instanceId string) (vpcList []string, errRet error) {
logId := tccommon.GetLogId(ctx)

request := cfw.NewDescribeNatFwVpcDnsLstRequest()
response := cfw.NewDescribeNatFwVpcDnsLstResponse()
request.NatFwInsId = &instanceId
request.Offset = common.Int64Ptr(0)
request.Limit = common.Int64Ptr(10)
Expand All @@ -346,22 +381,34 @@ func (me *CfwService) DescribeNatFwVpcDnsLstById(ctx context.Context, instanceId
}
}()

ratelimit.Check(request.GetAction())
err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError {
ratelimit.Check(request.GetAction())
result, e := me.client.UseCfwClient().DescribeNatFwVpcDnsLst(request)
if e != nil {
return tccommon.RetryError(e)
}

if result == nil || result.Response == nil || result.Response.VpcDnsSwitchLst == nil {
return resource.NonRetryableError(fmt.Errorf("Describe nat fw vpc dns list failed, Response is nil."))
}

response = result
return nil
})

response, err := me.client.UseCfwClient().DescribeNatFwVpcDnsLst(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.VpcDnsSwitchLst) < 1 {
return
}

for _, item := range response.Response.VpcDnsSwitchLst {
vpcList = append(vpcList, *item.VpcId)
if item.VpcId != nil {
vpcList = append(vpcList, *item.VpcId)
}
}

return
Expand Down
Loading
Loading