...
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