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 }