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
10 changes: 10 additions & 0 deletions tencentcloud/basic_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -163,6 +163,16 @@ locals {
}
`

const CommonPresetSQLServer = `
data "tencentcloud_sqlserver_instances" "sqlserver" {
project_id = "` + defaultProjectId + `"
}

locals {
sqlserver_id = data.tencentcloud_sqlserver_instances.sqlserver.instance_list.0.id
}
`

const instanceCommonTestCase = defaultInstanceVariable + `
resource "tencentcloud_instance" "default" {
instance_name = var.instance_name
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import (

var testDataSqlserverAccountDBAttachmentsName = "data.tencentcloud_sqlserver_account_db_attachments.test"

func TestAccTencentCloudDataSqlserverAccountDBAttachments(t *testing.T) {
func TestAccDataSourceTencentCloudSqlserverAccountDBAttachments(t *testing.T) {
t.Parallel()
resource.Test(t, resource.TestCase{
PreCheck: func() { testAccPreCheck(t) },
Expand Down
2 changes: 1 addition & 1 deletion tencentcloud/data_source_tc_sqlserver_accounts_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import (

var testDataSqlserverAccountsName = "data.tencentcloud_sqlserver_accounts.test"

func TestAccTencentCloudDataSqlserverAccounts(t *testing.T) {
func TestAccDataSourceTencentCloudSqlserverAccounts(t *testing.T) {
t.Parallel()
resource.Test(t, resource.TestCase{
PreCheck: func() { testAccPreCheck(t) },
Expand Down
2 changes: 1 addition & 1 deletion tencentcloud/data_source_tc_sqlserver_backups_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import (

var testDataSqlserverBackupsName = "data.tencentcloud_sqlserver_backups.test"

func TestAccTencentCloudDataSqlserverBackups(t *testing.T) {
func TestAccDataSourceTencentCloudSqlserverBackups(t *testing.T) {
t.Parallel()
resource.Test(t, resource.TestCase{
PreCheck: func() { testAccPreCheck(t) },
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import (

var testDataSqlserverBasicInstancesName = "data.tencentcloud_sqlserver_basic_instances.id_test"

func TestAccTencentCloudDataSqlserverBasicInstances(t *testing.T) {
func TestAccDataSourceTencentCloudSqlserverBasicInstances(t *testing.T) {
t.Parallel()
resource.Test(t, resource.TestCase{
PreCheck: func() { testAccPreCheck(t) },
Expand Down
15 changes: 4 additions & 11 deletions tencentcloud/data_source_tc_sqlserver_instances_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import (

var testDataSqlserverInstancesName = "data.tencentcloud_sqlserver_instances.id_test"

func TestAccTencentCloudDataSqlserverInstances(t *testing.T) {
func TestAccDataSourceTencentCloudSqlserverInstances(t *testing.T) {
t.Parallel()
resource.Test(t, resource.TestCase{
PreCheck: func() { testAccPreCheck(t) },
Expand All @@ -32,28 +32,21 @@ func TestAccTencentCloudDataSqlserverInstances(t *testing.T) {
resource.TestCheckResourceAttrSet(testDataSqlserverInstancesName, "instance_list.0.vport"),
resource.TestCheckResourceAttrSet(testDataSqlserverInstancesName, "instance_list.0.status"),
resource.TestCheckResourceAttrSet(testDataSqlserverInstancesName, "instance_list.0.used_storage"),
resource.TestCheckResourceAttr(testDataPostgresqlInstancesName, "instance_list.0.tags.tf", "test"),
),
},
},
})
}

const testAccTencentCloudDataSqlserverInstancesBasic = `
variable "availability_zone"{
default = "ap-guangzhou-2"
}
var testAccTencentCloudDataSqlserverInstancesBasic = testAccSqlserverInstanceBasic + `

resource "tencentcloud_sqlserver_instance" "test" {
name = "tf_postsql_instance"
availability_zone = var.availability_zone
name = "tf_sqlserver_instance"
availability_zone = local.az
charge_type = "POSTPAID_BY_HOUR"
project_id = 0
memory = 2
storage = 10
tags = {
tf = "test"
}
}

data "tencentcloud_sqlserver_instances" "id_test"{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import (

var testDataSqlserverReadonlyGroupsName = "data.tencentcloud_sqlserver_readonly_groups.test"

func TestAccTencentCloudDataSqlserverReadonlyGroups(t *testing.T) {
func TestAccDataSourceTencentCloudSqlserverReadonlyGroups(t *testing.T) {
t.Parallel()
resource.Test(t, resource.TestCase{
PreCheck: func() { testAccPreCheck(t) },
Expand Down
2 changes: 2 additions & 0 deletions tencentcloud/extension_sqlserver.go
Original file line number Diff line number Diff line change
Expand Up @@ -46,13 +46,15 @@ const (
SQLSERVER_DB_RUNNING = 2
SQLSERVER_DB_MODIFYING = 3
SQLSERVER_DB_DELETING = -1
SQLSERVER_DB_UPGRADING = 9
)

var SQLSERVER_DB_STATUS = map[int64]string{
SQLSERVER_DB_CREATING: "creating",
SQLSERVER_DB_RUNNING: "running",
SQLSERVER_DB_MODIFYING: "modifying",
SQLSERVER_DB_DELETING: "deleting",
SQLSERVER_DB_UPGRADING: "upgrading",
}

const (
Expand Down
8 changes: 4 additions & 4 deletions tencentcloud/resource_tc_sqlserver_db_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -89,17 +89,17 @@ func testAccCheckSqlserverDBExists(n string) resource.TestCheckFunc {
}
}

const testAccSqlserverDB_basic = testAccSqlserverInstance + `
const testAccSqlserverDB_basic = CommonPresetSQLServer + `
resource "tencentcloud_sqlserver_db" "mysqlserver_db" {
instance_id = tencentcloud_sqlserver_instance.test.id
instance_id = local.sqlserver_id
name = "testAccSqlserverDB"
charset = "Chinese_PRC_BIN"
remark = "testACC-remark"
}`

const testAccSqlserverDB_basic_update_remark = testAccSqlserverInstance + `
const testAccSqlserverDB_basic_update_remark = CommonPresetSQLServer + `
resource "tencentcloud_sqlserver_db" "mysqlserver_db" {
instance_id = tencentcloud_sqlserver_instance.test.id
instance_id = local.sqlserver_id
name = "testAccSqlserverDB"
charset = "Chinese_PRC_BIN"
remark = "testACC-remark_update"
Expand Down
127 changes: 116 additions & 11 deletions tencentcloud/resource_tc_sqlserver_instance.go
Original file line number Diff line number Diff line change
Expand Up @@ -36,8 +36,8 @@ import (
"github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper"
)

func TencentSqlServerBasicInfo() map[string]*schema.Schema {
return map[string]*schema.Schema{
func TencentSqlServerBasicInfo(isROInstance bool) map[string]*schema.Schema {
basicSchema := map[string]*schema.Schema{
"name": {
Type: schema.TypeString,
Required: true,
Expand All @@ -49,8 +49,28 @@ func TencentSqlServerBasicInfo() map[string]*schema.Schema {
Optional: true,
Default: COMMON_PAYTYPE_POSTPAID,
ForceNew: true,
ValidateFunc: validateAllowedStringValue(POSTGRESQL_PAYTYPE),
Description: "Pay type of the SQL Server instance. For now, only `POSTPAID_BY_HOUR` is valid.",
ValidateFunc: validateAllowedStringValue([]string{COMMON_PAYTYPE_PREPAID, COMMON_PAYTYPE_POSTPAID}),
Description: "Pay type of the SQL Server instance. Available values `PREPAID`, `POSTPAID_BY_HOUR`.",
},
"period": {
Type: schema.TypeInt,
Optional: true,
ValidateFunc: validateIntegerInRange(1, 48),
Description: "Purchase instance period in month. The value does not exceed 48.",
},
"auto_voucher": {
Type: schema.TypeInt,
Optional: true,
Default: 0,
Description: "Whether to use the voucher automatically; 1 for yes, 0 for no, the default is 0.",
},
"voucher_ids": {
Type: schema.TypeSet,
Optional: true,
Elem: &schema.Schema{
Type: schema.TypeString,
},
Description: "An array of voucher IDs, currently only one can be used for a single order.",
},
"vpc_id": {
Type: schema.TypeString,
Expand Down Expand Up @@ -121,6 +141,16 @@ func TencentSqlServerBasicInfo() map[string]*schema.Schema {
Description: "The tags of the SQL Server.",
},
}

if !isROInstance {
basicSchema["auto_renew"] = &schema.Schema{
Type: schema.TypeInt,
Optional: true,
Description: "Automatic renewal sign. 0 for normal renewal, 1 for automatic renewal (Default). Only valid when purchasing a prepaid instance.",
}
}

return basicSchema
}

func resourceTencentCloudSqlserverInstance() *schema.Resource {
Expand Down Expand Up @@ -173,7 +203,7 @@ func resourceTencentCloudSqlserverInstance() *schema.Resource {
Description: "Project ID, default value is 0.",
},
}
basic := TencentSqlServerBasicInfo()
basic := TencentSqlServerBasicInfo(false)
for k, v := range basic {
specialInfo[k] = v
}
Expand Down Expand Up @@ -223,9 +253,7 @@ func resourceTencentCloudSqlserverInstanceCreate(d *schema.ResourceData, meta in
weekSet = append(weekSet, vv.(int))
}
}
if payType == COMMON_PAYTYPE_POSTPAID {
payType = "POSTPAID"
}

var instanceId string
var outErr, inErr error

Expand All @@ -235,8 +263,65 @@ func resourceTencentCloudSqlserverInstanceCreate(d *schema.ResourceData, meta in
securityGroups = append(securityGroups, sg.(string))
}
}

request := sqlserver.NewCreateDBInstancesRequest()
request.DBVersion = &dbVersion
request.Memory = helper.IntInt64(memory)
request.Storage = helper.IntInt64(storage)
request.SubnetId = &subnetId
request.VpcId = &vpcId
request.HAType = &haType
request.MultiZones = &multiZones

if payType == COMMON_PAYTYPE_POSTPAID {
request.InstanceChargeType = helper.String("POSTPAID")
}
if payType == COMMON_PAYTYPE_PREPAID {
request.InstanceChargeType = helper.String("PREPAID")
if v, ok := d.Get("auto_renew").(int); ok {
request.AutoRenewFlag = helper.IntInt64(v)
}

if v, ok := d.Get("period").(int); ok {
request.Period = helper.IntInt64(v)
}
}

if v, ok := d.Get("auto_voucher").(int); ok {
request.AutoVoucher = helper.IntInt64(v)
}

if v, ok := d.Get("voucher_ids").([]interface{}); ok {
request.VoucherIds = helper.InterfacesStringsPoint(v)
}

if projectId != 0 {
request.ProjectId = helper.IntInt64(projectId)
}

if len(weekSet) > 0 {
request.Weekly = make([]*int64, 0)
for _, i := range weekSet {
request.Weekly = append(request.Weekly, helper.IntInt64(i))
}
}
if startTime != "" {
request.StartTime = &startTime
}
if timeSpan != 0 {
request.Span = helper.IntInt64(timeSpan)
}

request.SecurityGroupList = make([]*string, 0, len(securityGroups))
for _, v := range securityGroups {
request.SecurityGroupList = append(request.SecurityGroupList, &v)
}

request.GoodsNum = helper.IntInt64(1)
request.Zone = &zone

outErr = resource.Retry(writeRetryTimeout, func() *resource.RetryError {
instanceId, inErr = sqlserverService.CreateSqlserverInstance(ctx, dbVersion, payType, memory, 0, projectId, subnetId, vpcId, zone, storage, weekSet, startTime, timeSpan, multiZones, haType, securityGroups)
instanceId, inErr = sqlserverService.CreateSqlserverInstance(ctx, request)
if inErr != nil {
return retryError(inErr)
}
Expand Down Expand Up @@ -294,20 +379,37 @@ func sqlServerAllInstanceRoleUpdate(ctx context.Context, d *schema.ResourceData,
}

//upgrade storage and memory size
if d.HasChange("memory") || d.HasChange("storage") {
if d.HasChange("memory") || d.HasChange("storage") || d.HasChange("auto_voucher") || d.HasChange("voucher_ids") {
memory := d.Get("memory").(int)
storage := d.Get("storage").(int)
autoVoucher := d.Get("auto_voucher").(int)
voucherIds := d.Get("voucher_ids").([]interface{})
outErr = resource.Retry(writeRetryTimeout, func() *resource.RetryError {
inErr = sqlserverService.UpgradeSqlserverInstance(ctx, instanceId, memory, storage)
inErr = sqlserverService.UpgradeSqlserverInstance(ctx, instanceId, memory, storage, autoVoucher, helper.InterfacesStringsPoint(voucherIds))
if inErr != nil {
return retryError(inErr)
}
return nil
})

if outErr != nil {
return outErr
}

outErr = resource.Retry(writeRetryTimeout, func() *resource.RetryError {
instance, _, inErr := sqlserverService.DescribeSqlserverInstanceById(ctx, instanceId)

if inErr != nil {
return retryError(inErr)
}
//specAsExpected := int(*instance.Memory) != memory && int(*instance.Storage) != storage

if *instance.Status == SQLSERVER_DB_UPGRADING {
return resource.RetryableError(fmt.Errorf("instance status code is: %d, waiting for upgrade complete", *instance.Status))
}
return nil
})

d.SetPartial("memory")
d.SetPartial("storage")
}
Expand Down Expand Up @@ -479,6 +581,9 @@ func tencentSqlServerBasicInfoRead(ctx context.Context, d *schema.ResourceData,

if int(*instance.PayMode) == 1 {
_ = d.Set("charge_type", COMMON_PAYTYPE_PREPAID)
if _, ok := d.GetOk("auto_renew"); ok {
_ = d.Set("auto_renew", instance.RenewFlag)
}
} else {
_ = d.Set("charge_type", COMMON_PAYTYPE_POSTPAID)
}
Expand Down
Loading