diff --git a/CHANGELOG.md b/CHANGELOG.md index 421df2ea6c..7b7bd42eed 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,7 +1,9 @@ ## 1.37.0 (Unreleased) FEATURES: - +* **New Resource**: `tencentcloud_postgresql_instance` +* **New Data Source**: `tencentcloud_postgresql_instances` +* **New Data Source**: `tencentcloud_postgresql_speccodes` * **New Data Source**: `tencentcloud_sqlserver_zone_config` ## 1.36.1 (June 12, 2020) diff --git a/examples/tencentcloud-postgresql/main.tf b/examples/tencentcloud-postgresql/main.tf new file mode 100644 index 0000000000..db65e87b7d --- /dev/null +++ b/examples/tencentcloud-postgresql/main.tf @@ -0,0 +1,42 @@ +resource "tencentcloud_vpc" "foo" { + name = "example" + cidr_block = "10.0.0.0/16" +} + +resource "tencentcloud_subnet" "foo" { + name = "example" + availability_zone = var.availability_zone + vpc_id = tencentcloud_vpc.foo.id + cidr_block = "10.0.0.0/24" + is_multicast = false +} + +resource "tencentcloud_postgresql_instance" "example" { + name = "tf_postsql_instance_111" + availability_zone = var.availability_zone + charge_type = "POSTPAID_BY_HOUR" + vpc_id = tencentcloud_vpc.foo.id + subnet_id = tencentcloud_subnet.foo.id + engine_version = "9.3.5" + root_password = "1qaA2k1wgvfa3ZZZ" + charset = "UTF8" + project_id = 0 + memory = 2 + storage = 10 +} + +data "tencentcloud_postgresql_instances" "id_example" { + id = tencentcloud_postgresql_instance.example.id +} + +data "tencentcloud_postgresql_instances" "project_example" { + project_id = 0 +} + +data "tencentcloud_postgresql_instances" "name_example" { + name = tencentcloud_postgresql_instance.example.name +} + +data "tencentcloud_postgresql_specinfos" "example" { + availability_zone = var.availability_zone +} diff --git a/examples/tencentcloud-postgresql/variables.tf b/examples/tencentcloud-postgresql/variables.tf new file mode 100644 index 0000000000..233f24b02c --- /dev/null +++ b/examples/tencentcloud-postgresql/variables.tf @@ -0,0 +1,3 @@ +variable "availability_zone" { + default = "ap-guangzhou-2" +} diff --git a/examples/tencentcloud-postgresql/version.tf b/examples/tencentcloud-postgresql/version.tf new file mode 100644 index 0000000000..133d0d73e7 --- /dev/null +++ b/examples/tencentcloud-postgresql/version.tf @@ -0,0 +1,3 @@ +terraform { + required_version = ">= 0.12" +} \ No newline at end of file diff --git a/go.mod b/go.mod index ad8fdb9eaf..9c8077ae2b 100644 --- a/go.mod +++ b/go.mod @@ -15,7 +15,7 @@ require ( github.com/mattn/go-colorable v0.1.6 // indirect github.com/mitchellh/go-homedir v1.1.0 github.com/pkg/errors v0.9.1 - github.com/tencentcloud/tencentcloud-sdk-go v3.0.187+incompatible + github.com/tencentcloud/tencentcloud-sdk-go v3.0.189+incompatible github.com/yangwenmai/ratelimit v0.0.0-20180104140304-44221c2292e1 github.com/zclconf/go-cty v1.4.2 // indirect golang.org/x/sys v0.0.0-20200523222454-059865788121 // indirect diff --git a/tencentcloud/connectivity/client.go b/tencentcloud/connectivity/client.go index 8dca16841c..f901815845 100644 --- a/tencentcloud/connectivity/client.go +++ b/tencentcloud/connectivity/client.go @@ -24,6 +24,7 @@ import ( gaap "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/gaap/v20180529" mongodb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/mongodb/v20180408" monitor "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/monitor/v20180724" + postgre "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/postgres/v20170312" redis "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/redis/v20180412" scf "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/scf/v20180416" sqlserver "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sqlserver/v20180328" @@ -66,6 +67,7 @@ type TencentCloudClient struct { monitorConn *monitor.Client esConn *es.Client sqlserverConn *sqlserver.Client + postgreConn *postgre.Client } // NewClientProfile returns a new ClientProfile @@ -401,6 +403,19 @@ func (me *TencentCloudClient) UseEsClient() *es.Client { return me.esConn } +// UsePostgreClient returns postgresql client for service +func (me *TencentCloudClient) UsePostgresqlClient() *postgre.Client { + if me.postgreConn != nil { + return me.postgreConn + } + + cpf := me.NewClientProfile(300) + me.postgreConn, _ = postgre.NewClient(me.Credential, me.Region, cpf) + me.postgreConn.WithHttpTransport(&LogRoundTripper{}) + + return me.postgreConn +} + // UseSqlserverClient returns sqlserver client for service func (me *TencentCloudClient) UseSqlserverClient() *sqlserver.Client { if me.sqlserverConn != nil { diff --git a/tencentcloud/data_source_tc_postgresql_instances.go b/tencentcloud/data_source_tc_postgresql_instances.go new file mode 100644 index 0000000000..8f69ab0ee5 --- /dev/null +++ b/tencentcloud/data_source_tc_postgresql_instances.go @@ -0,0 +1,240 @@ +/* +Use this data source to query postgresql instances + +Example Usage + +```hcl +data "tencentcloud_postgresql_instances" "name"{ + name = "test" +} + +data "tencentcloud_postgresql_instances" "project"{ + project_id = 0 +} + +data "tencentcloud_postgresql_instances" "id"{ + id = "postgres-h9t4fde1" +} +``` +*/ +package tencentcloud + +import ( + "context" + "log" + + "github.com/hashicorp/terraform-plugin-sdk/helper/schema" + postgresql "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/postgres/v20170312" + "github.com/terraform-providers/terraform-provider-tencentcloud/tencentcloud/internal/helper" +) + +func dataSourceTencentCloudPostgresqlInstances() *schema.Resource { + return &schema.Resource{ + Read: dataSourceTencentCloudPostgresqlInstanceRead, + Schema: map[string]*schema.Schema{ + "name": { + Type: schema.TypeString, + Optional: true, + Description: "Name of the postgresql instance to be query.", + }, + "id": { + Type: schema.TypeString, + Optional: true, + Description: "ID of the postgresql instance to be query.", + }, + "project_id": { + Type: schema.TypeInt, + Optional: true, + Description: "Project id of the postgresql instance to be query.", + }, + "result_output_file": { + Type: schema.TypeString, + Optional: true, + Description: "Used to save results.", + }, + "instance_list": { + Type: schema.TypeList, + Computed: true, + Description: "A list of postgresql instances. Each element contains the following attributes.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "id": { + Type: schema.TypeString, + Computed: true, + Description: "ID of the postgresql instance.", + }, + "name": { + Type: schema.TypeString, + Computed: true, + Description: "Name of the postgresql instance.", + }, + "charge_type": { + Type: schema.TypeString, + Computed: true, + Description: "Pay type of the postgresql instance.", + }, + "auto_renew_flag": { + Type: schema.TypeInt, + Computed: true, + Description: "Auto renew flag.", + }, + "engine_version": { + Type: schema.TypeString, + Computed: true, + Description: "Version of the postgresql database engine.", + }, + "vpc_id": { + Type: schema.TypeString, + Computed: true, + Description: "ID of VPC.", + }, + "subnet_id": { + Type: schema.TypeString, + Computed: true, + Description: "ID of subnet.", + }, + "storage": { + Type: schema.TypeInt, + Computed: true, + Description: "Disk size (in GB).", + }, + "memory": { + Type: schema.TypeInt, + Computed: true, + Description: "Memory size (in MB).", + }, + "project_id": { + Type: schema.TypeInt, + Computed: true, + Description: "Project ID, default value is 0.", + }, + "availability_zone": { + Type: schema.TypeString, + Computed: true, + Description: "Availability zone.", + }, + "public_access_switch": { + Type: schema.TypeBool, + Computed: true, + Description: "Indicates whether to enable the access to an instance from public network or not.", + }, + "public_access_host": { + Type: schema.TypeString, + Computed: true, + Description: "Host for public access.", + }, + "public_access_port": { + Type: schema.TypeInt, + Computed: true, + Description: "Port for public access.", + }, + "private_access_ip": { + Type: schema.TypeString, + Computed: true, + Description: "Ip address for private access.", + }, + "private_access_port": { + Type: schema.TypeInt, + Computed: true, + Description: "Port for private access.", + }, + "charset": { + Type: schema.TypeString, + Computed: true, + Description: "Charset of the postgresql instance.", + }, + "create_time": { + Type: schema.TypeString, + Computed: true, + Description: "Create time of the postgresql instance.", + }, + }, + }, + }, + }, + } +} + +func dataSourceTencentCloudPostgresqlInstanceRead(d *schema.ResourceData, meta interface{}) error { + defer logElapsed("data_source.tencentcloud_postgresql_instances.read")() + + logId := getLogId(contextNil) + ctx := context.WithValue(context.TODO(), logIdKey, logId) + + service := PostgresqlService{client: meta.(*TencentCloudClient).apiV3Conn} + + filter := make([]*postgresql.Filter, 0) + if v, ok := d.GetOk("name"); ok { + filter = append(filter, &postgresql.Filter{Name: helper.String("db-instance-name"), Values: []*string{helper.String(v.(string))}}) + } + if v, ok := d.GetOk("id"); ok { + filter = append(filter, &postgresql.Filter{Name: helper.String("db-instance-id"), Values: []*string{helper.String(v.(string))}}) + } + if v, ok := d.GetOk("project_id"); ok { + filter = append(filter, &postgresql.Filter{Name: helper.String("db-project-id"), Values: []*string{helper.String(v.(string))}}) + } + + instanceList, err := service.DescribePostgresqlInstances(ctx, filter) + + if err != nil { + instanceList, err = service.DescribePostgresqlInstances(ctx, filter) + } + + if err != nil { + return err + } + + ids := make([]string, 0, len(instanceList)) + list := make([]map[string]interface{}, 0, len(instanceList)) + + for _, v := range instanceList { + listItem := make(map[string]interface{}) + listItem["id"] = v.DBInstanceId + listItem["name"] = v.DBInstanceName + listItem["auto_renew_flag"] = v.AutoRenew + listItem["project_id"] = v.ProjectId + listItem["storage"] = v.DBInstanceStorage + listItem["memory"] = v.DBInstanceMemory + listItem["availability_zone"] = v.Zone + listItem["create_time"] = v.CreateTime + listItem["vpc_id"] = v.VpcId + listItem["subnet_id"] = v.SubnetId + listItem["engine_version"] = v.DBVersion + listItem["public_access_switch"] = false + listItem["charset"] = v.DBCharset + listItem["public_access_host"] = "" + + for _, netInfo := range v.DBInstanceNetInfo { + if *netInfo.NetType == "public" { + if *netInfo.Status == "opened" || *netInfo.Status == "1" { + listItem["public_access_switch"] = true + } + listItem["public_access_host"] = netInfo.Address + listItem["public_access_port"] = netInfo.Port + } + if (*netInfo.NetType == "private" || *netInfo.NetType == "inner") && *netInfo.Ip != "" { + listItem["private_access_ip"] = netInfo.Ip + listItem["private_access_port"] = netInfo.Port + } + } + + if *v.PayType == POSTGRESQL_PAYTYPE_PREPAID || *v.PayType == COMMON_PAYTYPE_PREPAID { + listItem["charge_type"] = COMMON_PAYTYPE_PREPAID + } else { + listItem["charge_type"] = COMMON_PAYTYPE_POSTPAID + } + list = append(list, listItem) + ids = append(ids, *v.DBInstanceId) + } + + d.SetId(helper.DataResourceIdsHash(ids)) + if e := d.Set("instance_list", list); e != nil { + log.Printf("[CRITAL]%s provider set list fail, reason:%s\n", logId, e.Error()) + return e + } + output, ok := d.GetOk("result_output_file") + if ok && output.(string) != "" { + return writeToFile(output.(string), list) + } + return nil +} diff --git a/tencentcloud/data_source_tc_postgresql_instances_test.go b/tencentcloud/data_source_tc_postgresql_instances_test.go new file mode 100644 index 0000000000..993fb2c698 --- /dev/null +++ b/tencentcloud/data_source_tc_postgresql_instances_test.go @@ -0,0 +1,60 @@ +package tencentcloud + +import ( + "testing" + + "github.com/hashicorp/terraform-plugin-sdk/helper/resource" +) + +var testDataPostgresqlInstancesName = "data.tencentcloud_postgresql_instances.id_test" + +func TestAccTencentCloudDataPostgresqlInstances(t *testing.T) { + resource.Test(t, resource.TestCase{ + PreCheck: func() { testAccPreCheck(t) }, + Providers: testAccProviders, + CheckDestroy: testAccCheckLBDestroy, + Steps: []resource.TestStep{ + { + Config: testAccTencentCloudDataPostgresqlInstanceBasic, + Check: resource.ComposeTestCheckFunc( + testAccCheckPostgresqlInstanceExists("tencentcloud_postgresql_instance.test"), + resource.TestCheckResourceAttr(testDataPostgresqlInstancesName, "instance_list.#", "1"), + resource.TestCheckResourceAttrSet(testDataPostgresqlInstancesName, "instance_list.0.id"), + resource.TestCheckResourceAttrSet(testDataPostgresqlInstancesName, "instance_list.0.create_time"), + resource.TestCheckResourceAttrSet(testDataPostgresqlInstancesName, "instance_list.0.id"), + resource.TestCheckResourceAttr(testDataPostgresqlInstancesName, "instance_list.0.charge_type", "POSTPAID_BY_HOUR"), + resource.TestCheckResourceAttr(testDataPostgresqlInstancesName, "instance_list.0.engine_version", "9.3.5"), + resource.TestCheckResourceAttr(testDataPostgresqlInstancesName, "instance_list.0.project_id", "0"), + resource.TestCheckResourceAttr(testDataPostgresqlInstancesName, "instance_list.0.memory", "2"), + resource.TestCheckResourceAttr(testDataPostgresqlInstancesName, "instance_list.0.storage", "100"), + resource.TestCheckResourceAttrSet(testDataPostgresqlInstancesName, "instance_list.0.private_access_ip"), + resource.TestCheckResourceAttrSet(testDataPostgresqlInstancesName, "instance_list.0.private_access_port"), + resource.TestCheckResourceAttrSet(testDataPostgresqlInstancesName, "instance_list.0.public_access_switch"), + resource.TestCheckResourceAttrSet(testDataPostgresqlInstancesName, "instance_list.0.charset"), + ), + }, + }, + }) +} + +const testAccTencentCloudDataPostgresqlInstanceBasic = ` +variable "availability_zone"{ +default = "ap-guangzhou-2" +} + +resource "tencentcloud_postgresql_instance" "test" { +name = "tf_postsql_instance" +availability_zone = var.availability_zone +charge_type = "POSTPAID_BY_HOUR" +engine_version = "9.3.5" +root_password = "1qaA2k1wgvfa3ZZZ" +charset = "UTF8" +project_id = 0 +memory = 2 +storage = 100 +} + +data "tencentcloud_postgresql_instances" "id_test"{ + id = tencentcloud_postgresql_instance.test.id +} +` diff --git a/tencentcloud/data_source_tc_postgresql_specinfos.go b/tencentcloud/data_source_tc_postgresql_specinfos.go new file mode 100644 index 0000000000..da9ad3e1d7 --- /dev/null +++ b/tencentcloud/data_source_tc_postgresql_specinfos.go @@ -0,0 +1,130 @@ +/* +Use this data source to get the available product configs of the postgresql instance. + +Example Usage + +```hcl +data "tencentcloud_postgresql_specinfos" "foo"{ + availability_zone = "ap-shanghai-2" +} +``` +*/ +package tencentcloud + +import ( + "context" + "log" + + "github.com/hashicorp/terraform-plugin-sdk/helper/schema" +) + +func dataSourceTencentCloudPostgresqlSpecinfos() *schema.Resource { + return &schema.Resource{ + Read: dataSourceTencentCloudPostgresqlSpecinfosRead, + Schema: map[string]*schema.Schema{ + "availability_zone": { + Type: schema.TypeString, + Required: true, + Description: "The zone of the postgresql instance to query.", + }, + "result_output_file": { + Type: schema.TypeString, + Optional: true, + Description: "Used to save results.", + }, + "list": { + Type: schema.TypeList, + Computed: true, + Description: "A list of zones will be exported and its every element contains the following attributes:", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "id": { + Type: schema.TypeString, + Computed: true, + Description: "Id of the speccode of the postgresql instance. This parameter is used as `spec_code` for the creation of postgresql instance.", + }, + "memory": { + Type: schema.TypeInt, + Computed: true, + Description: "Memory size(in MB).", + }, + "storage_min": { + Type: schema.TypeInt, + Computed: true, + Description: "The minimum volume size(in GB).", + }, + "storage_max": { + Type: schema.TypeInt, + Computed: true, + Description: "The maximum volume size(in GB).", + }, + "cpu": { + Type: schema.TypeInt, + Computed: true, + Description: "The CPU number of the postgresql instance.", + }, + "qps": { + Type: schema.TypeInt, + Computed: true, + Description: "The QPS of the postgresql instance.", + }, + "version": { + Type: schema.TypeString, + Computed: true, + Description: "The version of the postgresql instance.", + }, + "version_name": { + Type: schema.TypeString, + Computed: true, + Description: "The version name of the postgresql instance.", + }, + }, + }, + }, + }, + } +} + +func dataSourceTencentCloudPostgresqlSpecinfosRead(d *schema.ResourceData, meta interface{}) error { + defer logElapsed("data_source.tencentcloud_postgresql_specinfos.read")() + logId := getLogId(contextNil) + ctx := context.WithValue(context.TODO(), logIdKey, logId) + + service := PostgresqlService{ + client: meta.(*TencentCloudClient).apiV3Conn, + } + + zone := d.Get("availability_zone").(string) + speccodes, err := service.DescribeSpecinfos(ctx, zone) + if err != nil { + speccodes, err = service.DescribeSpecinfos(ctx, zone) + } + if err != nil { + return err + } + + list := make([]map[string]interface{}, 0, len(speccodes)) + + for _, v := range speccodes { + listItem := make(map[string]interface{}) + listItem["id"] = v.SpecCode + listItem["memory"] = v.Memory + listItem["storage_min"] = v.MinStorage + listItem["storage_max"] = v.MaxStorage + listItem["cpu"] = v.Cpu + listItem["qps"] = v.Qps + listItem["version"] = v.Version + listItem["version_name"] = v.VersionName + list = append(list, listItem) + } + d.SetId("speccode." + zone) + if e := d.Set("list", list); e != nil { + log.Printf("[CRITAL]%s provider set list fail, reason:%s\n", logId, e.Error()) + return e + } + output, ok := d.GetOk("result_output_file") + if ok && output.(string) != "" { + return writeToFile(output.(string), list) + } + return nil +} diff --git a/tencentcloud/data_source_tc_postgresql_specinfos_test.go b/tencentcloud/data_source_tc_postgresql_specinfos_test.go new file mode 100644 index 0000000000..048b8b197a --- /dev/null +++ b/tencentcloud/data_source_tc_postgresql_specinfos_test.go @@ -0,0 +1,39 @@ +package tencentcloud + +import ( + "testing" + + "github.com/hashicorp/terraform-plugin-sdk/helper/resource" +) + +func TestAccTencentCloudPostgresqlSpecinfos_basic(t *testing.T) { + resource.Test(t, resource.TestCase{ + PreCheck: func() { + testAccPreCheck(t) + }, + Providers: testAccProviders, + Steps: []resource.TestStep{ + { + Config: testAccTencentCloudPostgresqlSpecinfosConfigBasic, + Check: resource.ComposeTestCheckFunc( + testAccCheckTencentCloudDataSourceID("data.tencentcloud_postgresql_specinfos.foo"), + resource.TestCheckResourceAttrSet("data.tencentcloud_postgresql_specinfos.foo", "list.#"), + resource.TestCheckResourceAttrSet("data.tencentcloud_postgresql_specinfos.foo", "list.0.id"), + resource.TestCheckResourceAttrSet("data.tencentcloud_postgresql_specinfos.foo", "list.0.memory"), + resource.TestCheckResourceAttrSet("data.tencentcloud_postgresql_specinfos.foo", "list.0.storage_min"), + resource.TestCheckResourceAttrSet("data.tencentcloud_postgresql_specinfos.foo", "list.0.storage_max"), + resource.TestCheckResourceAttrSet("data.tencentcloud_postgresql_specinfos.foo", "list.0.cpu"), + resource.TestCheckResourceAttrSet("data.tencentcloud_postgresql_specinfos.foo", "list.0.qps"), + resource.TestCheckResourceAttrSet("data.tencentcloud_postgresql_specinfos.foo", "list.0.version"), + resource.TestCheckResourceAttrSet("data.tencentcloud_postgresql_specinfos.foo", "list.0.version_name"), + ), + }, + }, + }) +} + +const testAccTencentCloudPostgresqlSpecinfosConfigBasic = ` +data "tencentcloud_postgresql_specinfos" "foo"{ + availability_zone = "ap-guangzhou-3" +} +` diff --git a/tencentcloud/extension_postgresql.go b/tencentcloud/extension_postgresql.go new file mode 100644 index 0000000000..b6bc5cc0b1 --- /dev/null +++ b/tencentcloud/extension_postgresql.go @@ -0,0 +1,32 @@ +package tencentcloud + +const ( + POSTGRESQL_PAYTYPE_PREPAID = "prepaid" + POSTGRESQL_PAYTYPE_POSTPAID = "postpaid" +) + +const ( + COMMON_PAYTYPE_PREPAID = "PREPAID" + COMMON_PAYTYPE_POSTPAID = "POSTPAID_BY_HOUR" +) + +var POSTGRESQL_PAYTYPE = []string{COMMON_PAYTYPE_POSTPAID} + +const ( + POSTGRESQL_DB_VERSION_9_3_5 = "9.3.5" + POSTGRESQL_DB_VERSION_9_5_4 = "9.5.4" + POSTGRESQL_DB_VERSION_10_4 = "10.4" +) + +var POSTSQL_DB_VERSION = []string{POSTGRESQL_DB_VERSION_9_3_5, POSTGRESQL_DB_VERSION_9_5_4, POSTGRESQL_DB_VERSION_10_4} + +const ( + POSTGRESQL_DB_CHARSET_UTF8 = "UTF8" + POSTGRESQL_DB_CHARSET_LATIN1 = "LATIN1" +) + +var POSTSQL_DB_CHARSET = []string{POSTGRESQL_DB_CHARSET_UTF8, POSTGRESQL_DB_CHARSET_LATIN1} + +const ( + POSTGRESQL_STAUTS_RUNNING = "running" +) diff --git a/tencentcloud/provider.go b/tencentcloud/provider.go index dd5aacf4d4..ea8bb7c7d6 100644 --- a/tencentcloud/provider.go +++ b/tencentcloud/provider.go @@ -284,6 +284,14 @@ Monitor tencentcloud_monitor_binding_object tencentcloud_monitor_binding_receiver +PostgreSQL + Data Source + tencentcloud_postgresql_instances + tencentcloud_postgresql_specinfos + + Resource + tencentcloud_postgresql_instance + Redis Data Source tencentcloud_redis_zone_config @@ -586,6 +594,8 @@ func Provider() terraform.ResourceProvider { "tencentcloud_monitor_policy_groups": dataSourceTencentMonitorPolicyGroups(), "tencentcloud_monitor_product_namespace": dataSourceTencentMonitorProductNamespace(), "tencentcloud_elasticsearch_instances": dataSourceTencentCloudElasticsearchInstances(), + "tencentcloud_postgresql_instances": dataSourceTencentCloudPostgresqlInstances(), + "tencentcloud_postgresql_specinfos": dataSourceTencentCloudPostgresqlSpecinfos(), "tencentcloud_sqlserver_zone_config": dataSourceTencentSqlserverZoneConfig(), }, @@ -697,6 +707,7 @@ func Provider() terraform.ResourceProvider { "tencentcloud_monitor_binding_object": resourceTencentMonitorBindingObject(), "tencentcloud_monitor_binding_receiver": resourceTencentMonitorBindingAlarmReceiver(), "tencentcloud_elasticsearch_instance": resourceTencentCloudElasticsearchInstance(), + "tencentcloud_postgresql_instance": resourceTencentCloudPostgresqlInstance(), }, ConfigureFunc: providerConfigure, diff --git a/tencentcloud/resource_tc_postgresql_instance.go b/tencentcloud/resource_tc_postgresql_instance.go new file mode 100644 index 0000000000..b7080cd132 --- /dev/null +++ b/tencentcloud/resource_tc_postgresql_instance.go @@ -0,0 +1,547 @@ +/* +Use this resource to create postgresql instance + +Example Usage + +```hcl +resource "tencentcloud_postgresql_instance" "foo" { + name = "example" + availability_zone = var.availability_zone + charge_type = "POSTPAID_BY_HOUR" + vpc_id = "vpc-409mvdvv" + subnet_id = "subnet-nf9n81ps" + engine_version = "9.3.5" + root_password = "1qaA2k1wgvfa3ZZZ" + charset = "UTF8" + project_id = 0 + memory = 2 + storage = 100 +} +``` + +Import + +postgresql instance can be imported using the id, e.g. + +``` +$ terraform import tencentcloud_postgresql_instance.foo postgres-cda1iex1 +``` +*/ +package tencentcloud + +import ( + "context" + "fmt" + + "github.com/hashicorp/terraform-plugin-sdk/helper/resource" + "github.com/hashicorp/terraform-plugin-sdk/helper/schema" +) + +func resourceTencentCloudPostgresqlInstance() *schema.Resource { + return &schema.Resource{ + Create: resourceTencentCloudPostgresqlInstanceCreate, + Read: resourceTencentCloudPostgresqlInstanceRead, + Update: resourceTencentCloudPostgresqlInstanceUpdate, + Delete: resourceTencentCLoudPostgresqlInstanceDelete, + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + + Schema: map[string]*schema.Schema{ + "name": { + Type: schema.TypeString, + Required: true, + ValidateFunc: validateStringLengthInRange(1, 60), + Description: "Name of the postgresql instance.", + }, + "charge_type": { + Type: schema.TypeString, + Optional: true, + Default: COMMON_PAYTYPE_POSTPAID, + ForceNew: true, + ValidateFunc: validateAllowedStringValue(POSTGRESQL_PAYTYPE), + Description: "Pay type of the postgresql instance. For now, only `POSTPAID_BY_HOUR` is valid.", + }, + "engine_version": { + Type: schema.TypeString, + ForceNew: true, + Optional: true, + ValidateFunc: validateAllowedStringValue(POSTSQL_DB_VERSION), + Default: POSTSQL_DB_VERSION[len(POSTSQL_DB_VERSION)-1], + Description: "Version of the postgresql database engine. Allowed values are `9.3.5`, `9.5.4`, `10.4`.", + }, + "vpc_id": { + Type: schema.TypeString, + ForceNew: true, + Optional: true, + Description: "ID of VPC.", + }, + "subnet_id": { + Type: schema.TypeString, + ForceNew: true, + Optional: true, + Description: "ID of subnet.", + }, + "storage": { + Type: schema.TypeInt, + Required: true, + Description: "Disk size (in GB). Allowed value must be a multiple of 10. The storage must be set with the limit of `storage_min` and `storage_max` which data source `tencentcloud_postgresql_specinfos` provides.", + }, + "memory": { + Type: schema.TypeInt, + Required: true, + Description: "Memory size (in GB). Allowed value must be larger than `memory` that data source `tencentcloud_postgresql_specinfos` provides.", + }, + "project_id": { + Type: schema.TypeInt, + Optional: true, + Default: 0, + Description: "Project ID, default value is 0.", + }, + "availability_zone": { + Type: schema.TypeString, + ForceNew: true, + Optional: true, + Computed: true, + Description: "Availability zone.", + }, + "root_password": { + Type: schema.TypeString, + Required: true, + Sensitive: true, + ValidateFunc: validateMysqlPassword, + Description: "Password of root account. This parameter can be specified when you purchase master instances, but it should be ignored when you purchase read-only instances or disaster recovery instances.", + }, + "charset": { + Type: schema.TypeString, + Optional: true, + Default: POSTGRESQL_DB_CHARSET_UTF8, + ForceNew: true, + ValidateFunc: validateAllowedStringValue(POSTSQL_DB_CHARSET), + Description: "Charset of the root account. Valid values are `UTF8`,`LATIN1`.", + }, + "public_access_switch": { + Type: schema.TypeBool, + Optional: true, + Default: false, + Description: "Indicates whether to enable the access to an instance from public network or not.", + }, + //Computed values + "public_access_host": { + Type: schema.TypeString, + Computed: true, + Description: "Host for public access.", + }, + "public_access_port": { + Type: schema.TypeInt, + Computed: true, + Description: "Port for public access.", + }, + "private_access_ip": { + Type: schema.TypeString, + Computed: true, + Description: "Ip for private access.", + }, + "private_access_port": { + Type: schema.TypeInt, + Computed: true, + Description: "Port for private access.", + }, + "create_time": { + Type: schema.TypeString, + Computed: true, + Description: "Create time of the postgresql instance.", + }, + }, + } +} + +func resourceTencentCloudPostgresqlInstanceCreate(d *schema.ResourceData, meta interface{}) error { + defer logElapsed("resource.tencentcloud_postgresql_instance.create")() + + logId := getLogId(contextNil) + ctx := context.WithValue(context.TODO(), logIdKey, logId) + + postgresqlService := PostgresqlService{client: meta.(*TencentCloudClient).apiV3Conn} + + var ( + name = d.Get("name").(string) + dbVersion = d.Get("engine_version").(string) + payType = d.Get("charge_type").(string) + projectId = d.Get("project_id").(int) + subnetId = d.Get("subnet_id").(string) + vpcId = d.Get("vpc_id").(string) + zone = d.Get("availability_zone").(string) + storage = d.Get("storage").(int) + memory = d.Get("memory").(int) + ) + + var period = 1 + //the sdk asks to set value with 1 when paytype is postpaid + + var instanceId, specCode string + var outErr, inErr error + + //get speccode with engine_version and memory + outErr = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + speccodes, inErr := postgresqlService.DescribeSpecinfos(ctx, zone) + if inErr != nil { + return retryError(inErr) + } + for _, info := range speccodes { + if *info.Version == dbVersion && int(*info.Memory) == 1024*memory { + specCode = *info.SpecCode + break + } + } + return nil + }) + if outErr != nil { + return outErr + } + + if specCode == "" { + return fmt.Errorf("there is no legal speccode matched with engine_version %s and memory %d matched, please check again", dbVersion, memory) + } + + outErr = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + instanceId, inErr = postgresqlService.CreatePostgresqlInstance(ctx, name, dbVersion, payType, specCode, 0, projectId, period, subnetId, vpcId, zone, storage) + if inErr != nil { + return retryError(inErr) + } + return nil + }) + if outErr != nil { + return outErr + } + + //check creation done + err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + instance, has, err := postgresqlService.DescribePostgresqlInstanceById(ctx, instanceId) + if err != nil { + return retryError(err) + } else if has && *instance.DBInstanceStatus == "init" { + 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)) + } + }) + + if err != nil { + return err + } + d.SetId(instanceId) + + var ( + password = d.Get("root_password").(string) + charset = d.Get("charset").(string) + ) + + outErr = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + inErr = postgresqlService.InitPostgresqlInstance(ctx, instanceId, password, charset) + if inErr != nil { + return retryError(inErr) + } + return nil + }) + if outErr != nil { + return outErr + } + //check init status + + //set open public access + public_access_switch := false + if v, ok := d.GetOkExists("public_access_switch"); ok { + public_access_switch = v.(bool) + } + + if public_access_switch { + outErr = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + inErr = postgresqlService.ModifyPublicService(ctx, true, instanceId) + if inErr != nil { + return retryError(inErr) + } + return nil + }) + if outErr != nil { + return outErr + } + } + + //set name + outErr = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + inErr := postgresqlService.ModifyPostgresqlInstanceName(ctx, instanceId, d.Get("name").(string)) + if inErr != nil { + return retryError(inErr) + } + return nil + }) + if outErr != nil { + return outErr + } + + //check creation done + checkErr := postgresqlService.CheckDBInstanceStatus(ctx, instanceId) + if checkErr != nil { + return checkErr + } + + return resourceTencentCloudPostgresqlInstanceRead(d, meta) +} + +func resourceTencentCloudPostgresqlInstanceUpdate(d *schema.ResourceData, meta interface{}) error { + defer logElapsed("resource.tencentcloud_postgresql_instance.update")() + + logId := getLogId(contextNil) + ctx := context.WithValue(context.TODO(), logIdKey, logId) + + postgresqlService := PostgresqlService{client: meta.(*TencentCloudClient).apiV3Conn} + instanceId := d.Id() + d.Partial(true) + + var outErr, inErr, checkErr error + //update name + if d.HasChange("name") { + name := d.Get("name").(string) + outErr = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + inErr = postgresqlService.ModifyPostgresqlInstanceName(ctx, instanceId, name) + if inErr != nil { + return retryError(inErr) + } + return nil + }) + if outErr != nil { + return outErr + } + //check update public service done + checkErr = postgresqlService.CheckDBInstanceStatus(ctx, instanceId) + if checkErr != nil { + return checkErr + } + d.SetPartial("name") + } + + //upgrade storage and memory size + if d.HasChange("memory") || d.HasChange("storage") { + memory := d.Get("memory").(int) + storage := d.Get("storage").(int) + outErr = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + inErr = postgresqlService.UpgradePostgresqlInstance(ctx, instanceId, memory, storage) + if inErr != nil { + return retryError(inErr) + } + return nil + }) + if outErr != nil { + return outErr + } + //check update public service done + checkErr = postgresqlService.CheckDBInstanceStatus(ctx, instanceId) + if checkErr != nil { + return checkErr + } + d.SetPartial("memory") + d.SetPartial("storage") + } + + //update project id + if d.HasChange("project_id") { + projectId := d.Get("project_id").(int) + outErr = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + inErr = postgresqlService.ModifyPostgresqlInstanceProjectId(ctx, instanceId, projectId) + if inErr != nil { + return retryError(inErr) + } + return nil + }) + if outErr != nil { + return outErr + } + + //check update project id done + checkErr = postgresqlService.CheckDBInstanceStatus(ctx, instanceId) + if checkErr != nil { + return checkErr + } + d.SetPartial("project_id") + } + + //update public access + if d.HasChange("public_access_switch") { + public_access_switch := false + if v, ok := d.GetOkExists("public_access_switch"); ok { + public_access_switch = v.(bool) + } + outErr = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + inErr = postgresqlService.ModifyPublicService(ctx, public_access_switch, instanceId) + if inErr != nil { + return retryError(inErr) + } + return nil + }) + if outErr != nil { + return outErr + } + //check update public service done + checkErr = postgresqlService.CheckDBInstanceStatus(ctx, instanceId) + if checkErr != nil { + return checkErr + } + d.SetPartial("public_access_switch") + } + + //update root password + if d.HasChange("root_password") { + //to avoid other updating process conflicts with updating password, set the password updating with the last step, there is no way to figure out whether changing password is done + outErr = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + inErr = postgresqlService.SetPostgresqlInstanceRootPassword(ctx, instanceId, d.Get("root_password").(string)) + if inErr != nil { + return retryError(inErr) + } + return nil + }) + if outErr != nil { + return outErr + } + //check update password done + checkErr = postgresqlService.CheckDBInstanceStatus(ctx, instanceId) + if checkErr != nil { + return checkErr + } + d.SetPartial("root_password") + } + + d.Partial(false) + + return resourceTencentCloudPostgresqlInstanceRead(d, meta) +} + +func resourceTencentCloudPostgresqlInstanceRead(d *schema.ResourceData, meta interface{}) error { + + defer logElapsed("resource.tencentcloud_postgresql_instance.read")() + + logId := getLogId(contextNil) + ctx := context.WithValue(context.TODO(), logIdKey, logId) + + var outErr, inErr error + postgresqlService := PostgresqlService{client: meta.(*TencentCloudClient).apiV3Conn} + instance, has, outErr := postgresqlService.DescribePostgresqlInstanceById(ctx, d.Id()) + if outErr != nil { + outErr = resource.Retry(readRetryTimeout, func() *resource.RetryError { + instance, has, inErr = postgresqlService.DescribePostgresqlInstanceById(ctx, d.Id()) + if inErr != nil { + return retryError(inErr) + } + return nil + }) + } + if outErr != nil { + return outErr + } + if !has { + d.SetId("") + return nil + } + + _ = d.Set("project_id", int(*instance.ProjectId)) + _ = d.Set("availability_zone", instance.Zone) + _ = d.Set("vpc_id", instance.VpcId) + _ = d.Set("subnet_id", instance.SubnetId) + _ = d.Set("engine_version", instance.DBVersion) + _ = d.Set("name", instance.DBInstanceName) + _ = d.Set("charset", instance.DBCharset) + _ = d.Set("charge_type", instance.PayType) + + if *instance.PayType == POSTGRESQL_PAYTYPE_PREPAID || *instance.PayType == COMMON_PAYTYPE_PREPAID { + _ = d.Set("charge_type", COMMON_PAYTYPE_PREPAID) + } else { + _ = d.Set("charge_type", COMMON_PAYTYPE_POSTPAID) + } + + //net status + public_access_switch := false + if len(instance.DBInstanceNetInfo) > 0 { + for _, v := range instance.DBInstanceNetInfo { + + if *v.NetType == "public" { + //both 1 and opened used in SDK + if *v.Status == "opened" || *v.Status == "1" { + public_access_switch = true + } + _ = d.Set("public_access_host", v.Address) + _ = d.Set("public_access_port", v.Port) + } + //private or inner will not appear at same time, private for instance with vpc + if (*v.NetType == "private" || *v.NetType == "inner") && *v.Ip != "" { + _ = d.Set("private_access_ip", v.Ip) + _ = d.Set("private_access_port", v.Port) + } + } + } + _ = d.Set("public_access_switch", public_access_switch) + + //computed + _ = d.Set("create_time", instance.CreateTime) + _ = d.Set("status", instance.DBInstanceStatus) + _ = d.Set("memory", instance.DBInstanceMemory) + _ = d.Set("storage", instance.DBInstanceStorage) + + //ignore spec_code + return nil +} + +func resourceTencentCLoudPostgresqlInstanceDelete(d *schema.ResourceData, meta interface{}) error { + defer logElapsed("resource.tencentcloud_postgresql_instance.delete")() + + logId := getLogId(contextNil) + ctx := context.WithValue(context.TODO(), logIdKey, logId) + + instanceId := d.Id() + postgresqlService := PostgresqlService{client: meta.(*TencentCloudClient).apiV3Conn} + + var outErr, inErr, checkErr error + //check status + checkErr = postgresqlService.CheckDBInstanceStatus(ctx, instanceId) + + if checkErr != nil { + return checkErr + } + + outErr = postgresqlService.DeletePostgresqlInstance(ctx, instanceId) + + if outErr != nil { + outErr = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + inErr = postgresqlService.DeletePostgresqlInstance(ctx, instanceId) + if inErr != nil { + return retryError(inErr) + } + return nil + }) + } + + if outErr != nil { + return outErr + } + + _, has, outErr := postgresqlService.DescribePostgresqlInstanceById(ctx, instanceId) + if outErr != nil || has { + outErr = resource.Retry(readRetryTimeout, func() *resource.RetryError { + _, has, inErr = postgresqlService.DescribePostgresqlInstanceById(ctx, d.Id()) + if inErr != nil { + return retryError(inErr) + } + if has { + inErr = fmt.Errorf("delete postgresql instance %s fail, instance still exists from SDK DescribePostgresqlInstanceById", instanceId) + return resource.RetryableError(inErr) + } + return nil + }) + } + if outErr != nil { + return outErr + } + return nil +} diff --git a/tencentcloud/resource_tc_postgresql_instance_test.go b/tencentcloud/resource_tc_postgresql_instance_test.go new file mode 100644 index 0000000000..3165982a66 --- /dev/null +++ b/tencentcloud/resource_tc_postgresql_instance_test.go @@ -0,0 +1,161 @@ +package tencentcloud + +import ( + "context" + "fmt" + "testing" + + "github.com/hashicorp/terraform-plugin-sdk/helper/resource" + "github.com/hashicorp/terraform-plugin-sdk/terraform" +) + +var testPostgresqlInstanceResourceName = "tencentcloud_postgresql_instance" +var testPostgresqlInstanceResourceKey = testPostgresqlInstanceResourceName + ".test" + +func TestAccTencentCloudPostgresqlInstanceResource(t *testing.T) { + resource.Test(t, resource.TestCase{ + PreCheck: func() { testAccPreCheck(t) }, + Providers: testAccProviders, + CheckDestroy: testAccCheckPostgresqlInstanceDestroy, + Steps: []resource.TestStep{ + { + Config: testAccPostgresqlInstance, + Check: resource.ComposeTestCheckFunc( + testAccCheckPostgresqlInstanceExists(testPostgresqlInstanceResourceKey), + resource.TestCheckResourceAttrSet(testPostgresqlInstanceResourceKey, "id"), + resource.TestCheckResourceAttr(testPostgresqlInstanceResourceKey, "name", "tf_postsql_instance"), + resource.TestCheckResourceAttr(testPostgresqlInstanceResourceKey, "charge_type", "POSTPAID_BY_HOUR"), + resource.TestCheckResourceAttrSet(testPostgresqlInstanceResourceKey, "vpc_id"), + resource.TestCheckResourceAttrSet(testPostgresqlInstanceResourceKey, "subnet_id"), + resource.TestCheckResourceAttr(testPostgresqlInstanceResourceKey, "memory", "4"), + resource.TestCheckResourceAttr(testPostgresqlInstanceResourceKey, "storage", "100"), + resource.TestCheckResourceAttr(testPostgresqlInstanceResourceKey, "project_id", "0"), + resource.TestCheckResourceAttrSet(testPostgresqlInstanceResourceKey, "create_time"), + resource.TestCheckResourceAttr(testPostgresqlInstanceResourceKey, "public_access_switch", "false"), + resource.TestCheckResourceAttr(testPostgresqlInstanceResourceKey, "root_password", "1qaA2k1wgvfa3ZZZ"), + resource.TestCheckResourceAttrSet(testPostgresqlInstanceResourceKey, "availability_zone"), + resource.TestCheckResourceAttrSet(testPostgresqlInstanceResourceKey, "private_access_ip"), + resource.TestCheckResourceAttrSet(testPostgresqlInstanceResourceKey, "private_access_port"), + ), + }, + { + ResourceName: testPostgresqlInstanceResourceKey, + ImportState: true, + ImportStateVerify: true, + ImportStateVerifyIgnore: []string{"root_password", "spec_code", "public_access_switch", "charset"}, + }, + + { + Config: testAccPostgresqlInstanceUpdate, + Check: resource.ComposeTestCheckFunc( + testAccCheckPostgresqlInstanceExists(testPostgresqlInstanceResourceKey), + resource.TestCheckResourceAttrSet(testPostgresqlInstanceResourceKey, "id"), + resource.TestCheckResourceAttr(testPostgresqlInstanceResourceKey, "name", "tf_postsql_instance_update"), + resource.TestCheckResourceAttr(testPostgresqlInstanceResourceKey, "charge_type", "POSTPAID_BY_HOUR"), + resource.TestCheckResourceAttrSet(testPostgresqlInstanceResourceKey, "vpc_id"), + resource.TestCheckResourceAttrSet(testPostgresqlInstanceResourceKey, "subnet_id"), + resource.TestCheckResourceAttr(testPostgresqlInstanceResourceKey, "memory", "4"), + resource.TestCheckResourceAttr(testPostgresqlInstanceResourceKey, "storage", "250"), + resource.TestCheckResourceAttrSet(testPostgresqlInstanceResourceKey, "create_time"), + resource.TestCheckResourceAttr(testPostgresqlInstanceResourceKey, "project_id", "1154137"), + resource.TestCheckResourceAttr(testPostgresqlInstanceResourceKey, "public_access_switch", "true"), + resource.TestCheckResourceAttr(testPostgresqlInstanceResourceKey, "root_password", "1qaA2k1wgvfa3ZZZZ"), + 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"), + ), + }, + }, + }) +} + +func testAccCheckPostgresqlInstanceDestroy(s *terraform.State) error { + for _, rs := range s.RootModule().Resources { + if rs.Type != testPostgresqlInstanceResourceName { + continue + } + logId := getLogId(contextNil) + ctx := context.WithValue(context.TODO(), logIdKey, logId) + + service := PostgresqlService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + + _, has, err := service.DescribePostgresqlInstanceById(ctx, rs.Primary.ID) + + if !has { + return nil + } else { + if err != nil { + return err + } + return fmt.Errorf("delete postgresql instance %s fail", rs.Primary.ID) + } + } + return nil +} + +func testAccCheckPostgresqlInstanceExists(n string) resource.TestCheckFunc { + return func(s *terraform.State) error { + rs, ok := s.RootModule().Resources[n] + if !ok { + return fmt.Errorf("resource %s is not found", n) + } + logId := getLogId(contextNil) + ctx := context.WithValue(context.TODO(), logIdKey, logId) + + service := PostgresqlService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + + _, has, err := service.DescribePostgresqlInstanceById(ctx, rs.Primary.ID) + if err != nil { + _, has, err = service.DescribePostgresqlInstanceById(ctx, rs.Primary.ID) + } + if err != nil { + return err + } + if has { + return nil + } else { + return fmt.Errorf("postgresql instance %s is not found", rs.Primary.ID) + } + } +} + +const testAccPostgresqlInstanceBasic = ` +variable "availability_zone"{ +default = "ap-guangzhou-2" +} +` + +const testAccPostgresqlInstance string = testAccPostgresqlInstanceBasic + ` +resource "tencentcloud_postgresql_instance" "test" { + name = "tf_postsql_instance" + availability_zone = var.availability_zone + charge_type = "POSTPAID_BY_HOUR" + vpc_id = "` + defaultVpcId + `" + subnet_id = "subnet-pyio7yog" + engine_version = "9.3.5" + root_password = "1qaA2k1wgvfa3ZZZ" + charset = "LATIN1" + project_id = 0 + memory = 4 + storage = 100 +} +` + +const testAccPostgresqlInstanceUpdate string = testAccPostgresqlInstanceBasic + ` +resource "tencentcloud_postgresql_instance" "test" { + name = "tf_postsql_instance_update" + availability_zone = var.availability_zone + charge_type = "POSTPAID_BY_HOUR" + vpc_id = "` + defaultVpcId + `" + subnet_id = "subnet-pyio7yog" + engine_version = "9.3.5" + root_password = "1qaA2k1wgvfa3ZZZZ" + charset = "LATIN1" + project_id = 1154137 + public_access_switch = true + memory = 4 + storage = 250 +} +` diff --git a/tencentcloud/service_tencentcloud_postgresql.go b/tencentcloud/service_tencentcloud_postgresql.go new file mode 100644 index 0000000000..c68f713f1d --- /dev/null +++ b/tencentcloud/service_tencentcloud_postgresql.go @@ -0,0 +1,394 @@ +package tencentcloud + +import ( + "context" + "errors" + "fmt" + "log" + "strconv" + + "github.com/hashicorp/terraform-plugin-sdk/helper/resource" + sdkErrors "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" + postgresql "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/postgres/v20170312" + "github.com/terraform-providers/terraform-provider-tencentcloud/tencentcloud/connectivity" + "github.com/terraform-providers/terraform-provider-tencentcloud/tencentcloud/internal/helper" + "github.com/terraform-providers/terraform-provider-tencentcloud/tencentcloud/ratelimit" +) + +type PostgresqlService struct { + client *connectivity.TencentCloudClient +} + +func (me *PostgresqlService) CreatePostgresqlInstance(ctx context.Context, name string, dbVersion string, chargeType string, specCode string, autoRenewFlag int, projectId int, period int, subnetId string, vpcId string, zone string, storage int) (instanceId string, errRet error) { + logId := getLogId(ctx) + request := postgresql.NewCreateDBInstancesRequest() + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail,reason[%s]", logId, request.GetAction(), errRet.Error()) + } + }() + request.Name = &name + request.DBVersion = &dbVersion + request.InstanceChargeType = &chargeType + request.SpecCode = &specCode + request.AutoRenewFlag = helper.IntInt64(autoRenewFlag) + request.ProjectId = helper.Int64(int64(projectId)) + request.Period = helper.Int64Uint64(int64(period)) + request.SubnetId = &subnetId + request.VpcId = &vpcId + request.Storage = helper.IntUint64(storage) + request.Zone = &zone + request.InstanceCount = helper.Int64Uint64(1) + + ratelimit.Check(request.GetAction()) + response, err := me.client.UsePostgresqlClient().CreateDBInstances(request) + if err != nil { + errRet = err + return + } + if response == nil || response.Response == nil { + errRet = fmt.Errorf("TencentCloud SDK return nil response, %s", request.GetAction()) + } + if len(response.Response.DBInstanceIdSet) == 0 { + errRet = errors.New("TencentCloud SDK returns empty postgresql ID") + return + } else if len(response.Response.DBInstanceIdSet) > 1 { + errRet = errors.New("TencentCloud SDK returns more than one postgresql ID") + return + } + instanceId = *response.Response.DBInstanceIdSet[0] + return +} + +func (me *PostgresqlService) InitPostgresqlInstance(ctx context.Context, instanceId string, password string, charset string) (errRet error) { + logId := getLogId(ctx) + request := postgresql.NewInitDBInstancesRequest() + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail,reason[%s]", logId, request.GetAction(), errRet.Error()) + } + }() + request.Charset = &charset + request.AdminName = helper.String("root") + request.AdminPassword = &password + request.DBInstanceIdSet = []*string{&instanceId} + + ratelimit.Check(request.GetAction()) + response, err := me.client.UsePostgresqlClient().InitDBInstances(request) + if err != nil { + return err + } + if response == nil || response.Response == nil { + errRet = fmt.Errorf("TencentCloud SDK return nil response, %s", request.GetAction()) + } + + return +} + +func (me *PostgresqlService) DescribeSpecinfos(ctx context.Context, zone string) (specCodeList []*postgresql.SpecItemInfo, errRet error) { + logId := getLogId(ctx) + request := postgresql.NewDescribeProductConfigRequest() + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail,reason[%s]", logId, request.GetAction(), errRet.Error()) + } + }() + request.Zone = &zone + + ratelimit.Check(request.GetAction()) + response, err := me.client.UsePostgresqlClient().DescribeProductConfig(request) + if err != nil { + errRet = err + return + } + if response == nil || response.Response == nil || len(response.Response.SpecInfoList) == 0 { + errRet = fmt.Errorf("TencentCloud SDK return nil response, %s", request.GetAction()) + return + } + + specCodeList = response.Response.SpecInfoList[0].SpecItemInfoList + return +} + +func (me *PostgresqlService) ModifyPublicService(ctx context.Context, openInternet bool, instanceId string) (errRet error) { + logId := getLogId(ctx) + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s-open:%t] fail,reason[%s]", logId, "modifyInternetService", openInternet, errRet.Error()) + } + }() + + if openInternet { + request := postgresql.NewOpenDBExtranetAccessRequest() + request.DBInstanceId = &instanceId + ratelimit.Check(request.GetAction()) + + response, err := me.client.UsePostgresqlClient().OpenDBExtranetAccess(request) + if err != nil { + errRet = err + return + } + if response == nil || response.Response == nil { + errRet = fmt.Errorf("TencentCloud SDK return nil response, %s", request.GetAction()) + } + + //check open or not + err = resource.Retry(3*readRetryTimeout, func() *resource.RetryError { + instance, has, err := me.DescribePostgresqlInstanceById(ctx, instanceId) + if err != nil { + return retryError(err) + } else if has { + if len(instance.DBInstanceNetInfo) > 0 { + for _, v := range instance.DBInstanceNetInfo { + if *v.NetType == "public" { + if *v.Status == "opened" || *v.Status == "1" { + return nil + } else if *v.Status == "opening" || *v.Status == "initing" || *v.Status == "3" || *v.Status == "0" { + return resource.RetryableError(fmt.Errorf("status %s, postgresql instance %s waiting", *v.Status, instanceId)) + } else { + return resource.NonRetryableError(fmt.Errorf("status %s, postgresql instance %s open public service fail", *v.Status, instanceId)) + } + } + } + //there is no public service yet + return resource.RetryableError(fmt.Errorf("cannot find public status, postgresql instance %s watiting", instanceId)) + } else { + return resource.NonRetryableError(fmt.Errorf("illegal net info of postgresql instance %s", instanceId)) + } + } else { + return resource.NonRetryableError(fmt.Errorf("check postgresql instance %s fail, instance is not exist", instanceId)) + } + }) + if err != nil { + return err + } + + } else { + request := postgresql.NewCloseDBExtranetAccessRequest() + request.DBInstanceId = &instanceId + ratelimit.Check(request.GetAction()) + + response, err := me.client.UsePostgresqlClient().CloseDBExtranetAccess(request) + if err != nil { + return err + } + if response == nil || response.Response == nil { + errRet = fmt.Errorf("TencentCloud SDK return nil response, %s", request.GetAction()) + } + //check close or not + err = resource.Retry(3*readRetryTimeout, func() *resource.RetryError { + instance, has, err := me.DescribePostgresqlInstanceById(ctx, instanceId) + if err != nil { + return retryError(err) + } else if has { + if len(instance.DBInstanceNetInfo) > 0 { + for _, v := range instance.DBInstanceNetInfo { + if *v.NetType == "public" { + if *v.Status == "closed" || *v.Status == "2" { + return nil + } else if *v.Status == "closing" || *v.Status == "4" { + return resource.RetryableError(fmt.Errorf("status %s, postgresql instance %s waiting", *v.Status, instanceId)) + } else { + return resource.NonRetryableError(fmt.Errorf("status %s, postgresql instance %s open public service fail", *v.Status, instanceId)) + } + } + } + //there is no public service + return nil + } else { + return resource.NonRetryableError(fmt.Errorf("illegal net info of postgresql instance %s", instanceId)) + } + } else { + return resource.NonRetryableError(fmt.Errorf("check postgresql instance %s fail, instance is not exist", instanceId)) + } + }) + if err != nil { + return err + } + } + return +} + +func (me *PostgresqlService) DescribePostgresqlInstanceById(ctx context.Context, instanceId string) (instance *postgresql.DBInstance, has bool, errRet error) { + logId := getLogId(ctx) + request := postgresql.NewDescribeDBInstanceAttributeRequest() + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail,reason[%s]", logId, request.GetAction(), errRet.Error()) + } + }() + request.DBInstanceId = &instanceId + + ratelimit.Check(request.GetAction()) + response, err := me.client.UsePostgresqlClient().DescribeDBInstanceAttribute(request) + if err != nil { + ee, ok := err.(*sdkErrors.TencentCloudSDKError) + if !ok { + errRet = err + return + } + if ee.Code == "InvalidParameter" { + errRet = nil + } else { + errRet = err + } + return + } + if response == nil || response.Response == nil { + errRet = fmt.Errorf("TencentCloud SDK return nil response, %s", request.GetAction()) + return + } + instance = response.Response.DBInstance + if instance != nil { + has = true + } + return +} + +func (me *PostgresqlService) DescribePostgresqlInstances(ctx context.Context, filter []*postgresql.Filter) (instanceList []*postgresql.DBInstance, errRet error) { + logId := getLogId(ctx) + request := postgresql.NewDescribeDBInstancesRequest() + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail,reason[%s]", logId, request.GetAction(), errRet.Error()) + } + }() + + var offset, limit uint64 = 0, 20 + + request.Offset = &offset + request.Limit = &limit + request.Filters = filter + + for { + ratelimit.Check(request.GetAction()) + response, err := me.client.UsePostgresqlClient().DescribeDBInstances(request) + if err != nil { + errRet = err + return + } + if response == nil || response.Response == nil { + errRet = fmt.Errorf("TencentCloud SDK return nil response, %s", request.GetAction()) + } + instanceList = append(instanceList, response.Response.DBInstanceSet...) + if len(response.Response.DBInstanceSet) < int(limit) { + return + } + offset += limit + } +} + +func (me *PostgresqlService) ModifyPostgresqlInstanceName(ctx context.Context, instanceId string, name string) (errRet error) { + logId := getLogId(ctx) + request := postgresql.NewModifyDBInstanceNameRequest() + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail,reason[%s]", logId, request.GetAction(), errRet.Error()) + } + }() + request.DBInstanceId = &instanceId + request.InstanceName = &name + + ratelimit.Check(request.GetAction()) + _, err := me.client.UsePostgresqlClient().ModifyDBInstanceName(request) + return err +} + +func (me *PostgresqlService) UpgradePostgresqlInstance(ctx context.Context, instanceId string, memory int, storage int) (errRet error) { + logId := getLogId(ctx) + request := postgresql.NewUpgradeDBInstanceRequest() + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail,reason[%s]", logId, request.GetAction(), errRet.Error()) + } + }() + request.DBInstanceId = &instanceId + request.Storage = helper.IntInt64(storage) + request.Memory = helper.IntInt64(memory) + + ratelimit.Check(request.GetAction()) + _, err := me.client.UsePostgresqlClient().UpgradeDBInstance(request) + return err +} + +func (me *PostgresqlService) ModifyPostgresqlInstanceProjectId(ctx context.Context, instanceId string, projectId int) (errRet error) { + logId := getLogId(ctx) + request := postgresql.NewModifyDBInstancesProjectRequest() + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail,reason[%s]", logId, request.GetAction(), errRet.Error()) + } + }() + request.DBInstanceIdSet = []*string{&instanceId} + request.ProjectId = helper.String(strconv.Itoa(projectId)) + + ratelimit.Check(request.GetAction()) + _, err := me.client.UsePostgresqlClient().ModifyDBInstancesProject(request) + return err +} + +func (me *PostgresqlService) SetPostgresqlInstanceAutoRenewFlag(ctx context.Context, instanceId string, autoRenewFlag int) (errRet error) { + logId := getLogId(ctx) + request := postgresql.NewSetAutoRenewFlagRequest() + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail,reason[%s]", logId, request.GetAction(), errRet.Error()) + } + }() + request.DBInstanceIdSet = []*string{&instanceId} + request.AutoRenewFlag = helper.IntInt64(autoRenewFlag) + + ratelimit.Check(request.GetAction()) + _, err := me.client.UsePostgresqlClient().SetAutoRenewFlag(request) + return err +} + +func (me *PostgresqlService) DeletePostgresqlInstance(ctx context.Context, instanceId string) (errRet error) { + logId := getLogId(ctx) + request := postgresql.NewDestroyDBInstanceRequest() + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail,reason[%s]", logId, request.GetAction(), errRet.Error()) + } + }() + request.DBInstanceId = &instanceId + + ratelimit.Check(request.GetAction()) + _, err := me.client.UsePostgresqlClient().DestroyDBInstance(request) + return err +} + +func (me *PostgresqlService) SetPostgresqlInstanceRootPassword(ctx context.Context, instanceId string, password string) (errRet error) { + logId := getLogId(ctx) + request := postgresql.NewResetAccountPasswordRequest() + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail,reason[%s]", logId, request.GetAction(), errRet.Error()) + } + }() + request.DBInstanceId = &instanceId + request.UserName = helper.String("root") + request.Password = &password + + ratelimit.Check(request.GetAction()) + _, err := me.client.UsePostgresqlClient().ResetAccountPassword(request) + return err +} + +func (me *PostgresqlService) CheckDBInstanceStatus(ctx context.Context, instanceId string) error { + //check status + err := resource.Retry(2*readRetryTimeout, 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 { + 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)) + } + }) + + return err +} diff --git a/vendor/github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/postgres/v20170312/client.go b/vendor/github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/postgres/v20170312/client.go new file mode 100644 index 0000000000..122c70b531 --- /dev/null +++ b/vendor/github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/postgres/v20170312/client.go @@ -0,0 +1,869 @@ +// Copyright (c) 2017-2018 THL A29 Limited, a Tencent company. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package v20170312 + +import ( + "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common" + tchttp "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/http" + "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/profile" +) + +const APIVersion = "2017-03-12" + +type Client struct { + common.Client +} + +// Deprecated +func NewClientWithSecretId(secretId, secretKey, region string) (client *Client, err error) { + cpf := profile.NewClientProfile() + client = &Client{} + client.Init(region).WithSecretId(secretId, secretKey).WithProfile(cpf) + return +} + +func NewClient(credential *common.Credential, region string, clientProfile *profile.ClientProfile) (client *Client, err error) { + client = &Client{} + client.Init(region). + WithCredential(credential). + WithProfile(clientProfile) + return +} + + +func NewCloseDBExtranetAccessRequest() (request *CloseDBExtranetAccessRequest) { + request = &CloseDBExtranetAccessRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + request.Init().WithApiInfo("postgres", APIVersion, "CloseDBExtranetAccess") + return +} + +func NewCloseDBExtranetAccessResponse() (response *CloseDBExtranetAccessResponse) { + response = &CloseDBExtranetAccessResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// 本接口(CloseDBExtranetAccess)用于关闭实例外网链接。 +func (c *Client) CloseDBExtranetAccess(request *CloseDBExtranetAccessRequest) (response *CloseDBExtranetAccessResponse, err error) { + if request == nil { + request = NewCloseDBExtranetAccessRequest() + } + response = NewCloseDBExtranetAccessResponse() + err = c.Send(request, response) + return +} + +func NewCloseServerlessDBExtranetAccessRequest() (request *CloseServerlessDBExtranetAccessRequest) { + request = &CloseServerlessDBExtranetAccessRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + request.Init().WithApiInfo("postgres", APIVersion, "CloseServerlessDBExtranetAccess") + return +} + +func NewCloseServerlessDBExtranetAccessResponse() (response *CloseServerlessDBExtranetAccessResponse) { + response = &CloseServerlessDBExtranetAccessResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// 关闭serverlessDB实例外网 +func (c *Client) CloseServerlessDBExtranetAccess(request *CloseServerlessDBExtranetAccessRequest) (response *CloseServerlessDBExtranetAccessResponse, err error) { + if request == nil { + request = NewCloseServerlessDBExtranetAccessRequest() + } + response = NewCloseServerlessDBExtranetAccessResponse() + err = c.Send(request, response) + return +} + +func NewCreateDBInstancesRequest() (request *CreateDBInstancesRequest) { + request = &CreateDBInstancesRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + request.Init().WithApiInfo("postgres", APIVersion, "CreateDBInstances") + return +} + +func NewCreateDBInstancesResponse() (response *CreateDBInstancesResponse) { + response = &CreateDBInstancesResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// 本接口 (CreateDBInstances) 用于创建一个或者多个PostgreSQL实例。 +func (c *Client) CreateDBInstances(request *CreateDBInstancesRequest) (response *CreateDBInstancesResponse, err error) { + if request == nil { + request = NewCreateDBInstancesRequest() + } + response = NewCreateDBInstancesResponse() + err = c.Send(request, response) + return +} + +func NewCreateServerlessDBInstanceRequest() (request *CreateServerlessDBInstanceRequest) { + request = &CreateServerlessDBInstanceRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + request.Init().WithApiInfo("postgres", APIVersion, "CreateServerlessDBInstance") + return +} + +func NewCreateServerlessDBInstanceResponse() (response *CreateServerlessDBInstanceResponse) { + response = &CreateServerlessDBInstanceResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// 本接口 (CreateServerlessDBInstance) 用于创建一个ServerlessDB实例,创建成功返回实例ID。 +func (c *Client) CreateServerlessDBInstance(request *CreateServerlessDBInstanceRequest) (response *CreateServerlessDBInstanceResponse, err error) { + if request == nil { + request = NewCreateServerlessDBInstanceRequest() + } + response = NewCreateServerlessDBInstanceResponse() + err = c.Send(request, response) + return +} + +func NewDeleteServerlessDBInstanceRequest() (request *DeleteServerlessDBInstanceRequest) { + request = &DeleteServerlessDBInstanceRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + request.Init().WithApiInfo("postgres", APIVersion, "DeleteServerlessDBInstance") + return +} + +func NewDeleteServerlessDBInstanceResponse() (response *DeleteServerlessDBInstanceResponse) { + response = &DeleteServerlessDBInstanceResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// 本接口 (DeleteServerlessDBInstance) 用于删除一个ServerlessDB实例。 +func (c *Client) DeleteServerlessDBInstance(request *DeleteServerlessDBInstanceRequest) (response *DeleteServerlessDBInstanceResponse, err error) { + if request == nil { + request = NewDeleteServerlessDBInstanceRequest() + } + response = NewDeleteServerlessDBInstanceResponse() + err = c.Send(request, response) + return +} + +func NewDescribeAccountsRequest() (request *DescribeAccountsRequest) { + request = &DescribeAccountsRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + request.Init().WithApiInfo("postgres", APIVersion, "DescribeAccounts") + return +} + +func NewDescribeAccountsResponse() (response *DescribeAccountsResponse) { + response = &DescribeAccountsResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// 本接口(DescribeAccounts)用于获取实例用户列表。 +func (c *Client) DescribeAccounts(request *DescribeAccountsRequest) (response *DescribeAccountsResponse, err error) { + if request == nil { + request = NewDescribeAccountsRequest() + } + response = NewDescribeAccountsResponse() + err = c.Send(request, response) + return +} + +func NewDescribeDBBackupsRequest() (request *DescribeDBBackupsRequest) { + request = &DescribeDBBackupsRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + request.Init().WithApiInfo("postgres", APIVersion, "DescribeDBBackups") + return +} + +func NewDescribeDBBackupsResponse() (response *DescribeDBBackupsResponse) { + response = &DescribeDBBackupsResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// 本接口(DescribeDBBackups)用于查询实例备份列表。 +func (c *Client) DescribeDBBackups(request *DescribeDBBackupsRequest) (response *DescribeDBBackupsResponse, err error) { + if request == nil { + request = NewDescribeDBBackupsRequest() + } + response = NewDescribeDBBackupsResponse() + err = c.Send(request, response) + return +} + +func NewDescribeDBErrlogsRequest() (request *DescribeDBErrlogsRequest) { + request = &DescribeDBErrlogsRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + request.Init().WithApiInfo("postgres", APIVersion, "DescribeDBErrlogs") + return +} + +func NewDescribeDBErrlogsResponse() (response *DescribeDBErrlogsResponse) { + response = &DescribeDBErrlogsResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// 本接口(DescribeDBErrlogs)用于获取错误日志。 +func (c *Client) DescribeDBErrlogs(request *DescribeDBErrlogsRequest) (response *DescribeDBErrlogsResponse, err error) { + if request == nil { + request = NewDescribeDBErrlogsRequest() + } + response = NewDescribeDBErrlogsResponse() + err = c.Send(request, response) + return +} + +func NewDescribeDBInstanceAttributeRequest() (request *DescribeDBInstanceAttributeRequest) { + request = &DescribeDBInstanceAttributeRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + request.Init().WithApiInfo("postgres", APIVersion, "DescribeDBInstanceAttribute") + return +} + +func NewDescribeDBInstanceAttributeResponse() (response *DescribeDBInstanceAttributeResponse) { + response = &DescribeDBInstanceAttributeResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// 本接口 (DescribeDBInstanceAttribute) 用于查询某个实例的详情信息。 +func (c *Client) DescribeDBInstanceAttribute(request *DescribeDBInstanceAttributeRequest) (response *DescribeDBInstanceAttributeResponse, err error) { + if request == nil { + request = NewDescribeDBInstanceAttributeRequest() + } + response = NewDescribeDBInstanceAttributeResponse() + err = c.Send(request, response) + return +} + +func NewDescribeDBInstancesRequest() (request *DescribeDBInstancesRequest) { + request = &DescribeDBInstancesRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + request.Init().WithApiInfo("postgres", APIVersion, "DescribeDBInstances") + return +} + +func NewDescribeDBInstancesResponse() (response *DescribeDBInstancesResponse) { + response = &DescribeDBInstancesResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// 本接口 (DescribeDBInstances) 用于查询一个或多个实例的详细信息。 +func (c *Client) DescribeDBInstances(request *DescribeDBInstancesRequest) (response *DescribeDBInstancesResponse, err error) { + if request == nil { + request = NewDescribeDBInstancesRequest() + } + response = NewDescribeDBInstancesResponse() + err = c.Send(request, response) + return +} + +func NewDescribeDBSlowlogsRequest() (request *DescribeDBSlowlogsRequest) { + request = &DescribeDBSlowlogsRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + request.Init().WithApiInfo("postgres", APIVersion, "DescribeDBSlowlogs") + return +} + +func NewDescribeDBSlowlogsResponse() (response *DescribeDBSlowlogsResponse) { + response = &DescribeDBSlowlogsResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// 本接口(DescribeDBSlowlogs)用于获取慢查询日志。 +func (c *Client) DescribeDBSlowlogs(request *DescribeDBSlowlogsRequest) (response *DescribeDBSlowlogsResponse, err error) { + if request == nil { + request = NewDescribeDBSlowlogsRequest() + } + response = NewDescribeDBSlowlogsResponse() + err = c.Send(request, response) + return +} + +func NewDescribeDBXlogsRequest() (request *DescribeDBXlogsRequest) { + request = &DescribeDBXlogsRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + request.Init().WithApiInfo("postgres", APIVersion, "DescribeDBXlogs") + return +} + +func NewDescribeDBXlogsResponse() (response *DescribeDBXlogsResponse) { + response = &DescribeDBXlogsResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// 本接口(DescribeDBXlogs)用于获取实例Xlog列表。 +func (c *Client) DescribeDBXlogs(request *DescribeDBXlogsRequest) (response *DescribeDBXlogsResponse, err error) { + if request == nil { + request = NewDescribeDBXlogsRequest() + } + response = NewDescribeDBXlogsResponse() + err = c.Send(request, response) + return +} + +func NewDescribeDatabasesRequest() (request *DescribeDatabasesRequest) { + request = &DescribeDatabasesRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + request.Init().WithApiInfo("postgres", APIVersion, "DescribeDatabases") + return +} + +func NewDescribeDatabasesResponse() (response *DescribeDatabasesResponse) { + response = &DescribeDatabasesResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// 接口(DescribeDatabases)用来拉取数据库列表 +func (c *Client) DescribeDatabases(request *DescribeDatabasesRequest) (response *DescribeDatabasesResponse, err error) { + if request == nil { + request = NewDescribeDatabasesRequest() + } + response = NewDescribeDatabasesResponse() + err = c.Send(request, response) + return +} + +func NewDescribeOrdersRequest() (request *DescribeOrdersRequest) { + request = &DescribeOrdersRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + request.Init().WithApiInfo("postgres", APIVersion, "DescribeOrders") + return +} + +func NewDescribeOrdersResponse() (response *DescribeOrdersResponse) { + response = &DescribeOrdersResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// 本接口(DescribeOrders)用于获取订单信息。 +func (c *Client) DescribeOrders(request *DescribeOrdersRequest) (response *DescribeOrdersResponse, err error) { + if request == nil { + request = NewDescribeOrdersRequest() + } + response = NewDescribeOrdersResponse() + err = c.Send(request, response) + return +} + +func NewDescribeProductConfigRequest() (request *DescribeProductConfigRequest) { + request = &DescribeProductConfigRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + request.Init().WithApiInfo("postgres", APIVersion, "DescribeProductConfig") + return +} + +func NewDescribeProductConfigResponse() (response *DescribeProductConfigResponse) { + response = &DescribeProductConfigResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// 本接口 (DescribeProductConfig) 用于查询售卖规格配置。 +func (c *Client) DescribeProductConfig(request *DescribeProductConfigRequest) (response *DescribeProductConfigResponse, err error) { + if request == nil { + request = NewDescribeProductConfigRequest() + } + response = NewDescribeProductConfigResponse() + err = c.Send(request, response) + return +} + +func NewDescribeRegionsRequest() (request *DescribeRegionsRequest) { + request = &DescribeRegionsRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + request.Init().WithApiInfo("postgres", APIVersion, "DescribeRegions") + return +} + +func NewDescribeRegionsResponse() (response *DescribeRegionsResponse) { + response = &DescribeRegionsResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// 本接口 (DescribeRegions) 用于查询售卖地域信息。 +func (c *Client) DescribeRegions(request *DescribeRegionsRequest) (response *DescribeRegionsResponse, err error) { + if request == nil { + request = NewDescribeRegionsRequest() + } + response = NewDescribeRegionsResponse() + err = c.Send(request, response) + return +} + +func NewDescribeServerlessDBInstancesRequest() (request *DescribeServerlessDBInstancesRequest) { + request = &DescribeServerlessDBInstancesRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + request.Init().WithApiInfo("postgres", APIVersion, "DescribeServerlessDBInstances") + return +} + +func NewDescribeServerlessDBInstancesResponse() (response *DescribeServerlessDBInstancesResponse) { + response = &DescribeServerlessDBInstancesResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// 用于查询一个或多个serverlessDB实例的详细信息 +func (c *Client) DescribeServerlessDBInstances(request *DescribeServerlessDBInstancesRequest) (response *DescribeServerlessDBInstancesResponse, err error) { + if request == nil { + request = NewDescribeServerlessDBInstancesRequest() + } + response = NewDescribeServerlessDBInstancesResponse() + err = c.Send(request, response) + return +} + +func NewDescribeZonesRequest() (request *DescribeZonesRequest) { + request = &DescribeZonesRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + request.Init().WithApiInfo("postgres", APIVersion, "DescribeZones") + return +} + +func NewDescribeZonesResponse() (response *DescribeZonesResponse) { + response = &DescribeZonesResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// 本接口 (DescribeZones) 用于查询支持的可用区信息。 +func (c *Client) DescribeZones(request *DescribeZonesRequest) (response *DescribeZonesResponse, err error) { + if request == nil { + request = NewDescribeZonesRequest() + } + response = NewDescribeZonesResponse() + err = c.Send(request, response) + return +} + +func NewDestroyDBInstanceRequest() (request *DestroyDBInstanceRequest) { + request = &DestroyDBInstanceRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + request.Init().WithApiInfo("postgres", APIVersion, "DestroyDBInstance") + return +} + +func NewDestroyDBInstanceResponse() (response *DestroyDBInstanceResponse) { + response = &DestroyDBInstanceResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// 本接口 (DestroyDBInstance) 用于销毁指定DBInstanceId对应的实例。 +func (c *Client) DestroyDBInstance(request *DestroyDBInstanceRequest) (response *DestroyDBInstanceResponse, err error) { + if request == nil { + request = NewDestroyDBInstanceRequest() + } + response = NewDestroyDBInstanceResponse() + err = c.Send(request, response) + return +} + +func NewInitDBInstancesRequest() (request *InitDBInstancesRequest) { + request = &InitDBInstancesRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + request.Init().WithApiInfo("postgres", APIVersion, "InitDBInstances") + return +} + +func NewInitDBInstancesResponse() (response *InitDBInstancesResponse) { + response = &InitDBInstancesResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// 本接口 (InitDBInstances) 用于初始化云数据库PostgreSQL实例。 +func (c *Client) InitDBInstances(request *InitDBInstancesRequest) (response *InitDBInstancesResponse, err error) { + if request == nil { + request = NewInitDBInstancesRequest() + } + response = NewInitDBInstancesResponse() + err = c.Send(request, response) + return +} + +func NewInquiryPriceCreateDBInstancesRequest() (request *InquiryPriceCreateDBInstancesRequest) { + request = &InquiryPriceCreateDBInstancesRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + request.Init().WithApiInfo("postgres", APIVersion, "InquiryPriceCreateDBInstances") + return +} + +func NewInquiryPriceCreateDBInstancesResponse() (response *InquiryPriceCreateDBInstancesResponse) { + response = &InquiryPriceCreateDBInstancesResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// 本接口 (InquiryPriceCreateDBInstances) 用于查询购买一个或多个实例的价格信息。 +func (c *Client) InquiryPriceCreateDBInstances(request *InquiryPriceCreateDBInstancesRequest) (response *InquiryPriceCreateDBInstancesResponse, err error) { + if request == nil { + request = NewInquiryPriceCreateDBInstancesRequest() + } + response = NewInquiryPriceCreateDBInstancesResponse() + err = c.Send(request, response) + return +} + +func NewInquiryPriceRenewDBInstanceRequest() (request *InquiryPriceRenewDBInstanceRequest) { + request = &InquiryPriceRenewDBInstanceRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + request.Init().WithApiInfo("postgres", APIVersion, "InquiryPriceRenewDBInstance") + return +} + +func NewInquiryPriceRenewDBInstanceResponse() (response *InquiryPriceRenewDBInstanceResponse) { + response = &InquiryPriceRenewDBInstanceResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// 本接口(InquiryPriceRenewDBInstance)用于查询续费实例的价格。 +func (c *Client) InquiryPriceRenewDBInstance(request *InquiryPriceRenewDBInstanceRequest) (response *InquiryPriceRenewDBInstanceResponse, err error) { + if request == nil { + request = NewInquiryPriceRenewDBInstanceRequest() + } + response = NewInquiryPriceRenewDBInstanceResponse() + err = c.Send(request, response) + return +} + +func NewInquiryPriceUpgradeDBInstanceRequest() (request *InquiryPriceUpgradeDBInstanceRequest) { + request = &InquiryPriceUpgradeDBInstanceRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + request.Init().WithApiInfo("postgres", APIVersion, "InquiryPriceUpgradeDBInstance") + return +} + +func NewInquiryPriceUpgradeDBInstanceResponse() (response *InquiryPriceUpgradeDBInstanceResponse) { + response = &InquiryPriceUpgradeDBInstanceResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// 本接口(InquiryPriceUpgradeDBInstance)用于查询升级实例的价格。 +func (c *Client) InquiryPriceUpgradeDBInstance(request *InquiryPriceUpgradeDBInstanceRequest) (response *InquiryPriceUpgradeDBInstanceResponse, err error) { + if request == nil { + request = NewInquiryPriceUpgradeDBInstanceRequest() + } + response = NewInquiryPriceUpgradeDBInstanceResponse() + err = c.Send(request, response) + return +} + +func NewModifyAccountRemarkRequest() (request *ModifyAccountRemarkRequest) { + request = &ModifyAccountRemarkRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + request.Init().WithApiInfo("postgres", APIVersion, "ModifyAccountRemark") + return +} + +func NewModifyAccountRemarkResponse() (response *ModifyAccountRemarkResponse) { + response = &ModifyAccountRemarkResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// 本接口(ModifyAccountRemark)用于修改帐号备注。 +func (c *Client) ModifyAccountRemark(request *ModifyAccountRemarkRequest) (response *ModifyAccountRemarkResponse, err error) { + if request == nil { + request = NewModifyAccountRemarkRequest() + } + response = NewModifyAccountRemarkResponse() + err = c.Send(request, response) + return +} + +func NewModifyDBInstanceNameRequest() (request *ModifyDBInstanceNameRequest) { + request = &ModifyDBInstanceNameRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + request.Init().WithApiInfo("postgres", APIVersion, "ModifyDBInstanceName") + return +} + +func NewModifyDBInstanceNameResponse() (response *ModifyDBInstanceNameResponse) { + response = &ModifyDBInstanceNameResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// 本接口(ModifyDBInstanceName)用于修改postgresql实例名字。 +func (c *Client) ModifyDBInstanceName(request *ModifyDBInstanceNameRequest) (response *ModifyDBInstanceNameResponse, err error) { + if request == nil { + request = NewModifyDBInstanceNameRequest() + } + response = NewModifyDBInstanceNameResponse() + err = c.Send(request, response) + return +} + +func NewModifyDBInstancesProjectRequest() (request *ModifyDBInstancesProjectRequest) { + request = &ModifyDBInstancesProjectRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + request.Init().WithApiInfo("postgres", APIVersion, "ModifyDBInstancesProject") + return +} + +func NewModifyDBInstancesProjectResponse() (response *ModifyDBInstancesProjectResponse) { + response = &ModifyDBInstancesProjectResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// 本接口(ModifyDBInstancesProject)用于将实例转至其他项目。 +func (c *Client) ModifyDBInstancesProject(request *ModifyDBInstancesProjectRequest) (response *ModifyDBInstancesProjectResponse, err error) { + if request == nil { + request = NewModifyDBInstancesProjectRequest() + } + response = NewModifyDBInstancesProjectResponse() + err = c.Send(request, response) + return +} + +func NewOpenDBExtranetAccessRequest() (request *OpenDBExtranetAccessRequest) { + request = &OpenDBExtranetAccessRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + request.Init().WithApiInfo("postgres", APIVersion, "OpenDBExtranetAccess") + return +} + +func NewOpenDBExtranetAccessResponse() (response *OpenDBExtranetAccessResponse) { + response = &OpenDBExtranetAccessResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// 本接口(OpenDBExtranetAccess)用于开通外网。 +func (c *Client) OpenDBExtranetAccess(request *OpenDBExtranetAccessRequest) (response *OpenDBExtranetAccessResponse, err error) { + if request == nil { + request = NewOpenDBExtranetAccessRequest() + } + response = NewOpenDBExtranetAccessResponse() + err = c.Send(request, response) + return +} + +func NewOpenServerlessDBExtranetAccessRequest() (request *OpenServerlessDBExtranetAccessRequest) { + request = &OpenServerlessDBExtranetAccessRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + request.Init().WithApiInfo("postgres", APIVersion, "OpenServerlessDBExtranetAccess") + return +} + +func NewOpenServerlessDBExtranetAccessResponse() (response *OpenServerlessDBExtranetAccessResponse) { + response = &OpenServerlessDBExtranetAccessResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// 开通serverlessDB实例外网 +func (c *Client) OpenServerlessDBExtranetAccess(request *OpenServerlessDBExtranetAccessRequest) (response *OpenServerlessDBExtranetAccessResponse, err error) { + if request == nil { + request = NewOpenServerlessDBExtranetAccessRequest() + } + response = NewOpenServerlessDBExtranetAccessResponse() + err = c.Send(request, response) + return +} + +func NewRenewInstanceRequest() (request *RenewInstanceRequest) { + request = &RenewInstanceRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + request.Init().WithApiInfo("postgres", APIVersion, "RenewInstance") + return +} + +func NewRenewInstanceResponse() (response *RenewInstanceResponse) { + response = &RenewInstanceResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// 本接口(RenewInstance)用于续费实例。 +func (c *Client) RenewInstance(request *RenewInstanceRequest) (response *RenewInstanceResponse, err error) { + if request == nil { + request = NewRenewInstanceRequest() + } + response = NewRenewInstanceResponse() + err = c.Send(request, response) + return +} + +func NewResetAccountPasswordRequest() (request *ResetAccountPasswordRequest) { + request = &ResetAccountPasswordRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + request.Init().WithApiInfo("postgres", APIVersion, "ResetAccountPassword") + return +} + +func NewResetAccountPasswordResponse() (response *ResetAccountPasswordResponse) { + response = &ResetAccountPasswordResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// 本接口(ResetAccountPassword)用于重置实例的账户密码。 +func (c *Client) ResetAccountPassword(request *ResetAccountPasswordRequest) (response *ResetAccountPasswordResponse, err error) { + if request == nil { + request = NewResetAccountPasswordRequest() + } + response = NewResetAccountPasswordResponse() + err = c.Send(request, response) + return +} + +func NewRestartDBInstanceRequest() (request *RestartDBInstanceRequest) { + request = &RestartDBInstanceRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + request.Init().WithApiInfo("postgres", APIVersion, "RestartDBInstance") + return +} + +func NewRestartDBInstanceResponse() (response *RestartDBInstanceResponse) { + response = &RestartDBInstanceResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// 本接口(RestartDBInstance)用于重启实例。 +func (c *Client) RestartDBInstance(request *RestartDBInstanceRequest) (response *RestartDBInstanceResponse, err error) { + if request == nil { + request = NewRestartDBInstanceRequest() + } + response = NewRestartDBInstanceResponse() + err = c.Send(request, response) + return +} + +func NewSetAutoRenewFlagRequest() (request *SetAutoRenewFlagRequest) { + request = &SetAutoRenewFlagRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + request.Init().WithApiInfo("postgres", APIVersion, "SetAutoRenewFlag") + return +} + +func NewSetAutoRenewFlagResponse() (response *SetAutoRenewFlagResponse) { + response = &SetAutoRenewFlagResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// 本接口(SetAutoRenewFlag)用于设置自动续费。 +func (c *Client) SetAutoRenewFlag(request *SetAutoRenewFlagRequest) (response *SetAutoRenewFlagResponse, err error) { + if request == nil { + request = NewSetAutoRenewFlagRequest() + } + response = NewSetAutoRenewFlagResponse() + err = c.Send(request, response) + return +} + +func NewUpgradeDBInstanceRequest() (request *UpgradeDBInstanceRequest) { + request = &UpgradeDBInstanceRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + request.Init().WithApiInfo("postgres", APIVersion, "UpgradeDBInstance") + return +} + +func NewUpgradeDBInstanceResponse() (response *UpgradeDBInstanceResponse) { + response = &UpgradeDBInstanceResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// 本接口(UpgradeDBInstance)用于升级实例。 +func (c *Client) UpgradeDBInstance(request *UpgradeDBInstanceRequest) (response *UpgradeDBInstanceResponse, err error) { + if request == nil { + request = NewUpgradeDBInstanceRequest() + } + response = NewUpgradeDBInstanceResponse() + err = c.Send(request, response) + return +} diff --git a/vendor/github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/postgres/v20170312/models.go b/vendor/github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/postgres/v20170312/models.go new file mode 100644 index 0000000000..935aea2de9 --- /dev/null +++ b/vendor/github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/postgres/v20170312/models.go @@ -0,0 +1,1967 @@ +// Copyright (c) 2017-2018 THL A29 Limited, a Tencent company. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package v20170312 + +import ( + "encoding/json" + + tchttp "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/http" +) + +type AccountInfo struct { + + // 实例ID,形如postgres-lnp6j617 + DBInstanceId *string `json:"DBInstanceId,omitempty" name:"DBInstanceId"` + + // 帐号 + UserName *string `json:"UserName,omitempty" name:"UserName"` + + // 帐号备注 + Remark *string `json:"Remark,omitempty" name:"Remark"` + + // 帐号状态。 1-创建中,2-正常,3-修改中,4-密码重置中,-1-删除中 + Status *int64 `json:"Status,omitempty" name:"Status"` + + // 帐号创建时间 + CreateTime *string `json:"CreateTime,omitempty" name:"CreateTime"` + + // 帐号最后一次更新时间 + UpdateTime *string `json:"UpdateTime,omitempty" name:"UpdateTime"` +} + +type CloseDBExtranetAccessRequest struct { + *tchttp.BaseRequest + + // 实例ID,形如postgres-6r233v55 + DBInstanceId *string `json:"DBInstanceId,omitempty" name:"DBInstanceId"` +} + +func (r *CloseDBExtranetAccessRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *CloseDBExtranetAccessRequest) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type CloseDBExtranetAccessResponse struct { + *tchttp.BaseResponse + Response *struct { + + // 异步任务流程ID + FlowId *int64 `json:"FlowId,omitempty" name:"FlowId"` + + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` + } `json:"Response"` +} + +func (r *CloseDBExtranetAccessResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *CloseDBExtranetAccessResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type CloseServerlessDBExtranetAccessRequest struct { + *tchttp.BaseRequest + + // 实例唯一标识符 + DBInstanceId *string `json:"DBInstanceId,omitempty" name:"DBInstanceId"` + + // 实例名称 + DBInstanceName *string `json:"DBInstanceName,omitempty" name:"DBInstanceName"` +} + +func (r *CloseServerlessDBExtranetAccessRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *CloseServerlessDBExtranetAccessRequest) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type CloseServerlessDBExtranetAccessResponse struct { + *tchttp.BaseResponse + Response *struct { + + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` + } `json:"Response"` +} + +func (r *CloseServerlessDBExtranetAccessResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *CloseServerlessDBExtranetAccessResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type CreateDBInstancesRequest struct { + *tchttp.BaseRequest + + // 售卖规格ID。该参数可以通过调用DescribeProductConfig的返回值中的SpecCode字段来获取。 + SpecCode *string `json:"SpecCode,omitempty" name:"SpecCode"` + + // PostgreSQL内核版本,目前支持:9.3.5、9.5.4、10.4三种版本。 + DBVersion *string `json:"DBVersion,omitempty" name:"DBVersion"` + + // 实例容量大小,单位:GB。 + Storage *uint64 `json:"Storage,omitempty" name:"Storage"` + + // 一次性购买的实例数量。取值1-100 + InstanceCount *uint64 `json:"InstanceCount,omitempty" name:"InstanceCount"` + + // 购买时长,单位:月。目前只支持1,2,3,4,5,6,7,8,9,10,11,12,24,36这些值,按量计费模式下该参数传1。 + Period *uint64 `json:"Period,omitempty" name:"Period"` + + // 可用区ID。该参数可以通过调用 DescribeZones 接口的返回值中的Zone字段来获取。 + Zone *string `json:"Zone,omitempty" name:"Zone"` + + // 项目ID。 + ProjectId *int64 `json:"ProjectId,omitempty" name:"ProjectId"` + + // 实例计费类型。目前支持:PREPAID(预付费,即包年包月),POSTPAID_BY_HOUR(后付费,即按量计费)。 + InstanceChargeType *string `json:"InstanceChargeType,omitempty" name:"InstanceChargeType"` + + // 是否自动使用代金券。1(是),0(否),默认不使用。 + AutoVoucher *uint64 `json:"AutoVoucher,omitempty" name:"AutoVoucher"` + + // 代金券ID列表,目前仅支持指定一张代金券。 + VoucherIds []*string `json:"VoucherIds,omitempty" name:"VoucherIds" list` + + // 私有网络ID。 + VpcId *string `json:"VpcId,omitempty" name:"VpcId"` + + // 私有网络子网ID。 + SubnetId *string `json:"SubnetId,omitempty" name:"SubnetId"` + + // 续费标记:0-正常续费(默认);1-自动续费; + AutoRenewFlag *int64 `json:"AutoRenewFlag,omitempty" name:"AutoRenewFlag"` + + // 活动ID + ActivityId *int64 `json:"ActivityId,omitempty" name:"ActivityId"` + + // 实例名(后续支持) + Name *string `json:"Name,omitempty" name:"Name"` +} + +func (r *CreateDBInstancesRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *CreateDBInstancesRequest) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type CreateDBInstancesResponse struct { + *tchttp.BaseResponse + Response *struct { + + // 订单号列表。每个实例对应一个订单号。 + DealNames []*string `json:"DealNames,omitempty" name:"DealNames" list` + + // 冻结流水号 + BillId *string `json:"BillId,omitempty" name:"BillId"` + + // 创建成功的实例ID集合,只在后付费情景下有返回值 + DBInstanceIdSet []*string `json:"DBInstanceIdSet,omitempty" name:"DBInstanceIdSet" list` + + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` + } `json:"Response"` +} + +func (r *CreateDBInstancesResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *CreateDBInstancesResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type CreateServerlessDBInstanceRequest struct { + *tchttp.BaseRequest + + // 可用区ID。公测阶段仅支持ap-shanghai-2、ap-beijing-1,ap-guangzhou-2. + Zone *string `json:"Zone,omitempty" name:"Zone"` + + // DB实例名称,同一个账号下该值必须唯一。 + DBInstanceName *string `json:"DBInstanceName,omitempty" name:"DBInstanceName"` + + // PostgreSQL内核版本,目前只支持:10.4。 + DBVersion *string `json:"DBVersion,omitempty" name:"DBVersion"` + + // PostgreSQL数据库字符集,目前支持UTF8。 + DBCharset *string `json:"DBCharset,omitempty" name:"DBCharset"` + + // 项目ID。 + ProjectId *uint64 `json:"ProjectId,omitempty" name:"ProjectId"` + + // 私有网络ID。 + VpcId *string `json:"VpcId,omitempty" name:"VpcId"` + + // 私有网络子网ID。 + SubnetId *string `json:"SubnetId,omitempty" name:"SubnetId"` +} + +func (r *CreateServerlessDBInstanceRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *CreateServerlessDBInstanceRequest) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type CreateServerlessDBInstanceResponse struct { + *tchttp.BaseResponse + Response *struct { + + // 实例ID,该ID全局唯一,如:postgres-xxxxx + DBInstanceId *string `json:"DBInstanceId,omitempty" name:"DBInstanceId"` + + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` + } `json:"Response"` +} + +func (r *CreateServerlessDBInstanceResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *CreateServerlessDBInstanceResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type DBBackup struct { + + // 备份文件唯一标识 + Id *int64 `json:"Id,omitempty" name:"Id"` + + // 文件生成的开始时间 + StartTime *string `json:"StartTime,omitempty" name:"StartTime"` + + // 文件生成的结束时间 + EndTime *string `json:"EndTime,omitempty" name:"EndTime"` + + // 文件大小(K) + Size *int64 `json:"Size,omitempty" name:"Size"` + + // 策略(0-实例备份;1-多库备份) + Strategy *int64 `json:"Strategy,omitempty" name:"Strategy"` + + // 类型(0-定时) + Way *int64 `json:"Way,omitempty" name:"Way"` + + // 备份方式(1-完整) + Type *int64 `json:"Type,omitempty" name:"Type"` + + // 状态(1-创建中;2-成功;3-失败) + Status *int64 `json:"Status,omitempty" name:"Status"` + + // DB列表 + DbList []*string `json:"DbList,omitempty" name:"DbList" list` + + // 内网下载地址 + InternalAddr *string `json:"InternalAddr,omitempty" name:"InternalAddr"` + + // 外网下载地址 + ExternalAddr *string `json:"ExternalAddr,omitempty" name:"ExternalAddr"` +} + +type DBInstance struct { + + // 实例所属地域,如: ap-guangzhou,对应RegionSet的Region字段 + Region *string `json:"Region,omitempty" name:"Region"` + + // 实例所属可用区, 如:ap-guangzhou-3,对应ZoneSet的Zone字段 + Zone *string `json:"Zone,omitempty" name:"Zone"` + + // 项目ID + ProjectId *uint64 `json:"ProjectId,omitempty" name:"ProjectId"` + + // 私有网络ID + VpcId *string `json:"VpcId,omitempty" name:"VpcId"` + + // SubnetId + SubnetId *string `json:"SubnetId,omitempty" name:"SubnetId"` + + // 实例ID + DBInstanceId *string `json:"DBInstanceId,omitempty" name:"DBInstanceId"` + + // 实例名称 + DBInstanceName *string `json:"DBInstanceName,omitempty" name:"DBInstanceName"` + + // 实例状态 + DBInstanceStatus *string `json:"DBInstanceStatus,omitempty" name:"DBInstanceStatus"` + + // 实例分配的内存大小,单位:GB + DBInstanceMemory *uint64 `json:"DBInstanceMemory,omitempty" name:"DBInstanceMemory"` + + // 实例分配的存储空间大小,单位:GB + DBInstanceStorage *uint64 `json:"DBInstanceStorage,omitempty" name:"DBInstanceStorage"` + + // 实例分配的CPU数量,单位:个 + DBInstanceCpu *uint64 `json:"DBInstanceCpu,omitempty" name:"DBInstanceCpu"` + + // 售卖规格ID + DBInstanceClass *string `json:"DBInstanceClass,omitempty" name:"DBInstanceClass"` + + // 实例类型,类型有:1、primary(主实例);2、readonly(只读实例);3、guard(灾备实例);4、temp(临时实例) + DBInstanceType *string `json:"DBInstanceType,omitempty" name:"DBInstanceType"` + + // 实例版本,目前只支持standard(双机高可用版, 一主一从) + DBInstanceVersion *string `json:"DBInstanceVersion,omitempty" name:"DBInstanceVersion"` + + // 实例DB字符集 + DBCharset *string `json:"DBCharset,omitempty" name:"DBCharset"` + + // PostgreSQL内核版本 + DBVersion *string `json:"DBVersion,omitempty" name:"DBVersion"` + + // 实例创建时间 + CreateTime *string `json:"CreateTime,omitempty" name:"CreateTime"` + + // 实例执行最后一次更新的时间 + UpdateTime *string `json:"UpdateTime,omitempty" name:"UpdateTime"` + + // 实例到期时间 + ExpireTime *string `json:"ExpireTime,omitempty" name:"ExpireTime"` + + // 实例隔离时间 + IsolatedTime *string `json:"IsolatedTime,omitempty" name:"IsolatedTime"` + + // 计费模式,1、prepaid(包年包月,预付费);2、postpaid(按量计费,后付费) + PayType *string `json:"PayType,omitempty" name:"PayType"` + + // 是否自动续费,1:自动续费,0:不自动续费 + AutoRenew *uint64 `json:"AutoRenew,omitempty" name:"AutoRenew"` + + // 实例网络连接信息 + DBInstanceNetInfo []*DBInstanceNetInfo `json:"DBInstanceNetInfo,omitempty" name:"DBInstanceNetInfo" list` + + // 机器类型 + Type *string `json:"Type,omitempty" name:"Type"` + + // 用户的AppId + AppId *uint64 `json:"AppId,omitempty" name:"AppId"` + + // 实例的Uid + Uid *uint64 `json:"Uid,omitempty" name:"Uid"` +} + +type DBInstanceNetInfo struct { + + // DNS域名 + Address *string `json:"Address,omitempty" name:"Address"` + + // Ip + Ip *string `json:"Ip,omitempty" name:"Ip"` + + // 连接Port地址 + Port *uint64 `json:"Port,omitempty" name:"Port"` + + // 网络类型,1、inner(内网地址);2、public(外网地址) + NetType *string `json:"NetType,omitempty" name:"NetType"` + + // 网络连接状态 + Status *string `json:"Status,omitempty" name:"Status"` +} + +type DeleteServerlessDBInstanceRequest struct { + *tchttp.BaseRequest + + // DB实例名称,实例名和实例ID必须至少传一个,如果同时存在,将只以实例ID为准。 + DBInstanceName *string `json:"DBInstanceName,omitempty" name:"DBInstanceName"` + + // DB实例ID,实例名和实例ID必须至少传一个,如果同时存在,将只以实例ID为准。 + DBInstanceId *string `json:"DBInstanceId,omitempty" name:"DBInstanceId"` +} + +func (r *DeleteServerlessDBInstanceRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *DeleteServerlessDBInstanceRequest) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type DeleteServerlessDBInstanceResponse struct { + *tchttp.BaseResponse + Response *struct { + + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` + } `json:"Response"` +} + +func (r *DeleteServerlessDBInstanceResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *DeleteServerlessDBInstanceResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type DescribeAccountsRequest struct { + *tchttp.BaseRequest + + // 实例ID,形如postgres-6fego161 + DBInstanceId *string `json:"DBInstanceId,omitempty" name:"DBInstanceId"` + + // 分页返回,每页最大返回数目,默认20,取值范围为1-100 + Limit *int64 `json:"Limit,omitempty" name:"Limit"` + + // 分页返回,返回第几页的用户数据。页码从0开始计数 + Offset *int64 `json:"Offset,omitempty" name:"Offset"` + + // 返回数据按照创建时间或者用户名排序。取值只能为createTime或者name。createTime-按照创建时间排序;name-按照用户名排序 + OrderBy *string `json:"OrderBy,omitempty" name:"OrderBy"` + + // 返回结果是升序还是降序。取值只能为desc或者asc。desc-降序;asc-升序 + OrderByType *string `json:"OrderByType,omitempty" name:"OrderByType"` +} + +func (r *DescribeAccountsRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *DescribeAccountsRequest) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type DescribeAccountsResponse struct { + *tchttp.BaseResponse + Response *struct { + + // 本次调用接口共返回了多少条数据。 + TotalCount *int64 `json:"TotalCount,omitempty" name:"TotalCount"` + + // 帐号列表详细信息。 + Details []*AccountInfo `json:"Details,omitempty" name:"Details" list` + + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` + } `json:"Response"` +} + +func (r *DescribeAccountsResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *DescribeAccountsResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type DescribeDBBackupsRequest struct { + *tchttp.BaseRequest + + // 实例ID,形如postgres-4wdeb0zv。 + DBInstanceId *string `json:"DBInstanceId,omitempty" name:"DBInstanceId"` + + // 备份方式(1-全量)。目前只支持全量,取值为1。 + Type *int64 `json:"Type,omitempty" name:"Type"` + + // 查询开始时间,形如2018-06-10 17:06:38,起始时间不得小于7天以前 + StartTime *string `json:"StartTime,omitempty" name:"StartTime"` + + // 查询结束时间,形如2018-06-10 17:06:38 + EndTime *string `json:"EndTime,omitempty" name:"EndTime"` + + // 备份列表分页返回,每页返回数量,默认为 20,最小为1,最大值为 100。(当该参数不传或者传0时按默认值处理) + Limit *int64 `json:"Limit,omitempty" name:"Limit"` + + // 返回结果中的第几页,从第0页开始。默认为0。 + Offset *int64 `json:"Offset,omitempty" name:"Offset"` +} + +func (r *DescribeDBBackupsRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *DescribeDBBackupsRequest) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type DescribeDBBackupsResponse struct { + *tchttp.BaseResponse + Response *struct { + + // 返回备份列表中备份文件的个数 + TotalCount *int64 `json:"TotalCount,omitempty" name:"TotalCount"` + + // 备份列表 + BackupList []*DBBackup `json:"BackupList,omitempty" name:"BackupList" list` + + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` + } `json:"Response"` +} + +func (r *DescribeDBBackupsResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *DescribeDBBackupsResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type DescribeDBErrlogsRequest struct { + *tchttp.BaseRequest + + // 实例ID,形如postgres-5bq3wfjd + DBInstanceId *string `json:"DBInstanceId,omitempty" name:"DBInstanceId"` + + // 查询起始时间,形如2018-01-01 00:00:00,起始时间不得小于7天以前 + StartTime *string `json:"StartTime,omitempty" name:"StartTime"` + + // 查询结束时间,形如2018-01-01 00:00:00 + EndTime *string `json:"EndTime,omitempty" name:"EndTime"` + + // 数据库名字 + DatabaseName *string `json:"DatabaseName,omitempty" name:"DatabaseName"` + + // 搜索关键字 + SearchKeys []*string `json:"SearchKeys,omitempty" name:"SearchKeys" list` + + // 分页返回,每页返回的最大数量。取值为1-100 + Limit *int64 `json:"Limit,omitempty" name:"Limit"` + + // 分页返回,返回第几页的数据,从第0页开始计数 + Offset *int64 `json:"Offset,omitempty" name:"Offset"` +} + +func (r *DescribeDBErrlogsRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *DescribeDBErrlogsRequest) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type DescribeDBErrlogsResponse struct { + *tchttp.BaseResponse + Response *struct { + + // 本次调用返回了多少条数据 + TotalCount *int64 `json:"TotalCount,omitempty" name:"TotalCount"` + + // 错误日志列表 + Details []*ErrLogDetail `json:"Details,omitempty" name:"Details" list` + + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` + } `json:"Response"` +} + +func (r *DescribeDBErrlogsResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *DescribeDBErrlogsResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type DescribeDBInstanceAttributeRequest struct { + *tchttp.BaseRequest + + // 实例ID + DBInstanceId *string `json:"DBInstanceId,omitempty" name:"DBInstanceId"` +} + +func (r *DescribeDBInstanceAttributeRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *DescribeDBInstanceAttributeRequest) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type DescribeDBInstanceAttributeResponse struct { + *tchttp.BaseResponse + Response *struct { + + // 实例详细信息。 + DBInstance *DBInstance `json:"DBInstance,omitempty" name:"DBInstance"` + + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` + } `json:"Response"` +} + +func (r *DescribeDBInstanceAttributeResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *DescribeDBInstanceAttributeResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type DescribeDBInstancesRequest struct { + *tchttp.BaseRequest + + // 过滤条件,目前支持:db-instance-id、db-instance-name、db-project-id、db-pay-mode。 + Filters []*Filter `json:"Filters,omitempty" name:"Filters" list` + + // 每页显示数量,默认返回10条。 + Limit *uint64 `json:"Limit,omitempty" name:"Limit"` + + // 分页序号,从0开始。 + Offset *uint64 `json:"Offset,omitempty" name:"Offset"` + + // 排序指标,如实例名、创建时间等,支持DBInstanceId,CreateTime,Name,EndTime + OrderBy *string `json:"OrderBy,omitempty" name:"OrderBy"` + + // 排序方式,包括升序、降序 + OrderByType *string `json:"OrderByType,omitempty" name:"OrderByType"` +} + +func (r *DescribeDBInstancesRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *DescribeDBInstancesRequest) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type DescribeDBInstancesResponse struct { + *tchttp.BaseResponse + Response *struct { + + // 查询到的实例数量。 + TotalCount *uint64 `json:"TotalCount,omitempty" name:"TotalCount"` + + // 实例详细信息集合。 + DBInstanceSet []*DBInstance `json:"DBInstanceSet,omitempty" name:"DBInstanceSet" list` + + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` + } `json:"Response"` +} + +func (r *DescribeDBInstancesResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *DescribeDBInstancesResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type DescribeDBSlowlogsRequest struct { + *tchttp.BaseRequest + + // 实例ID,形如postgres-lnp6j617 + DBInstanceId *string `json:"DBInstanceId,omitempty" name:"DBInstanceId"` + + // 查询起始时间,形如2018-06-10 17:06:38,起始时间不得小于7天以前 + StartTime *string `json:"StartTime,omitempty" name:"StartTime"` + + // 查询结束时间,形如2018-06-10 17:06:38 + EndTime *string `json:"EndTime,omitempty" name:"EndTime"` + + // 数据库名字 + DatabaseName *string `json:"DatabaseName,omitempty" name:"DatabaseName"` + + // 按照何种指标排序,取值为sum_calls或者sum_cost_time。sum_calls-总调用次数;sum_cost_time-总的花费时间 + OrderBy *string `json:"OrderBy,omitempty" name:"OrderBy"` + + // 排序规则。desc-降序;asc-升序 + OrderByType *string `json:"OrderByType,omitempty" name:"OrderByType"` + + // 分页返回结果,每页最大返回数量,取值为1-100,默认20 + Limit *int64 `json:"Limit,omitempty" name:"Limit"` + + // 分页返回结果,返回结果的第几页,从0开始计数 + Offset *int64 `json:"Offset,omitempty" name:"Offset"` +} + +func (r *DescribeDBSlowlogsRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *DescribeDBSlowlogsRequest) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type DescribeDBSlowlogsResponse struct { + *tchttp.BaseResponse + Response *struct { + + // 本次返回多少条数据 + TotalCount *int64 `json:"TotalCount,omitempty" name:"TotalCount"` + + // 慢查询日志详情 + Detail *SlowlogDetail `json:"Detail,omitempty" name:"Detail"` + + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` + } `json:"Response"` +} + +func (r *DescribeDBSlowlogsResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *DescribeDBSlowlogsResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type DescribeDBXlogsRequest struct { + *tchttp.BaseRequest + + // 实例ID,形如postgres-4wdeb0zv。 + DBInstanceId *string `json:"DBInstanceId,omitempty" name:"DBInstanceId"` + + // 查询开始时间,形如2018-06-10 17:06:38,起始时间不得小于7天以前 + StartTime *string `json:"StartTime,omitempty" name:"StartTime"` + + // 查询结束时间,形如2018-06-10 17:06:38 + EndTime *string `json:"EndTime,omitempty" name:"EndTime"` + + // 分页返回,表示返回第几页的条目。从第0页开始计数。 + Offset *int64 `json:"Offset,omitempty" name:"Offset"` + + // 分页返回,表示每页有多少条目。取值为1-100。 + Limit *int64 `json:"Limit,omitempty" name:"Limit"` +} + +func (r *DescribeDBXlogsRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *DescribeDBXlogsRequest) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type DescribeDBXlogsResponse struct { + *tchttp.BaseResponse + Response *struct { + + // 表示此次返回结果有多少条数据。 + TotalCount *int64 `json:"TotalCount,omitempty" name:"TotalCount"` + + // Xlog列表 + XlogList []*Xlog `json:"XlogList,omitempty" name:"XlogList" list` + + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` + } `json:"Response"` +} + +func (r *DescribeDBXlogsResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *DescribeDBXlogsResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type DescribeDatabasesRequest struct { + *tchttp.BaseRequest + + // 实例ID + DBInstanceId *string `json:"DBInstanceId,omitempty" name:"DBInstanceId"` +} + +func (r *DescribeDatabasesRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *DescribeDatabasesRequest) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type DescribeDatabasesResponse struct { + *tchttp.BaseResponse + Response *struct { + + // 数据库信息 + Items []*string `json:"Items,omitempty" name:"Items" list` + + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` + } `json:"Response"` +} + +func (r *DescribeDatabasesResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *DescribeDatabasesResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type DescribeOrdersRequest struct { + *tchttp.BaseRequest + + // 订单名集合 + DealNames []*string `json:"DealNames,omitempty" name:"DealNames" list` +} + +func (r *DescribeOrdersRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *DescribeOrdersRequest) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type DescribeOrdersResponse struct { + *tchttp.BaseResponse + Response *struct { + + // 订单数量 + TotalCount *int64 `json:"TotalCount,omitempty" name:"TotalCount"` + + // 订单数组 + Deals []*PgDeal `json:"Deals,omitempty" name:"Deals" list` + + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` + } `json:"Response"` +} + +func (r *DescribeOrdersResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *DescribeOrdersResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type DescribeProductConfigRequest struct { + *tchttp.BaseRequest + + // 可用区名称 + Zone *string `json:"Zone,omitempty" name:"Zone"` +} + +func (r *DescribeProductConfigRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *DescribeProductConfigRequest) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type DescribeProductConfigResponse struct { + *tchttp.BaseResponse + Response *struct { + + // 售卖规格列表。 + SpecInfoList []*SpecInfo `json:"SpecInfoList,omitempty" name:"SpecInfoList" list` + + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` + } `json:"Response"` +} + +func (r *DescribeProductConfigResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *DescribeProductConfigResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type DescribeRegionsRequest struct { + *tchttp.BaseRequest +} + +func (r *DescribeRegionsRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *DescribeRegionsRequest) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type DescribeRegionsResponse struct { + *tchttp.BaseResponse + Response *struct { + + // 返回的结果数量。 + TotalCount *int64 `json:"TotalCount,omitempty" name:"TotalCount"` + + // 地域信息集合。 + RegionSet []*RegionInfo `json:"RegionSet,omitempty" name:"RegionSet" list` + + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` + } `json:"Response"` +} + +func (r *DescribeRegionsResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *DescribeRegionsResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type DescribeServerlessDBInstancesRequest struct { + *tchttp.BaseRequest + + // 查询条件 + Filter []*Filter `json:"Filter,omitempty" name:"Filter" list` + + // 查询个数 + Limit *uint64 `json:"Limit,omitempty" name:"Limit"` + + // 偏移量 + Offset *uint64 `json:"Offset,omitempty" name:"Offset"` +} + +func (r *DescribeServerlessDBInstancesRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *DescribeServerlessDBInstancesRequest) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type DescribeServerlessDBInstancesResponse struct { + *tchttp.BaseResponse + Response *struct { + + // 查询结果数 + TotalCount *int64 `json:"TotalCount,omitempty" name:"TotalCount"` + + // 查询结果 + // 注意:此字段可能返回 null,表示取不到有效值。 + DBInstanceSet []*ServerlessDBInstance `json:"DBInstanceSet,omitempty" name:"DBInstanceSet" list` + + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` + } `json:"Response"` +} + +func (r *DescribeServerlessDBInstancesResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *DescribeServerlessDBInstancesResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type DescribeZonesRequest struct { + *tchttp.BaseRequest +} + +func (r *DescribeZonesRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *DescribeZonesRequest) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type DescribeZonesResponse struct { + *tchttp.BaseResponse + Response *struct { + + // 返回的结果数量。 + TotalCount *int64 `json:"TotalCount,omitempty" name:"TotalCount"` + + // 可用区信息集合。 + ZoneSet []*ZoneInfo `json:"ZoneSet,omitempty" name:"ZoneSet" list` + + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` + } `json:"Response"` +} + +func (r *DescribeZonesResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *DescribeZonesResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type DestroyDBInstanceRequest struct { + *tchttp.BaseRequest + + // 待删除实例标识符 + DBInstanceId *string `json:"DBInstanceId,omitempty" name:"DBInstanceId"` +} + +func (r *DestroyDBInstanceRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *DestroyDBInstanceRequest) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type DestroyDBInstanceResponse struct { + *tchttp.BaseResponse + Response *struct { + + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` + } `json:"Response"` +} + +func (r *DestroyDBInstanceResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *DestroyDBInstanceResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type ErrLogDetail struct { + + // 用户名 + UserName *string `json:"UserName,omitempty" name:"UserName"` + + // 数据库名字 + Database *string `json:"Database,omitempty" name:"Database"` + + // 错误发生时间 + ErrTime *string `json:"ErrTime,omitempty" name:"ErrTime"` + + // 错误消息 + ErrMsg *string `json:"ErrMsg,omitempty" name:"ErrMsg"` +} + +type Filter struct { + + // 过滤键的名称。 + Name *string `json:"Name,omitempty" name:"Name"` + + // 一个或者多个过滤值。 + Values []*string `json:"Values,omitempty" name:"Values" list` +} + +type InitDBInstancesRequest struct { + *tchttp.BaseRequest + + // 实例ID集合。 + DBInstanceIdSet []*string `json:"DBInstanceIdSet,omitempty" name:"DBInstanceIdSet" list` + + // 实例根账号用户名。 + AdminName *string `json:"AdminName,omitempty" name:"AdminName"` + + // 实例根账号用户名对应的密码。 + AdminPassword *string `json:"AdminPassword,omitempty" name:"AdminPassword"` + + // 实例字符集,目前只支持:UTF8、LATIN1。 + Charset *string `json:"Charset,omitempty" name:"Charset"` +} + +func (r *InitDBInstancesRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *InitDBInstancesRequest) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type InitDBInstancesResponse struct { + *tchttp.BaseResponse + Response *struct { + + // 实例ID集合。 + DBInstanceIdSet []*string `json:"DBInstanceIdSet,omitempty" name:"DBInstanceIdSet" list` + + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` + } `json:"Response"` +} + +func (r *InitDBInstancesResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *InitDBInstancesResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type InquiryPriceCreateDBInstancesRequest struct { + *tchttp.BaseRequest + + // 可用区ID。该参数可以通过调用 DescribeZones 接口的返回值中的Zone字段来获取。 + Zone *string `json:"Zone,omitempty" name:"Zone"` + + // 规格ID。该参数可以通过调用DescribeProductConfig接口的返回值中的SpecCode字段来获取。 + SpecCode *string `json:"SpecCode,omitempty" name:"SpecCode"` + + // 存储容量大小,单位:GB。 + Storage *uint64 `json:"Storage,omitempty" name:"Storage"` + + // 实例数量。目前最大数量不超过100,如需一次性创建更多实例,请联系客服支持。 + InstanceCount *uint64 `json:"InstanceCount,omitempty" name:"InstanceCount"` + + // 购买时长,单位:月。目前只支持1,2,3,4,5,6,7,8,9,10,11,12,24,36这些值。 + Period *uint64 `json:"Period,omitempty" name:"Period"` + + // 计费ID。该参数可以通过调用DescribeProductConfig接口的返回值中的Pid字段来获取。 + Pid *uint64 `json:"Pid,omitempty" name:"Pid"` + + // 实例计费类型。目前只支持:PREPAID(预付费,即包年包月)。 + InstanceChargeType *string `json:"InstanceChargeType,omitempty" name:"InstanceChargeType"` +} + +func (r *InquiryPriceCreateDBInstancesRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *InquiryPriceCreateDBInstancesRequest) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type InquiryPriceCreateDBInstancesResponse struct { + *tchttp.BaseResponse + Response *struct { + + // 原始价格,单位:分 + OriginalPrice *uint64 `json:"OriginalPrice,omitempty" name:"OriginalPrice"` + + // 折后价格,单位:分 + Price *uint64 `json:"Price,omitempty" name:"Price"` + + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` + } `json:"Response"` +} + +func (r *InquiryPriceCreateDBInstancesResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *InquiryPriceCreateDBInstancesResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type InquiryPriceRenewDBInstanceRequest struct { + *tchttp.BaseRequest + + // 实例ID + DBInstanceId *string `json:"DBInstanceId,omitempty" name:"DBInstanceId"` + + // 续费周期,按月计算,最大不超过48 + Period *int64 `json:"Period,omitempty" name:"Period"` +} + +func (r *InquiryPriceRenewDBInstanceRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *InquiryPriceRenewDBInstanceRequest) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type InquiryPriceRenewDBInstanceResponse struct { + *tchttp.BaseResponse + Response *struct { + + // 总费用,打折前的。比如24650表示246.5元 + OriginalPrice *int64 `json:"OriginalPrice,omitempty" name:"OriginalPrice"` + + // 实际需要付款金额。比如24650表示246.5元 + Price *int64 `json:"Price,omitempty" name:"Price"` + + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` + } `json:"Response"` +} + +func (r *InquiryPriceRenewDBInstanceResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *InquiryPriceRenewDBInstanceResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type InquiryPriceUpgradeDBInstanceRequest struct { + *tchttp.BaseRequest + + // 实例的磁盘大小,单位GB + Storage *int64 `json:"Storage,omitempty" name:"Storage"` + + // 实例的内存大小,单位GB + Memory *int64 `json:"Memory,omitempty" name:"Memory"` + + // 实例ID,形如postgres-hez4fh0v + DBInstanceId *string `json:"DBInstanceId,omitempty" name:"DBInstanceId"` + + // 实例计费类型,预付费或者后付费。PREPAID-预付费。目前只支持预付费。 + InstanceChargeType *string `json:"InstanceChargeType,omitempty" name:"InstanceChargeType"` +} + +func (r *InquiryPriceUpgradeDBInstanceRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *InquiryPriceUpgradeDBInstanceRequest) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type InquiryPriceUpgradeDBInstanceResponse struct { + *tchttp.BaseResponse + Response *struct { + + // 总费用,打折前的 + OriginalPrice *int64 `json:"OriginalPrice,omitempty" name:"OriginalPrice"` + + // 实际需要付款金额 + Price *int64 `json:"Price,omitempty" name:"Price"` + + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` + } `json:"Response"` +} + +func (r *InquiryPriceUpgradeDBInstanceResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *InquiryPriceUpgradeDBInstanceResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type ModifyAccountRemarkRequest struct { + *tchttp.BaseRequest + + // 实例ID,形如postgres-4wdeb0zv + DBInstanceId *string `json:"DBInstanceId,omitempty" name:"DBInstanceId"` + + // 实例用户名 + UserName *string `json:"UserName,omitempty" name:"UserName"` + + // 用户UserName对应的新备注 + Remark *string `json:"Remark,omitempty" name:"Remark"` +} + +func (r *ModifyAccountRemarkRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *ModifyAccountRemarkRequest) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type ModifyAccountRemarkResponse struct { + *tchttp.BaseResponse + Response *struct { + + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` + } `json:"Response"` +} + +func (r *ModifyAccountRemarkResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *ModifyAccountRemarkResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type ModifyDBInstanceNameRequest struct { + *tchttp.BaseRequest + + // 数据库实例ID,形如postgres-6fego161 + DBInstanceId *string `json:"DBInstanceId,omitempty" name:"DBInstanceId"` + + // 新的数据库实例名字 + InstanceName *string `json:"InstanceName,omitempty" name:"InstanceName"` +} + +func (r *ModifyDBInstanceNameRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *ModifyDBInstanceNameRequest) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type ModifyDBInstanceNameResponse struct { + *tchttp.BaseResponse + Response *struct { + + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` + } `json:"Response"` +} + +func (r *ModifyDBInstanceNameResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *ModifyDBInstanceNameResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type ModifyDBInstancesProjectRequest struct { + *tchttp.BaseRequest + + // postgresql实例ID数组 + DBInstanceIdSet []*string `json:"DBInstanceIdSet,omitempty" name:"DBInstanceIdSet" list` + + // postgresql实例所属新项目的ID + ProjectId *string `json:"ProjectId,omitempty" name:"ProjectId"` +} + +func (r *ModifyDBInstancesProjectRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *ModifyDBInstancesProjectRequest) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type ModifyDBInstancesProjectResponse struct { + *tchttp.BaseResponse + Response *struct { + + // 转移项目成功的实例个数 + Count *int64 `json:"Count,omitempty" name:"Count"` + + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` + } `json:"Response"` +} + +func (r *ModifyDBInstancesProjectResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *ModifyDBInstancesProjectResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type NormalQueryItem struct { + + // 用户名 + UserName *string `json:"UserName,omitempty" name:"UserName"` + + // 调用次数 + Calls *int64 `json:"Calls,omitempty" name:"Calls"` + + // 粒度点 + CallsGrids []*int64 `json:"CallsGrids,omitempty" name:"CallsGrids" list` + + // 花费总时间 + CostTime *float64 `json:"CostTime,omitempty" name:"CostTime"` + + // 影响的行数 + Rows *int64 `json:"Rows,omitempty" name:"Rows"` + + // 花费最小时间 + MinCostTime *float64 `json:"MinCostTime,omitempty" name:"MinCostTime"` + + // 花费最大时间 + MaxCostTime *float64 `json:"MaxCostTime,omitempty" name:"MaxCostTime"` + + // 最早一条慢SQL时间 + FirstTime *string `json:"FirstTime,omitempty" name:"FirstTime"` + + // 最晚一条慢SQL时间 + LastTime *string `json:"LastTime,omitempty" name:"LastTime"` + + // 读共享内存块数 + SharedReadBlks *int64 `json:"SharedReadBlks,omitempty" name:"SharedReadBlks"` + + // 写共享内存块数 + SharedWriteBlks *int64 `json:"SharedWriteBlks,omitempty" name:"SharedWriteBlks"` + + // 读io总耗时 + ReadCostTime *int64 `json:"ReadCostTime,omitempty" name:"ReadCostTime"` + + // 写io总耗时 + WriteCostTime *int64 `json:"WriteCostTime,omitempty" name:"WriteCostTime"` + + // 数据库名字 + DatabaseName *string `json:"DatabaseName,omitempty" name:"DatabaseName"` + + // 脱敏后的慢SQL + NormalQuery *string `json:"NormalQuery,omitempty" name:"NormalQuery"` +} + +type OpenDBExtranetAccessRequest struct { + *tchttp.BaseRequest + + // 实例ID,形如postgres-hez4fh0v + DBInstanceId *string `json:"DBInstanceId,omitempty" name:"DBInstanceId"` +} + +func (r *OpenDBExtranetAccessRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *OpenDBExtranetAccessRequest) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type OpenDBExtranetAccessResponse struct { + *tchttp.BaseResponse + Response *struct { + + // 异步任务流程ID + FlowId *int64 `json:"FlowId,omitempty" name:"FlowId"` + + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` + } `json:"Response"` +} + +func (r *OpenDBExtranetAccessResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *OpenDBExtranetAccessResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type OpenServerlessDBExtranetAccessRequest struct { + *tchttp.BaseRequest + + // 实例的唯一标识符 + DBInstanceId *string `json:"DBInstanceId,omitempty" name:"DBInstanceId"` + + // 实例名称 + DBInstanceName *string `json:"DBInstanceName,omitempty" name:"DBInstanceName"` +} + +func (r *OpenServerlessDBExtranetAccessRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *OpenServerlessDBExtranetAccessRequest) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type OpenServerlessDBExtranetAccessResponse struct { + *tchttp.BaseResponse + Response *struct { + + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` + } `json:"Response"` +} + +func (r *OpenServerlessDBExtranetAccessResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *OpenServerlessDBExtranetAccessResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type PgDeal struct { + + // 订单名 + DealName *string `json:"DealName,omitempty" name:"DealName"` + + // 所属用户 + OwnerUin *string `json:"OwnerUin,omitempty" name:"OwnerUin"` + + // 订单涉及多少个实例 + Count *int64 `json:"Count,omitempty" name:"Count"` + + // 付费模式。1-预付费;0-后付费 + PayMode *int64 `json:"PayMode,omitempty" name:"PayMode"` + + // 异步任务流程ID + FlowId *int64 `json:"FlowId,omitempty" name:"FlowId"` + + // 实例ID数组 + DBInstanceIdSet []*string `json:"DBInstanceIdSet,omitempty" name:"DBInstanceIdSet" list` +} + +type RegionInfo struct { + + // 该地域对应的英文名称 + Region *string `json:"Region,omitempty" name:"Region"` + + // 该地域对应的中文名称 + RegionName *string `json:"RegionName,omitempty" name:"RegionName"` + + // 该地域对应的数字编号 + RegionId *uint64 `json:"RegionId,omitempty" name:"RegionId"` + + // 可用状态,UNAVAILABLE表示不可用,AVAILABLE表示可用 + RegionState *string `json:"RegionState,omitempty" name:"RegionState"` +} + +type RenewInstanceRequest struct { + *tchttp.BaseRequest + + // 实例ID,形如postgres-6fego161 + DBInstanceId *string `json:"DBInstanceId,omitempty" name:"DBInstanceId"` + + // 续费多少个月 + Period *int64 `json:"Period,omitempty" name:"Period"` + + // 是否自动使用代金券,1是,0否,默认不使用 + AutoVoucher *int64 `json:"AutoVoucher,omitempty" name:"AutoVoucher"` + + // 代金券ID列表,目前仅支持指定一张代金券 + VoucherIds []*string `json:"VoucherIds,omitempty" name:"VoucherIds" list` +} + +func (r *RenewInstanceRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *RenewInstanceRequest) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type RenewInstanceResponse struct { + *tchttp.BaseResponse + Response *struct { + + // 订单名 + DealName *string `json:"DealName,omitempty" name:"DealName"` + + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` + } `json:"Response"` +} + +func (r *RenewInstanceResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *RenewInstanceResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type ResetAccountPasswordRequest struct { + *tchttp.BaseRequest + + // 实例ID,形如postgres-4wdeb0zv + DBInstanceId *string `json:"DBInstanceId,omitempty" name:"DBInstanceId"` + + // 实例账户名 + UserName *string `json:"UserName,omitempty" name:"UserName"` + + // UserName账户对应的新密码 + Password *string `json:"Password,omitempty" name:"Password"` +} + +func (r *ResetAccountPasswordRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *ResetAccountPasswordRequest) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type ResetAccountPasswordResponse struct { + *tchttp.BaseResponse + Response *struct { + + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` + } `json:"Response"` +} + +func (r *ResetAccountPasswordResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *ResetAccountPasswordResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type RestartDBInstanceRequest struct { + *tchttp.BaseRequest + + // 实例ID,形如postgres-6r233v55 + DBInstanceId *string `json:"DBInstanceId,omitempty" name:"DBInstanceId"` +} + +func (r *RestartDBInstanceRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *RestartDBInstanceRequest) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type RestartDBInstanceResponse struct { + *tchttp.BaseResponse + Response *struct { + + // 异步流程ID + FlowId *int64 `json:"FlowId,omitempty" name:"FlowId"` + + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` + } `json:"Response"` +} + +func (r *RestartDBInstanceResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *RestartDBInstanceResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type ServerlessDBAccount struct { + + // 用户名 + // 注意:此字段可能返回 null,表示取不到有效值。 + DBUser *string `json:"DBUser,omitempty" name:"DBUser"` + + // 密码 + // 注意:此字段可能返回 null,表示取不到有效值。 + DBPassword *string `json:"DBPassword,omitempty" name:"DBPassword"` + + // 连接数限制 + // 注意:此字段可能返回 null,表示取不到有效值。 + DBConnLimit *int64 `json:"DBConnLimit,omitempty" name:"DBConnLimit"` +} + +type ServerlessDBInstance struct { + + // 实例id,唯一标识符 + // 注意:此字段可能返回 null,表示取不到有效值。 + DBInstanceId *string `json:"DBInstanceId,omitempty" name:"DBInstanceId"` + + // 实例名称 + // 注意:此字段可能返回 null,表示取不到有效值。 + DBInstanceName *string `json:"DBInstanceName,omitempty" name:"DBInstanceName"` + + // 实例状态 + // 注意:此字段可能返回 null,表示取不到有效值。 + DBInstanceStatus *string `json:"DBInstanceStatus,omitempty" name:"DBInstanceStatus"` + + // 地域 + // 注意:此字段可能返回 null,表示取不到有效值。 + Region *string `json:"Region,omitempty" name:"Region"` + + // 可用区 + // 注意:此字段可能返回 null,表示取不到有效值。 + Zone *string `json:"Zone,omitempty" name:"Zone"` + + // projectId + // 注意:此字段可能返回 null,表示取不到有效值。 + ProjectId *int64 `json:"ProjectId,omitempty" name:"ProjectId"` + + // VpcId + // 注意:此字段可能返回 null,表示取不到有效值。 + VpcId *string `json:"VpcId,omitempty" name:"VpcId"` + + // 子网id + // 注意:此字段可能返回 null,表示取不到有效值。 + SubnetId *string `json:"SubnetId,omitempty" name:"SubnetId"` + + // 字符集 + // 注意:此字段可能返回 null,表示取不到有效值。 + DBCharset *string `json:"DBCharset,omitempty" name:"DBCharset"` + + // 数据库版本 + // 注意:此字段可能返回 null,表示取不到有效值。 + DBVersion *string `json:"DBVersion,omitempty" name:"DBVersion"` + + // 创建时间 + // 注意:此字段可能返回 null,表示取不到有效值。 + CreateTime *string `json:"CreateTime,omitempty" name:"CreateTime"` + + // 实例网络信息 + // 注意:此字段可能返回 null,表示取不到有效值。 + DBInstanceNetInfo []*ServerlessDBInstanceNetInfo `json:"DBInstanceNetInfo,omitempty" name:"DBInstanceNetInfo" list` + + // 实例账户信息 + // 注意:此字段可能返回 null,表示取不到有效值。 + DBAccountSet []*ServerlessDBAccount `json:"DBAccountSet,omitempty" name:"DBAccountSet" list` + + // 实例下的db信息 + // 注意:此字段可能返回 null,表示取不到有效值。 + DBDatabaseList []*string `json:"DBDatabaseList,omitempty" name:"DBDatabaseList" list` +} + +type ServerlessDBInstanceNetInfo struct { + + // 地址 + // 注意:此字段可能返回 null,表示取不到有效值。 + Address *string `json:"Address,omitempty" name:"Address"` + + // ip地址 + // 注意:此字段可能返回 null,表示取不到有效值。 + Ip *string `json:"Ip,omitempty" name:"Ip"` + + // 端口号 + // 注意:此字段可能返回 null,表示取不到有效值。 + Port *int64 `json:"Port,omitempty" name:"Port"` + + // 状态 + // 注意:此字段可能返回 null,表示取不到有效值。 + Status *string `json:"Status,omitempty" name:"Status"` + + // 网络类型 + // 注意:此字段可能返回 null,表示取不到有效值。 + NetType *string `json:"NetType,omitempty" name:"NetType"` +} + +type SetAutoRenewFlagRequest struct { + *tchttp.BaseRequest + + // 实例ID数组 + DBInstanceIdSet []*string `json:"DBInstanceIdSet,omitempty" name:"DBInstanceIdSet" list` + + // 续费标记。0-正常续费;1-自动续费;2-到期不续费 + AutoRenewFlag *int64 `json:"AutoRenewFlag,omitempty" name:"AutoRenewFlag"` +} + +func (r *SetAutoRenewFlagRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *SetAutoRenewFlagRequest) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type SetAutoRenewFlagResponse struct { + *tchttp.BaseResponse + Response *struct { + + // 设置成功的实例个数 + Count *int64 `json:"Count,omitempty" name:"Count"` + + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` + } `json:"Response"` +} + +func (r *SetAutoRenewFlagResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *SetAutoRenewFlagResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type SlowlogDetail struct { + + // 花费总时间 + TotalTime *float64 `json:"TotalTime,omitempty" name:"TotalTime"` + + // 调用总次数 + TotalCalls *int64 `json:"TotalCalls,omitempty" name:"TotalCalls"` + + // 脱敏后的慢SQL列表 + NormalQueries []*NormalQueryItem `json:"NormalQueries,omitempty" name:"NormalQueries" list` +} + +type SpecInfo struct { + + // 地域英文编码,对应RegionSet的Region字段 + Region *string `json:"Region,omitempty" name:"Region"` + + // 区域英文编码,对应ZoneSet的Zone字段 + Zone *string `json:"Zone,omitempty" name:"Zone"` + + // 规格详细信息列表 + SpecItemInfoList []*SpecItemInfo `json:"SpecItemInfoList,omitempty" name:"SpecItemInfoList" list` +} + +type SpecItemInfo struct { + + // 规格ID + SpecCode *string `json:"SpecCode,omitempty" name:"SpecCode"` + + // PostgreSQL的内核版本编号 + Version *string `json:"Version,omitempty" name:"Version"` + + // 内核编号对应的完整版本名称 + VersionName *string `json:"VersionName,omitempty" name:"VersionName"` + + // CPU核数 + Cpu *uint64 `json:"Cpu,omitempty" name:"Cpu"` + + // 内存大小,单位:MB + Memory *uint64 `json:"Memory,omitempty" name:"Memory"` + + // 该规格所支持最大存储容量,单位:GB + MaxStorage *uint64 `json:"MaxStorage,omitempty" name:"MaxStorage"` + + // 该规格所支持最小存储容量,单位:GB + MinStorage *uint64 `json:"MinStorage,omitempty" name:"MinStorage"` + + // 该规格的预估QPS + Qps *uint64 `json:"Qps,omitempty" name:"Qps"` + + // 该规格对应的计费ID + Pid *uint64 `json:"Pid,omitempty" name:"Pid"` + + // 机器类型 + Type *string `json:"Type,omitempty" name:"Type"` +} + +type UpgradeDBInstanceRequest struct { + *tchttp.BaseRequest + + // 升级后的实例内存大小,单位GB + Memory *int64 `json:"Memory,omitempty" name:"Memory"` + + // 升级后的实例磁盘大小,单位GB + Storage *int64 `json:"Storage,omitempty" name:"Storage"` + + // 实例ID,形如postgres-lnp6j617 + DBInstanceId *string `json:"DBInstanceId,omitempty" name:"DBInstanceId"` + + // 是否自动使用代金券,1是,0否,默认不使用 + AutoVoucher *int64 `json:"AutoVoucher,omitempty" name:"AutoVoucher"` + + // 代金券ID列表,目前仅支持指定一张代金券 + VoucherIds []*string `json:"VoucherIds,omitempty" name:"VoucherIds" list` + + // 活动ID + ActivityId *int64 `json:"ActivityId,omitempty" name:"ActivityId"` +} + +func (r *UpgradeDBInstanceRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *UpgradeDBInstanceRequest) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type UpgradeDBInstanceResponse struct { + *tchttp.BaseResponse + Response *struct { + + // 交易名字。 + DealName *string `json:"DealName,omitempty" name:"DealName"` + + // 冻结流水号 + BillId *string `json:"BillId,omitempty" name:"BillId"` + + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` + } `json:"Response"` +} + +func (r *UpgradeDBInstanceResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *UpgradeDBInstanceResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type Xlog struct { + + // 备份文件唯一标识 + Id *int64 `json:"Id,omitempty" name:"Id"` + + // 文件生成的开始时间 + StartTime *string `json:"StartTime,omitempty" name:"StartTime"` + + // 文件生成的结束时间 + EndTime *string `json:"EndTime,omitempty" name:"EndTime"` + + // 内网下载地址 + InternalAddr *string `json:"InternalAddr,omitempty" name:"InternalAddr"` + + // 外网下载地址 + ExternalAddr *string `json:"ExternalAddr,omitempty" name:"ExternalAddr"` + + // 备份文件大小 + Size *int64 `json:"Size,omitempty" name:"Size"` +} + +type ZoneInfo struct { + + // 该可用区的英文名称 + Zone *string `json:"Zone,omitempty" name:"Zone"` + + // 该可用区的中文名称 + ZoneName *string `json:"ZoneName,omitempty" name:"ZoneName"` + + // 该可用区对应的数字编号 + ZoneId *uint64 `json:"ZoneId,omitempty" name:"ZoneId"` + + // 可用状态,UNAVAILABLE表示不可用,AVAILABLE表示可用 + ZoneState *string `json:"ZoneState,omitempty" name:"ZoneState"` +} diff --git a/vendor/modules.txt b/vendor/modules.txt index b75bafc959..7ed6f7b112 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -522,7 +522,7 @@ github.com/stretchr/testify/mock github.com/subosito/gotenv # github.com/tdakkota/asciicheck v0.0.0-20200416190851-d7f85be797a2 github.com/tdakkota/asciicheck -# github.com/tencentcloud/tencentcloud-sdk-go v3.0.187+incompatible +# github.com/tencentcloud/tencentcloud-sdk-go v3.0.189+incompatible github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/as/v20180419 github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cam/v20190116 github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cbs/v20170312 @@ -541,6 +541,7 @@ github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/es/v20180416 github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/gaap/v20180529 github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/mongodb/v20180408 github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/monitor/v20180724 +github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/postgres/v20170312 github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/redis/v20180412 github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/scf/v20180416 github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sqlserver/v20180328 diff --git a/website/docs/d/postgresql_instances.html.markdown b/website/docs/d/postgresql_instances.html.markdown new file mode 100644 index 0000000000..4cdb2236a9 --- /dev/null +++ b/website/docs/d/postgresql_instances.html.markdown @@ -0,0 +1,62 @@ +--- +layout: "tencentcloud" +page_title: "TencentCloud: tencentcloud_postgresql_instances" +sidebar_current: "docs-tencentcloud-datasource-postgresql_instances" +description: |- + Use this data source to query postgresql instances +--- + +# tencentcloud_postgresql_instances + +Use this data source to query postgresql instances + +## Example Usage + +```hcl +data "tencentcloud_postgresql_instances" "name" { + name = "test" +} + +data "tencentcloud_postgresql_instances" "project" { + project_id = 0 +} + +data "tencentcloud_postgresql_instances" "id" { + id = "postgres-h9t4fde1" +} +``` + +## Argument Reference + +The following arguments are supported: + +* `id` - (Optional) ID of the postgresql instance to be query. +* `name` - (Optional) Name of the postgresql instance to be query. +* `project_id` - (Optional) Project id of the postgresql instance to be query. +* `result_output_file` - (Optional) Used to save results. + +## Attributes Reference + +In addition to all arguments above, the following attributes are exported: + +* `instance_list` - A list of postgresql instances. Each element contains the following attributes. + * `auto_renew_flag` - Auto renew flag. + * `availability_zone` - Availability zone. + * `charge_type` - Pay type of the postgresql instance. + * `charset` - Charset of the postgresql instance. + * `create_time` - Create time of the postgresql instance. + * `engine_version` - Version of the postgresql database engine. + * `id` - ID of the postgresql instance. + * `memory` - Memory size (in MB). + * `name` - Name of the postgresql instance. + * `private_access_ip` - Ip address for private access. + * `private_access_port` - Port for private access. + * `project_id` - Project ID, default value is 0. + * `public_access_host` - Host for public access. + * `public_access_port` - Port for public access. + * `public_access_switch` - Indicates whether to enable the access to an instance from public network or not. + * `storage` - Disk size (in GB). + * `subnet_id` - ID of subnet. + * `vpc_id` - ID of VPC. + + diff --git a/website/docs/d/postgresql_specinfos.html.markdown b/website/docs/d/postgresql_specinfos.html.markdown new file mode 100644 index 0000000000..0b6e399de5 --- /dev/null +++ b/website/docs/d/postgresql_specinfos.html.markdown @@ -0,0 +1,42 @@ +--- +layout: "tencentcloud" +page_title: "TencentCloud: tencentcloud_postgresql_specinfos" +sidebar_current: "docs-tencentcloud-datasource-postgresql_specinfos" +description: |- + Use this data source to get the available product configs of the postgresql instance. +--- + +# tencentcloud_postgresql_specinfos + +Use this data source to get the available product configs of the postgresql instance. + +## Example Usage + +```hcl +data "tencentcloud_postgresql_specinfos" "foo" { + availability_zone = "ap-shanghai-2" +} +``` + +## Argument Reference + +The following arguments are supported: + +* `availability_zone` - (Required) The zone of the postgresql instance to query. +* `result_output_file` - (Optional) Used to save results. + +## Attributes Reference + +In addition to all arguments above, the following attributes are exported: + +* `list` - A list of zones will be exported and its every element contains the following attributes: + * `cpu` - The CPU number of the postgresql instance. + * `id` - Id of the speccode of the postgresql instance. This parameter is used as `spec_code` for the creation of postgresql instance. + * `memory` - Memory size(in MB). + * `qps` - The QPS of the postgresql instance. + * `storage_max` - The maximum volume size(in GB). + * `storage_min` - The minimum volume size(in GB). + * `version_name` - The version name of the postgresql instance. + * `version` - The version of the postgresql instance. + + diff --git a/website/docs/r/postgresql_instance.html.markdown b/website/docs/r/postgresql_instance.html.markdown new file mode 100644 index 0000000000..7df29bb6a5 --- /dev/null +++ b/website/docs/r/postgresql_instance.html.markdown @@ -0,0 +1,67 @@ +--- +layout: "tencentcloud" +page_title: "TencentCloud: tencentcloud_postgresql_instance" +sidebar_current: "docs-tencentcloud-resource-postgresql_instance" +description: |- + Use this resource to create postgresql instance +--- + +# tencentcloud_postgresql_instance + +Use this resource to create postgresql instance + +## Example Usage + +```hcl +resource "tencentcloud_postgresql_instance" "foo" { + name = "example" + availability_zone = var.availability_zone + charge_type = "POSTPAID_BY_HOUR" + vpc_id = "vpc-409mvdvv" + subnet_id = "subnet-nf9n81ps" + engine_version = "9.3.5" + root_password = "1qaA2k1wgvfa3ZZZ" + charset = "UTF8" + project_id = 0 + memory = 2 + storage = 100 +} +``` + +## Argument Reference + +The following arguments are supported: + +* `memory` - (Required) Memory size (in GB). Allowed value must be larger than `memory` that data source `tencentcloud_postgresql_specinfos` provides. +* `name` - (Required) Name of the postgresql instance. +* `root_password` - (Required) Password of root account. This parameter can be specified when you purchase master instances, but it should be ignored when you purchase read-only instances or disaster recovery instances. +* `storage` - (Required) Disk size (in GB). Allowed value must be a multiple of 10. The storage must be set with the limit of `storage_min` and `storage_max` which data source `tencentcloud_postgresql_specinfos` provides. +* `availability_zone` - (Optional, ForceNew) Availability zone. +* `charge_type` - (Optional, ForceNew) Pay type of the postgresql instance. For now, only `POSTPAID_BY_HOUR` is valid. +* `charset` - (Optional, ForceNew) Charset of the root account. Valid values are `UTF8`,`LATIN1`. +* `engine_version` - (Optional, ForceNew) Version of the postgresql database engine. Allowed values are `9.3.5`, `9.5.4`, `10.4`. +* `project_id` - (Optional) Project ID, default value is 0. +* `public_access_switch` - (Optional) Indicates whether to enable the access to an instance from public network or not. +* `subnet_id` - (Optional, ForceNew) ID of subnet. +* `vpc_id` - (Optional, ForceNew) ID of VPC. + +## Attributes Reference + +In addition to all arguments above, the following attributes are exported: + +* `id` - ID of the resource. +* `create_time` - Create time of the postgresql instance. +* `private_access_ip` - Ip for private access. +* `private_access_port` - Port for private access. +* `public_access_host` - Host for public access. +* `public_access_port` - Port for public access. + + +## Import + +postgresql instance can be imported using the id, e.g. + +``` +$ terraform import tencentcloud_postgresql_instance.foo postgres-cda1iex1 +``` + diff --git a/website/tencentcloud.erb b/website/tencentcloud.erb index 2c9df8f947..9c47d53e96 100644 --- a/website/tencentcloud.erb +++ b/website/tencentcloud.erb @@ -767,6 +767,30 @@ +
  • + PostgreSQL + +
  • Redis