Skip to content

Commit eeb1396

Browse files
authored
Feat/support pg operation (#1820)
* support postgresql attachment resource * add changelog and update doc * e2e passed tencentcloud_postgresql_instance_network_access_attachment * e2e passed tencentcloud_postgresql_readonly_group_network_access_attachment * support postgresql operation resource * passed the e2e case * adjust example * rm clone resource * rm attachment
1 parent a5914d1 commit eeb1396

26 files changed

+1538
-5
lines changed

.changelog/1820.txt

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
```release-note:new-resource
2+
tencentcloud_postgresql_restart_db_instance_operation
3+
```
4+
5+
```release-note:new-resource
6+
tencentcloud_postgresql_renew_db_instance_operation
7+
```
8+
9+
```release-note:new-resource
10+
tencentcloud_postgresql_isolate_db_instance_operation
11+
```
12+
13+
```release-note:new-resource
14+
tencentcloud_postgresql_disisolate_db_instance_operation
15+
```
16+
17+
```release-note:new-resource
18+
tencentcloud_postgresql_rebalance_readonly_group_operation
19+
```
20+
21+
```release-note:new-resource
22+
tencentcloud_postgresql_delete_log_backup_operation
23+
```

tencentcloud/basic_test.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -461,7 +461,16 @@ resource "tencentcloud_instance" "default" {
461461
// End of SQLServer
462462

463463
// PostgreSQL
464+
const defaultPGOperationName = "keep-pg-operation"
465+
const OperationPresetPGSQL = `
466+
data "tencentcloud_postgresql_instances" "foo" {
467+
name = "` + defaultPGOperationName + `"
468+
}
464469
470+
locals {
471+
pgsql_id = data.tencentcloud_postgresql_instances.foo.instance_list.0.id
472+
}
473+
`
465474
const defaultPGSQLName = "keep-postgresql"
466475
const CommonPresetPGSQL = `
467476
data "tencentcloud_postgresql_instances" "foo" {

tencentcloud/common.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,8 @@ var retryableErrorCode = []string{
8282
"ResourceBusy",
8383
// teo
8484
"InvalidParameter.ActionInProgress",
85+
// posgresql
86+
"OperationDenied.InstanceStatusLimitError",
8587
}
8688

8789
// retryableCosErrorCode is retryable error code for COS/CI SDK

tencentcloud/provider.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -585,6 +585,12 @@ TencentDB for PostgreSQL(PostgreSQL)
585585
tencentcloud_postgresql_backup_plan_config
586586
tencentcloud_postgresql_security_group_config
587587
tencentcloud_postgresql_backup_download_restriction_config
588+
tencentcloud_postgresql_restart_db_instance_operation
589+
tencentcloud_postgresql_renew_db_instance_operation
590+
tencentcloud_postgresql_isolate_db_instance_operation
591+
tencentcloud_postgresql_disisolate_db_instance_operation
592+
tencentcloud_postgresql_rebalance_readonly_group_operation
593+
tencentcloud_postgresql_delete_log_backup_operation
588594
589595
TencentDB for Redis(crs)
590596
Data Source
@@ -2002,6 +2008,12 @@ func Provider() *schema.Provider {
20022008
"tencentcloud_postgresql_backup_plan_config": resourceTencentCloudPostgresqlBackupPlanConfig(),
20032009
"tencentcloud_postgresql_security_group_config": resourceTencentCloudPostgresqlSecurityGroupConfig(),
20042010
"tencentcloud_postgresql_backup_download_restriction_config": resourceTencentCloudPostgresqlBackupDownloadRestrictionConfig(),
2011+
"tencentcloud_postgresql_restart_db_instance_operation": resourceTencentCloudPostgresqlRestartDbInstanceOperation(),
2012+
"tencentcloud_postgresql_renew_db_instance_operation": resourceTencentCloudPostgresqlRenewDbInstanceOperation(),
2013+
"tencentcloud_postgresql_isolate_db_instance_operation": resourceTencentCloudPostgresqlIsolateDbInstanceOperation(),
2014+
"tencentcloud_postgresql_disisolate_db_instance_operation": resourceTencentCloudPostgresqlDisisolateDbInstanceOperation(),
2015+
"tencentcloud_postgresql_rebalance_readonly_group_operation": resourceTencentCloudPostgresqlRebalanceReadonlyGroupOperation(),
2016+
"tencentcloud_postgresql_delete_log_backup_operation": resourceTencentCloudPostgresqlDeleteLogBackupOperation(),
20052017
"tencentcloud_sqlserver_instance": resourceTencentCloudSqlserverInstance(),
20062018
"tencentcloud_sqlserver_db": resourceTencentCloudSqlserverDB(),
20072019
"tencentcloud_sqlserver_account": resourceTencentCloudSqlserverAccount(),
Lines changed: 149 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,149 @@
1+
package tencentcloud
2+
3+
import (
4+
"testing"
5+
6+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
7+
)
8+
9+
const testAccPostgresqlInstanceOperation_disisolate = "tencentcloud_postgresql_disisolate_db_instance_operation.disisolate_db_instance_operation"
10+
const testAccPostgresqlInstanceOperation_isolate = "tencentcloud_postgresql_isolate_db_instance_operation.isolate_db_instance_operation"
11+
const testAccPostgresqlInstanceOperation_renew = "tencentcloud_postgresql_renew_db_instance_operation.renew_db_instance_operation"
12+
const testAccPostgresqlInstanceOperation_restart = "tencentcloud_postgresql_restart_db_instance_operation.restart_db_instance_operation"
13+
14+
func TestAccTencentCloudPostgresqlCommonDbInstanceOperationResource_all(t *testing.T) {
15+
// t.Parallel()
16+
resource.Test(t, resource.TestCase{
17+
PreCheck: func() { testAccPreCheck(t) },
18+
Providers: testAccProviders,
19+
Steps: []resource.TestStep{
20+
{
21+
Config: testAccPostgresqlCommonDbInstanceOperation_restart,
22+
PreConfig: func() { testAccStepPreConfigSetTempAKSK(t, ACCOUNT_TYPE_COMMON) },
23+
Check: resource.ComposeTestCheckFunc(
24+
resource.TestCheckResourceAttrSet(testAccPostgresqlInstanceOperation_restart, "id"),
25+
resource.TestCheckResourceAttrSet(testAccPostgresqlInstanceOperation_restart, "db_instance_id"),
26+
),
27+
},
28+
{
29+
Config: testAccPostgresqlCommonDbInstanceOperation_isolate,
30+
PreConfig: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_COMMON) },
31+
Check: resource.ComposeTestCheckFunc(
32+
resource.TestCheckResourceAttrSet(testAccPostgresqlInstanceOperation_isolate, "id"),
33+
resource.TestCheckResourceAttr(testAccPostgresqlInstanceOperation_isolate, "db_instance_id_set.#", "1"),
34+
),
35+
},
36+
{
37+
Config: testAccPostgresqlCommonDbInstanceOperation_disisolate,
38+
PreConfig: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_COMMON) },
39+
Check: resource.ComposeTestCheckFunc(
40+
resource.TestCheckResourceAttrSet(testAccPostgresqlInstanceOperation_disisolate, "id"),
41+
resource.TestCheckResourceAttr(testAccPostgresqlInstanceOperation_disisolate, "db_instance_id_set.#", "1"),
42+
resource.TestCheckResourceAttr(testAccPostgresqlInstanceOperation_disisolate, "period", "1"),
43+
resource.TestCheckResourceAttr(testAccPostgresqlInstanceOperation_disisolate, "auto_voucher", "false"),
44+
),
45+
},
46+
},
47+
})
48+
}
49+
50+
func TestAccTencentCloudPostgresqlCommonDbInstanceOperationResource_renew(t *testing.T) {
51+
// t.Parallel()
52+
resource.Test(t, resource.TestCase{
53+
PreCheck: func() { testAccPreCheck(t) },
54+
Providers: testAccProviders,
55+
Steps: []resource.TestStep{
56+
{
57+
Config: testAccPostgresqlCommonDbInstanceOperation_renew,
58+
PreConfig: func() { testAccStepPreConfigSetTempAKSK(t, ACCOUNT_TYPE_PREPAY) },
59+
Check: resource.ComposeTestCheckFunc(
60+
resource.TestCheckResourceAttrSet(testAccPostgresqlInstanceOperation_renew, "id"),
61+
resource.TestCheckResourceAttrSet(testAccPostgresqlInstanceOperation_renew, "db_instance_id"),
62+
resource.TestCheckResourceAttr(testAccPostgresqlInstanceOperation_renew, "period", "1"),
63+
resource.TestCheckResourceAttr(testAccPostgresqlInstanceOperation_renew, "auto_voucher", "0"),
64+
),
65+
},
66+
},
67+
})
68+
}
69+
70+
const testAccPostgresqlCommonDbInstanceOperation_isolate = OperationPresetPGSQL + `
71+
72+
resource "tencentcloud_postgresql_isolate_db_instance_operation" "isolate_db_instance_operation" {
73+
db_instance_id_set = [local.pgsql_id]
74+
}
75+
76+
`
77+
78+
const testAccPostgresqlCommonDbInstanceOperation_disisolate = OperationPresetPGSQL + `
79+
80+
resource "tencentcloud_postgresql_disisolate_db_instance_operation" "disisolate_db_instance_operation" {
81+
db_instance_id_set = [local.pgsql_id]
82+
period = 1
83+
auto_voucher = false
84+
}
85+
86+
`
87+
88+
const testAccPostgresqlCommonDbInstanceOperation_restart = OperationPresetPGSQL + `
89+
90+
resource "tencentcloud_postgresql_restart_db_instance_operation" "restart_db_instance_operation" {
91+
db_instance_id = local.pgsql_id
92+
}
93+
94+
`
95+
96+
const testAccPostgresqlCommonDbInstanceOperation_renew = testAccPostgresqlInstanceCommonBase_PREPAID + `
97+
98+
resource "tencentcloud_postgresql_renew_db_instance_operation" "renew_db_instance_operation" {
99+
db_instance_id = tencentcloud_postgresql_instance.oper_test_PREPAID.id
100+
period = 1
101+
auto_voucher = 0
102+
}
103+
104+
`
105+
106+
const testAccPostgresqlInstanceCommonBase_PREPAID = defaultAzVariable + `
107+
108+
data "tencentcloud_security_groups" "sg" {
109+
name = "default"
110+
}
111+
112+
data "tencentcloud_vpc_subnets" "gz3" {
113+
availability_zone = var.default_az
114+
is_default = true
115+
}
116+
117+
locals {
118+
vpc_id = data.tencentcloud_vpc_subnets.gz3.instance_list.0.vpc_id
119+
subnet_id = data.tencentcloud_vpc_subnets.gz3.instance_list.0.subnet_id
120+
}
121+
122+
locals {
123+
my_vpc_id = tencentcloud_subnet.subnet.vpc_id
124+
my_subnet_id = tencentcloud_subnet.subnet.id
125+
my_sg_id = data.tencentcloud_security_groups.sg.security_groups.0.security_group_id
126+
}
127+
128+
resource "tencentcloud_postgresql_instance" "oper_test_PREPAID" {
129+
name = "tf_postsql_instance_common_operation"
130+
availability_zone = var.default_az
131+
charge_type = "PREPAID"
132+
period = 1
133+
vpc_id = local.my_vpc_id
134+
subnet_id = local.my_subnet_id
135+
engine_version = "13.3"
136+
root_password = "t1qaA2k1wgvfa3?ZZZ"
137+
security_groups = [local.my_sg_id]
138+
charset = "LATIN1"
139+
project_id = 0
140+
memory = 4
141+
storage = 20
142+
143+
db_kernel_version = "v13.3_r1.1"
144+
145+
tags = {
146+
tf = "test"
147+
}
148+
}
149+
`
Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
/*
2+
Provides a resource to create a postgresql delete_log_backup_operation
3+
4+
Example Usage
5+
6+
```hcl
7+
resource "tencentcloud_postgresql_delete_log_backup_operation" "delete_log_backup_operation" {
8+
db_instance_id = "local.pg_id"
9+
log_backup_id = "local.pg_log_backup_id"
10+
}
11+
```
12+
*/
13+
package tencentcloud
14+
15+
import (
16+
"log"
17+
"strings"
18+
19+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
20+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
21+
postgresql "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/postgres/v20170312"
22+
"github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper"
23+
)
24+
25+
func resourceTencentCloudPostgresqlDeleteLogBackupOperation() *schema.Resource {
26+
return &schema.Resource{
27+
Create: resourceTencentCloudPostgresqlDeleteLogBackupOperationCreate,
28+
Read: resourceTencentCloudPostgresqlDeleteLogBackupOperationRead,
29+
Delete: resourceTencentCloudPostgresqlDeleteLogBackupOperationDelete,
30+
Schema: map[string]*schema.Schema{
31+
"db_instance_id": {
32+
Required: true,
33+
ForceNew: true,
34+
Type: schema.TypeString,
35+
Description: "Instance ID.",
36+
},
37+
38+
"log_backup_id": {
39+
Required: true,
40+
ForceNew: true,
41+
Type: schema.TypeString,
42+
Description: "Log backup ID.",
43+
},
44+
},
45+
}
46+
}
47+
48+
func resourceTencentCloudPostgresqlDeleteLogBackupOperationCreate(d *schema.ResourceData, meta interface{}) error {
49+
defer logElapsed("resource.tencentcloud_postgresql_delete_log_backup_operation.create")()
50+
defer inconsistentCheck(d, meta)()
51+
52+
logId := getLogId(contextNil)
53+
54+
var (
55+
request = postgresql.NewDeleteLogBackupRequest()
56+
dBInstanceId string
57+
logBackupId string
58+
)
59+
60+
if v, ok := d.GetOk("db_instance_id"); ok {
61+
request.DBInstanceId = helper.String(v.(string))
62+
dBInstanceId = v.(string)
63+
}
64+
65+
if v, ok := d.GetOk("log_backup_id"); ok {
66+
request.LogBackupId = helper.String(v.(string))
67+
logBackupId = v.(string)
68+
}
69+
70+
err := resource.Retry(writeRetryTimeout, func() *resource.RetryError {
71+
result, e := meta.(*TencentCloudClient).apiV3Conn.UsePostgresqlClient().DeleteLogBackup(request)
72+
if e != nil {
73+
return retryError(e)
74+
} else {
75+
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
76+
}
77+
return nil
78+
})
79+
if err != nil {
80+
log.Printf("[CRITAL]%s operate postgresql DeleteLogBackupOperation failed, reason:%+v", logId, err)
81+
return err
82+
}
83+
84+
d.SetId(strings.Join([]string{dBInstanceId, logBackupId}, FILED_SP))
85+
86+
return resourceTencentCloudPostgresqlDeleteLogBackupOperationRead(d, meta)
87+
}
88+
89+
func resourceTencentCloudPostgresqlDeleteLogBackupOperationRead(d *schema.ResourceData, meta interface{}) error {
90+
defer logElapsed("resource.tencentcloud_postgresql_delete_log_backup_operation.read")()
91+
defer inconsistentCheck(d, meta)()
92+
93+
return nil
94+
}
95+
96+
func resourceTencentCloudPostgresqlDeleteLogBackupOperationDelete(d *schema.ResourceData, meta interface{}) error {
97+
defer logElapsed("resource.tencentcloud_postgresql_delete_log_backup_operation.delete")()
98+
defer inconsistentCheck(d, meta)()
99+
100+
return nil
101+
}
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package tencentcloud
2+
3+
import (
4+
"testing"
5+
6+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
7+
)
8+
9+
func TestAccTencentCloudNeedFixPostgresqlDeleteLogBackupOperationResource_basic(t *testing.T) {
10+
t.Parallel()
11+
resource.Test(t, resource.TestCase{
12+
PreCheck: func() {
13+
testAccPreCheck(t)
14+
},
15+
Providers: testAccProviders,
16+
Steps: []resource.TestStep{
17+
{
18+
Config: testAccPostgresqlDeleteLogBackupOperation,
19+
Check: resource.ComposeTestCheckFunc(
20+
resource.TestCheckResourceAttrSet("tencentcloud_postgresql_delete_log_backup_operation.delete_log_backup_operation", "id"),
21+
resource.TestCheckResourceAttrSet("tencentcloud_postgresql_delete_log_backup_operation.delete_log_backup_operation", "db_instance_id"),
22+
resource.TestCheckResourceAttrSet("tencentcloud_postgresql_delete_log_backup_operation.delete_log_backup_operation", "log_backup_id"),
23+
),
24+
},
25+
},
26+
})
27+
}
28+
29+
const testAccPostgresqlDeleteLogBackupOperation = CommonPresetPGSQL + `
30+
31+
resource "tencentcloud_postgresql_delete_log_backup_operation" "delete_log_backup_operation" {
32+
db_instance_id = local.pgsql_id
33+
log_backup_id = "9e93596c-c5b1-557e-aa87-8b857d79e283"
34+
# use the data source after tencentcloud_postgresql_base_backups ready
35+
#log_backup_id = data.tencentcloud_postgresql_base_backups.foo.log_backup_set.0.id
36+
}
37+
38+
`

0 commit comments

Comments
 (0)