github.com/telepresenceio/telepresence/v2@v2.20.0-pro.6.0.20240517030216-236ea954e789/pkg/client/cli/cmd/kubeauth.go (about) 1 package cmd 2 3 import ( 4 "fmt" 5 "os" 6 7 "github.com/spf13/cobra" 8 "google.golang.org/grpc" 9 "google.golang.org/grpc/credentials/insecure" 10 11 "github.com/datawire/dlib/dlog" 12 rpc "github.com/telepresenceio/telepresence/rpc/v2/authenticator" 13 ) 14 15 func kubeauthCmd() *cobra.Command { 16 cmd := &cobra.Command{ 17 Use: "kubeauth", 18 Args: cobra.ExactArgs(2), 19 Short: "Resolve kubeconfig context using gRPC to kubeauth server", 20 RunE: authenticateContext, 21 Hidden: true, 22 } 23 return cmd 24 } 25 26 func authenticateContext(cmd *cobra.Command, args []string) (err error) { 27 ctx := cmd.Context() 28 contextName := args[0] 29 serverAddr := args[1] 30 defer func() { 31 if err != nil { 32 dlog.Error(ctx, err) 33 } 34 }() 35 var conn *grpc.ClientConn 36 if conn, err = grpc.Dial(serverAddr, grpc.WithTransportCredentials(insecure.NewCredentials())); err != nil { 37 return fmt.Errorf("failed to dial GRPC server %s: %w", serverAddr, err) 38 } 39 defer conn.Close() 40 41 ac := rpc.NewAuthenticatorClient(conn) 42 var res *rpc.GetContextExecCredentialsResponse 43 if res, err = ac.GetContextExecCredentials(ctx, &rpc.GetContextExecCredentialsRequest{ContextName: contextName}); err != nil { 44 return fmt.Errorf("failed to get exec credentials: %w", err) 45 } 46 if _, err = os.Stdout.Write(res.RawCredentials); err != nil { 47 err = fmt.Errorf("failed to print raw credentials: %w", err) 48 } 49 return err 50 }