github.com/tilt-dev/tilt@v0.33.15-0.20240515162809-0a22ed45d8a0/internal/cli/client/config.go (about)

     1  package client
     2  
     3  import (
     4  	"fmt"
     5  
     6  	"k8s.io/client-go/tools/clientcmd"
     7  	clientcmdapi "k8s.io/client-go/tools/clientcmd/api"
     8  
     9  	"github.com/tilt-dev/tilt/internal/filelock"
    10  	"github.com/tilt-dev/tilt/pkg/model"
    11  )
    12  
    13  type TiltClientConfig clientcmd.ClientConfig
    14  
    15  // Uses the kubernetes config-loading library to create a client config
    16  // for the given server name.
    17  func ProvideClientConfig(apiServerName model.APIServerName, configAccess clientcmd.ConfigAccess) (TiltClientConfig, error) {
    18  	var config *clientcmdapi.Config
    19  	err := filelock.WithRLock(configAccess, func() error {
    20  		var e error
    21  		config, e = configAccess.GetStartingConfig()
    22  		return e
    23  	})
    24  	if err != nil {
    25  		return nil, err
    26  	}
    27  
    28  	name := string(apiServerName)
    29  
    30  	if _, ok := config.Contexts[name]; !ok {
    31  		return nil, fmt.Errorf("No tilt apiserver found: %s", name)
    32  	}
    33  
    34  	newCfg := config.DeepCopy()
    35  	newCfg.CurrentContext = name
    36  	return TiltClientConfig(clientcmd.NewDefaultClientConfig(*newCfg, nil)), nil
    37  }