99 "strconv"
1010 "strings"
1111
12+ "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
1213 "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
1314 "github.com/mitchellh/go-homedir"
1415 sdkcommon "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common"
@@ -2513,7 +2514,21 @@ func providerConfigure(d *schema.ResourceData) (interface{}, error) {
25132514}
25142515
25152516func genClientWithCAM (tcClient * TencentCloudClient , roleName string ) error {
2516- camResp , err := tccommon .GetAuthFromCAM (roleName )
2517+ var camResp * tccommon.CAMResponse
2518+ err := resource .Retry (tccommon .ReadRetryTimeout , func () * resource.RetryError {
2519+ result , e := tccommon .GetAuthFromCAM (roleName )
2520+ if e != nil {
2521+ return tccommon .RetryError (e )
2522+ }
2523+
2524+ if result == nil {
2525+ return resource .NonRetryableError (fmt .Errorf ("Get cam failed, Response is nil." ))
2526+ }
2527+
2528+ camResp = result
2529+ return nil
2530+ })
2531+
25172532 if err != nil {
25182533 return err
25192534 }
@@ -2531,6 +2546,7 @@ func genClientWithCAM(tcClient *TencentCloudClient, roleName string) error {
25312546func genClientWithSTS (tcClient * TencentCloudClient , assumeRoleArn , assumeRoleSessionName string , assumeRoleSessionDuration int , assumeRolePolicy string , assumeRoleExternalId string ) error {
25322547 // applying STS credentials
25332548 request := sdksts .NewAssumeRoleRequest ()
2549+ response := sdksts .NewAssumeRoleResponse ()
25342550 request .RoleArn = helper .String (assumeRoleArn )
25352551 request .RoleSessionName = helper .String (assumeRoleSessionName )
25362552 request .DurationSeconds = helper .IntUint64 (assumeRoleSessionDuration )
@@ -2542,12 +2558,29 @@ func genClientWithSTS(tcClient *TencentCloudClient, assumeRoleArn, assumeRoleSes
25422558 request .ExternalId = helper .String (assumeRoleExternalId )
25432559 }
25442560
2545- ratelimit .Check (request .GetAction ())
2546- response , err := tcClient .apiV3Conn .UseStsClient ().AssumeRole (request )
2561+ err := resource .Retry (tccommon .ReadRetryTimeout , func () * resource.RetryError {
2562+ ratelimit .Check (request .GetAction ())
2563+ result , e := tcClient .apiV3Conn .UseStsClient ().AssumeRole (request )
2564+ if e != nil {
2565+ return tccommon .RetryError (e )
2566+ }
2567+
2568+ if result == nil || result .Response == nil || result .Response .Credentials == nil {
2569+ return resource .NonRetryableError (fmt .Errorf ("Get Assume Role failed, Response is nil." ))
2570+ }
2571+
2572+ response = result
2573+ return nil
2574+ })
2575+
25472576 if err != nil {
25482577 return err
25492578 }
25502579
2580+ if response .Response .Credentials .TmpSecretId == nil || response .Response .Credentials .TmpSecretKey == nil || response .Response .Credentials .Token == nil {
2581+ return fmt .Errorf ("Get Assume Role failed, Credentials is nil." )
2582+ }
2583+
25512584 // using STS credentials
25522585 tcClient .apiV3Conn .Credential = sdkcommon .NewTokenCredential (
25532586 * response .Response .Credentials .TmpSecretId ,
@@ -2561,20 +2594,37 @@ func genClientWithSTS(tcClient *TencentCloudClient, assumeRoleArn, assumeRoleSes
25612594func genClientWithSamlSTS (tcClient * TencentCloudClient , assumeRoleArn , assumeRoleSessionName string , assumeRoleSessionDuration int , assumeRoleSamlAssertion , assumeRolePrincipalArn string ) error {
25622595 // applying STS credentials
25632596 request := sdksts .NewAssumeRoleWithSAMLRequest ()
2597+ response := sdksts .NewAssumeRoleWithSAMLResponse ()
25642598 request .RoleArn = helper .String (assumeRoleArn )
25652599 request .RoleSessionName = helper .String (assumeRoleSessionName )
25662600 request .DurationSeconds = helper .IntUint64 (assumeRoleSessionDuration )
25672601 request .SAMLAssertion = helper .String (assumeRoleSamlAssertion )
25682602 request .PrincipalArn = helper .String (assumeRolePrincipalArn )
2569-
2570- ratelimit .Check (request .GetAction ())
25712603 var stsExtInfo connectivity.StsExtInfo
25722604 stsExtInfo .Authorization = "SKIP"
2573- response , err := tcClient .apiV3Conn .UseStsClient (stsExtInfo ).AssumeRoleWithSAML (request )
2605+ err := resource .Retry (tccommon .ReadRetryTimeout , func () * resource.RetryError {
2606+ ratelimit .Check (request .GetAction ())
2607+ result , e := tcClient .apiV3Conn .UseStsClient (stsExtInfo ).AssumeRoleWithSAML (request )
2608+ if e != nil {
2609+ return tccommon .RetryError (e )
2610+ }
2611+
2612+ if result == nil || result .Response == nil || result .Response .Credentials == nil {
2613+ return resource .NonRetryableError (fmt .Errorf ("Get Assume Role with SAML failed, Response is nil." ))
2614+ }
2615+
2616+ response = result
2617+ return nil
2618+ })
2619+
25742620 if err != nil {
25752621 return err
25762622 }
25772623
2624+ if response .Response .Credentials .TmpSecretId == nil || response .Response .Credentials .TmpSecretKey == nil || response .Response .Credentials .Token == nil {
2625+ return fmt .Errorf ("Get Assume Role failed, Credentials is nil." )
2626+ }
2627+
25782628 // using STS credentials
25792629 tcClient .apiV3Conn .Credential = sdkcommon .NewTokenCredential (
25802630 * response .Response .Credentials .TmpSecretId ,
@@ -2588,20 +2638,37 @@ func genClientWithSamlSTS(tcClient *TencentCloudClient, assumeRoleArn, assumeRol
25882638func genClientWithOidcSTS (tcClient * TencentCloudClient , assumeRoleArn , assumeRoleSessionName string , assumeRoleSessionDuration int , assumeRolePolicy string ) error {
25892639 // applying STS credentials
25902640 request := sdksts .NewAssumeRoleWithWebIdentityRequest ()
2641+ response := sdksts .NewAssumeRoleWithWebIdentityResponse ()
25912642 request .ProviderId = helper .String ("OIDC" )
25922643 request .RoleArn = helper .String (assumeRoleArn )
25932644 request .RoleSessionName = helper .String (assumeRoleSessionName )
25942645 request .DurationSeconds = helper .IntInt64 (assumeRoleSessionDuration )
25952646 request .WebIdentityToken = helper .String (assumeRolePolicy )
2596-
2597- ratelimit .Check (request .GetAction ())
25982647 var stsExtInfo connectivity.StsExtInfo
25992648 stsExtInfo .Authorization = "SKIP"
2600- response , err := tcClient .apiV3Conn .UseStsClient (stsExtInfo ).AssumeRoleWithWebIdentity (request )
2649+ err := resource .Retry (tccommon .ReadRetryTimeout , func () * resource.RetryError {
2650+ ratelimit .Check (request .GetAction ())
2651+ result , e := tcClient .apiV3Conn .UseStsClient (stsExtInfo ).AssumeRoleWithWebIdentity (request )
2652+ if e != nil {
2653+ return tccommon .RetryError (e )
2654+ }
2655+
2656+ if result == nil || result .Response == nil || result .Response .Credentials == nil {
2657+ return resource .NonRetryableError (fmt .Errorf ("Get Assume Role with OIDC failed, Response is nil." ))
2658+ }
2659+
2660+ response = result
2661+ return nil
2662+ })
2663+
26012664 if err != nil {
26022665 return err
26032666 }
26042667
2668+ if response .Response .Credentials .TmpSecretId == nil || response .Response .Credentials .TmpSecretKey == nil || response .Response .Credentials .Token == nil {
2669+ return fmt .Errorf ("Get Assume Role failed, Credentials is nil." )
2670+ }
2671+
26052672 // using STS credentials
26062673 tcClient .apiV3Conn .Credential = sdkcommon .NewTokenCredential (
26072674 * response .Response .Credentials .TmpSecretId ,
@@ -2707,6 +2774,7 @@ func genClientWithPodOidc(tcClient *TencentCloudClient) error {
27072774 if err != nil {
27082775 return err
27092776 }
2777+
27102778 assumeResp , err := provider .GetCredential ()
27112779 if err != nil {
27122780 return err
@@ -2731,21 +2799,37 @@ func getCallerIdentity(tcClient *TencentCloudClient) (indentity *sdksts.GetCalle
27312799 cpf .HttpProfile .Endpoint = "sts.tencentcloudapi.com"
27322800 client , _ := sdksts .NewClient (credential , region , cpf )
27332801 request := sdksts .NewGetCallerIdentityRequest ()
2734- response , err := client .GetCallerIdentity (request )
2802+ response := sdksts .NewGetCallerIdentityResponse ()
2803+ err = resource .Retry (tccommon .ReadRetryTimeout , func () * resource.RetryError {
2804+ result , e := client .GetCallerIdentity (request )
2805+ if e != nil {
2806+ return tccommon .RetryError (e )
2807+ }
2808+
2809+ if result == nil || result .Response == nil {
2810+ return resource .NonRetryableError (fmt .Errorf ("Get caller identity failed, Response is nil." ))
2811+ }
2812+
2813+ response = result
2814+ return nil
2815+ })
2816+
27352817 if err != nil {
27362818 return
27372819 }
27382820
2739- if response == nil || response .Response == nil {
2740- return nil , fmt .Errorf ("Get GetCallerIdentity failed, Response is nil." )
2741- }
2742-
27432821 indentity = response .Response
27442822 return
27452823}
27462824
27472825func verifyAccountIDAllowed (indentity * sdksts.GetCallerIdentityResponseParams , allowedAccountIds , forbiddenAccountIds []string ) error {
2748- accountId := * indentity .AccountId
2826+ var accountId string
2827+ if indentity .AccountId != nil {
2828+ accountId = * indentity .AccountId
2829+ } else {
2830+ return fmt .Errorf ("Caller identity accountId is illegal, The value is nil." )
2831+ }
2832+
27492833 if len (allowedAccountIds ) > 0 {
27502834 found := false
27512835 for _ , allowedAccountID := range allowedAccountIds {
0 commit comments