github.com/caos/orbos@v1.5.14-0.20221103111702-e6cd0cea7ad4/pkg/kubernetes/cli/client.go (about) 1 package cli 2 3 import ( 4 "errors" 5 "fmt" 6 "strings" 7 8 orb2 "github.com/caos/orbos/internal/operator/orbiter/kinds/orb" 9 "github.com/caos/orbos/internal/secret/operators" 10 "github.com/caos/orbos/mntr" 11 "github.com/caos/orbos/pkg/git" 12 "github.com/caos/orbos/pkg/kubernetes" 13 "github.com/caos/orbos/pkg/orb" 14 "github.com/caos/orbos/pkg/secret" 15 ) 16 17 var ErrNotInitialized = errors.New("cluster is probably not yet initialized") 18 19 func Init( 20 monitor mntr.Monitor, 21 orbConfig *orb.Orb, 22 gitClient *git.Client, 23 kubeconfig string, 24 gitops bool, 25 clone bool, 26 omitK8sClient bool, 27 ) (*kubernetes.Client, error) { 28 29 var kc string 30 orbConfigIsIncompleteErr := orb.IsComplete(orbConfig) 31 if orbConfigIsIncompleteErr != nil && gitops { 32 return nil, orbConfigIsIncompleteErr 33 } 34 35 if orbConfigIsIncompleteErr == nil && gitops { 36 if clone { 37 if err := gitClient.Configure(orbConfig.URL, []byte(orbConfig.Repokey)); err != nil { 38 return nil, err 39 } 40 41 if err := gitClient.Clone(); err != nil { 42 return nil, err 43 } 44 } 45 if gitClient.Exists(git.OrbiterFile) && !omitK8sClient { 46 orbTree, err := gitClient.ReadTree(git.OrbiterFile) 47 if err != nil { 48 return nil, fmt.Errorf("failed to get tree for %s: %w", git.OrbiterFile, err) 49 } 50 51 orbDef, err := orb2.ParseDesiredV0(orbTree) 52 if err != nil { 53 return nil, fmt.Errorf("failed to parse %s: %w", git.OrbiterFile, err) 54 } 55 56 for clustername, _ := range orbDef.Clusters { 57 path := strings.Join([]string{"orbiter", clustername, "kubeconfig", "encrypted"}, ".") 58 59 kc, err = secret.Read( 60 nil, 61 path, 62 operators.GetAllSecretsFunc(monitor, false, gitops, gitClient, nil, orbConfig), 63 ) 64 if err != nil || kc == "" { 65 if err == nil { 66 return nil, ErrNotInitialized 67 } 68 return nil, mntr.ToUserError(fmt.Errorf(err.Error()+": %w", ErrNotInitialized)) 69 } 70 } 71 } 72 } 73 74 if omitK8sClient { 75 return nil, nil 76 } 77 78 return kubernetes.NewK8sClient(monitor, &kc, kubeconfig) 79 }