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  }