diff --git a/.changelog/2845.txt b/.changelog/2845.txt new file mode 100644 index 0000000000..5496e6cbf1 --- /dev/null +++ b/.changelog/2845.txt @@ -0,0 +1,11 @@ +```release-note:enhancement +resource/tencentcloud_postgresql_instance: support `dedicated_cluster_id` params +``` + +```release-note:enhancement +resource/tencentcloud_postgresql_readonly_instance: support `dedicated_cluster_id` params +``` + +```release-note:new-data-source +tencentcloud_postgresql_dedicated_clusters +``` diff --git a/go.mod b/go.mod index 7eba3ed95f..e1bc093f9a 100644 --- a/go.mod +++ b/go.mod @@ -46,7 +46,7 @@ require ( github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/clb v1.0.984 github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cloudaudit v1.0.544 github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cls v1.0.970 - github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1008 + github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1010 github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.960 github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cwp v1.0.762 github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cynosdb v1.0.692 @@ -70,7 +70,7 @@ require ( github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/monitor v1.0.844 github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/mps v1.0.853 github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/organization v1.0.1008 - github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/postgres v1.0.995 + github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/postgres v1.0.1010 github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/privatedns v1.0.859 github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/pts v1.0.762 github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/redis v1.0.976 diff --git a/go.sum b/go.sum index fa80fd1bd1..56894e2c3e 100644 --- a/go.sum +++ b/go.sum @@ -932,6 +932,8 @@ github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1006 h1:WX1 github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1006/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0= github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1008 h1:BQJUiwOi2d368bF1qmdCjHjUMEt24vM6d68r9S+OrQM= github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1008/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0= +github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1010 h1:HwhKTg+VcQd5M9AyaEZaqKmpKuWxbf5kni23g1KRmOk= +github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1010/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0= github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/controlcenter v1.0.993 h1:WlPgXldQCxt7qi5Xrc6j6zTrsXWzN5BcOGs7Irq7fwQ= github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/controlcenter v1.0.993/go.mod h1:Z9U8zNtyuyKhjS0698wqsrG/kLx1TQ5CEixXBwVe7xY= github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/csip v1.0.860 h1:F3esKBIT3HW9+7Gt8cVgf8X06VdGIczpgLBUECzSEzU= @@ -990,6 +992,8 @@ github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/organization v1.0.1008 github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/organization v1.0.1008/go.mod h1:wyPjTCtmxGUaR99fm3V4Fh53zi/oTy55l0+ZSQhsOog= github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/postgres v1.0.995 h1:chLBYIeKYtDy2kB/IO4uFMLZzlYn/rDoBi7K34HWJu0= github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/postgres v1.0.995/go.mod h1:Qv44A5kdz3uX4TYhXz4WacYVSZ0BQL9aYtTdJEwDCQw= +github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/postgres v1.0.1010 h1:lx554ZfB++mge+/Gk7LnDUI5Dwm9r+DgGNN9C/DqhE4= +github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/postgres v1.0.1010/go.mod h1:GGhAf2ehV2/jwKf3Sezr2x/soJ3nDuefJFlcoZnlflA= github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/privatedns v1.0.859 h1:VrE3qzwzWB5mV/ejTJuwZbqZ/CNYLoc8X+uFbWEEOnY= github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/privatedns v1.0.859/go.mod h1:FeOl14rPWpNEu6r4bPEsTNHIB9qaRTg0dRhxhRwQ5Hw= github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/pts v1.0.762 h1:rZDKucVVtTnmnbZFDyh6t47dHswkb2oSuOxOHTTkygA= diff --git a/tencentcloud/provider.go b/tencentcloud/provider.go index eee6f98c8d..48c53cffa8 100644 --- a/tencentcloud/provider.go +++ b/tencentcloud/provider.go @@ -690,6 +690,7 @@ func Provider() *schema.Provider { "tencentcloud_postgresql_db_instance_versions": postgresql.DataSourceTencentCloudPostgresqlDbInstanceVersions(), "tencentcloud_postgresql_zones": postgresql.DataSourceTencentCloudPostgresqlZones(), "tencentcloud_postgresql_account_privileges": postgresql.DataSourceTencentCloudPostgresqlAccountPrivileges(), + "tencentcloud_postgresql_dedicated_clusters": postgresql.DataSourceTencentCloudPostgresqlDedicatedClusters(), "tencentcloud_sqlserver_zone_config": sqlserver.DataSourceTencentCloudSqlserverZoneConfig(), "tencentcloud_sqlserver_instances": sqlserver.DataSourceTencentCloudSqlserverInstances(), "tencentcloud_sqlserver_backups": sqlserver.DataSourceTencentCloudSqlserverBackups(), diff --git a/tencentcloud/provider.md b/tencentcloud/provider.md index f4572e5711..cbe39e42c8 100644 --- a/tencentcloud/provider.md +++ b/tencentcloud/provider.md @@ -876,6 +876,7 @@ TencentDB for PostgreSQL(PostgreSQL) tencentcloud_postgresql_db_instance_versions tencentcloud_postgresql_zones tencentcloud_postgresql_account_privileges + tencentcloud_postgresql_dedicated_clusters Resource tencentcloud_postgresql_instance diff --git a/tencentcloud/services/postgresql/data_source_tc_postgresql_dedicated_clusters.go b/tencentcloud/services/postgresql/data_source_tc_postgresql_dedicated_clusters.go new file mode 100644 index 0000000000..ac236478c6 --- /dev/null +++ b/tencentcloud/services/postgresql/data_source_tc_postgresql_dedicated_clusters.go @@ -0,0 +1,232 @@ +// Code generated by iacg; DO NOT EDIT. +package postgresql + +import ( + "context" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + postgresql "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/postgres/v20170312" + + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" +) + +func DataSourceTencentCloudPostgresqlDedicatedClusters() *schema.Resource { + return &schema.Resource{ + Read: dataSourceTencentCloudPostgresqlDedicatedClustersRead, + Schema: map[string]*schema.Schema{ + "filters": { + Type: schema.TypeList, + Optional: true, + Description: "Querying based on one or more filtering criteria, the currently supported filtering criteria are: dedicated-cluster-id: filtering by dedicated cluster ID.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "name": { + Type: schema.TypeString, + Optional: true, + Description: "Filter name.", + }, + "values": { + Type: schema.TypeSet, + Optional: true, + Description: "Filter values.", + Elem: &schema.Schema{Type: schema.TypeString}, + }, + }, + }, + }, + // computed + "dedicated_cluster_set": { + Type: schema.TypeList, + Computed: true, + Description: "Dedicated cluster set info.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "dedicated_cluster_id": { + Type: schema.TypeString, + Optional: true, + Description: "Dedicated cluster ID.", + }, + "name": { + Type: schema.TypeString, + Optional: true, + Description: "Name.", + }, + "zone": { + Type: schema.TypeString, + Optional: true, + Description: "Zone.", + }, + "standby_dedicated_cluster_set": { + Type: schema.TypeSet, + Optional: true, + Description: "Disaster recovery cluster.", + Elem: &schema.Schema{ + Type: schema.TypeString, + }, + }, + "instance_count": { + Type: schema.TypeInt, + Optional: true, + Description: "Instance count.", + }, + "cpu_total": { + Type: schema.TypeInt, + Optional: true, + Description: "Cpu total.", + }, + "cpu_available": { + Type: schema.TypeInt, + Optional: true, + Description: "Number of available CPUs.", + }, + "mem_total": { + Type: schema.TypeInt, + Optional: true, + Description: "Total amount of memory.", + }, + "mem_available": { + Type: schema.TypeInt, + Optional: true, + Description: "Available Memory.", + }, + "disk_total": { + Type: schema.TypeInt, + Optional: true, + Description: "Total number of disks.", + }, + "disk_available": { + Type: schema.TypeInt, + Optional: true, + Description: "Disk availability.", + }, + }, + }, + }, + "result_output_file": { + Type: schema.TypeString, + Optional: true, + Description: "Used to save results.", + }, + }, + } +} + +func dataSourceTencentCloudPostgresqlDedicatedClustersRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("data_source.tencentcloud_postgresql_dedicated_clusters.read")() + defer tccommon.InconsistentCheck(d, meta)() + + var ( + logId = tccommon.GetLogId(nil) + ctx = tccommon.NewResourceLifeCycleHandleFuncContext(context.Background(), logId, d, meta) + service = PostgresqlService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + respData []*postgresql.DedicatedCluster + ) + + paramMap := make(map[string]interface{}) + if v, ok := d.GetOk("filters"); ok { + filtersSet := v.([]interface{}) + tmpSet := make([]*postgresql.Filter, 0, len(filtersSet)) + for _, item := range filtersSet { + filtersMap := item.(map[string]interface{}) + filter := postgresql.Filter{} + if v, ok := filtersMap["name"]; ok { + filter.Name = helper.String(v.(string)) + } + + if v, ok := filtersMap["values"]; ok { + valuesSet := v.(*schema.Set).List() + for i := range valuesSet { + values := valuesSet[i].(string) + filter.Values = append(filter.Values, helper.String(values)) + } + } + + tmpSet = append(tmpSet, &filter) + } + + paramMap["Filters"] = tmpSet + } + + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + result, e := service.DescribePostgresqlDedicatedClustersByFilter(ctx, paramMap) + if e != nil { + return tccommon.RetryError(e) + } + + respData = result + return nil + }) + + if err != nil { + return err + } + + ids := make([]string, 0, len(respData)) + dedicatedClusterSetList := make([]map[string]interface{}, 0, len(respData)) + if respData != nil { + for _, dedicatedClusterSet := range respData { + dedicatedClusterSetMap := map[string]interface{}{} + + if dedicatedClusterSet.DedicatedClusterId != nil { + dedicatedClusterSetMap["dedicated_cluster_id"] = dedicatedClusterSet.DedicatedClusterId + } + + if dedicatedClusterSet.Name != nil { + dedicatedClusterSetMap["name"] = dedicatedClusterSet.Name + } + + if dedicatedClusterSet.Zone != nil { + dedicatedClusterSetMap["zone"] = dedicatedClusterSet.Zone + } + + if dedicatedClusterSet.StandbyDedicatedClusterSet != nil { + dedicatedClusterSetMap["standby_dedicated_cluster_set"] = helper.PStrings(dedicatedClusterSet.StandbyDedicatedClusterSet) + } + + if dedicatedClusterSet.InstanceCount != nil { + dedicatedClusterSetMap["instance_count"] = dedicatedClusterSet.InstanceCount + } + + if dedicatedClusterSet.CpuTotal != nil { + dedicatedClusterSetMap["cpu_total"] = dedicatedClusterSet.CpuTotal + } + + if dedicatedClusterSet.CpuAvailable != nil { + dedicatedClusterSetMap["cpu_available"] = dedicatedClusterSet.CpuAvailable + } + + if dedicatedClusterSet.MemTotal != nil { + dedicatedClusterSetMap["mem_total"] = dedicatedClusterSet.MemTotal + } + + if dedicatedClusterSet.MemAvailable != nil { + dedicatedClusterSetMap["mem_available"] = dedicatedClusterSet.MemAvailable + } + + if dedicatedClusterSet.DiskTotal != nil { + dedicatedClusterSetMap["disk_total"] = dedicatedClusterSet.DiskTotal + } + + if dedicatedClusterSet.DiskAvailable != nil { + dedicatedClusterSetMap["disk_available"] = dedicatedClusterSet.DiskAvailable + } + + ids = append(ids, *dedicatedClusterSet.DedicatedClusterId) + dedicatedClusterSetList = append(dedicatedClusterSetList, dedicatedClusterSetMap) + } + + _ = d.Set("dedicated_cluster_set", dedicatedClusterSetList) + } + + d.SetId(helper.DataResourceIdsHash(ids)) + output, ok := d.GetOk("result_output_file") + if ok && output.(string) != "" { + if e := tccommon.WriteToFile(output.(string), dedicatedClusterSetList); e != nil { + return e + } + } + + return nil +} diff --git a/tencentcloud/services/postgresql/data_source_tc_postgresql_dedicated_clusters.md b/tencentcloud/services/postgresql/data_source_tc_postgresql_dedicated_clusters.md new file mode 100644 index 0000000000..238b88da07 --- /dev/null +++ b/tencentcloud/services/postgresql/data_source_tc_postgresql_dedicated_clusters.md @@ -0,0 +1,20 @@ +Use this data source to query detailed information of Postgresql dedicated clusters + +Example Usage + +Query all instances + +```hcl +data "tencentcloud_postgresql_dedicated_clusters" "example" {} +``` + +Query instances by filters + +```hcl +data "tencentcloud_postgresql_dedicated_clusters" "example" { + filters { + name = "dedicated-cluster-id" + values = ["cluster-262n63e8"] + } +} +``` diff --git a/tencentcloud/services/postgresql/data_source_tc_postgresql_dedicated_clusters_test.go b/tencentcloud/services/postgresql/data_source_tc_postgresql_dedicated_clusters_test.go new file mode 100644 index 0000000000..9bd679ce27 --- /dev/null +++ b/tencentcloud/services/postgresql/data_source_tc_postgresql_dedicated_clusters_test.go @@ -0,0 +1,37 @@ +package postgresql_test + +import ( + "testing" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" +) + +// go test -i; go test -test.run TestAccTencentCloudPostgresqlDedicatedClustersDataSource_basic -v +func TestAccTencentCloudPostgresqlDedicatedClustersDataSource_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { + tcacctest.AccPreCheck(t) + }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: testAccPostgresqlDedicatedClustersDataSource, + Check: resource.ComposeTestCheckFunc( + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_postgresql_dedicated_clusters.example"), + ), + }, + }, + }) +} + +const testAccPostgresqlDedicatedClustersDataSource = ` +data "tencentcloud_postgresql_dedicated_clusters" "example" { + filters { + name = "dedicated-cluster-id" + values = ["cluster-262n63e8"] + } +} +` diff --git a/tencentcloud/services/postgresql/resource_tc_postgresql_instance.go b/tencentcloud/services/postgresql/resource_tc_postgresql_instance.go index f8448548fb..e12df3de5b 100644 --- a/tencentcloud/services/postgresql/resource_tc_postgresql_instance.go +++ b/tencentcloud/services/postgresql/resource_tc_postgresql_instance.go @@ -275,6 +275,11 @@ func ResourceTencentCloudPostgresqlInstance() *schema.Resource { Required: true, Description: "Indicates the node available zone.", }, + "dedicated_cluster_id": { + Type: schema.TypeString, + Optional: true, + Description: "Dedicated cluster ID.", + }, }, }, }, @@ -479,14 +484,25 @@ func resourceTencentCloudPostgresqlInstanceCreate(d *schema.ResourceData, meta i if len(nodeSet) > 0 { for i := range nodeSet { var ( - item = nodeSet[i].(map[string]interface{}) - role = item["role"].(string) - zone = item["zone"].(string) + item = nodeSet[i].(map[string]interface{}) + role = item["role"].(string) + zone = item["zone"].(string) + dedicatedClusterId = item["dedicated_cluster_id"].(string) + node *postgresql.DBNode + ) + + if dedicatedClusterId != "" { + node = &postgresql.DBNode{ + Role: &role, + Zone: &zone, + DedicatedClusterId: &dedicatedClusterId, + } + } else { node = &postgresql.DBNode{ Role: &role, Zone: &zone, } - ) + } dbNodeSet = append(dbNodeSet, node) } @@ -816,8 +832,9 @@ func resourceTencentCloudPostgresqlInstanceRead(d *schema.ResourceData, meta int for i := range nodeSet { item := nodeSet[i] node := map[string]interface{}{ - "role": item.Role, - "zone": item.Zone, + "role": item.Role, + "zone": item.Zone, + "dedicated_cluster_id": item.DedicatedClusterId, } zoneSet.Add(*item.Zone) @@ -1351,15 +1368,24 @@ func resourceTencentCloudPostgresqlInstanceUpdate(d *schema.ResourceData, meta i request.SwitchTag = helper.Int64(0) for i := range nodeSet { var ( - node = nodeSet[i].(map[string]interface{}) - role = node["role"].(string) - zone = node["zone"].(string) + node = nodeSet[i].(map[string]interface{}) + role = node["role"].(string) + zone = node["zone"].(string) + dedicatedClusterId = node["dedicated_cluster_id"].(string) ) - request.DBNodeSet = append(request.DBNodeSet, &postgresql.DBNode{ - Role: &role, - Zone: &zone, - }) + if dedicatedClusterId != "" { + request.DBNodeSet = append(request.DBNodeSet, &postgresql.DBNode{ + Role: &role, + Zone: &zone, + DedicatedClusterId: &dedicatedClusterId, + }) + } else { + request.DBNodeSet = append(request.DBNodeSet, &postgresql.DBNode{ + Role: &role, + Zone: &zone, + }) + } } err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { diff --git a/tencentcloud/services/postgresql/resource_tc_postgresql_instance.md b/tencentcloud/services/postgresql/resource_tc_postgresql_instance.md index 361fdc2944..bde47f7d4e 100644 --- a/tencentcloud/services/postgresql/resource_tc_postgresql_instance.md +++ b/tencentcloud/services/postgresql/resource_tc_postgresql_instance.md @@ -153,6 +153,61 @@ resource "tencentcloud_postgresql_instance" "example" { } ``` +Create a multi available zone postgresql instance of CDC + +```hcl +variable "availability_zone" { + default = "ap-guangzhou-4" +} + +# create vpc +resource "tencentcloud_vpc" "vpc" { + name = "vpc" + cidr_block = "10.0.0.0/16" +} + +# create vpc subnet +resource "tencentcloud_subnet" "subnet" { + availability_zone = var.availability_zone + name = "subnet" + vpc_id = tencentcloud_vpc.vpc.id + cidr_block = "10.0.20.0/28" + is_multicast = false +} + +# create postgresql +resource "tencentcloud_postgresql_instance" "example" { + name = "tf-example" + availability_zone = var.availability_zone + charge_type = "POSTPAID_BY_HOUR" + vpc_id = tencentcloud_vpc.vpc.id + subnet_id = tencentcloud_subnet.subnet.id + db_major_version = "10" + root_user = "root123" + root_password = "Root123$" + charset = "UTF8" + project_id = 0 + memory = 2 + cpu = 1 + storage = 10 + + db_node_set { + role = "Primary" + zone = var.availability_zone + dedicated_cluster_id = "cluster-262n63e8" + } + + db_node_set { + zone = var.availability_zone + dedicated_cluster_id = "cluster-262n63e8" + } + + tags = { + CreateBy = "terraform" + } +} +``` + Create pgsql with kms key ```hcl diff --git a/tencentcloud/services/postgresql/resource_tc_postgresql_readonly_instance.go b/tencentcloud/services/postgresql/resource_tc_postgresql_readonly_instance.go index 146e441a63..3462b10578 100644 --- a/tencentcloud/services/postgresql/resource_tc_postgresql_readonly_instance.go +++ b/tencentcloud/services/postgresql/resource_tc_postgresql_readonly_instance.go @@ -142,6 +142,11 @@ func ResourceTencentCloudPostgresqlReadonlyInstance() *schema.Resource { Optional: true, Description: "RO group ID.", }, + "dedicated_cluster_id": { + Type: schema.TypeString, + Optional: true, + Description: "Dedicated cluster ID.", + }, // Computed values "create_time": { Type: schema.TypeString, @@ -238,6 +243,9 @@ func resourceTencentCloudPostgresqlReadOnlyInstanceCreate(d *schema.ResourceData request.SecurityGroupIds = append(request.SecurityGroupIds, helper.String(item.(string))) } } + if v, ok := d.GetOk("dedicated_cluster_id"); ok { + request.DedicatedClusterId = helper.String(v.(string)) + } //if tags := helper.GetTags(d, "tag_list"); len(tags) > 0 { // for k, v := range tags { // request.TagList = &postgresql.Tag{ @@ -371,6 +379,16 @@ func resourceTencentCloudPostgresqlReadOnlyInstanceRead(d *schema.ResourceData, _ = d.Set("subnet_id", instance.SubnetId) _ = d.Set("name", instance.DBInstanceName) _ = d.Set("need_support_ipv6", instance.SupportIpv6) + nodeSet := instance.DBNodeSet + if nodeCount := len(nodeSet); nodeCount > 0 { + for i := range nodeSet { + item := nodeSet[i] + if item.DedicatedClusterId != nil { + _ = d.Set("dedicated_cluster_id", item.DedicatedClusterId) + } + } + } + // read only group masterDBInstanceId := instance.MasterDBInstanceId readOnlyGroupId, err := postgresqlService.DescribeReadOnlyGroupsById(ctx, *masterDBInstanceId, d.Id()) @@ -430,6 +448,7 @@ func resourceTencentCloudPostgresqlReadOnlyInstanceUpdate(d *schema.ResourceData "auto_renew_flag", "auto_voucher", "voucher_ids", + "dedicated_cluster_id", ); err != nil { return err } diff --git a/tencentcloud/services/postgresql/resource_tc_postgresql_readonly_instance.md b/tencentcloud/services/postgresql/resource_tc_postgresql_readonly_instance.md index 304b7fdbab..67b0b314af 100644 --- a/tencentcloud/services/postgresql/resource_tc_postgresql_readonly_instance.md +++ b/tencentcloud/services/postgresql/resource_tc_postgresql_readonly_instance.md @@ -2,6 +2,8 @@ Use this resource to create postgresql readonly instance. Example Usage +Create postgresql readonly instance + ```hcl variable "availability_zone" { default = "ap-guangzhou-3" @@ -29,7 +31,7 @@ resource "tencentcloud_postgresql_instance" "example" { charge_type = "POSTPAID_BY_HOUR" vpc_id = tencentcloud_vpc.vpc.id subnet_id = tencentcloud_subnet.subnet.id - engine_version = "10.4" + db_major_version = "10" root_user = "root123" root_password = "Root123$" charset = "UTF8" @@ -43,6 +45,7 @@ resource "tencentcloud_postgresql_instance" "example" { } } +# create postgresql readonly group resource "tencentcloud_postgresql_readonly_group" "example" { master_db_instance_id = tencentcloud_postgresql_instance.example.id name = "tf_ro_group" @@ -67,13 +70,14 @@ resource "tencentcloud_security_group" "example" { } } +# create postgresql readonly instance resource "tencentcloud_postgresql_readonly_instance" "example" { read_only_group_id = tencentcloud_postgresql_readonly_group.example.id master_db_instance_id = tencentcloud_postgresql_instance.example.id zone = var.availability_zone name = "example" auto_renew_flag = 0 - db_version = "10.4" + db_version = "10.23" instance_charge_type = "POSTPAID_BY_HOUR" memory = 4 cpu = 2 @@ -88,10 +92,112 @@ resource "tencentcloud_postgresql_readonly_instance" "example" { } ``` +Create postgresql readonly instance of CDC + +```hcl +variable "availability_zone" { + default = "ap-guangzhou-4" +} + +# create vpc +resource "tencentcloud_vpc" "vpc" { + name = "vpc" + cidr_block = "10.0.0.0/16" +} + +# create vpc subnet +resource "tencentcloud_subnet" "subnet" { + availability_zone = var.availability_zone + name = "subnet" + vpc_id = tencentcloud_vpc.vpc.id + cidr_block = "10.0.20.0/28" + is_multicast = false +} + +# create postgresql +resource "tencentcloud_postgresql_instance" "example" { + name = "tf-example" + availability_zone = var.availability_zone + charge_type = "POSTPAID_BY_HOUR" + vpc_id = tencentcloud_vpc.vpc.id + subnet_id = tencentcloud_subnet.subnet.id + db_major_version = "10" + root_user = "root123" + root_password = "Root123$" + charset = "UTF8" + project_id = 0 + memory = 2 + cpu = 1 + storage = 10 + + db_node_set { + role = "Primary" + zone = var.availability_zone + dedicated_cluster_id = "cluster-262n63e8" + } + + db_node_set { + zone = var.availability_zone + dedicated_cluster_id = "cluster-262n63e8" + } + + tags = { + CreateBy = "terraform" + } +} + +# create postgresql readonly group +resource "tencentcloud_postgresql_readonly_group" "example" { + master_db_instance_id = tencentcloud_postgresql_instance.example.id + name = "tf_ro_group" + project_id = 0 + vpc_id = tencentcloud_vpc.vpc.id + subnet_id = tencentcloud_subnet.subnet.id + replay_lag_eliminate = 1 + replay_latency_eliminate = 1 + max_replay_lag = 100 + max_replay_latency = 512 + min_delay_eliminate_reserve = 1 +} + +# create security group +resource "tencentcloud_security_group" "example" { + name = "tf-example" + description = "sg desc." + project_id = 0 + + tags = { + CreateBy = "terraform" + } +} + +# create postgresql readonly instance +resource "tencentcloud_postgresql_readonly_instance" "example" { + read_only_group_id = tencentcloud_postgresql_readonly_group.example.id + master_db_instance_id = tencentcloud_postgresql_instance.example.id + zone = var.availability_zone + name = "example" + auto_renew_flag = 0 + db_version = "10.23" + instance_charge_type = "POSTPAID_BY_HOUR" + memory = 4 + cpu = 2 + storage = 250 + vpc_id = tencentcloud_vpc.vpc.id + subnet_id = tencentcloud_subnet.subnet.id + need_support_ipv6 = 0 + project_id = 0 + dedicated_cluster_id = "cluster-262n63e8" + security_groups_ids = [ + tencentcloud_security_group.example.id, + ] +} +``` + Import postgresql readonly instance can be imported using the id, e.g. ``` -$ terraform import tencentcloud_postgresql_readonly_instance.example instance_id +$ terraform import tencentcloud_postgresql_readonly_instance.example pgro-gih5m0ke ``` \ No newline at end of file diff --git a/tencentcloud/services/postgresql/service_tencentcloud_postgresql.go b/tencentcloud/services/postgresql/service_tencentcloud_postgresql.go index b45b99b8e1..38b6d4e2b9 100644 --- a/tencentcloud/services/postgresql/service_tencentcloud_postgresql.go +++ b/tencentcloud/services/postgresql/service_tencentcloud_postgresql.go @@ -2150,3 +2150,39 @@ func (me *PostgresqlService) DescribePostgresAccountPrivilegesById(ctx context.C accountPrivileges = response.Response.PrivilegeSet return } + +func (me *PostgresqlService) DescribePostgresqlDedicatedClustersByFilter(ctx context.Context, param map[string]interface{}) (ret []*postgresql.DedicatedCluster, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = postgresql.NewDescribeDedicatedClustersRequest() + ) + + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), errRet.Error()) + } + }() + + for k, v := range param { + if k == "Filters" { + request.Filters = v.([]*postgresql.Filter) + } + } + + ratelimit.Check(request.GetAction()) + + response, err := me.client.UsePostgresqlClient().DescribeDedicatedClusters(request) + if err != nil { + errRet = err + return + } + + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + if len(response.Response.DedicatedClusterSet) < 1 { + return + } + + ret = response.Response.DedicatedClusterSet + return +} diff --git a/vendor/github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/http/request.go b/vendor/github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/http/request.go index aa13a9ae6e..e0e41703d0 100644 --- a/vendor/github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/http/request.go +++ b/vendor/github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/http/request.go @@ -265,7 +265,7 @@ func CompleteCommonParams(request Request, region string, requestClient string) params["Action"] = request.GetAction() params["Timestamp"] = strconv.FormatInt(time.Now().Unix(), 10) params["Nonce"] = strconv.Itoa(rand.Int()) - params["RequestClient"] = "SDK_GO_1.0.1008" + params["RequestClient"] = "SDK_GO_1.0.1010" if requestClient != "" { params["RequestClient"] += ": " + requestClient } 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 index 7e558e636d..90f0aeee57 100644 --- 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 @@ -855,6 +855,77 @@ func (c *Client) CreateDBInstancesWithContext(ctx context.Context, request *Crea return } +func NewCreateDatabaseRequest() (request *CreateDatabaseRequest) { + request = &CreateDatabaseRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + + request.Init().WithApiInfo("postgres", APIVersion, "CreateDatabase") + + + return +} + +func NewCreateDatabaseResponse() (response *CreateDatabaseResponse) { + response = &CreateDatabaseResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return + +} + +// CreateDatabase +// 此接口用于创建数据库,需指定数据库名及所有者。 +// +// 可能返回的错误码: +// AUTHFAILURE_UNAUTHORIZEDOPERATION = "AuthFailure.UnauthorizedOperation" +// FAILEDOPERATION_DATABASEACCESSERROR = "FailedOperation.DatabaseAccessError" +// FAILEDOPERATION_DATABASEAFFECTEDERROR = "FailedOperation.DatabaseAffectedError" +// FAILEDOPERATION_FAILEDOPERATIONERROR = "FailedOperation.FailedOperationError" +// FAILEDOPERATION_PRECHECKERROR = "FailedOperation.PreCheckError" +// INVALIDPARAMETER_PARAMETERCHECKERROR = "InvalidParameter.ParameterCheckError" +// INVALIDPARAMETERVALUE_CHARSETNOTFOUNDERROR = "InvalidParameterValue.CharsetNotFoundError" +// INVALIDPARAMETERVALUE_INVALIDACCOUNTERROR = "InvalidParameterValue.InvalidAccountError" +// INVALIDPARAMETERVALUE_PARAMETERLENGTHLIMITERROR = "InvalidParameterValue.ParameterLengthLimitError" +// INVALIDPARAMETERVALUE_PARAMETEROUTRANGEERROR = "InvalidParameterValue.ParameterOutRangeError" +// OPERATIONDENIED_INSTANCESTATUSLIMITERROR = "OperationDenied.InstanceStatusLimitError" +// RESOURCENOTFOUND_INSTANCENOTFOUNDERROR = "ResourceNotFound.InstanceNotFoundError" +func (c *Client) CreateDatabase(request *CreateDatabaseRequest) (response *CreateDatabaseResponse, err error) { + return c.CreateDatabaseWithContext(context.Background(), request) +} + +// CreateDatabase +// 此接口用于创建数据库,需指定数据库名及所有者。 +// +// 可能返回的错误码: +// AUTHFAILURE_UNAUTHORIZEDOPERATION = "AuthFailure.UnauthorizedOperation" +// FAILEDOPERATION_DATABASEACCESSERROR = "FailedOperation.DatabaseAccessError" +// FAILEDOPERATION_DATABASEAFFECTEDERROR = "FailedOperation.DatabaseAffectedError" +// FAILEDOPERATION_FAILEDOPERATIONERROR = "FailedOperation.FailedOperationError" +// FAILEDOPERATION_PRECHECKERROR = "FailedOperation.PreCheckError" +// INVALIDPARAMETER_PARAMETERCHECKERROR = "InvalidParameter.ParameterCheckError" +// INVALIDPARAMETERVALUE_CHARSETNOTFOUNDERROR = "InvalidParameterValue.CharsetNotFoundError" +// INVALIDPARAMETERVALUE_INVALIDACCOUNTERROR = "InvalidParameterValue.InvalidAccountError" +// INVALIDPARAMETERVALUE_PARAMETERLENGTHLIMITERROR = "InvalidParameterValue.ParameterLengthLimitError" +// INVALIDPARAMETERVALUE_PARAMETEROUTRANGEERROR = "InvalidParameterValue.ParameterOutRangeError" +// OPERATIONDENIED_INSTANCESTATUSLIMITERROR = "OperationDenied.InstanceStatusLimitError" +// RESOURCENOTFOUND_INSTANCENOTFOUNDERROR = "ResourceNotFound.InstanceNotFoundError" +func (c *Client) CreateDatabaseWithContext(ctx context.Context, request *CreateDatabaseRequest) (response *CreateDatabaseResponse, err error) { + if request == nil { + request = NewCreateDatabaseRequest() + } + + if c.GetCredential() == nil { + return nil, errors.New("CreateDatabase require credential") + } + + request.SetContext(ctx) + + response = NewCreateDatabaseResponse() + err = c.Send(request, response) + return +} + func NewCreateInstancesRequest() (request *CreateInstancesRequest) { request = &CreateInstancesRequest{ BaseRequest: &tchttp.BaseRequest{}, @@ -1182,6 +1253,7 @@ func NewCreateReadOnlyDBInstanceResponse() (response *CreateReadOnlyDBInstanceRe // INTERNALERROR_DFWERROR = "InternalError.DfwError" // INTERNALERROR_FLOWERROR = "InternalError.FlowError" // INTERNALERROR_INTERNALHTTPSERVERERROR = "InternalError.InternalHttpServerError" +// INTERNALERROR_JSONPARSEERROR = "InternalError.JsonParseError" // INTERNALERROR_SYSTEMERROR = "InternalError.SystemError" // INTERNALERROR_UNKNOWNERROR = "InternalError.UnknownError" // INTERNALERROR_VPCERROR = "InternalError.VpcError" @@ -1266,6 +1338,7 @@ func (c *Client) CreateReadOnlyDBInstance(request *CreateReadOnlyDBInstanceReque // INTERNALERROR_DFWERROR = "InternalError.DfwError" // INTERNALERROR_FLOWERROR = "InternalError.FlowError" // INTERNALERROR_INTERNALHTTPSERVERERROR = "InternalError.InternalHttpServerError" +// INTERNALERROR_JSONPARSEERROR = "InternalError.JsonParseError" // INTERNALERROR_SYSTEMERROR = "InternalError.SystemError" // INTERNALERROR_UNKNOWNERROR = "InternalError.UnknownError" // INTERNALERROR_VPCERROR = "InternalError.VpcError" @@ -3816,6 +3889,65 @@ func (c *Client) DescribeDatabasesWithContext(ctx context.Context, request *Desc return } +func NewDescribeDedicatedClustersRequest() (request *DescribeDedicatedClustersRequest) { + request = &DescribeDedicatedClustersRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + + request.Init().WithApiInfo("postgres", APIVersion, "DescribeDedicatedClusters") + + + return +} + +func NewDescribeDedicatedClustersResponse() (response *DescribeDedicatedClustersResponse) { + response = &DescribeDedicatedClustersResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return + +} + +// DescribeDedicatedClusters +// 查询专属集群 +// +// 可能返回的错误码: +// FAILEDOPERATION_DATABASEAFFECTEDERROR = "FailedOperation.DatabaseAffectedError" +// FAILEDOPERATION_FAILEDOPERATIONERROR = "FailedOperation.FailedOperationError" +// FAILEDOPERATION_SERVICEACCESSERROR = "FailedOperation.ServiceAccessError" +// INTERNALERROR_JSONPARSEERROR = "InternalError.JsonParseError" +// INVALIDPARAMETER_PARAMETERCHECKERROR = "InvalidParameter.ParameterCheckError" +// INVALIDPARAMETERVALUE_INVALIDPARAMETERVALUEERROR = "InvalidParameterValue.InvalidParameterValueError" +func (c *Client) DescribeDedicatedClusters(request *DescribeDedicatedClustersRequest) (response *DescribeDedicatedClustersResponse, err error) { + return c.DescribeDedicatedClustersWithContext(context.Background(), request) +} + +// DescribeDedicatedClusters +// 查询专属集群 +// +// 可能返回的错误码: +// FAILEDOPERATION_DATABASEAFFECTEDERROR = "FailedOperation.DatabaseAffectedError" +// FAILEDOPERATION_FAILEDOPERATIONERROR = "FailedOperation.FailedOperationError" +// FAILEDOPERATION_SERVICEACCESSERROR = "FailedOperation.ServiceAccessError" +// INTERNALERROR_JSONPARSEERROR = "InternalError.JsonParseError" +// INVALIDPARAMETER_PARAMETERCHECKERROR = "InvalidParameter.ParameterCheckError" +// INVALIDPARAMETERVALUE_INVALIDPARAMETERVALUEERROR = "InvalidParameterValue.InvalidParameterValueError" +func (c *Client) DescribeDedicatedClustersWithContext(ctx context.Context, request *DescribeDedicatedClustersRequest) (response *DescribeDedicatedClustersResponse, err error) { + if request == nil { + request = NewDescribeDedicatedClustersRequest() + } + + if c.GetCredential() == nil { + return nil, errors.New("DescribeDedicatedClusters require credential") + } + + request.SetContext(ctx) + + response = NewDescribeDedicatedClustersResponse() + err = c.Send(request, response) + return +} + func NewDescribeDefaultParametersRequest() (request *DescribeDefaultParametersRequest) { request = &DescribeDefaultParametersRequest{ BaseRequest: &tchttp.BaseRequest{}, @@ -6570,6 +6702,79 @@ func (c *Client) ModifyDBInstancesProjectWithContext(ctx context.Context, reques return } +func NewModifyDatabaseOwnerRequest() (request *ModifyDatabaseOwnerRequest) { + request = &ModifyDatabaseOwnerRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + + request.Init().WithApiInfo("postgres", APIVersion, "ModifyDatabaseOwner") + + + return +} + +func NewModifyDatabaseOwnerResponse() (response *ModifyDatabaseOwnerResponse) { + response = &ModifyDatabaseOwnerResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return + +} + +// ModifyDatabaseOwner +// 修改数据库所有者 +// +// 可能返回的错误码: +// FAILEDOPERATION_DATABASEACCESSERROR = "FailedOperation.DatabaseAccessError" +// FAILEDOPERATION_DATABASEAFFECTEDERROR = "FailedOperation.DatabaseAffectedError" +// FAILEDOPERATION_FAILEDOPERATIONERROR = "FailedOperation.FailedOperationError" +// FAILEDOPERATION_PRECHECKERROR = "FailedOperation.PreCheckError" +// INVALIDPARAMETER_PARAMETERCHECKERROR = "InvalidParameter.ParameterCheckError" +// INVALIDPARAMETERVALUE_INVALIDACCOUNTERROR = "InvalidParameterValue.InvalidAccountError" +// INVALIDPARAMETERVALUE_INVALIDDATABASENAMEFORMATERROR = "InvalidParameterValue.InvalidDatabaseNameFormatError" +// INVALIDPARAMETERVALUE_PARAMETERLENGTHLIMITERROR = "InvalidParameterValue.ParameterLengthLimitError" +// INVALIDPARAMETERVALUE_PARAMETEROUTRANGEERROR = "InvalidParameterValue.ParameterOutRangeError" +// OPERATIONDENIED_INSTANCEACCESSDENIEDERROR = "OperationDenied.InstanceAccessDeniedError" +// OPERATIONDENIED_INSTANCESTATUSLIMITOPERROR = "OperationDenied.InstanceStatusLimitOpError" +// RESOURCENOTFOUND_INSTANCENOTFOUNDERROR = "ResourceNotFound.InstanceNotFoundError" +// RESOURCEUNAVAILABLE_INVALIDINSTANCESTATUS = "ResourceUnavailable.InvalidInstanceStatus" +func (c *Client) ModifyDatabaseOwner(request *ModifyDatabaseOwnerRequest) (response *ModifyDatabaseOwnerResponse, err error) { + return c.ModifyDatabaseOwnerWithContext(context.Background(), request) +} + +// ModifyDatabaseOwner +// 修改数据库所有者 +// +// 可能返回的错误码: +// FAILEDOPERATION_DATABASEACCESSERROR = "FailedOperation.DatabaseAccessError" +// FAILEDOPERATION_DATABASEAFFECTEDERROR = "FailedOperation.DatabaseAffectedError" +// FAILEDOPERATION_FAILEDOPERATIONERROR = "FailedOperation.FailedOperationError" +// FAILEDOPERATION_PRECHECKERROR = "FailedOperation.PreCheckError" +// INVALIDPARAMETER_PARAMETERCHECKERROR = "InvalidParameter.ParameterCheckError" +// INVALIDPARAMETERVALUE_INVALIDACCOUNTERROR = "InvalidParameterValue.InvalidAccountError" +// INVALIDPARAMETERVALUE_INVALIDDATABASENAMEFORMATERROR = "InvalidParameterValue.InvalidDatabaseNameFormatError" +// INVALIDPARAMETERVALUE_PARAMETERLENGTHLIMITERROR = "InvalidParameterValue.ParameterLengthLimitError" +// INVALIDPARAMETERVALUE_PARAMETEROUTRANGEERROR = "InvalidParameterValue.ParameterOutRangeError" +// OPERATIONDENIED_INSTANCEACCESSDENIEDERROR = "OperationDenied.InstanceAccessDeniedError" +// OPERATIONDENIED_INSTANCESTATUSLIMITOPERROR = "OperationDenied.InstanceStatusLimitOpError" +// RESOURCENOTFOUND_INSTANCENOTFOUNDERROR = "ResourceNotFound.InstanceNotFoundError" +// RESOURCEUNAVAILABLE_INVALIDINSTANCESTATUS = "ResourceUnavailable.InvalidInstanceStatus" +func (c *Client) ModifyDatabaseOwnerWithContext(ctx context.Context, request *ModifyDatabaseOwnerRequest) (response *ModifyDatabaseOwnerResponse, err error) { + if request == nil { + request = NewModifyDatabaseOwnerRequest() + } + + if c.GetCredential() == nil { + return nil, errors.New("ModifyDatabaseOwner require credential") + } + + request.SetContext(ctx) + + response = NewModifyDatabaseOwnerResponse() + err = c.Send(request, response) + return +} + func NewModifyParameterTemplateRequest() (request *ModifyParameterTemplateRequest) { request = &ModifyParameterTemplateRequest{ BaseRequest: &tchttp.BaseRequest{}, 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 index 5552109e18..639525cc7d 100644 --- 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 @@ -1050,6 +1050,95 @@ func (r *CreateDBInstancesResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type CreateDatabaseRequestParams struct { + // 实例ID,形如postgres-6fego161 + DBInstanceId *string `json:"DBInstanceId,omitnil,omitempty" name:"DBInstanceId"` + + // 创建的数据库名 + DatabaseName *string `json:"DatabaseName,omitnil,omitempty" name:"DatabaseName"` + + // 数据库的所有者 + DatabaseOwner *string `json:"DatabaseOwner,omitnil,omitempty" name:"DatabaseOwner"` + + // 数据库的字符编码 + Encoding *string `json:"Encoding,omitnil,omitempty" name:"Encoding"` + + // 数据库的排序规则 + Collate *string `json:"Collate,omitnil,omitempty" name:"Collate"` + + // 数据库的字符分类 + Ctype *string `json:"Ctype,omitnil,omitempty" name:"Ctype"` +} + +type CreateDatabaseRequest struct { + *tchttp.BaseRequest + + // 实例ID,形如postgres-6fego161 + DBInstanceId *string `json:"DBInstanceId,omitnil,omitempty" name:"DBInstanceId"` + + // 创建的数据库名 + DatabaseName *string `json:"DatabaseName,omitnil,omitempty" name:"DatabaseName"` + + // 数据库的所有者 + DatabaseOwner *string `json:"DatabaseOwner,omitnil,omitempty" name:"DatabaseOwner"` + + // 数据库的字符编码 + Encoding *string `json:"Encoding,omitnil,omitempty" name:"Encoding"` + + // 数据库的排序规则 + Collate *string `json:"Collate,omitnil,omitempty" name:"Collate"` + + // 数据库的字符分类 + Ctype *string `json:"Ctype,omitnil,omitempty" name:"Ctype"` +} + +func (r *CreateDatabaseRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *CreateDatabaseRequest) FromJsonString(s string) error { + f := make(map[string]interface{}) + if err := json.Unmarshal([]byte(s), &f); err != nil { + return err + } + delete(f, "DBInstanceId") + delete(f, "DatabaseName") + delete(f, "DatabaseOwner") + delete(f, "Encoding") + delete(f, "Collate") + delete(f, "Ctype") + if len(f) > 0 { + return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "CreateDatabaseRequest has unknown keys!", "") + } + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type CreateDatabaseResponseParams struct { + // 唯一请求 ID,由服务端生成,每次请求都会返回(若请求因其他原因未能抵达服务端,则该次请求不会获得 RequestId)。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitnil,omitempty" name:"RequestId"` +} + +type CreateDatabaseResponse struct { + *tchttp.BaseResponse + Response *CreateDatabaseResponseParams `json:"Response"` +} + +func (r *CreateDatabaseResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *CreateDatabaseResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + // Predefined struct for user type CreateInstancesRequestParams struct { // 实例所属主可用区, 如:ap-guangzhou-3;若需要支持多可用区,在DBNodeSet.N字段中进行添加主可用区和备可用区信息; @@ -1513,25 +1602,25 @@ type CreateReadOnlyDBInstanceRequestParams struct { InstanceCount *uint64 `json:"InstanceCount,omitnil,omitempty" name:"InstanceCount"` // 购买时长,单位:月。 - //