7
7
"fmt"
8
8
"io/ioutil"
9
9
"log"
10
+ "math"
10
11
"os"
11
12
"strings"
12
13
"time"
@@ -169,13 +170,34 @@ func main() {
169
170
"mode" , qbconfOperationMode ,
170
171
)
171
172
172
- OidcToken , OidcTokenErr := getOidcGithubActionsToken ()
173
- if OidcTokenErr != nil {
174
- logSugar .Error (OidcTokenErr )
175
- return OidcTokenErr
173
+ // Add your own configuration here
174
+ maxRetries := 3
175
+ backoffBaseSeconds := 2
176
+
177
+ assumeRoleWithWebIdentityErr := retryWithExponentialBackoff (maxRetries , backoffBaseSeconds , func () error {
178
+ var err error
179
+
180
+ oidcToken , err := getOidcGithubActionsToken ()
181
+ if err != nil {
182
+ return err
183
+ }
184
+
185
+ awsConfig .Credentials , err = assumeRoleWithWebIdentity (c .String ("role-arn" ), c .String ("role-session-name" ), * oidcToken , awsConfig )
186
+ return err
187
+ })
188
+
189
+ if assumeRoleWithWebIdentityErr != nil {
190
+ logSugar .Error (assumeRoleWithWebIdentityErr )
191
+ return assumeRoleWithWebIdentityErr
176
192
}
177
193
178
- awsConfig .Credentials = assumeRoleWithWebIdentity (c .String ("role-arn" ), c .String ("role-session-name" ), * OidcToken , awsConfig )
194
+ // OidcToken, OidcTokenErr := getOidcGithubActionsToken()
195
+ // if OidcTokenErr != nil {
196
+ // logSugar.Error(OidcTokenErr)
197
+ // return OidcTokenErr
198
+ // }
199
+
200
+ // awsConfig.Credentials = assumeRoleWithWebIdentity(c.String("role-arn"), c.String("role-session-name"), *OidcToken, awsConfig)
179
201
}
180
202
181
203
_ , getAWSIdentityErr := getAWSIdentity (* awsConfig )
@@ -269,7 +291,7 @@ func assumeRoleByArn(roleArn, roleSessionName string, awsConfig *aws.Config) *st
269
291
}
270
292
271
293
// Function to assume role with OIDC ( token )
272
- func assumeRoleWithWebIdentity (roleArn , roleSessionName , token string , awsConfig * aws.Config ) * aws.CredentialsCache {
294
+ func assumeRoleWithWebIdentity (roleArn , roleSessionName , token string , awsConfig * aws.Config ) ( * aws.CredentialsCache , error ) {
273
295
274
296
// Create an STS client using the default config
275
297
stsClient := sts .NewFromConfig (* awsConfig )
@@ -284,8 +306,7 @@ func assumeRoleWithWebIdentity(roleArn, roleSessionName, token string, awsConfig
284
306
// Call the AssumeRoleWithWebIdentity API to assume the IAM role
285
307
resp , err := stsClient .AssumeRoleWithWebIdentity (context .Background (), input )
286
308
if err != nil {
287
- logSugar .Error (err )
288
- panic (err )
309
+ return nil , err
289
310
}
290
311
291
312
// value := aws.Credentials{
@@ -305,7 +326,7 @@ func assumeRoleWithWebIdentity(roleArn, roleSessionName, token string, awsConfig
305
326
),
306
327
)
307
328
308
- return credsProvider
329
+ return credsProvider , nil
309
330
}
310
331
311
332
// Function to generate a kubeconfig for a given EKS cluster
@@ -446,9 +467,7 @@ func getOidcGithubActionsToken() (*string, error) {
446
467
//ACTIONS_ID_TOKEN_REQUEST_TOKEN
447
468
logSugar .Debug ("retrieval of ACTIONS_ID_TOKEN_REQUEST_TOKEN env variable" )
448
469
tokenRequestToken := os .Getenv ("ACTIONS_ID_TOKEN_REQUEST_TOKEN" )
449
- logSugar .Infow ("retrieved ACTIONS_ID_TOKEN_REQUEST_TOKEN" ,
450
- "oidc_token_request_token" , maskString (tokenRequestToken ),
451
- )
470
+ logSugar .Info ("retrieved ACTIONS_ID_TOKEN_REQUEST_TOKEN" )
452
471
453
472
logSugar .Debugw ("prepared URL for requesting token value towards OIDC endpoint" ,
454
473
"oidc_token_request_url" , "%s&audience=sts.amazonaws.com" ,
@@ -466,3 +485,19 @@ func getOidcGithubActionsToken() (*string, error) {
466
485
467
486
return & tokenValue , nil
468
487
}
488
+
489
+ func retryWithExponentialBackoff (maxRetries int , backoffBaseSeconds int , operation func () error ) error {
490
+ var err error
491
+ for i := 0 ; i < maxRetries ; i ++ {
492
+ err = operation ()
493
+ if err == nil {
494
+ return nil
495
+ }
496
+
497
+ waitTime := time .Duration (math .Pow (float64 (backoffBaseSeconds ), float64 (i ))) * time .Second
498
+ logSugar .Infow ("retry wait added" , "wait_time" , waitTime , "attempt" , i , "max_retries" , maxRetries )
499
+ time .Sleep (waitTime )
500
+ }
501
+
502
+ return err
503
+ }
0 commit comments