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
29 changes: 22 additions & 7 deletions tencentcloud/resource_tc_postgresql_instance.go
Original file line number Diff line number Diff line change
Expand Up @@ -581,18 +581,21 @@ func resourceTencentCloudPostgresqlInstanceCreate(d *schema.ResourceData, meta i
d.SetId(instanceId)

// check creation done
err := resource.Retry(5*readRetryTimeout, func() *resource.RetryError {
err := resource.Retry(20*readRetryTimeout, func() *resource.RetryError {
instance, has, err := postgresqlService.DescribePostgresqlInstanceById(ctx, instanceId)
if err != nil {
return retryError(err)
} else if has && *instance.DBInstanceStatus == "running" {
}

if !has {
return resource.NonRetryableError(fmt.Errorf("create postgresql instance fail"))
}

if *instance.DBInstanceStatus == POSTGRESQL_STAUTS_RUNNING {
memory = int(*instance.DBInstanceMemory)
return nil
} else if !has {
return resource.NonRetryableError(fmt.Errorf("create postgresql instance fail"))
} else {
return resource.RetryableError(fmt.Errorf("creating postgresql instance %s , status %s ", instanceId, *instance.DBInstanceStatus))
}
return resource.RetryableError(fmt.Errorf("creating postgresql instance %s , status %s ", instanceId, *instance.DBInstanceStatus))
})

if err != nil {
Expand Down Expand Up @@ -757,8 +760,20 @@ func resourceTencentCloudPostgresqlInstanceUpdate(d *schema.ResourceData, meta i
if outErr != nil {
return outErr
}
// Wait for status to processing
_ = resource.Retry(time.Second*10, func() *resource.RetryError {
instance, _, err := postgresqlService.DescribePostgresqlInstanceById(ctx, instanceId)
if err != nil {
return retryError(err)
}
if *instance.DBInstanceStatus == POSTGRESQL_STAUTS_RUNNING {
return resource.RetryableError(fmt.Errorf("waiting for upgrade status change"))
}
return nil
})
time.Sleep(time.Second * 5)
// check update storage and memory done
checkErr = postgresqlService.CheckDBInstanceStatus(ctx, instanceId)
checkErr = postgresqlService.CheckDBInstanceStatus(ctx, instanceId, 60)
if checkErr != nil {
return checkErr
}
Expand Down
49 changes: 42 additions & 7 deletions tencentcloud/resource_tc_postgresql_instance_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -128,7 +128,19 @@ func TestAccTencentCloudPostgresqlInstanceResource(t *testing.T) {
ImportStateVerify: true,
ImportStateVerifyIgnore: []string{"root_password", "spec_code", "public_access_switch", "charset", "backup_plan"},
},

{
Config: testAccPostgresqlInstanceOpenPublic,
Check: resource.ComposeTestCheckFunc(
testAccCheckPostgresqlInstanceExists(testPostgresqlInstanceResourceKey),
resource.TestCheckResourceAttrSet(testPostgresqlInstanceResourceKey, "id"),
resource.TestCheckResourceAttr(testPostgresqlInstanceResourceKey, "public_access_switch", "true"),
resource.TestCheckResourceAttrSet(testPostgresqlInstanceResourceKey, "private_access_ip"),
resource.TestCheckResourceAttrSet(testPostgresqlInstanceResourceKey, "private_access_port"),
resource.TestCheckResourceAttrSet(testPostgresqlInstanceResourceKey, "public_access_host"),
resource.TestCheckResourceAttrSet(testPostgresqlInstanceResourceKey, "public_access_port"),
//resource.TestCheckResourceAttr(testPostgresqlInstanceResourceKey, "tags.tf", "teest"),
),
},
{
Config: testAccPostgresqlInstanceUpdate,
Check: resource.ComposeTestCheckFunc(
Expand All @@ -142,13 +154,9 @@ func TestAccTencentCloudPostgresqlInstanceResource(t *testing.T) {
resource.TestCheckResourceAttr(testPostgresqlInstanceResourceKey, "storage", "250"),
resource.TestCheckResourceAttrSet(testPostgresqlInstanceResourceKey, "create_time"),
resource.TestCheckResourceAttr(testPostgresqlInstanceResourceKey, "project_id", "0"),
resource.TestCheckResourceAttr(testPostgresqlInstanceResourceKey, "public_access_switch", "true"),
resource.TestCheckResourceAttr(testPostgresqlInstanceResourceKey, "public_access_switch", "false"),
resource.TestCheckResourceAttr(testPostgresqlInstanceResourceKey, "root_password", "t1qaA2k1wgvfa3?ZZZ"),
resource.TestCheckResourceAttrSet(testPostgresqlInstanceResourceKey, "availability_zone"),
resource.TestCheckResourceAttrSet(testPostgresqlInstanceResourceKey, "private_access_ip"),
resource.TestCheckResourceAttrSet(testPostgresqlInstanceResourceKey, "private_access_port"),
resource.TestCheckResourceAttrSet(testPostgresqlInstanceResourceKey, "public_access_host"),
resource.TestCheckResourceAttrSet(testPostgresqlInstanceResourceKey, "public_access_port"),
resource.TestCheckResourceAttr(testPostgresqlInstanceResourceKey, "backup_plan.0.min_backup_start_time", "01:10:11"),
resource.TestCheckResourceAttr(testPostgresqlInstanceResourceKey, "backup_plan.0.max_backup_start_time", "02:10:11"),
resource.TestCheckResourceAttr(testPostgresqlInstanceResourceKey, "backup_plan.0.backup_period.#", "3"),
Expand Down Expand Up @@ -280,7 +288,7 @@ resource "tencentcloud_postgresql_instance" "test" {
}
`

const testAccPostgresqlInstanceUpdate string = testAccPostgresqlInstanceBasic + defaultVpcSubnets + `
const testAccPostgresqlInstanceOpenPublic string = testAccPostgresqlInstanceBasic + defaultVpcSubnets + `
resource "tencentcloud_postgresql_instance" "test" {
name = "tf_postsql_instance_update"
availability_zone = data.tencentcloud_availability_zones_by_product.zone.zones[5].name
Expand All @@ -307,6 +315,33 @@ resource "tencentcloud_postgresql_instance" "test" {
}
`

const testAccPostgresqlInstanceUpdate string = testAccPostgresqlInstanceBasic + defaultVpcSubnets + `
resource "tencentcloud_postgresql_instance" "test" {
name = "tf_postsql_instance_update"
availability_zone = data.tencentcloud_availability_zones_by_product.zone.zones[5].name
charge_type = "POSTPAID_BY_HOUR"
vpc_id = local.vpc_id
subnet_id = local.subnet_id
engine_version = "10.4"
root_password = "t1qaA2k1wgvfa3?ZZZ"
charset = "LATIN1"
project_id = 0
public_access_switch = false
memory = 4
storage = 250
backup_plan {
min_backup_start_time = "01:10:11"
max_backup_start_time = "02:10:11"
base_backup_retention_period = 5
backup_period = ["monday", "thursday", "sunday"]
}

tags = {
tf = "teest"
}
}
`

const testAccPostgresqlMAZInstance string = `
resource "tencentcloud_vpc" "vpc" {
cidr_block = "10.0.0.0/24"
Expand Down
22 changes: 15 additions & 7 deletions tencentcloud/service_tencentcloud_postgresql.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import (
"fmt"
"log"
"strconv"
"time"

"github.com/hashicorp/terraform-plugin-sdk/helper/resource"
sdkErrors "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors"
Expand Down Expand Up @@ -534,19 +535,26 @@ func (me *PostgresqlService) SetPostgresqlInstanceRootPassword(ctx context.Conte
return err
}

func (me *PostgresqlService) CheckDBInstanceStatus(ctx context.Context, instanceId string) error {
func (me *PostgresqlService) CheckDBInstanceStatus(ctx context.Context, instanceId string, retryMinutes ...int) error {

var timeout = 2 * readRetryTimeout
if len(retryMinutes) > 0 && retryMinutes[0] > 0 {
times := retryMinutes[0]
timeout = time.Minute * time.Duration(times)
}
// check status
err := resource.Retry(2*readRetryTimeout, func() *resource.RetryError {
err := resource.Retry(timeout, func() *resource.RetryError {
instance, has, err := me.DescribePostgresqlInstanceById(ctx, instanceId)
if err != nil {
return retryError(err)
} else if has && *instance.DBInstanceStatus == POSTGRESQL_STAUTS_RUNNING {
return nil
} else if !has {
}
if !has {
return resource.NonRetryableError(fmt.Errorf("check postgresql instance %s fail", instanceId))
} else {
return resource.RetryableError(fmt.Errorf("checking postgresql instance %s , status %s ", instanceId, *instance.DBInstanceStatus))
}
if *instance.DBInstanceStatus == POSTGRESQL_STAUTS_RUNNING {
return nil
}
return resource.RetryableError(fmt.Errorf("checking postgresql instance %s , status %s ", instanceId, *instance.DBInstanceStatus))
})

return err
Expand Down