Skip to content

Commit 866cee1

Browse files
author
hellertang
authored
add sweeper (#941)
1 parent d1889b9 commit 866cee1

File tree

4 files changed

+231
-0
lines changed

4 files changed

+231
-0
lines changed

tencentcloud/resource_tc_eip_test.go

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,69 @@ package tencentcloud
33
import (
44
"context"
55
"fmt"
6+
"log"
67
"os"
8+
"strings"
79
"testing"
10+
"time"
811

912
"github.com/hashicorp/terraform-plugin-sdk/helper/resource"
1013
"github.com/hashicorp/terraform-plugin-sdk/terraform"
1114
)
1215

16+
func init() {
17+
resource.AddTestSweepers("tencentcloud_eip", &resource.Sweeper{
18+
Name: "tencentcloud_eip",
19+
F: testSweepEipInstance,
20+
})
21+
}
22+
23+
func testSweepEipInstance(region string) error {
24+
logId := getLogId(contextNil)
25+
ctx := context.WithValue(context.TODO(), logIdKey, logId)
26+
27+
sharedClient, err := sharedClientForRegion(region)
28+
if err != nil {
29+
return fmt.Errorf("getting tencentcloud client error: %s", err.Error())
30+
}
31+
client := sharedClient.(*TencentCloudClient)
32+
33+
vpcService := VpcService{
34+
client: client.apiV3Conn,
35+
}
36+
37+
instances, err := vpcService.DescribeEipByFilter(ctx, nil)
38+
if err != nil {
39+
return fmt.Errorf("get instance list error: %s", err.Error())
40+
}
41+
42+
for _, v := range instances {
43+
instanceId := *v.AddressId
44+
print(instanceId)
45+
instanceName := v.AddressName
46+
47+
now := time.Now()
48+
49+
createTime := stringTotime(*v.CreatedTime)
50+
interval := now.Sub(createTime).Minutes()
51+
if instanceName != nil {
52+
if strings.HasPrefix(*instanceName, keepResource) || strings.HasPrefix(*instanceName, defaultResource) {
53+
continue
54+
}
55+
}
56+
57+
// less than 30 minute, not delete
58+
if int64(interval) < 30 {
59+
continue
60+
}
61+
62+
if err = vpcService.DeleteEip(ctx, instanceId); err != nil {
63+
log.Printf("[ERROR] sweep instance %s error: %s", instanceId, err.Error())
64+
}
65+
}
66+
return nil
67+
}
68+
1369
func TestAccTencentCloudEip_basic(t *testing.T) {
1470
t.Parallel()
1571
resource.Test(t, resource.TestCase{

tencentcloud/resource_tc_eni_test.go

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,67 @@ import (
44
"context"
55
"errors"
66
"fmt"
7+
"log"
8+
"strings"
79
"testing"
10+
"time"
811

912
"github.com/hashicorp/terraform-plugin-sdk/helper/resource"
1013
"github.com/hashicorp/terraform-plugin-sdk/terraform"
1114
)
1215

16+
func init() {
17+
resource.AddTestSweepers("tencentcloud_eni", &resource.Sweeper{
18+
Name: "tencentcloud_eni",
19+
F: testSweepEniInstance,
20+
})
21+
}
22+
23+
func testSweepEniInstance(region string) error {
24+
logId := getLogId(contextNil)
25+
ctx := context.WithValue(context.TODO(), logIdKey, logId)
26+
27+
sharedClient, err := sharedClientForRegion(region)
28+
if err != nil {
29+
return fmt.Errorf("getting tencentcloud client error: %s", err.Error())
30+
}
31+
client := sharedClient.(*TencentCloudClient)
32+
33+
vpcService := VpcService{
34+
client: client.apiV3Conn,
35+
}
36+
37+
instances, err := vpcService.DescribeEniByFilters(ctx, nil, nil, nil, nil, nil, nil,nil,nil)
38+
if err != nil {
39+
return fmt.Errorf("get instance list error: %s", err.Error())
40+
}
41+
42+
for _, v := range instances {
43+
instanceId := *v.NetworkInterfaceId
44+
instanceName := v.NetworkInterfaceName
45+
46+
now := time.Now()
47+
48+
createTime := stringTotime(*v.CreatedTime)
49+
interval := now.Sub(createTime).Minutes()
50+
if instanceName != nil {
51+
if strings.HasPrefix(*instanceName, keepResource) || strings.HasPrefix(*instanceName, defaultResource) {
52+
continue
53+
}
54+
}
55+
56+
// less than 30 minute, not delete
57+
if int64(interval) < 30 {
58+
continue
59+
}
60+
61+
if err = vpcService.DeleteEni(ctx, instanceId); err != nil {
62+
log.Printf("[ERROR] sweep instance %s error: %s", instanceId, err.Error())
63+
}
64+
}
65+
return nil
66+
}
67+
1368
func TestAccTencentCloudEni_basic(t *testing.T) {
1469
t.Parallel()
1570
var eniId string

tencentcloud/resource_tc_nat_gateway_test.go

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,70 @@
11
package tencentcloud
22

33
import (
4+
"context"
45
"fmt"
56
"log"
7+
"strings"
68
"testing"
9+
"time"
710

811
"github.com/hashicorp/terraform-plugin-sdk/helper/resource"
912
"github.com/hashicorp/terraform-plugin-sdk/terraform"
1013
vpc "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc/v20170312"
1114
)
1215

16+
func init() {
17+
resource.AddTestSweepers("tencentcloud_nat", &resource.Sweeper{
18+
Name: "tencentcloud_nat",
19+
F: testSweepNatInstance,
20+
})
21+
}
22+
23+
func testSweepNatInstance(region string) error {
24+
logId := getLogId(contextNil)
25+
ctx := context.WithValue(context.TODO(), logIdKey, logId)
26+
27+
sharedClient, err := sharedClientForRegion(region)
28+
if err != nil {
29+
return fmt.Errorf("getting tencentcloud client error: %s", err.Error())
30+
}
31+
client := sharedClient.(*TencentCloudClient)
32+
33+
vpcService := VpcService{
34+
client: client.apiV3Conn,
35+
}
36+
37+
instances, err := vpcService.DescribeNatGatewayByFilter(ctx, nil)
38+
if err != nil {
39+
return fmt.Errorf("get instance list error: %s", err.Error())
40+
}
41+
42+
for _, v := range instances {
43+
instanceId := *v.NatGatewayId
44+
instanceName := v.NatGatewayName
45+
46+
now := time.Now()
47+
48+
createTime := stringTotime(*v.CreatedTime)
49+
interval := now.Sub(createTime).Minutes()
50+
if instanceName != nil {
51+
if strings.HasPrefix(*instanceName, keepResource) || strings.HasPrefix(*instanceName, defaultResource) {
52+
continue
53+
}
54+
}
55+
56+
// less than 30 minute, not delete
57+
if int64(interval) < 30 {
58+
continue
59+
}
60+
61+
if err = vpcService.DeleteNatGateway(ctx, instanceId); err != nil {
62+
log.Printf("[ERROR] sweep instance %s error: %s", instanceId, err.Error())
63+
}
64+
}
65+
return nil
66+
}
67+
1368
func TestAccTencentCloudNatGateway_basic(t *testing.T) {
1469
t.Parallel()
1570
resource.Test(t, resource.TestCase{

tencentcloud/service_tencentcloud_vpc.go

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2058,6 +2058,71 @@ func (me *VpcService) DescribeNatGatewayById(ctx context.Context, natGateWayId s
20582058
return
20592059
}
20602060

2061+
func (me *VpcService) DescribeNatGatewayByFilter(ctx context.Context, filters map[string]string) (instances []*vpc.NatGateway, errRet error) {
2062+
var (
2063+
logId = getLogId(ctx)
2064+
request = vpc.NewDescribeNatGatewaysRequest()
2065+
)
2066+
request.Filters = make([]*vpc.Filter, 0, len(filters))
2067+
for k, v := range filters {
2068+
filter := vpc.Filter{
2069+
Name: helper.String(k),
2070+
Values: []*string{helper.String(v)},
2071+
}
2072+
request.Filters = append(request.Filters, &filter)
2073+
}
2074+
2075+
var offset uint64 = 0
2076+
var pageSize uint64 = 100
2077+
instances = make([]*vpc.NatGateway, 0)
2078+
2079+
for {
2080+
request.Offset = &offset
2081+
request.Limit = &pageSize
2082+
ratelimit.Check(request.GetAction())
2083+
response, err := me.client.UseVpcClient().DescribeNatGateways(request)
2084+
if err != nil {
2085+
log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n",
2086+
logId, request.GetAction(), request.ToJsonString(), err.Error())
2087+
errRet = err
2088+
return
2089+
}
2090+
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n",
2091+
logId, request.GetAction(), request.ToJsonString(), response.ToJsonString())
2092+
2093+
if response == nil || len(response.Response.NatGatewaySet) < 1 {
2094+
break
2095+
}
2096+
instances = append(instances, response.Response.NatGatewaySet...)
2097+
if len(response.Response.NatGatewaySet) < int(pageSize) {
2098+
break
2099+
}
2100+
offset += pageSize
2101+
}
2102+
return
2103+
}
2104+
2105+
func (me *VpcService) DeleteNatGateway(ctx context.Context, natGatewayId string) (errRet error) {
2106+
logId := getLogId(ctx)
2107+
request := vpc.NewDeleteNatGatewayRequest()
2108+
defer func() {
2109+
if errRet != nil {
2110+
log.Printf("[CRITAL]%s api[%s] fail,reason[%s]", logId, request.GetAction(), errRet.Error())
2111+
}
2112+
}()
2113+
request.NatGatewayId = &natGatewayId
2114+
2115+
errRet = resource.Retry(writeRetryTimeout, func() *resource.RetryError {
2116+
ratelimit.Check(request.GetAction())
2117+
_, errRet = me.client.UseVpcClient().DeleteNatGateway(request)
2118+
if errRet != nil {
2119+
return retryError(errRet, InternalError)
2120+
}
2121+
return nil
2122+
})
2123+
return
2124+
}
2125+
20612126
func (me *VpcService) DisassociateNatGatewayAddress(ctx context.Context, request *vpc.DisassociateNatGatewayAddressRequest) (errRet error) {
20622127
logId := getLogId(ctx)
20632128
defer func() {

0 commit comments

Comments
 (0)