...

Source file src/edge-infra.dev/pkg/edge/edgeadmin/edgecliutils/kubeconfig.go

Documentation: edge-infra.dev/pkg/edge/edgeadmin/edgecliutils

     1  package edgecliutils
     2  
     3  import (
     4  	"errors"
     5  	"fmt"
     6  	"strings"
     7  
     8  	"edge-infra.dev/pkg/edge/registration"
     9  
    10  	"github.com/urfave/cli/v2"
    11  
    12  	"k8s.io/client-go/rest"
    13  	"k8s.io/client-go/tools/clientcmd"
    14  
    15  	"sigs.k8s.io/controller-runtime/pkg/client"
    16  )
    17  
    18  func CheckClusterIdentifierValue(c *cli.Context) error {
    19  	if c.String(KubeConfigContextFlag) == "" {
    20  		clientCfg, _ := clientcmd.NewDefaultClientConfigLoadingRules().Load()
    21  		if clientCfg.CurrentContext == "" {
    22  			return fmt.Errorf("failed to determine current config context: no context is set, or there is no kubeconfig")
    23  		}
    24  		context := clientCfg.CurrentContext
    25  		if err := c.Set(KubeConfigContextFlag, context); err != nil {
    26  			return fmt.Errorf("failed to apply current config context: %w", err)
    27  		}
    28  		fmt.Printf("using default kubeconfig-context value: %v\n", c.String(KubeConfigContextFlag))
    29  	}
    30  	if c.String(KubeConfigFlag) == "" {
    31  		clientCfg, err := clientcmd.NewDefaultClientConfigLoadingRules().Load()
    32  		if err != nil {
    33  			return fmt.Errorf("failed to find kubeconfig: %w", err)
    34  		}
    35  		ctx, ok := clientCfg.Contexts[clientCfg.CurrentContext]
    36  		if !ok {
    37  			return fmt.Errorf("current context %s not found in contexts", clientCfg.CurrentContext)
    38  		}
    39  		configLoc := ctx.LocationOfOrigin
    40  		if err := c.Set(KubeConfigFlag, configLoc); err != nil {
    41  			return fmt.Errorf("failed to apply current kubeconfig value: %w", err)
    42  		}
    43  		fmt.Printf("kubeconfig input is empty, using default kubeconfig value: %v\n", c.String(KubeConfigFlag))
    44  	}
    45  	return nil
    46  }
    47  
    48  func CreateClient(path, context string) (client.Client, error) {
    49  	if strings.Contains(context, "foreman") {
    50  		return nil, errors.New("unable to join a cluster with foreman in the name")
    51  	}
    52  	config, err := getRestConfig(path, context)
    53  	if err != nil {
    54  		return nil, err
    55  	}
    56  	scheme, err := registration.GetRegistrationRuntime()
    57  	if err != nil {
    58  		return nil, err
    59  	}
    60  	cl, err := client.New(config, client.Options{Scheme: scheme})
    61  	if err != nil {
    62  		return nil, err
    63  	}
    64  	return cl, nil
    65  }
    66  
    67  func getRestConfig(path, context string) (*rest.Config, error) {
    68  	return clientcmd.NewNonInteractiveDeferredLoadingClientConfig(
    69  		&clientcmd.ClientConfigLoadingRules{ExplicitPath: path},
    70  		&clientcmd.ConfigOverrides{CurrentContext: context}).ClientConfig()
    71  }
    72  

View as plain text