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
33 changes: 33 additions & 0 deletions tencentcloud/resource_tc_eks_cluster_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,43 @@ import (
"fmt"
"testing"

tke "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tke/v20180525"

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

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

func testSweepEksClusters(region string) error {
client, err := sharedClientForRegion(region)
logId := getLogId(contextNil)
ctx := context.WithValue(context.TODO(), logIdKey, logId)
if err != nil {
return err
}
service := EksService{client: client.(*TencentCloudClient).apiV3Conn}
clusters, err := service.DescribeEKSClusters(ctx, "", "tf-eks-test")
if err != nil {
return err
}
for _, c := range clusters {
id := c.ClusterId
req := tke.NewDeleteEKSClusterRequest()
req.ClusterId = &id
err := service.DeleteEksCluster(ctx, req)
if err != nil {
return err
}
}
return nil
}

func TestAccTencentCloudEKSCluster_basic(t *testing.T) {
t.Parallel()

Expand Down
10 changes: 5 additions & 5 deletions tencentcloud/resource_tc_instance.go
Original file line number Diff line number Diff line change
Expand Up @@ -1201,7 +1201,7 @@ func resourceTencentCloudInstanceUpdate(d *schema.ResourceData, meta interface{}
if errRet != nil {
return retryError(errRet, InternalError)
}
if instance != nil && *instance.LatestOperationState == CVM_LATEST_OPERATION_STATE_OPERATING {
if instance != nil && instance.LatestOperationState != nil && *instance.LatestOperationState == CVM_LATEST_OPERATION_STATE_OPERATING {
return resource.RetryableError(fmt.Errorf("cvm instance latest operetion status is %s, retry...", *instance.LatestOperationState))
}
return nil
Expand All @@ -1226,7 +1226,7 @@ func resourceTencentCloudInstanceUpdate(d *schema.ResourceData, meta interface{}
if errRet != nil {
return retryError(errRet, InternalError)
}
if instance != nil && *instance.LatestOperationState == CVM_LATEST_OPERATION_STATE_OPERATING {
if instance != nil && instance.LatestOperationState != nil && *instance.LatestOperationState == CVM_LATEST_OPERATION_STATE_OPERATING {
return resource.RetryableError(fmt.Errorf("cvm instance latest operetion status is %s, retry...", *instance.LatestOperationState))
}
return nil
Expand All @@ -1247,7 +1247,7 @@ func resourceTencentCloudInstanceUpdate(d *schema.ResourceData, meta interface{}
if errRet != nil {
return retryError(errRet, InternalError)
}
if instance != nil && *instance.LatestOperationState == CVM_LATEST_OPERATION_STATE_OPERATING {
if instance != nil && instance.LatestOperationState != nil && *instance.LatestOperationState == CVM_LATEST_OPERATION_STATE_OPERATING {
return resource.RetryableError(fmt.Errorf("cvm instance latest operetion status is %s, retry...", *instance.LatestOperationState))
}
return nil
Expand Down Expand Up @@ -1364,7 +1364,7 @@ func resourceTencentCloudInstanceUpdate(d *schema.ResourceData, meta interface{}
}
// Modifying instance type need restart the instance
// so status of CVM must be running when running flag is true
if instance != nil && (*instance.LatestOperationState == CVM_LATEST_OPERATION_STATE_OPERATING ||
if instance != nil && instance.LatestOperationState != nil && (*instance.LatestOperationState == CVM_LATEST_OPERATION_STATE_OPERATING ||
(flag && *instance.InstanceState != CVM_STATUS_RUNNING)) {
return resource.RetryableError(fmt.Errorf("cvm instance latest operetion status is %s, retry...", *instance.LatestOperationState))
}
Expand All @@ -1390,7 +1390,7 @@ func resourceTencentCloudInstanceUpdate(d *schema.ResourceData, meta interface{}
}
// Modifying instance type need restart the instance
// so status of CVM must be running when running flag is true
if instance != nil && (*instance.LatestOperationState == CVM_LATEST_OPERATION_STATE_OPERATING ||
if instance != nil && instance.LatestOperationState != nil && (*instance.LatestOperationState == CVM_LATEST_OPERATION_STATE_OPERATING ||
(flag && *instance.InstanceState != CVM_STATUS_RUNNING)) {
return resource.RetryableError(fmt.Errorf("cvm instance latest operetion status is %s, retry...", *instance.LatestOperationState))
}
Expand Down
5 changes: 4 additions & 1 deletion tencentcloud/resource_tc_instance_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ func testSweepCvmInstance(region string) error {
if err != nil {
return fmt.Errorf("getting tencentcloud client error: %s", err.Error())
}
client := sharedClient.(TencentCloudClient)
client := sharedClient.(*TencentCloudClient)

cvmService := CvmService{
client: client.apiV3Conn,
Expand Down Expand Up @@ -467,6 +467,7 @@ func TestAccTencentCloudInstanceWithSpotpaid(t *testing.T) {
})
}

/* Skip prepaid for now
func TestAccTencentCloudInstanceWithPrepaidChargeType(t *testing.T) {
t.Parallel()

Expand Down Expand Up @@ -494,6 +495,8 @@ func TestAccTencentCloudInstanceWithPrepaidChargeType(t *testing.T) {
})
}

*/

func testAccCheckTencentCloudInstanceExists(n string) resource.TestCheckFunc {
return func(s *terraform.State) error {
logId := getLogId(contextNil)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,7 @@ resource "tencentcloud_kubernetes_cluster" "managed_cluster" {
}

resource "tencentcloud_kubernetes_addon_attachment" "cbs" {
cluster_id = tencentcloud_kubernetes_cluster.managed_cluster.id
name = "cbs"
version = "1.0.0"
}
Expand Down
89 changes: 87 additions & 2 deletions tencentcloud/resource_tc_mysql_instance_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,97 @@ import (
"fmt"
"testing"

cdb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdb/v20170320"
"github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper"

"github.com/hashicorp/terraform-plugin-sdk/helper/resource"
"github.com/hashicorp/terraform-plugin-sdk/terraform"
"github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors"
)

const TestAccTencentCloudMysqlMasterInstance_availability_zone = "ap-guangzhou-3"
const TestAccTencentCloudMysqlInstanceName = "testAccMysql"
const TestAccTencentCloudMysqlInstanceNameVersion1 = "testAccMysql-version1"
const TestAccTencentCloudMysqlInstanceNamePrepaid = "testAccMysqlPrepaid"

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

func testSweepMySQLInstance(region string) error {
logId := getLogId(contextNil)
ctx := context.WithValue(context.TODO(), logIdKey, logId)
cli, err := sharedClientForRegion(region)
if err != nil {
return err
}
client := cli.(*TencentCloudClient).apiV3Conn
service := MysqlService{client: client}

request := cdb.NewDescribeDBInstancesRequest()
request.InstanceNames = []*string{
helper.String(TestAccTencentCloudMysqlInstanceName),
helper.String(TestAccTencentCloudMysqlInstanceNameVersion1),
helper.String(TestAccTencentCloudMysqlInstanceNamePrepaid),
}
request.Limit = helper.IntUint64(2000)

response, err := client.UseMysqlClient().DescribeDBInstances(request)
if err != nil {
return err
}

if len(response.Response.Items) == 0 {
return nil
}

for _, v := range response.Response.Items {
id := *v.InstanceId
err := resource.Retry(writeRetryTimeout, func() *resource.RetryError {
_, err := service.IsolateDBInstance(ctx, id)
if err != nil {
//for the pay order wait
return retryError(err, InternalError)
}
return nil
})
if err != nil {
return err
}

err = resource.Retry(7*readRetryTimeout, func() *resource.RetryError {
mysqlInfo, err := service.DescribeDBInstanceById(ctx, id)

if err != nil {
if _, ok := err.(*errors.TencentCloudSDKError); !ok {
return resource.RetryableError(err)
} else {
return resource.NonRetryableError(err)
}
}
if mysqlInfo == nil {
return nil
}
if *mysqlInfo.Status == MYSQL_STATUS_ISOLATING || *mysqlInfo.Status == MYSQL_STATUS_RUNNING {
return resource.RetryableError(fmt.Errorf("mysql isolating."))
}
if *mysqlInfo.Status == MYSQL_STATUS_ISOLATED {
return nil
}
return resource.NonRetryableError(fmt.Errorf("after IsolateDBInstance mysql Status is %d", *mysqlInfo.Status))
})

err = service.OfflineIsolatedInstances(ctx, id)
if err != nil {
return err
}
}

return nil
}

func TestAccTencentCloudMysqlMasterInstance_fullslave(t *testing.T) {
t.Parallel()
Expand All @@ -23,7 +108,7 @@ func TestAccTencentCloudMysqlMasterInstance_fullslave(t *testing.T) {
Config: testAccMysqlMasterInstance_fullslave(),
Check: resource.ComposeAggregateTestCheckFunc(
testAccCheckMysqlMasterInstanceExists("tencentcloud_mysql_instance.mysql_master"),
resource.TestCheckResourceAttr("tencentcloud_mysql_instance.mysql_master", "instance_name", "testAccMysql"),
resource.TestCheckResourceAttr("tencentcloud_mysql_instance.mysql_master", "instance_name", TestAccTencentCloudMysqlInstanceName),
resource.TestCheckResourceAttr("tencentcloud_mysql_instance.mysql_master", "slave_deploy_mode", "0"),
resource.TestCheckResourceAttr("tencentcloud_mysql_instance.mysql_master", "slave_sync_mode", "2"),
resource.TestCheckResourceAttr("tencentcloud_mysql_instance.mysql_master", "availability_zone", TestAccTencentCloudMysqlMasterInstance_availability_zone),
Expand All @@ -46,7 +131,7 @@ func TestAccTencentCloudMysqlMasterInstance_basic_and_update(t *testing.T) {
Config: testAccMysqlMasterInstance_basic(),
Check: resource.ComposeAggregateTestCheckFunc(
testAccCheckMysqlMasterInstanceExists("tencentcloud_mysql_instance.mysql_master"),
resource.TestCheckResourceAttr("tencentcloud_mysql_instance.mysql_master", "instance_name", "testAccMysql"),
resource.TestCheckResourceAttr("tencentcloud_mysql_instance.mysql_master", "instance_name", TestAccTencentCloudMysqlInstanceName),
resource.TestCheckResourceAttr("tencentcloud_mysql_instance.mysql_master", "mem_size", "1000"),
resource.TestCheckResourceAttr("tencentcloud_mysql_instance.mysql_master", "volume_size", "50"),
resource.TestCheckResourceAttr("tencentcloud_mysql_instance.mysql_master", "intranet_port", "3360"),
Expand Down
78 changes: 78 additions & 0 deletions tencentcloud/resource_tc_security_group_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,90 @@ package tencentcloud
import (
"context"
"fmt"
"log"
"strings"
"testing"

vpc "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc/v20170312"
"github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper"

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

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

func testSweepSecurityGroups(region string) error {
const NamePrefix = "ci-temp-test-sg"
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)
service := VpcService{
client: client.apiV3Conn,
}

sgs, err := service.DescribeSecurityGroups(ctx, nil, helper.String(NamePrefix), nil, nil)
var sgIds []*string
var candidates []string
var referredSgs = make(map[string][]*string, 0)

if err != nil {
return fmt.Errorf("DescribeSecurityGroups error: %s", err.Error())
}

for _, v := range sgs {
name := *v.SecurityGroupName
id := *v.SecurityGroupId
sgIds = append(sgIds, v.SecurityGroupId)
if !strings.HasPrefix(name, NamePrefix) {
continue
}
candidates = append(candidates, id)

}

refReq := vpc.NewDescribeSecurityGroupReferencesRequest()
refReq.SecurityGroupIds = sgIds

refRes, err := client.apiV3Conn.UseVpcClient().DescribeSecurityGroupReferences(refReq)
if err != nil {
return fmt.Errorf("DescribeSecurityGroupReferences error: %s", err.Error())
}
for _, v := range refRes.Response.ReferredSecurityGroupSet {
if len(v.ReferredSecurityGroupIds) > 0 {
referredSgs[*v.SecurityGroupId] = v.ReferredSecurityGroupIds
}
}

res, err := service.DescribeSecurityGroupsAssociate(ctx, candidates)
if err != nil {
return fmt.Errorf("DescribeSecurityGroupsAssociate error: %s", err.Error())
}

for _, v := range res {
id := *v.SecurityGroupId

if *v.TotalCount > 0 || len(referredSgs[id]) > 0 {
continue
}

if err := service.DeleteSecurityGroup(ctx, id); err != nil {
log.Printf("[ERROR] sweep security group %s error: %s", id, err.Error())
}
}
return nil
}

func TestAccTencentCloudSecurityGroup_basic(t *testing.T) {
t.Parallel()
var sgId string
Expand Down