From 8fb01dbd96b0b91dc78d800800fbd895e4eccd36 Mon Sep 17 00:00:00 2001 From: SevenEarth <391613297@qq.com> Date: Fri, 17 Jan 2025 16:02:30 +0800 Subject: [PATCH 1/5] add --- .../services/postgresql/service_tencentcloud_postgresql.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tencentcloud/services/postgresql/service_tencentcloud_postgresql.go b/tencentcloud/services/postgresql/service_tencentcloud_postgresql.go index 38b6d4e2b9..594564cbc0 100644 --- a/tencentcloud/services/postgresql/service_tencentcloud_postgresql.go +++ b/tencentcloud/services/postgresql/service_tencentcloud_postgresql.go @@ -831,6 +831,8 @@ func (me *PostgresqlService) DescribeRootUser(ctx context.Context, instanceId st request.DBInstanceId = &instanceId request.OrderBy = &orderBy request.OrderByType = &orderByType + request.Offset = helper.Int64(0) + request.Limit = helper.Int64(100) var response *postgresql.DescribeAccountsResponse errRet = resource.Retry(2*tccommon.ReadRetryTimeout, func() *resource.RetryError { response, errRet = me.client.UsePostgresqlClient().DescribeAccounts(request) From 9eb3467271625e3a6d43cc2b40be3dc1b42cd8c3 Mon Sep 17 00:00:00 2001 From: SevenEarth <391613297@qq.com> Date: Fri, 17 Jan 2025 16:05:16 +0800 Subject: [PATCH 2/5] add --- .changelog/3084.txt | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 .changelog/3084.txt diff --git a/.changelog/3084.txt b/.changelog/3084.txt new file mode 100644 index 0000000000..631b4c0899 --- /dev/null +++ b/.changelog/3084.txt @@ -0,0 +1,3 @@ +```release-note:enhancement +resource/tencentcloud_postgresql_instance: update code +``` From 578de1de05465f437d9918085aca9cbe54af72cd Mon Sep 17 00:00:00 2001 From: SevenEarth <391613297@qq.com> Date: Tue, 21 Jan 2025 15:12:45 +0800 Subject: [PATCH 3/5] add --- .changelog/3084.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changelog/3084.txt b/.changelog/3084.txt index 631b4c0899..5b36a6d4ea 100644 --- a/.changelog/3084.txt +++ b/.changelog/3084.txt @@ -1,3 +1,3 @@ ```release-note:enhancement -resource/tencentcloud_postgresql_instance: update code +resource/tencentcloud_postgresql_instance: update query interface limit count ``` From 739cc15e53ac9a3f9a4873bc9ebc21403b4b9f29 Mon Sep 17 00:00:00 2001 From: SevenEarth <391613297@qq.com> Date: Wed, 22 Jan 2025 18:10:03 +0800 Subject: [PATCH 4/5] add --- .../resource_tc_postgresql_instance.go | 8 +- .../service_tencentcloud_postgresql.go | 81 ++++++++++++++----- .../docs/r/postgresql_instance.html.markdown | 2 +- 3 files changed, 70 insertions(+), 21 deletions(-) diff --git a/tencentcloud/services/postgresql/resource_tc_postgresql_instance.go b/tencentcloud/services/postgresql/resource_tc_postgresql_instance.go index 82e114801e..5552cd45c9 100644 --- a/tencentcloud/services/postgresql/resource_tc_postgresql_instance.go +++ b/tencentcloud/services/postgresql/resource_tc_postgresql_instance.go @@ -166,7 +166,6 @@ func ResourceTencentCloudPostgresqlInstance() *schema.Resource { }, "root_user": { Type: schema.TypeString, - ForceNew: true, Optional: true, Default: "root", Description: "Instance root account name. This parameter is optional, Default value is `root`.", @@ -1008,6 +1007,13 @@ func resourceTencentCloudPostgresqlInstanceUpdate(d *schema.ResourceData, meta i return err } + immutableArgs := []string{"root_user"} + for _, v := range immutableArgs { + if d.HasChange(v) { + return fmt.Errorf("argument `%s` cannot be changed", v) + } + } + if d.HasChange("period") && !d.HasChange("charge_type") { return fmt.Errorf("The `period` field can be changed only when updating the charge type from `POSTPAID_BY_HOUR` to `PREPAID`.") } diff --git a/tencentcloud/services/postgresql/service_tencentcloud_postgresql.go b/tencentcloud/services/postgresql/service_tencentcloud_postgresql.go index 594564cbc0..d3e45332c4 100644 --- a/tencentcloud/services/postgresql/service_tencentcloud_postgresql.go +++ b/tencentcloud/services/postgresql/service_tencentcloud_postgresql.go @@ -5,7 +5,9 @@ import ( "errors" "fmt" "log" + "sort" "strconv" + "strings" "time" tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" @@ -824,33 +826,74 @@ func (me *PostgresqlService) CheckDBInstanceStatus(ctx context.Context, instance func (me *PostgresqlService) DescribeRootUser(ctx context.Context, instanceId string) (accounts []*postgresql.AccountInfo, errRet error) { logId := tccommon.GetLogId(ctx) - orderBy := "createTime" - orderByType := "asc" - request := postgresql.NewDescribeAccountsRequest() request.DBInstanceId = &instanceId - request.OrderBy = &orderBy - request.OrderByType = &orderByType - request.Offset = helper.Int64(0) - request.Limit = helper.Int64(100) + request.OrderByType = helper.String("asc") + request.OrderBy = helper.String("createTime") + var response *postgresql.DescribeAccountsResponse - errRet = resource.Retry(2*tccommon.ReadRetryTimeout, func() *resource.RetryError { - response, errRet = me.client.UsePostgresqlClient().DescribeAccounts(request) + var tmpList []*postgresql.AccountInfo + + var offset, limit int64 = 0, 100 + + for { + request.Offset = &offset + request.Limit = &limit + ratelimit.Check(request.GetAction()) + errRet = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + result, e := me.client.UsePostgresqlClient().DescribeAccounts(request) + if e != nil { + log.Printf("[CRITAL]%s describe account failed, reason: %v", logId, e) + return tccommon.RetryError(e) + } + + if result == nil || result.Response == nil || result.Response.Details == nil { + errRet = fmt.Errorf("TencentCloud SDK return nil response, %+v, %s", result, request.GetAction()) + } + + response = result + return nil + }) + if errRet != nil { - log.Printf("[CRITAL]%s describe account failed, reason: %v", logId, errRet) - return tccommon.RetryError(errRet) + return nil, errRet } - return nil - }) - if errRet != nil { - return nil, errRet + + tmpList = append(tmpList, response.Response.Details...) + if len(response.Response.Details) < int(limit) { + break + } + + offset += limit } - if response == nil || response.Response == nil || response.Response.Details == nil { - errRet = fmt.Errorf("TencentCloud SDK return nil response, %+v, %s", response, request.GetAction()) - } else { - accounts = response.Response.Details + + for _, item := range tmpList { + if item.CreateTime != nil && strings.Contains(*item.CreateTime, "0000-00-00") { + continue + } + + accounts = append(accounts, item) } + sort.Slice(accounts, func(i, j int) bool { + timeStrI := accounts[i].CreateTime + timeStrJ := accounts[j].CreateTime + + timeI, errI := time.Parse(tccommon.TENCENTCLOUD_COMMON_TIME_LAYOUT, *timeStrI) + if errI != nil { + fmt.Printf("Error parsing time string %s: %v\n", *timeStrI, errI) + return false + } + + timeJ, errJ := time.Parse(tccommon.TENCENTCLOUD_COMMON_TIME_LAYOUT, *timeStrJ) + if errJ != nil { + fmt.Printf("Error parsing time string %s: %v\n", *timeStrJ, errJ) + return false + } + + return timeI.Before(timeJ) + }) + return accounts, errRet } diff --git a/website/docs/r/postgresql_instance.html.markdown b/website/docs/r/postgresql_instance.html.markdown index 17c32ec8c5..ebbf777477 100644 --- a/website/docs/r/postgresql_instance.html.markdown +++ b/website/docs/r/postgresql_instance.html.markdown @@ -326,7 +326,7 @@ The following arguments are supported: * `period` - (Optional, Int) Specify Prepaid period in month. Default `1`. Values: `1`, `2`, `3`, `4`, `5`, `6`, `7`, `8`, `9`, `10`, `11`, `12`, `24`, `36`. This field is valid only when creating a `PREPAID` type instance, or updating the charge type from `POSTPAID_BY_HOUR` to `PREPAID`. * `project_id` - (Optional, Int) Project id, default value is `0`. * `public_access_switch` - (Optional, Bool) Indicates whether to enable the access to an instance from public network or not. -* `root_user` - (Optional, String, ForceNew) Instance root account name. This parameter is optional, Default value is `root`. +* `root_user` - (Optional, String) Instance root account name. This parameter is optional, Default value is `root`. * `security_groups` - (Optional, Set: [`String`]) ID of security group. If both vpc_id and subnet_id are not set, this argument should not be set either. * `tags` - (Optional, Map) The available tags within this postgresql. * `voucher_ids` - (Optional, List: [`String`]) Specify Voucher Ids if `auto_voucher` was `1`, only support using 1 vouchers for now. From 255c4bb63a03e3a439572d643e683111c5bd08f6 Mon Sep 17 00:00:00 2001 From: SevenEarth <391613297@qq.com> Date: Wed, 22 Jan 2025 18:22:46 +0800 Subject: [PATCH 5/5] add --- .../postgresql/resource_tc_postgresql_instance.go | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/tencentcloud/services/postgresql/resource_tc_postgresql_instance.go b/tencentcloud/services/postgresql/resource_tc_postgresql_instance.go index 5552cd45c9..f97a123036 100644 --- a/tencentcloud/services/postgresql/resource_tc_postgresql_instance.go +++ b/tencentcloud/services/postgresql/resource_tc_postgresql_instance.go @@ -1003,17 +1003,11 @@ func resourceTencentCloudPostgresqlInstanceUpdate(d *schema.ResourceData, meta i // "auto_renew_flag", // "auto_voucher", "voucher_ids", + "root_user", ); err != nil { return err } - immutableArgs := []string{"root_user"} - for _, v := range immutableArgs { - if d.HasChange(v) { - return fmt.Errorf("argument `%s` cannot be changed", v) - } - } - if d.HasChange("period") && !d.HasChange("charge_type") { return fmt.Errorf("The `period` field can be changed only when updating the charge type from `POSTPAID_BY_HOUR` to `PREPAID`.") }