@@ -318,8 +318,13 @@ func getProjectService() (string, *gcp_compute.Service, error) {
318318 if err != nil {
319319 return "" , nil , err
320320 }
321-
322- service , err := gcp_compute .New (oauth2 .NewClient (oauth2 .NoContext , credentials .TokenSource ))
321+ var tokenSource oauth2.TokenSource
322+ if token , err := reuseToken (); err == nil && token != nil {
323+ tokenSource = oauth2 .ReuseTokenSource (token , credentials .TokenSource )
324+ } else {
325+ tokenSource = credentials .TokenSource
326+ }
327+ service , err := gcp_compute .New (oauth2 .NewClient (oauth2 .NoContext , tokenSource ))
323328 if err != nil {
324329 return "" , nil , err
325330 }
@@ -348,9 +353,29 @@ func getProjectService() (string, *gcp_compute.Service, error) {
348353 credentials .ProjectID = coercedProjectID
349354 }
350355
351- os .Setenv ("GOOGLE_APPLICATION_CREDENTIALS_DATA" , string (credentials .JSON ))
352356 return credentials .ProjectID , service , nil
353357}
358+ func reuseToken () (* oauth2.Token , error ) {
359+ var token * oauth2.Token
360+ tokenJSON := os .Getenv ("CML_GCP_ACCESS_TOKEN" )
361+ if len (tokenJSON ) == 0 {
362+ return nil , nil
363+ }
364+ err := json .Unmarshal ([]byte (tokenJSON ), & token )
365+ return token , err
366+ }
367+
368+ func ExtractToken (credentials * google.Credentials ) ([]byte , error ) {
369+ token , err := credentials .TokenSource .Token ()
370+ if err != nil {
371+ return nil , err
372+ }
373+ tokenJSON , err := json .Marshal (token )
374+ if err != nil {
375+ return nil , err
376+ }
377+ return tokenJSON , nil
378+ }
354379
355380func coerceOIDCCredentials (credentialsJSON []byte ) (string , error ) {
356381 var credentials map [string ]interface {}
0 commit comments