From 43f9c6a25a7f595d7a5f896f69759c38e71d7f69 Mon Sep 17 00:00:00 2001 From: Nick Santos Date: Mon, 4 Dec 2023 12:28:26 -0500 Subject: [PATCH] k8s: remove container runtime loading from the boot sequence (#6274) this should make tilt faster to load when connecting to a remote or non-responsive k8s cluster fixes https://github.com/tilt-dev/tilt/issues/6265 Signed-off-by: Nick Santos --- internal/build/test_utils.go | 4 +- internal/cli/doctor.go | 10 +++- internal/cli/wire.go | 10 ---- internal/cli/wire_gen.go | 51 ++++------------ internal/docker/client_integration_test.go | 5 +- internal/docker/client_test.go | 4 +- internal/docker/env.go | 69 +++++++++++----------- internal/engine/wire.go | 11 ++-- internal/engine/wire_gen.go | 13 ++-- internal/k8s/runtime.go | 4 -- 10 files changed, 78 insertions(+), 103 deletions(-) diff --git a/internal/build/test_utils.go b/internal/build/test_utils.go index 606e89e1e8..bb28486729 100644 --- a/internal/build/test_utils.go +++ b/internal/build/test_utils.go @@ -49,7 +49,9 @@ func newDockerBuildFixture(t testing.TB) *dockerBuildFixture { ctx, _, _ := testutils.CtxAndAnalyticsForTest() env := clusterid.ProductGKE - dEnv := docker.ProvideClusterEnv(ctx, docker.RealClientCreator{}, "gke", env, wmcontainer.RuntimeDocker, k8s.FakeMinikube{}) + kCli := k8s.NewFakeK8sClient(t) + kCli.Runtime = wmcontainer.RuntimeDocker + dEnv := docker.ProvideClusterEnv(ctx, docker.RealClientCreator{}, "gke", env, kCli, k8s.FakeMinikube{}) dCli := docker.NewDockerClient(ctx, docker.Env(dEnv)) _, ok := dCli.(*docker.Cli) // If it wasn't an actual Docker client, it's an exploding client diff --git a/internal/cli/doctor.go b/internal/cli/doctor.go index 4643fa9edc..c9f94f5e7e 100644 --- a/internal/cli/doctor.go +++ b/internal/cli/doctor.go @@ -137,7 +137,7 @@ func (c *doctorCmd) run(ctx context.Context, args []string) error { ns, err := wireNamespace(ctx) printField("Namespace", ns, err) - runtime, err := wireRuntime(ctx) + runtime, err := containerRuntime(ctx) printField("Container Runtime", runtime, err) kVersion, err := wireK8sVersion(ctx) @@ -168,6 +168,14 @@ func (c *doctorCmd) run(ctx context.Context, args []string) error { return nil } +func containerRuntime(ctx context.Context) (container.Runtime, error) { + kClient, err := wireK8sClient(ctx) + if err != nil { + return "", err + } + return kClient.ContainerRuntime(ctx), nil +} + func clusterLocalRegistryDisplay(ctx context.Context) (string, error) { kClient, err := wireK8sClient(ctx) if err != nil { diff --git a/internal/cli/wire.go b/internal/cli/wire.go index ca173812e0..e426c98fcd 100644 --- a/internal/cli/wire.go +++ b/internal/cli/wire.go @@ -26,7 +26,6 @@ import ( "github.com/tilt-dev/tilt/internal/build" "github.com/tilt-dev/tilt/internal/cloud" "github.com/tilt-dev/tilt/internal/cloud/cloudurl" - "github.com/tilt-dev/tilt/internal/container" "github.com/tilt-dev/tilt/internal/controllers" "github.com/tilt-dev/tilt/internal/controllers/core/kubernetesdiscovery" "github.com/tilt-dev/tilt/internal/docker" @@ -69,7 +68,6 @@ var K8sWireSet = wire.NewSet( k8s.ProvideRESTConfig, k8s.ProvidePortForwardClient, k8s.ProvideConfigNamespace, - k8s.ProvideContainerRuntime, k8s.ProvideServerVersion, k8s.ProvideK8sClient, ProvideKubeContextOverride, @@ -247,14 +245,6 @@ func wireClusterName(ctx context.Context) (k8s.ClusterName, error) { return "", nil } -func wireRuntime(ctx context.Context) (container.Runtime, error) { - wire.Build( - K8sWireSet, - k8s.ProvideMinikubeClient, - ) - return "", nil -} - func wireK8sClient(ctx context.Context) (k8s.Client, error) { wire.Build( K8sWireSet, diff --git a/internal/cli/wire_gen.go b/internal/cli/wire_gen.go index 9d41893e95..69f33202a5 100644 --- a/internal/cli/wire_gen.go +++ b/internal/cli/wire_gen.go @@ -22,7 +22,6 @@ import ( client2 "github.com/tilt-dev/tilt/internal/cli/client" "github.com/tilt-dev/tilt/internal/cloud" "github.com/tilt-dev/tilt/internal/cloud/cloudurl" - "github.com/tilt-dev/tilt/internal/container" "github.com/tilt-dev/tilt/internal/containerupdate" "github.com/tilt-dev/tilt/internal/controllers" "github.com/tilt-dev/tilt/internal/controllers/core/cluster" @@ -125,8 +124,7 @@ func wireTiltfileResult(ctx context.Context, analytics2 *analytics.TiltAnalytics clusterName := k8s.ProvideClusterName(apiConfigOrError) minikubeClient := k8s.ProvideMinikubeClient(kubeContext) client := k8s.ProvideK8sClient(ctx, product, restConfigOrError, clientsetOrError, portForwardClient, kubeContext, clusterName, namespace, minikubeClient, apiConfigOrError, clientConfig) - runtime := k8s.ProvideContainerRuntime(ctx, client) - clusterEnv := docker.ProvideClusterEnv(ctx, realClientCreator, kubeContext, product, runtime, minikubeClient) + clusterEnv := docker.ProvideClusterEnv(ctx, realClientCreator, kubeContext, product, client, minikubeClient) localEnv := docker.ProvideLocalEnv(ctx, realClientCreator, kubeContext, product, clusterEnv) dockerComposeClient := dockercompose.NewDockerComposeClient(localEnv) webHost := provideWebHost() @@ -160,8 +158,7 @@ func wireDockerPrune(ctx context.Context, analytics2 *analytics.TiltAnalytics, s namespace := k8s.ProvideConfigNamespace(clientConfig) minikubeClient := k8s.ProvideMinikubeClient(kubeContext) client := k8s.ProvideK8sClient(ctx, product, restConfigOrError, clientsetOrError, portForwardClient, kubeContext, clusterName, namespace, minikubeClient, apiConfigOrError, clientConfig) - runtime := k8s.ProvideContainerRuntime(ctx, client) - clusterEnv := docker.ProvideClusterEnv(ctx, realClientCreator, kubeContext, product, runtime, minikubeClient) + clusterEnv := docker.ProvideClusterEnv(ctx, realClientCreator, kubeContext, product, client, minikubeClient) localEnv := docker.ProvideLocalEnv(ctx, realClientCreator, kubeContext, product, clusterEnv) localClient := docker.ProvideLocalCli(ctx, localEnv) clusterClient, err := docker.ProvideClusterCli(ctx, localEnv, clusterEnv, localClient) @@ -286,8 +283,7 @@ func wireCmdUp(ctx context.Context, analytics3 *analytics.TiltAnalytics, cmdTags containerRestartDetector := kubernetesdiscovery.NewContainerRestartDetector() reconciler := kubernetesdiscovery.NewReconciler(deferredClient, scheme, connectionManager, containerRestartDetector, storeStore) realClientCreator := _wireRealClientCreatorValue - runtime := k8s.ProvideContainerRuntime(ctx, client) - clusterEnv := docker.ProvideClusterEnv(ctx, realClientCreator, kubeContext, product, runtime, minikubeClient) + clusterEnv := docker.ProvideClusterEnv(ctx, realClientCreator, kubeContext, product, client, minikubeClient) localEnv := docker.ProvideLocalEnv(ctx, realClientCreator, kubeContext, product, clusterEnv) localClient := docker.ProvideLocalCli(ctx, localEnv) clusterClient, err := docker.ProvideClusterCli(ctx, localEnv, clusterEnv, localClient) @@ -496,8 +492,7 @@ func wireCmdCI(ctx context.Context, analytics3 *analytics.TiltAnalytics, subcomm containerRestartDetector := kubernetesdiscovery.NewContainerRestartDetector() reconciler := kubernetesdiscovery.NewReconciler(deferredClient, scheme, connectionManager, containerRestartDetector, storeStore) realClientCreator := _wireRealClientCreatorValue - runtime := k8s.ProvideContainerRuntime(ctx, client) - clusterEnv := docker.ProvideClusterEnv(ctx, realClientCreator, kubeContext, product, runtime, minikubeClient) + clusterEnv := docker.ProvideClusterEnv(ctx, realClientCreator, kubeContext, product, client, minikubeClient) localEnv := docker.ProvideLocalEnv(ctx, realClientCreator, kubeContext, product, clusterEnv) localClient := docker.ProvideLocalCli(ctx, localEnv) clusterClient, err := docker.ProvideClusterCli(ctx, localEnv, clusterEnv, localClient) @@ -702,8 +697,7 @@ func wireCmdUpdog(ctx context.Context, analytics3 *analytics.TiltAnalytics, cmdT containerRestartDetector := kubernetesdiscovery.NewContainerRestartDetector() reconciler := kubernetesdiscovery.NewReconciler(deferredClient, scheme, connectionManager, containerRestartDetector, storeStore) realClientCreator := _wireRealClientCreatorValue - runtime := k8s.ProvideContainerRuntime(ctx, k8sClient) - clusterEnv := docker.ProvideClusterEnv(ctx, realClientCreator, kubeContext, product, runtime, minikubeClient) + clusterEnv := docker.ProvideClusterEnv(ctx, realClientCreator, kubeContext, product, k8sClient, minikubeClient) localEnv := docker.ProvideLocalEnv(ctx, realClientCreator, kubeContext, product, clusterEnv) localClient := docker.ProvideLocalCli(ctx, localEnv) clusterClient, err := docker.ProvideClusterCli(ctx, localEnv, clusterEnv, localClient) @@ -824,24 +818,6 @@ func wireClusterName(ctx context.Context) (k8s.ClusterName, error) { return clusterName, nil } -func wireRuntime(ctx context.Context) (container.Runtime, error) { - k8sKubeContextOverride := ProvideKubeContextOverride() - k8sNamespaceOverride := ProvideNamespaceOverride() - clientConfig := k8s.ProvideClientConfig(k8sKubeContextOverride, k8sNamespaceOverride) - apiConfigOrError := k8s.ProvideAPIConfig(clientConfig, k8sKubeContextOverride, k8sNamespaceOverride) - product := k8s.ProvideClusterProduct(apiConfigOrError) - restConfigOrError := k8s.ProvideRESTConfig(clientConfig) - clientsetOrError := k8s.ProvideClientset(restConfigOrError) - portForwardClient := k8s.ProvidePortForwardClient(restConfigOrError, clientsetOrError) - kubeContext := k8s.ProvideKubeContext(apiConfigOrError) - clusterName := k8s.ProvideClusterName(apiConfigOrError) - namespace := k8s.ProvideConfigNamespace(clientConfig) - minikubeClient := k8s.ProvideMinikubeClient(kubeContext) - k8sClient := k8s.ProvideK8sClient(ctx, product, restConfigOrError, clientsetOrError, portForwardClient, kubeContext, clusterName, namespace, minikubeClient, apiConfigOrError, clientConfig) - runtime := k8s.ProvideContainerRuntime(ctx, k8sClient) - return runtime, nil -} - func wireK8sClient(ctx context.Context) (k8s.Client, error) { k8sKubeContextOverride := ProvideKubeContextOverride() k8sNamespaceOverride := ProvideNamespaceOverride() @@ -887,8 +863,7 @@ func wireDockerClusterClient(ctx context.Context) (docker.ClusterClient, error) namespace := k8s.ProvideConfigNamespace(clientConfig) minikubeClient := k8s.ProvideMinikubeClient(kubeContext) k8sClient := k8s.ProvideK8sClient(ctx, product, restConfigOrError, clientsetOrError, portForwardClient, kubeContext, clusterName, namespace, minikubeClient, apiConfigOrError, clientConfig) - runtime := k8s.ProvideContainerRuntime(ctx, k8sClient) - clusterEnv := docker.ProvideClusterEnv(ctx, realClientCreator, kubeContext, product, runtime, minikubeClient) + clusterEnv := docker.ProvideClusterEnv(ctx, realClientCreator, kubeContext, product, k8sClient, minikubeClient) localEnv := docker.ProvideLocalEnv(ctx, realClientCreator, kubeContext, product, clusterEnv) localClient := docker.ProvideLocalCli(ctx, localEnv) clusterClient, err := docker.ProvideClusterCli(ctx, localEnv, clusterEnv, localClient) @@ -913,8 +888,7 @@ func wireDockerLocalClient(ctx context.Context) (docker.LocalClient, error) { namespace := k8s.ProvideConfigNamespace(clientConfig) minikubeClient := k8s.ProvideMinikubeClient(kubeContext) k8sClient := k8s.ProvideK8sClient(ctx, product, restConfigOrError, clientsetOrError, portForwardClient, kubeContext, clusterName, namespace, minikubeClient, apiConfigOrError, clientConfig) - runtime := k8s.ProvideContainerRuntime(ctx, k8sClient) - clusterEnv := docker.ProvideClusterEnv(ctx, realClientCreator, kubeContext, product, runtime, minikubeClient) + clusterEnv := docker.ProvideClusterEnv(ctx, realClientCreator, kubeContext, product, k8sClient, minikubeClient) localEnv := docker.ProvideLocalEnv(ctx, realClientCreator, kubeContext, product, clusterEnv) localClient := docker.ProvideLocalCli(ctx, localEnv) return localClient, nil @@ -935,8 +909,7 @@ func wireDockerCompositeClient(ctx context.Context) (docker.CompositeClient, err namespace := k8s.ProvideConfigNamespace(clientConfig) minikubeClient := k8s.ProvideMinikubeClient(kubeContext) k8sClient := k8s.ProvideK8sClient(ctx, product, restConfigOrError, clientsetOrError, portForwardClient, kubeContext, clusterName, namespace, minikubeClient, apiConfigOrError, clientConfig) - runtime := k8s.ProvideContainerRuntime(ctx, k8sClient) - clusterEnv := docker.ProvideClusterEnv(ctx, realClientCreator, kubeContext, product, runtime, minikubeClient) + clusterEnv := docker.ProvideClusterEnv(ctx, realClientCreator, kubeContext, product, k8sClient, minikubeClient) localEnv := docker.ProvideLocalEnv(ctx, realClientCreator, kubeContext, product, clusterEnv) localClient := docker.ProvideLocalCli(ctx, localEnv) clusterClient, err := docker.ProvideClusterCli(ctx, localEnv, clusterEnv, localClient) @@ -980,8 +953,7 @@ func wireDownDeps(ctx context.Context, tiltAnalytics *analytics.TiltAnalytics, s clusterName := k8s.ProvideClusterName(apiConfigOrError) minikubeClient := k8s.ProvideMinikubeClient(kubeContext) k8sClient := k8s.ProvideK8sClient(ctx, product, restConfigOrError, clientsetOrError, portForwardClient, kubeContext, clusterName, namespace, minikubeClient, apiConfigOrError, clientConfig) - runtime := k8s.ProvideContainerRuntime(ctx, k8sClient) - clusterEnv := docker.ProvideClusterEnv(ctx, realClientCreator, kubeContext, product, runtime, minikubeClient) + clusterEnv := docker.ProvideClusterEnv(ctx, realClientCreator, kubeContext, product, k8sClient, minikubeClient) localEnv := docker.ProvideLocalEnv(ctx, realClientCreator, kubeContext, product, clusterEnv) dockerComposeClient := dockercompose.NewDockerComposeClient(localEnv) webHost := provideWebHost() @@ -1022,8 +994,7 @@ func wireDumpImageDeployRefDeps(ctx context.Context) (DumpImageDeployRefDeps, er namespace := k8s.ProvideConfigNamespace(clientConfig) minikubeClient := k8s.ProvideMinikubeClient(kubeContext) k8sClient := k8s.ProvideK8sClient(ctx, product, restConfigOrError, clientsetOrError, portForwardClient, kubeContext, clusterName, namespace, minikubeClient, apiConfigOrError, clientConfig) - runtime := k8s.ProvideContainerRuntime(ctx, k8sClient) - clusterEnv := docker.ProvideClusterEnv(ctx, realClientCreator, kubeContext, product, runtime, minikubeClient) + clusterEnv := docker.ProvideClusterEnv(ctx, realClientCreator, kubeContext, product, k8sClient, minikubeClient) localEnv := docker.ProvideLocalEnv(ctx, realClientCreator, kubeContext, product, clusterEnv) localClient := docker.ProvideLocalCli(ctx, localEnv) clusterClient, err := docker.ProvideClusterCli(ctx, localEnv, clusterEnv, localClient) @@ -1090,7 +1061,7 @@ func wireLsp(ctx context.Context, l logger.Logger, subcommand model.TiltSubcomma // wire.go: -var K8sWireSet = wire.NewSet(k8s.ProvideClusterProduct, k8s.ProvideClusterName, k8s.ProvideKubeContext, k8s.ProvideAPIConfig, k8s.ProvideClientConfig, k8s.ProvideClientset, k8s.ProvideRESTConfig, k8s.ProvidePortForwardClient, k8s.ProvideConfigNamespace, k8s.ProvideContainerRuntime, k8s.ProvideServerVersion, k8s.ProvideK8sClient, ProvideKubeContextOverride, +var K8sWireSet = wire.NewSet(k8s.ProvideClusterProduct, k8s.ProvideClusterName, k8s.ProvideKubeContext, k8s.ProvideAPIConfig, k8s.ProvideClientConfig, k8s.ProvideClientset, k8s.ProvideRESTConfig, k8s.ProvidePortForwardClient, k8s.ProvideConfigNamespace, k8s.ProvideServerVersion, k8s.ProvideK8sClient, ProvideKubeContextOverride, ProvideNamespaceOverride) var BaseWireSet = wire.NewSet( diff --git a/internal/docker/client_integration_test.go b/internal/docker/client_integration_test.go index 7cd24ef820..63ad874e26 100644 --- a/internal/docker/client_integration_test.go +++ b/internal/docker/client_integration_test.go @@ -18,7 +18,10 @@ import ( func TestCli_Run(t *testing.T) { ctx, _, _ := testutils.CtxAndAnalyticsForTest() - dEnv := ProvideClusterEnv(ctx, RealClientCreator{}, "gke", clusterid.ProductGKE, wmcontainer.RuntimeDocker, k8s.FakeMinikube{}) + k8sClient := k8s.NewFakeK8sClient(t) + k8sClient.Runtime = wmcontainer.RuntimeDocker + + dEnv := ProvideClusterEnv(ctx, RealClientCreator{}, "gke", clusterid.ProductGKE, k8sClient, k8s.FakeMinikube{}) cli := NewDockerClient(ctx, Env(dEnv)) defer func() { // release any idle connections to avoid out of file errors if running test many times diff --git a/internal/docker/client_test.go b/internal/docker/client_test.go index 92c338e79c..7019c17e73 100644 --- a/internal/docker/client_test.go +++ b/internal/docker/client_test.go @@ -403,7 +403,9 @@ func TestProvideClusterProduct(t *testing.T) { mkClient := k8s.FakeMinikube{DockerEnvMap: c.mkEnv, FakeVersion: minikubeV} kubeContext := k8s.KubeContext(fmt.Sprintf("%s-me", c.env)) - cluster := ProvideClusterEnv(context.Background(), fakeClientCreator{}, kubeContext, c.env, c.runtime, mkClient) + kCli := k8s.NewFakeK8sClient(t) + kCli.Runtime = c.runtime + cluster := ProvideClusterEnv(context.Background(), fakeClientCreator{}, kubeContext, c.env, kCli, mkClient) assert.Equal(t, c.expectedCluster, Env(cluster)) local := ProvideLocalEnv(context.Background(), fakeClientCreator{}, kubeContext, c.env, cluster) diff --git a/internal/docker/env.go b/internal/docker/env.go index 77b1a373b8..a77fd8dcd9 100644 --- a/internal/docker/env.go +++ b/internal/docker/env.go @@ -186,7 +186,7 @@ func ProvideClusterEnv( creator ClientCreator, kubeContext k8s.KubeContext, product clusterid.Product, - runtime container.Runtime, + kClient k8s.Client, minikubeClient k8s.MinikubeClient, ) ClusterEnv { // start with an empty env, then populate with cluster-specific values if @@ -219,45 +219,45 @@ func ProvideClusterEnv( } } - if runtime == container.RuntimeDocker { - if product == clusterid.ProductMinikube { - // If we're running Minikube with a docker runtime, talk to Minikube's docker socket. - envMap, ok, err := minikubeClient.DockerEnv(ctx) - if err != nil { - return ClusterEnv{Error: err} - } - - if ok { - d, err := creator.FromEnvMap(envMap) - if err != nil { - return ClusterEnv{Error: fmt.Errorf("connecting to minikube: %v", err)} - } - - // Handle the case where people manually set DOCKER_HOST to minikube. - if hostOverride == "" || hostOverride == d.DaemonHost() { - env.IsOldMinikube = isOldMinikube(ctx, minikubeClient) - env.BuildToKubeContexts = append(env.BuildToKubeContexts, string(kubeContext)) - env.Client = d - for k, v := range envMap { - env.Environ = append(env.Environ, fmt.Sprintf("%s=%s", k, v)) - } - sort.Strings(env.Environ) - } + if product == clusterid.ProductMinikube && kClient.ContainerRuntime(ctx) == container.RuntimeDocker { + // If we're running Minikube with a docker runtime, talk to Minikube's docker socket. + envMap, ok, err := minikubeClient.DockerEnv(ctx) + if err != nil { + return ClusterEnv{Error: err} + } - } - } else if product == clusterid.ProductMicroK8s { - // If we're running Microk8s with a docker runtime, talk to Microk8s's docker socket. - d, err := creator.FromEnvMap(map[string]string{"DOCKER_HOST": microK8sDockerHost}) + if ok { + d, err := creator.FromEnvMap(envMap) if err != nil { - return ClusterEnv{Error: fmt.Errorf("connecting to microk8s: %v", err)} + return ClusterEnv{Error: fmt.Errorf("connecting to minikube: %v", err)} } - // Handle the case where people manually set DOCKER_HOST to microk8s. + // Handle the case where people manually set DOCKER_HOST to minikube. if hostOverride == "" || hostOverride == d.DaemonHost() { - env.Client = d - env.Environ = append(env.Environ, fmt.Sprintf("DOCKER_HOST=%s", microK8sDockerHost)) + env.IsOldMinikube = isOldMinikube(ctx, minikubeClient) env.BuildToKubeContexts = append(env.BuildToKubeContexts, string(kubeContext)) + env.Client = d + for k, v := range envMap { + env.Environ = append(env.Environ, fmt.Sprintf("%s=%s", k, v)) + } + sort.Strings(env.Environ) } + + } + } + + if product == clusterid.ProductMicroK8s && kClient.ContainerRuntime(ctx) == container.RuntimeDocker { + // If we're running Microk8s with a docker runtime, talk to Microk8s's docker socket. + d, err := creator.FromEnvMap(map[string]string{"DOCKER_HOST": microK8sDockerHost}) + if err != nil { + return ClusterEnv{Error: fmt.Errorf("connecting to microk8s: %v", err)} + } + + // Handle the case where people manually set DOCKER_HOST to microk8s. + if hostOverride == "" || hostOverride == d.DaemonHost() { + env.Client = d + env.Environ = append(env.Environ, fmt.Sprintf("DOCKER_HOST=%s", microK8sDockerHost)) + env.BuildToKubeContexts = append(env.BuildToKubeContexts, string(kubeContext)) } } @@ -276,7 +276,8 @@ func ProvideClusterEnv( // currently, we handle this by inspecting the Docker + K8s configs to see // if they're matched up, but with the exception of microk8s (handled above), // we don't override the environmental Docker config - if runtime == container.RuntimeDocker && willBuildToKubeContext(ctx, product, kubeContext, env) { + if willBuildToKubeContext(ctx, product, kubeContext, env) && + kClient.ContainerRuntime(ctx) == container.RuntimeDocker { env.BuildToKubeContexts = append(env.BuildToKubeContexts, string(kubeContext)) } diff --git a/internal/engine/wire.go b/internal/engine/wire.go index d3e7d19abe..329c559809 100644 --- a/internal/engine/wire.go +++ b/internal/engine/wire.go @@ -69,7 +69,6 @@ func provideFakeBuildAndDeployer( execer localexec.Execer) (buildcontrol.BuildAndDeployer, error) { wire.Build( DeployerWireSetTest, - k8s.ProvideContainerRuntime, provideFakeKubeContext, provideFakeDockerClusterEnv, kubernetesapply.NewReconciler, @@ -94,12 +93,14 @@ func provideFakeKubeContext(env clusterid.Product) k8s.KubeContext { // A simplified version of the normal calculation we do // about whether we can build direct to a cluster -func provideFakeDockerClusterEnv(c docker.Client, k8sEnv clusterid.Product, kubeContext k8s.KubeContext, runtime container.Runtime) docker.ClusterEnv { +func provideFakeDockerClusterEnv(ctx context.Context, c docker.Client, k8sEnv clusterid.Product, kubeContext k8s.KubeContext, kClient k8s.Client) docker.ClusterEnv { env := c.Env() - isDockerRuntime := runtime == container.RuntimeDocker isLocalDockerCluster := k8sEnv == clusterid.ProductMinikube || k8sEnv == clusterid.ProductMicroK8s || k8sEnv == clusterid.ProductDockerDesktop - if isDockerRuntime && isLocalDockerCluster { - env.BuildToKubeContexts = append(env.BuildToKubeContexts, string(kubeContext)) + if isLocalDockerCluster { + isDockerRuntime := kClient.ContainerRuntime(ctx) == container.RuntimeDocker + if isDockerRuntime { + env.BuildToKubeContexts = append(env.BuildToKubeContexts, string(kubeContext)) + } } fake, ok := c.(*docker.FakeClient) diff --git a/internal/engine/wire_gen.go b/internal/engine/wire_gen.go index 82b9848b4b..6fd01218f3 100644 --- a/internal/engine/wire_gen.go +++ b/internal/engine/wire_gen.go @@ -58,8 +58,7 @@ func provideFakeBuildAndDeployer(ctx context.Context, docker2 docker.Client, kCl dockerComposeBuildAndDeployer := buildcontrol.NewDockerComposeBuildAndDeployer(reconciler, cmdimageReconciler, imageBuilder, dockercomposeserviceReconciler, clock, ctrlClient) localTargetBuildAndDeployer := buildcontrol.NewLocalTargetBuildAndDeployer(clock, ctrlClient, controller) kubeContext := provideFakeKubeContext(env) - runtime := k8s.ProvideContainerRuntime(ctx, kClient) - clusterEnv := provideFakeDockerClusterEnv(docker2, env, kubeContext, runtime) + clusterEnv := provideFakeDockerClusterEnv(ctx, docker2, env, kubeContext, kClient) liveupdatesUpdateMode, err := liveupdates.ProvideUpdateMode(updateMode, kubeContext, clusterEnv) if err != nil { return nil, err @@ -98,12 +97,14 @@ func provideFakeKubeContext(env clusterid.Product) k8s.KubeContext { // A simplified version of the normal calculation we do // about whether we can build direct to a cluster -func provideFakeDockerClusterEnv(c docker.Client, k8sEnv clusterid.Product, kubeContext k8s.KubeContext, runtime container.Runtime) docker.ClusterEnv { +func provideFakeDockerClusterEnv(ctx context.Context, c docker.Client, k8sEnv clusterid.Product, kubeContext k8s.KubeContext, kClient k8s.Client) docker.ClusterEnv { env := c.Env() - isDockerRuntime := runtime == container.RuntimeDocker isLocalDockerCluster := k8sEnv == clusterid.ProductMinikube || k8sEnv == clusterid.ProductMicroK8s || k8sEnv == clusterid.ProductDockerDesktop - if isDockerRuntime && isLocalDockerCluster { - env.BuildToKubeContexts = append(env.BuildToKubeContexts, string(kubeContext)) + if isLocalDockerCluster { + isDockerRuntime := kClient.ContainerRuntime(ctx) == container.RuntimeDocker + if isDockerRuntime { + env.BuildToKubeContexts = append(env.BuildToKubeContexts, string(kubeContext)) + } } fake, ok := c.(*docker.FakeClient) diff --git a/internal/k8s/runtime.go b/internal/k8s/runtime.go index 615ad0bef4..f29bb85c08 100644 --- a/internal/k8s/runtime.go +++ b/internal/k8s/runtime.go @@ -60,7 +60,3 @@ func (r *runtimeAsync) Runtime(ctx context.Context) container.Runtime { func (c K8sClient) ContainerRuntime(ctx context.Context) container.Runtime { return c.runtimeAsync.Runtime(ctx) } - -func ProvideContainerRuntime(ctx context.Context, kCli Client) container.Runtime { - return kCli.ContainerRuntime(ctx) -}