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
56 changes: 56 additions & 0 deletions tencentcloud/resource_tc_eip_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,69 @@ package tencentcloud
import (
"context"
"fmt"
"log"
"os"
"strings"
"testing"
"time"

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

func init() {
resource.AddTestSweepers("tencentcloud_eip", &resource.Sweeper{
Name: "tencentcloud_eip",
F: testSweepEipInstance,
})
}

func testSweepEipInstance(region string) error {
logId := getLogId(contextNil)
ctx := context.WithValue(context.TODO(), logIdKey, logId)

sharedClient, err := sharedClientForRegion(region)
if err != nil {
return fmt.Errorf("getting tencentcloud client error: %s", err.Error())
}
client := sharedClient.(*TencentCloudClient)

vpcService := VpcService{
client: client.apiV3Conn,
}

instances, err := vpcService.DescribeEipByFilter(ctx, nil)
if err != nil {
return fmt.Errorf("get instance list error: %s", err.Error())
}

for _, v := range instances {
instanceId := *v.AddressId
print(instanceId)
instanceName := v.AddressName

now := time.Now()

createTime := stringTotime(*v.CreatedTime)
interval := now.Sub(createTime).Minutes()
if instanceName != nil {
if strings.HasPrefix(*instanceName, keepResource) || strings.HasPrefix(*instanceName, defaultResource) {
continue
}
}

// less than 30 minute, not delete
if int64(interval) < 30 {
continue
}

if err = vpcService.DeleteEip(ctx, instanceId); err != nil {
log.Printf("[ERROR] sweep instance %s error: %s", instanceId, err.Error())
}
}
return nil
}

func TestAccTencentCloudEip_basic(t *testing.T) {
t.Parallel()
resource.Test(t, resource.TestCase{
Expand Down
55 changes: 55 additions & 0 deletions tencentcloud/resource_tc_eni_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,67 @@ import (
"context"
"errors"
"fmt"
"log"
"strings"
"testing"
"time"

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

func init() {
resource.AddTestSweepers("tencentcloud_eni", &resource.Sweeper{
Name: "tencentcloud_eni",
F: testSweepEniInstance,
})
}

func testSweepEniInstance(region string) error {
logId := getLogId(contextNil)
ctx := context.WithValue(context.TODO(), logIdKey, logId)

sharedClient, err := sharedClientForRegion(region)
if err != nil {
return fmt.Errorf("getting tencentcloud client error: %s", err.Error())
}
client := sharedClient.(*TencentCloudClient)

vpcService := VpcService{
client: client.apiV3Conn,
}

instances, err := vpcService.DescribeEniByFilters(ctx, nil, nil, nil, nil, nil, nil,nil,nil)
if err != nil {
return fmt.Errorf("get instance list error: %s", err.Error())
}

for _, v := range instances {
instanceId := *v.NetworkInterfaceId
instanceName := v.NetworkInterfaceName

now := time.Now()

createTime := stringTotime(*v.CreatedTime)
interval := now.Sub(createTime).Minutes()
if instanceName != nil {
if strings.HasPrefix(*instanceName, keepResource) || strings.HasPrefix(*instanceName, defaultResource) {
continue
}
}

// less than 30 minute, not delete
if int64(interval) < 30 {
continue
}

if err = vpcService.DeleteEni(ctx, instanceId); err != nil {
log.Printf("[ERROR] sweep instance %s error: %s", instanceId, err.Error())
}
}
return nil
}

func TestAccTencentCloudEni_basic(t *testing.T) {
t.Parallel()
var eniId string
Expand Down
55 changes: 55 additions & 0 deletions tencentcloud/resource_tc_nat_gateway_test.go
Original file line number Diff line number Diff line change
@@ -1,15 +1,70 @@
package tencentcloud

import (
"context"
"fmt"
"log"
"strings"
"testing"
"time"

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

func init() {
resource.AddTestSweepers("tencentcloud_nat", &resource.Sweeper{
Name: "tencentcloud_nat",
F: testSweepNatInstance,
})
}

func testSweepNatInstance(region string) error {
logId := getLogId(contextNil)
ctx := context.WithValue(context.TODO(), logIdKey, logId)

sharedClient, err := sharedClientForRegion(region)
if err != nil {
return fmt.Errorf("getting tencentcloud client error: %s", err.Error())
}
client := sharedClient.(*TencentCloudClient)

vpcService := VpcService{
client: client.apiV3Conn,
}

instances, err := vpcService.DescribeNatGatewayByFilter(ctx, nil)
if err != nil {
return fmt.Errorf("get instance list error: %s", err.Error())
}

for _, v := range instances {
instanceId := *v.NatGatewayId
instanceName := v.NatGatewayName

now := time.Now()

createTime := stringTotime(*v.CreatedTime)
interval := now.Sub(createTime).Minutes()
if instanceName != nil {
if strings.HasPrefix(*instanceName, keepResource) || strings.HasPrefix(*instanceName, defaultResource) {
continue
}
}

// less than 30 minute, not delete
if int64(interval) < 30 {
continue
}

if err = vpcService.DeleteNatGateway(ctx, instanceId); err != nil {
log.Printf("[ERROR] sweep instance %s error: %s", instanceId, err.Error())
}
}
return nil
}

func TestAccTencentCloudNatGateway_basic(t *testing.T) {
t.Parallel()
resource.Test(t, resource.TestCase{
Expand Down
65 changes: 65 additions & 0 deletions tencentcloud/service_tencentcloud_vpc.go
Original file line number Diff line number Diff line change
Expand Up @@ -2058,6 +2058,71 @@ func (me *VpcService) DescribeNatGatewayById(ctx context.Context, natGateWayId s
return
}

func (me *VpcService) DescribeNatGatewayByFilter(ctx context.Context, filters map[string]string) (instances []*vpc.NatGateway, errRet error) {
var (
logId = getLogId(ctx)
request = vpc.NewDescribeNatGatewaysRequest()
)
request.Filters = make([]*vpc.Filter, 0, len(filters))
for k, v := range filters {
filter := vpc.Filter{
Name: helper.String(k),
Values: []*string{helper.String(v)},
}
request.Filters = append(request.Filters, &filter)
}

var offset uint64 = 0
var pageSize uint64 = 100
instances = make([]*vpc.NatGateway, 0)

for {
request.Offset = &offset
request.Limit = &pageSize
ratelimit.Check(request.GetAction())
response, err := me.client.UseVpcClient().DescribeNatGateways(request)
if err != nil {
log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n",
logId, request.GetAction(), request.ToJsonString(), err.Error())
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 response == nil || len(response.Response.NatGatewaySet) < 1 {
break
}
instances = append(instances, response.Response.NatGatewaySet...)
if len(response.Response.NatGatewaySet) < int(pageSize) {
break
}
offset += pageSize
}
return
}

func (me *VpcService) DeleteNatGateway(ctx context.Context, natGatewayId string) (errRet error) {
logId := getLogId(ctx)
request := vpc.NewDeleteNatGatewayRequest()
defer func() {
if errRet != nil {
log.Printf("[CRITAL]%s api[%s] fail,reason[%s]", logId, request.GetAction(), errRet.Error())
}
}()
request.NatGatewayId = &natGatewayId

errRet = resource.Retry(writeRetryTimeout, func() *resource.RetryError {
ratelimit.Check(request.GetAction())
_, errRet = me.client.UseVpcClient().DeleteNatGateway(request)
if errRet != nil {
return retryError(errRet, InternalError)
}
return nil
})
return
}

func (me *VpcService) DisassociateNatGatewayAddress(ctx context.Context, request *vpc.DisassociateNatGatewayAddressRequest) (errRet error) {
logId := getLogId(ctx)
defer func() {
Expand Down