Skip to content

Commit 696d22c

Browse files
authored
feat/postgresql (#2388)
* feat/postgresql * feat/postgresql * feat/postgresql * feat/postgresql
1 parent 6a63f9b commit 696d22c

File tree

21 files changed

+3289
-1759
lines changed

21 files changed

+3289
-1759
lines changed

.changelog/2388.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
```release-note:new-resource
2+
tencentcloud_postgresql_instance_ha_config
3+
```

go.mod

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ require (
4646
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/clb v1.0.693
4747
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cloudaudit v1.0.544
4848
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cls v1.0.711
49-
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.811
49+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.814
5050
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.624
5151
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cwp v1.0.762
5252
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cynosdb v1.0.692
@@ -70,8 +70,8 @@ require (
7070
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/monitor v1.0.764
7171
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/mps v1.0.777
7272
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/organization v1.0.770
73-
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/postgres v1.0.676
74-
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/privatedns v1.0.751
73+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/postgres v1.0.814
74+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/privatedns v1.0.814
7575
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/pts v1.0.762
7676
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/redis v1.0.657
7777
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/rum v1.0.744

go.sum

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -922,6 +922,8 @@ github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.807/go.mod
922922
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.810/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
923923
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.811 h1:h2IyLDwqrgyN31RwRXVX99ZhwPZYMXEzvW+MGlRXH44=
924924
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.811/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
925+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.814 h1:U1BAjbwmFNg5d9K5syyZh/ELL/70yTNPYQgTuCEmuxk=
926+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.814/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
925927
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.624 h1:nEZqsoqt1pEoaP9JjkHQy3/H00suCfzlHW1qOm2nYD8=
926928
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.624/go.mod h1:+TXSVyeKwt1IhZRqKPbTREteBcP+K07Q846/ilNzLWA=
927929
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cwp v1.0.762 h1:2egy69SP/wPsmnfozcQVZ6tUY6F6N/TpEe/7xtXrc/8=
@@ -974,8 +976,12 @@ github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/organization v1.0.770 h
974976
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/organization v1.0.770/go.mod h1:Ew8jug2Kq03q9Kkjzov7IMYgugGLEw3FGYPofuRqzKw=
975977
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/postgres v1.0.676 h1:KDt87M2b8j/Xo/9o+kaVtJ46fOtPctCpMDa1CJpSlkY=
976978
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/postgres v1.0.676/go.mod h1:mXbqv53QFAhvyYqainXSAMdoCui5GudorFhKufJxITc=
979+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/postgres v1.0.814 h1:1XlGrQHRBJv419m64yWRNRWVUTvqBi3Go4ahndnZz9w=
980+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/postgres v1.0.814/go.mod h1:ch9ZDGEWZXIpzOffmFMgCDKX5uL6x2NLJBiSG94WWEE=
977981
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/privatedns v1.0.751 h1:D2tcvMV9G8dWIoTybLeZoO3Xwz3tFa0A/cN1+glbMG4=
978982
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/privatedns v1.0.751/go.mod h1:PsIFaoUYRjgVGiG9fUFgs1x/ewUsvBtPeIXDHjh8ABw=
983+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/privatedns v1.0.814 h1:9bK2bKOy6FAs+GwtL273zrtSJ/T+nuTdhbLmoGx07LU=
984+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/privatedns v1.0.814/go.mod h1:PeiIuM/rMyPi7P95qKO4W535VOnnV4XOfsMBQO3jPgA=
979985
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/pts v1.0.762 h1:rZDKucVVtTnmnbZFDyh6t47dHswkb2oSuOxOHTTkygA=
980986
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/pts v1.0.762/go.mod h1:QB/XcdVZ8mhRgk90XuXd+2Smfo8emTo0wHIUsygEaKs=
981987
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/redis v1.0.657 h1:9p/4/qXtnBIYkz5b5mYAhp1XhnIn5jUkxxfllF8hMMM=

tencentcloud/extension_postgresql.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,3 +45,13 @@ var POSTGRESQL_RETRYABLE_STATUS = []string{
4545
// deployment changing not exposed at response struct but actually exists
4646
"deployment changing",
4747
}
48+
49+
const (
50+
SYNC_MODE_SEMI = "Semi-sync"
51+
SYNC_MODE_ASYNC = "Async"
52+
)
53+
54+
var SYNC_MODE = []string{
55+
SYNC_MODE_SEMI,
56+
SYNC_MODE_ASYNC,
57+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
Provides a resource to set postgresql instance syncMode
2+
3+
Example Usage
4+
5+
If `sync_mode` is `Semi-sync`
6+
7+
```hcl
8+
resource "tencentcloud_postgresql_instance_ha_config" "example" {
9+
instance_id = "postgres-gzg9jb2n"
10+
sync_mode = "Semi-sync"
11+
max_standby_latency = 10737418240
12+
max_standby_lag = 10
13+
max_sync_standby_latency = 52428800
14+
max_sync_standby_lag = 5
15+
}
16+
```
17+
18+
If `sync_mode` is `Async`
19+
20+
```hcl
21+
resource "tencentcloud_postgresql_instance_ha_config" "example" {
22+
instance_id = "postgres-gzg9jb2n"
23+
sync_mode = "Async"
24+
max_standby_latency = 10737418240
25+
max_standby_lag = 10
26+
}
27+
```

tencentcloud/provider.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1239,6 +1239,7 @@ func Provider() *schema.Provider {
12391239
"tencentcloud_postgresql_delete_log_backup_operation": resourceTencentCloudPostgresqlDeleteLogBackupOperation(),
12401240
"tencentcloud_postgresql_modify_account_remark_operation": resourceTencentCloudPostgresqlModifyAccountRemarkOperation(),
12411241
"tencentcloud_postgresql_modify_switch_time_period_operation": resourceTencentCloudPostgresqlModifySwitchTimePeriodOperation(),
1242+
"tencentcloud_postgresql_instance_ha_config": resourceTencentCloudPostgresqlInstanceHAConfig(),
12421243
"tencentcloud_sqlserver_instance": resourceTencentCloudSqlserverInstance(),
12431244
"tencentcloud_sqlserver_db": resourceTencentCloudSqlserverDB(),
12441245
"tencentcloud_sqlserver_account": resourceTencentCloudSqlserverAccount(),

tencentcloud/provider.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -869,6 +869,7 @@ TencentDB for PostgreSQL(PostgreSQL)
869869
tencentcloud_postgresql_modify_account_remark_operation
870870
tencentcloud_postgresql_modify_switch_time_period_operation
871871
tencentcloud_postgresql_base_backup
872+
tencentcloud_postgresql_instance_ha_config
872873

873874
TencentDB for Redis(crs)
874875
Data Source
Lines changed: 172 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,172 @@
1+
package tencentcloud
2+
3+
import (
4+
"context"
5+
"github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper"
6+
"log"
7+
8+
postgresql "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/postgres/v20170312"
9+
10+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
11+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
12+
)
13+
14+
func resourceTencentCloudPostgresqlInstanceHAConfig() *schema.Resource {
15+
return &schema.Resource{
16+
Create: resourceTencentCloudPostgresqlInstanceHAConfigCreate,
17+
Read: resourceTencentCloudPostgresqlInstanceHAConfigRead,
18+
Update: resourceTencentCloudPostgresqlInstanceHAConfigUpdate,
19+
Delete: resourceTencentCloudPostgresqlInstanceHAConfigDelete,
20+
Importer: &schema.ResourceImporter{
21+
State: schema.ImportStatePassthrough,
22+
},
23+
Schema: map[string]*schema.Schema{
24+
"instance_id": {
25+
Required: true,
26+
Type: schema.TypeString,
27+
Description: "instance id.",
28+
},
29+
"sync_mode": {
30+
Type: schema.TypeString,
31+
Required: true,
32+
ValidateFunc: validateAllowedStringValue(SYNC_MODE),
33+
Description: "Master slave synchronization method, Semi-sync: Semi synchronous; Async: Asynchronous. Main instance default value: Semi-sync, Read-only instance default value: Async.",
34+
},
35+
"max_standby_latency": {
36+
Type: schema.TypeInt,
37+
Required: true,
38+
ValidateFunc: validateIntegerInRange(1073741824, 322122547200),
39+
Description: "Maximum latency data volume for highly available backup machines. When the delay data amount of the backup node is less than or equal to this value, and the delay time of the backup node is less than or equal to MaxStandbyLag, it can switch to the main node. Unit: byte; Parameter range: [1073741824, 322122547200].",
40+
},
41+
"max_standby_lag": {
42+
Type: schema.TypeInt,
43+
Required: true,
44+
ValidateFunc: validateIntegerInRange(5, 10),
45+
Description: "Maximum latency of highly available backup machines. When the delay time of the backup node is less than or equal to this value, and the amount of delay data of the backup node is less than or equal to MaxStandbyLatency, the primary node can be switched. Unit: s; Parameter range: [5, 10].",
46+
},
47+
"max_sync_standby_latency": {
48+
Type: schema.TypeInt,
49+
Optional: true,
50+
Description: "Maximum latency data for synchronous backup. When the amount of data delayed by the backup machine is less than or equal to this value, and the delay time of the backup machine is less than or equal to MaxSyncStandbyLag, then the backup machine adopts synchronous replication; Otherwise, adopt asynchronous replication. This parameter value is valid for instances where SyncMode is set to Semi sync. When a semi synchronous instance prohibits degradation to asynchronous replication, MaxSyncStandbyLatency and MaxSyncStandbyLag are not set. When semi synchronous instances allow degenerate asynchronous replication, PostgreSQL version 9 instances must have MaxSyncStandbyLatency set and MaxSyncStandbyLag not set, while PostgreSQL version 10 and above instances must have MaxSyncStandbyLatency and MaxSyncStandbyLag set.",
51+
},
52+
"max_sync_standby_lag": {
53+
Type: schema.TypeInt,
54+
Optional: true,
55+
Description: "Maximum delay time for synchronous backup. When the delay time of the standby machine is less than or equal to this value, and the amount of delay data of the standby machine is less than or equal to MaxSyncStandbyLatency, then the standby machine adopts synchronous replication; Otherwise, adopt asynchronous replication. This parameter value is valid for instances where SyncMode is set to Semi sync. When a semi synchronous instance prohibits degradation to asynchronous replication, MaxSyncStandbyLatency and MaxSyncStandbyLag are not set. When semi synchronous instances allow degenerate asynchronous replication, PostgreSQL version 9 instances must have MaxSyncStandbyLatency set and MaxSyncStandbyLag not set, while PostgreSQL version 10 and above instances must have MaxSyncStandbyLatency and MaxSyncStandbyLag set.",
56+
},
57+
},
58+
}
59+
}
60+
61+
func resourceTencentCloudPostgresqlInstanceHAConfigCreate(d *schema.ResourceData, meta interface{}) error {
62+
defer logElapsed("resource.tencentcloud_postgresql_instance_ha_config.create")()
63+
defer inconsistentCheck(d, meta)()
64+
65+
var instanceId string
66+
67+
if v, ok := d.GetOk("instance_id"); ok {
68+
instanceId = v.(string)
69+
}
70+
71+
d.SetId(instanceId)
72+
73+
return resourceTencentCloudPostgresqlInstanceHAConfigUpdate(d, meta)
74+
}
75+
76+
func resourceTencentCloudPostgresqlInstanceHAConfigRead(d *schema.ResourceData, meta interface{}) error {
77+
defer logElapsed("resource.tencentcloud_postgresql_instance_ha_config.read")()
78+
defer inconsistentCheck(d, meta)()
79+
80+
var (
81+
logId = getLogId(contextNil)
82+
ctx = context.WithValue(context.TODO(), logIdKey, logId)
83+
service = PostgresqlService{client: meta.(*TencentCloudClient).apiV3Conn}
84+
instanceId = d.Id()
85+
)
86+
87+
haConfig, err := service.DescribePostgresqlInstanceHAConfigById(ctx, instanceId)
88+
if err != nil {
89+
return err
90+
}
91+
92+
if haConfig == nil {
93+
d.SetId("")
94+
log.Printf("[WARN]%s resource `PostgresqlInstanceHAConfig` [%s] not found.\n", logId, d.Id())
95+
return nil
96+
}
97+
98+
_ = d.Set("instance_id", instanceId)
99+
100+
if haConfig.SyncMode != nil {
101+
_ = d.Set("sync_mode", haConfig.SyncMode)
102+
}
103+
104+
if haConfig.MaxStandbyLatency != nil {
105+
_ = d.Set("max_standby_latency", haConfig.MaxStandbyLatency)
106+
}
107+
108+
if haConfig.MaxStandbyLag != nil {
109+
_ = d.Set("max_standby_lag", haConfig.MaxStandbyLag)
110+
}
111+
112+
if haConfig.MaxSyncStandbyLatency != nil {
113+
_ = d.Set("max_sync_standby_latency", haConfig.MaxSyncStandbyLatency)
114+
}
115+
116+
if haConfig.MaxSyncStandbyLag != nil {
117+
_ = d.Set("max_sync_standby_lag", haConfig.MaxSyncStandbyLag)
118+
}
119+
120+
return nil
121+
}
122+
123+
func resourceTencentCloudPostgresqlInstanceHAConfigUpdate(d *schema.ResourceData, meta interface{}) error {
124+
defer logElapsed("resource.tencentcloud_postgresql_instance_ha_config.update")()
125+
defer inconsistentCheck(d, meta)()
126+
127+
var (
128+
logId = getLogId(contextNil)
129+
request = postgresql.NewModifyDBInstanceHAConfigRequest()
130+
instanceId = d.Id()
131+
syncMode = d.Get("sync_mode").(string)
132+
maxStandbyLatency = d.Get("max_standby_latency").(int)
133+
maxStandbyLag = d.Get("max_standby_lag").(int)
134+
)
135+
136+
request.DBInstanceId = &instanceId
137+
request.SyncMode = &syncMode
138+
request.MaxStandbyLatency = helper.IntUint64(maxStandbyLatency)
139+
request.MaxStandbyLag = helper.IntUint64(maxStandbyLag)
140+
if v, ok := d.GetOkExists("max_sync_standby_latency"); ok {
141+
request.MaxSyncStandbyLatency = helper.IntUint64(v.(int))
142+
}
143+
144+
if v, ok := d.GetOkExists("max_sync_standby_lag"); ok {
145+
request.MaxSyncStandbyLag = helper.IntUint64(v.(int))
146+
}
147+
148+
err := resource.Retry(writeRetryTimeout, func() *resource.RetryError {
149+
result, e := meta.(*TencentCloudClient).apiV3Conn.UsePostgresqlClient().ModifyDBInstanceHAConfig(request)
150+
if e != nil {
151+
return retryError(e)
152+
} else {
153+
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
154+
}
155+
156+
return nil
157+
})
158+
159+
if err != nil {
160+
log.Printf("[CRITAL]%s operate postgresql ModifyDBInstanceHAConfig failed, reason:%+v", logId, err)
161+
return err
162+
}
163+
164+
return resourceTencentCloudPostgresqlInstanceHAConfigRead(d, meta)
165+
}
166+
167+
func resourceTencentCloudPostgresqlInstanceHAConfigDelete(d *schema.ResourceData, meta interface{}) error {
168+
defer logElapsed("resource.tencentcloud_postgresql_instance_ha_config.delete")()
169+
defer inconsistentCheck(d, meta)()
170+
171+
return nil
172+
}
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
package tencentcloud
2+
3+
import (
4+
"testing"
5+
6+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
7+
)
8+
9+
// go test -i; go test -test.run TestAccTencentCloudPostgresqlInstanceHAConfigResource_basic -v
10+
func TestAccTencentCloudPostgresqlInstanceHAConfigResource_basic(t *testing.T) {
11+
resource.Test(t, resource.TestCase{
12+
PreCheck: func() {
13+
testAccPreCheck(t)
14+
},
15+
Providers: testAccProviders,
16+
Steps: []resource.TestStep{
17+
{
18+
Config: testAccPostgresqlInstanceHAConfig,
19+
Check: resource.ComposeTestCheckFunc(
20+
resource.TestCheckResourceAttrSet("tencentcloud_postgresql_instance_ha_config.example", "id"),
21+
resource.TestCheckResourceAttr("tencentcloud_postgresql_instance_ha_config.example", "sync_mode", "Semi-sync"),
22+
resource.TestCheckResourceAttrSet("tencentcloud_postgresql_instance_ha_config.example", "max_standby_latency"),
23+
resource.TestCheckResourceAttrSet("tencentcloud_postgresql_instance_ha_config.example", "max_standby_lag"),
24+
resource.TestCheckResourceAttrSet("tencentcloud_postgresql_instance_ha_config.example", "max_sync_standby_latency"),
25+
resource.TestCheckResourceAttrSet("tencentcloud_postgresql_instance_ha_config.example", "max_sync_standby_lag"),
26+
),
27+
},
28+
{
29+
ResourceName: "tencentcloud_postgresql_instance_ha_config.example",
30+
ImportState: true,
31+
ImportStateVerify: true,
32+
},
33+
{
34+
Config: testAccPostgresqlInstanceHAConfigAsync,
35+
Check: resource.ComposeTestCheckFunc(
36+
resource.TestCheckResourceAttrSet("tencentcloud_postgresql_instance_ha_config.example", "id"),
37+
resource.TestCheckResourceAttr("tencentcloud_postgresql_instance_ha_config.example", "sync_mode", "Async"),
38+
resource.TestCheckResourceAttrSet("tencentcloud_postgresql_instance_ha_config.example", "max_standby_latency"),
39+
resource.TestCheckResourceAttrSet("tencentcloud_postgresql_instance_ha_config.example", "max_standby_lag"),
40+
),
41+
},
42+
},
43+
})
44+
}
45+
46+
const testAccPostgresqlInstanceHAConfig = `
47+
resource "tencentcloud_postgresql_instance_ha_config" "example" {
48+
instance_id = "postgres-gzg9jb2n"
49+
sync_mode = "Semi-sync"
50+
max_standby_latency = 10737418240
51+
max_standby_lag = 10
52+
max_sync_standby_latency = 52428800
53+
max_sync_standby_lag = 5
54+
}
55+
`
56+
57+
const testAccPostgresqlInstanceHAConfigAsync = `
58+
resource "tencentcloud_postgresql_instance_ha_config" "example" {
59+
instance_id = "postgres-gzg9jb2n"
60+
sync_mode = "Async"
61+
max_standby_latency = 10737418240
62+
max_standby_lag = 10
63+
}
64+
`

tencentcloud/service_tencentcloud_postgresql.go

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -450,6 +450,32 @@ func (me *PostgresqlService) DescribePostgresqlInstanceById(ctx context.Context,
450450
return
451451
}
452452

453+
func (me *PostgresqlService) DescribePostgresqlInstanceHAConfigById(ctx context.Context, instanceId string) (haConfig *postgresql.DescribeDBInstanceHAConfigResponseParams, errRet error) {
454+
logId := getLogId(ctx)
455+
request := postgresql.NewDescribeDBInstanceHAConfigRequest()
456+
defer func() {
457+
if errRet != nil {
458+
log.Printf("[CRITAL]%s api[%s] fail,reason[%s]", logId, request.GetAction(), errRet.Error())
459+
}
460+
}()
461+
request.DBInstanceId = &instanceId
462+
463+
ratelimit.Check(request.GetAction())
464+
response, err := me.client.UsePostgresqlClient().DescribeDBInstanceHAConfig(request)
465+
if err != nil {
466+
errRet = err
467+
return
468+
}
469+
470+
if response == nil || response.Response == nil {
471+
errRet = fmt.Errorf("TencentCloud SDK return nil response, %s", request.GetAction())
472+
return
473+
}
474+
475+
haConfig = response.Response
476+
return
477+
}
478+
453479
func (me *PostgresqlService) DescribePostgresqlInstances(ctx context.Context, filter []*postgresql.Filter) (instanceList []*postgresql.DBInstance, errRet error) {
454480
logId := getLogId(ctx)
455481
request := postgresql.NewDescribeDBInstancesRequest()

0 commit comments

Comments
 (0)