From 41914e08ac918c9b63946eb9bf18757fa8fe575d Mon Sep 17 00:00:00 2001 From: Casey Davenport Date: Tue, 16 Jun 2026 09:01:05 -0700 Subject: [PATCH] Default CNI install mode to CalicoOnly on Kind kind node images already provide the upstream CNI plugins, so the operator skips the cni-plugins init container there. --- .../installation/core_controller.go | 6 +++++ pkg/controller/installation/defaults_test.go | 25 +++++++++++++++++++ 2 files changed, 31 insertions(+) diff --git a/pkg/controller/installation/core_controller.go b/pkg/controller/installation/core_controller.go index c4dcdd6aaa..64dc119a50 100644 --- a/pkg/controller/installation/core_controller.go +++ b/pkg/controller/installation/core_controller.go @@ -669,6 +669,12 @@ func fillDefaults(instance *operatorv1.Installation, currentPools *v3.IPPoolList } if instance.Spec.CNI.InstallMode == nil { mode := operatorv1.CNIInstallModeAll + if instance.Spec.KubernetesProvider == operatorv1.ProviderKind { + // kind node images already ship the upstream CNI plugins, so skip + // the cni-plugins init container. Other providers default to All + // for backward compatibility. + mode = operatorv1.CNIInstallModeCalicoOnly + } instance.Spec.CNI.InstallMode = &mode } diff --git a/pkg/controller/installation/defaults_test.go b/pkg/controller/installation/defaults_test.go index d8d948e117..b382294c74 100644 --- a/pkg/controller/installation/defaults_test.go +++ b/pkg/controller/installation/defaults_test.go @@ -54,6 +54,7 @@ var _ = Describe("Defaulting logic tests", func() { Expect(instance.Spec.Variant).To(Equal(operator.Calico)) Expect(instance.Spec.Registry).To(BeEmpty()) Expect(instance.Spec.CNI.Type).To(Equal(operator.PluginCalico)) + Expect(*instance.Spec.CNI.InstallMode).To(Equal(operator.CNIInstallModeAll)) Expect(instance.Spec.CalicoNetwork).NotTo(BeNil()) Expect(instance.Spec.CalicoNetwork.LinuxDataplane).ToNot(BeNil()) Expect(*instance.Spec.CalicoNetwork.LinuxDataplane).To(Equal(operator.LinuxDataplaneIptables)) @@ -456,6 +457,30 @@ var _ = Describe("Defaulting logic tests", func() { Expect(validateCustomResource(instance)).NotTo(HaveOccurred()) }) + It("should default CNI InstallMode to CalicoOnly on the Kind provider", func() { + instance := &operator.Installation{ + Spec: operator.InstallationSpec{ + KubernetesProvider: operator.ProviderKind, + CNI: &operator.CNISpec{}, + }, + } + Expect(fillDefaults(instance, nil)).NotTo(HaveOccurred()) + Expect(*instance.Spec.CNI.InstallMode).To(Equal(operator.CNIInstallModeCalicoOnly)) + Expect(validateCustomResource(instance)).NotTo(HaveOccurred()) + }) + + It("should not override an explicit CNI InstallMode on the Kind provider", func() { + all := operator.CNIInstallModeAll + instance := &operator.Installation{ + Spec: operator.InstallationSpec{ + KubernetesProvider: operator.ProviderKind, + CNI: &operator.CNISpec{InstallMode: &all}, + }, + } + Expect(fillDefaults(instance, nil)).NotTo(HaveOccurred()) + Expect(*instance.Spec.CNI.InstallMode).To(Equal(operator.CNIInstallModeAll)) + }) + It("should set default values for CNILogging if CNI is set to Calico", func() { instance := &operator.Installation{ Spec: operator.InstallationSpec{