Skip to content

Commit

Permalink
--impersonate-service-account compatibility
Browse files Browse the repository at this point in the history
  • Loading branch information
gartnera committed Jun 21, 2022
1 parent e038774 commit db640d2
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 0 deletions.
6 changes: 6 additions & 0 deletions auth/token.go
Original file line number Diff line number Diff line change
Expand Up @@ -34,12 +34,18 @@ func Token() (*oauth2.Token, error) {
return ts.Token()
}

// easily impersonate a service account and maintain the TokenSource interface
var ImpersonateServiceAccount = ""

func maybeGetImpersonatedTokenSource(ctx context.Context) (oauth2.TokenSource, error) {
mainTs, err := getMainTokenSource(ctx)
if err != nil {
return nil, fmt.Errorf("unable to get main tokensource: %w", err)
}
email := os.Getenv("GOOGLE_IMPERSONATE_SERVICE_ACCOUNT")
if email == "" {
email = ImpersonateServiceAccount
}
if email != "" {
impersonateTs, err := NewGoogleImpersonateTokenSourceWrapper(ctx, email, mainTs)
if err != nil {
Expand Down
4 changes: 4 additions & 0 deletions main.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,9 @@ import (

var rootCmd = &cobra.Command{
Use: "gcloud <command> [command-flags] [command-args]",
PersistentPreRun: func(cmd *cobra.Command, args []string) {
auth.ImpersonateServiceAccount, _ = cmd.Flags().GetString("impersonate-service-account")
},
}

func gcloudFallback() error {
Expand Down Expand Up @@ -78,6 +81,7 @@ func maybeFallback() {
}

func main() {
rootCmd.PersistentFlags().String("impersonate-service-account", "", "service account email to impersonate")
rootCmd.AddCommand(auth.GetRootCmd())
rootCmd.AddCommand(config.GetRootCmd())
rootCmd.AddCommand(container.GetRootCmd())
Expand Down

0 comments on commit db640d2

Please sign in to comment.