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  }