github.com/tilt-dev/tilt@v0.33.15-0.20240515162809-0a22ed45d8a0/internal/controllers/core/cluster/client.go (about)

     1  package cluster
     2  
     3  import (
     4  	"context"
     5  
     6  	"github.com/tilt-dev/tilt/internal/docker"
     7  	"github.com/tilt-dev/tilt/internal/k8s"
     8  )
     9  
    10  type KubernetesClientFactory interface {
    11  	New(ctx context.Context, contextOverride k8s.KubeContextOverride, namespaceOverride k8s.NamespaceOverride) (k8s.Client, error)
    12  }
    13  
    14  type KubernetesClientFunc func(ctx context.Context, contextOverride k8s.KubeContextOverride, namespaceOverride k8s.NamespaceOverride) (k8s.Client, error)
    15  
    16  func (k KubernetesClientFunc) New(ctx context.Context, contextOverride k8s.KubeContextOverride, namespaceOverride k8s.NamespaceOverride) (k8s.Client, error) {
    17  	return k(ctx, contextOverride, namespaceOverride)
    18  }
    19  
    20  type DockerClientFactory interface {
    21  	New(ctx context.Context, env docker.Env) (docker.Client, error)
    22  }
    23  
    24  type DockerClientFunc func(ctx context.Context, env docker.Env) (docker.Client, error)
    25  
    26  func (d DockerClientFunc) New(ctx context.Context, env docker.Env) (docker.Client, error) {
    27  	return d(ctx, env)
    28  }
    29  
    30  func DockerClientFromEnv(ctx context.Context, env docker.Env) (docker.Client, error) {
    31  	client := docker.NewDockerClient(ctx, env)
    32  	err := client.CheckConnected()
    33  	if err != nil {
    34  		return nil, err
    35  	}
    36  	return client, nil
    37  }
    38  
    39  // KubernetesClientFromEnv creates a client based on the machine environment.
    40  //
    41  // The Kubernetes Client APIs are really defined for automatic dependency injection.
    42  // (as opposed to the Kubernetes convention of nested factory structs.)
    43  //
    44  // If you have to edit the below, it's easier to let wire generate the
    45  // factory code for you, then adapt it here.
    46  func KubernetesClientFromEnv(ctx context.Context, contextOverride k8s.KubeContextOverride, namespaceOverride k8s.NamespaceOverride) (k8s.Client, error) {
    47  	clientConfig := k8s.ProvideClientConfig(contextOverride, namespaceOverride)
    48  	apiConfigOrError := k8s.ProvideAPIConfig(clientConfig, contextOverride, namespaceOverride)
    49  	if apiConfigOrError.Error != nil {
    50  		return nil, apiConfigOrError.Error
    51  	}
    52  	env := k8s.ProvideClusterProduct(apiConfigOrError)
    53  	restConfigOrError := k8s.ProvideRESTConfig(clientConfig)
    54  
    55  	clientsetOrError := k8s.ProvideClientset(restConfigOrError)
    56  	portForwardClient := k8s.ProvidePortForwardClient(restConfigOrError, clientsetOrError)
    57  	namespace := k8s.ProvideConfigNamespace(clientConfig)
    58  	kubeContext := k8s.ProvideKubeContext(apiConfigOrError)
    59  	minikubeClient := k8s.ProvideMinikubeClient(kubeContext)
    60  	clusterName := k8s.ProvideClusterName(apiConfigOrError)
    61  	client := k8s.ProvideK8sClient(ctx, env, restConfigOrError, clientsetOrError, portForwardClient, kubeContext, clusterName, namespace, minikubeClient, apiConfigOrError, clientConfig)
    62  	_, err := client.CheckConnected(ctx)
    63  	if err != nil {
    64  		return nil, err
    65  	}
    66  	return client, nil
    67  }