From 211df7e585424e70763544af327940d10d8628d4 Mon Sep 17 00:00:00 2001 From: Wmxs <54929266+WeiMengXS@users.noreply.github.com> Date: Thu, 6 Jun 2024 11:46:56 +0800 Subject: [PATCH 1/4] feat(cam): support retry --- .../services/cam/data_source_tc_user_info.go | 39 +++++++++++++------ 1 file changed, 27 insertions(+), 12 deletions(-) diff --git a/tencentcloud/services/cam/data_source_tc_user_info.go b/tencentcloud/services/cam/data_source_tc_user_info.go index 1dc6b614ad..48b659a866 100644 --- a/tencentcloud/services/cam/data_source_tc_user_info.go +++ b/tencentcloud/services/cam/data_source_tc_user_info.go @@ -3,6 +3,7 @@ package cam import ( "context" "fmt" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "log" "math/rand" "strconv" @@ -67,9 +68,18 @@ func datasourceTencentCloudUserInfoRead(d *schema.ResourceData, meta interface{} logId = tccommon.GetLogId(ctx) request := cam.NewGetUserAppIdRequest() + response := cam.NewGetUserAppIdResponse() ratelimit.Check(request.GetAction()) - response, err := client.UseCamClient().GetUserAppId(request) + + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + result, e := client.UseCamClient().GetUserAppId(request) + if e != nil { + return tccommon.RetryError(e) + } + response = result + return nil + }) if err != nil { log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", @@ -80,25 +90,30 @@ func datasourceTencentCloudUserInfoRead(d *schema.ResourceData, meta interface{} log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) - if err != nil { - return err - } - - result := response.Response - - if result == nil { + if response == nil || response.Response == nil { return fmt.Errorf("get user appid error: empty response") } - appId := strconv.FormatUint(*result.AppId, 10) - uin := *result.Uin - ownerUin := *result.OwnerUin + appId := strconv.FormatUint(*response.Response.AppId, 10) + uin := *response.Response.Uin + ownerUin := *response.Response.OwnerUin accountInfoRequest := cam.NewDescribeSubAccountsRequest() + accountInfoResponse := cam.NewDescribeSubAccountsResponse() accountInfoRequest.FilterSubAccountUin = []*uint64{helper.Uint64(helper.StrToUInt64(uin))} - accountInfoResponse, err := client.UseCamClient().DescribeSubAccounts(accountInfoRequest) + + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + accountInfoResult, e := client.UseCamClient().DescribeSubAccounts(accountInfoRequest) + if e != nil { + return tccommon.RetryError(e) + } + accountInfoResponse = accountInfoResult + return nil + }) if err != nil { + log.Printf("[CRITAL]%s read CAM users failed, reason:%s\n", logId, err.Error()) return err } + subAccounts := accountInfoResponse.Response.SubAccounts var name string if len(subAccounts) > 0 { From 30c7cf11a4a2bc279cfd288f89f0d3ad46053ef5 Mon Sep 17 00:00:00 2001 From: Wmxs <54929266+WeiMengXS@users.noreply.github.com> Date: Fri, 7 Jun 2024 10:00:35 +0800 Subject: [PATCH 2/4] feat(cam): support retry --- tencentcloud/services/cam/data_source_tc_user_info_test.go | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/tencentcloud/services/cam/data_source_tc_user_info_test.go b/tencentcloud/services/cam/data_source_tc_user_info_test.go index 3392348b4b..5efae2b07a 100644 --- a/tencentcloud/services/cam/data_source_tc_user_info_test.go +++ b/tencentcloud/services/cam/data_source_tc_user_info_test.go @@ -14,8 +14,7 @@ func TestAccTencentCloudDataSourceUserInfoBasic(t *testing.T) { Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { - PreConfig: func() { tcacctest.AccStepPreConfigSetTempAKSK(t, tcacctest.ACCOUNT_TYPE_COMMON) }, - Config: testAccDataUserInfoBasic, + Config: testAccDataUserInfoBasic, Check: resource.ComposeAggregateTestCheckFunc( resource.TestCheckResourceAttrSet("data.tencentcloud_user_info.info", "app_id"), resource.TestCheckResourceAttrSet("data.tencentcloud_user_info.info", "uin"), @@ -33,8 +32,7 @@ func TestAccTencentCloudDataSourceUserInfoSubAccount(t *testing.T) { Steps: []resource.TestStep{ { // Need use subaccount aksk - PreConfig: func() { tcacctest.AccStepPreConfigSetTempAKSK(t, tcacctest.ACCOUNT_TYPE_SUB_ACCOUNT) }, - Config: testAccDataUserInfoSubAccount, + Config: testAccDataUserInfoSubAccount, Check: resource.ComposeAggregateTestCheckFunc( resource.TestCheckResourceAttrSet("data.tencentcloud_user_info.info_sub_account", "app_id"), resource.TestCheckResourceAttrSet("data.tencentcloud_user_info.info_sub_account", "uin"), From 94c357a29964c2bfaa39cc326df62d3473b2d215 Mon Sep 17 00:00:00 2001 From: Wmxs <54929266+WeiMengXS@users.noreply.github.com> Date: Fri, 7 Jun 2024 10:06:34 +0800 Subject: [PATCH 3/4] feat(cam): support retry --- .../services/cam/data_source_tc_user_info.go | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/tencentcloud/services/cam/data_source_tc_user_info.go b/tencentcloud/services/cam/data_source_tc_user_info.go index 48b659a866..5767bdccf7 100644 --- a/tencentcloud/services/cam/data_source_tc_user_info.go +++ b/tencentcloud/services/cam/data_source_tc_user_info.go @@ -93,12 +93,19 @@ func datasourceTencentCloudUserInfoRead(d *schema.ResourceData, meta interface{} if response == nil || response.Response == nil { return fmt.Errorf("get user appid error: empty response") } - - appId := strconv.FormatUint(*response.Response.AppId, 10) - uin := *response.Response.Uin - ownerUin := *response.Response.OwnerUin + var appId, uin, ownerUin string accountInfoRequest := cam.NewDescribeSubAccountsRequest() accountInfoResponse := cam.NewDescribeSubAccountsResponse() + + if response.Response.AppId != nil { + appId = strconv.FormatUint(*response.Response.AppId, 10) + } + if response.Response.Uin != nil { + uin = *response.Response.Uin + } + if response.Response.OwnerUin != nil { + ownerUin = *response.Response.Uin + } accountInfoRequest.FilterSubAccountUin = []*uint64{helper.Uint64(helper.StrToUInt64(uin))} err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { From da3ddc875e9f136d9e851ca3b2d5b3e6f1313182 Mon Sep 17 00:00:00 2001 From: Wmxs <54929266+WeiMengXS@users.noreply.github.com> Date: Fri, 7 Jun 2024 10:11:38 +0800 Subject: [PATCH 4/4] feat(cam): support retry --- .changelog/2671.txt | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 .changelog/2671.txt diff --git a/.changelog/2671.txt b/.changelog/2671.txt new file mode 100644 index 0000000000..994feb8bde --- /dev/null +++ b/.changelog/2671.txt @@ -0,0 +1,3 @@ +```release-note:enhancement +resource/tencentcloud_user_info: Support retry +``` \ No newline at end of file