package edgecliutils import ( "errors" "fmt" "strings" "edge-infra.dev/pkg/edge/registration" "github.com/urfave/cli/v2" "k8s.io/client-go/rest" "k8s.io/client-go/tools/clientcmd" "sigs.k8s.io/controller-runtime/pkg/client" ) func CheckClusterIdentifierValue(c *cli.Context) error { if c.String(KubeConfigContextFlag) == "" { clientCfg, _ := clientcmd.NewDefaultClientConfigLoadingRules().Load() if clientCfg.CurrentContext == "" { return fmt.Errorf("failed to determine current config context: no context is set, or there is no kubeconfig") } context := clientCfg.CurrentContext if err := c.Set(KubeConfigContextFlag, context); err != nil { return fmt.Errorf("failed to apply current config context: %w", err) } fmt.Printf("using default kubeconfig-context value: %v\n", c.String(KubeConfigContextFlag)) } if c.String(KubeConfigFlag) == "" { clientCfg, err := clientcmd.NewDefaultClientConfigLoadingRules().Load() if err != nil { return fmt.Errorf("failed to find kubeconfig: %w", err) } ctx, ok := clientCfg.Contexts[clientCfg.CurrentContext] if !ok { return fmt.Errorf("current context %s not found in contexts", clientCfg.CurrentContext) } configLoc := ctx.LocationOfOrigin if err := c.Set(KubeConfigFlag, configLoc); err != nil { return fmt.Errorf("failed to apply current kubeconfig value: %w", err) } fmt.Printf("kubeconfig input is empty, using default kubeconfig value: %v\n", c.String(KubeConfigFlag)) } return nil } func CreateClient(path, context string) (client.Client, error) { if strings.Contains(context, "foreman") { return nil, errors.New("unable to join a cluster with foreman in the name") } config, err := getRestConfig(path, context) if err != nil { return nil, err } scheme, err := registration.GetRegistrationRuntime() if err != nil { return nil, err } cl, err := client.New(config, client.Options{Scheme: scheme}) if err != nil { return nil, err } return cl, nil } func getRestConfig(path, context string) (*rest.Config, error) { return clientcmd.NewNonInteractiveDeferredLoadingClientConfig( &clientcmd.ClientConfigLoadingRules{ExplicitPath: path}, &clientcmd.ConfigOverrides{CurrentContext: context}).ClientConfig() }