From a8b9aa13ebb625b2460a8819978cc2e865cbf81f Mon Sep 17 00:00:00 2001 From: John Gardiner Myers Date: Thu, 24 Jun 2021 20:29:04 -0700 Subject: [PATCH] Don't include irrelevant bootstrap addons --- channels/pkg/api/BUILD.bazel | 1 + channels/pkg/api/channel.go | 9 +++- .../bootstrapchannelbuilder.go | 52 +++++++++---------- .../awscloudcontroller/manifest.yaml | 2 - 4 files changed, 33 insertions(+), 31 deletions(-) diff --git a/channels/pkg/api/BUILD.bazel b/channels/pkg/api/BUILD.bazel index 6ef2f4e805..377cfbadae 100644 --- a/channels/pkg/api/BUILD.bazel +++ b/channels/pkg/api/BUILD.bazel @@ -6,6 +6,7 @@ go_library( importpath = "k8s.io/kops/channels/pkg/api", visibility = ["//visibility:public"], deps = [ + "//pkg/values:go_default_library", "//vendor/github.com/blang/semver/v4:go_default_library", "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", ], diff --git a/channels/pkg/api/channel.go b/channels/pkg/api/channel.go index 27ddad8189..189eb02732 100644 --- a/channels/pkg/api/channel.go +++ b/channels/pkg/api/channel.go @@ -21,6 +21,7 @@ import ( "github.com/blang/semver/v4" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/kops/pkg/values" ) type Addons struct { @@ -74,7 +75,10 @@ type AddonSpec struct { func (a *Addons) Verify() error { for _, addon := range a.Spec.Addons { - if addon != nil && addon.Version != nil && *addon.Version != "" { + if addon == nil { + continue + } + if addon.Version != nil && *addon.Version != "" { name := a.ObjectMeta.Name if addon.Name != nil { name = *addon.Name @@ -85,6 +89,9 @@ func (a *Addons) Verify() error { return fmt.Errorf("addon %q has unparseable version %q: %v", name, *addon.Version, err) } } + if addon.KubernetesVersion != "" { + return fmt.Errorf("bootstrap addon %q has a KubernetesVersion", values.StringValue(addon.Name)) + } } return nil diff --git a/upup/pkg/fi/cloudup/bootstrapchannelbuilder/bootstrapchannelbuilder.go b/upup/pkg/fi/cloudup/bootstrapchannelbuilder/bootstrapchannelbuilder.go index 3943062b0a..58212255ea 100644 --- a/upup/pkg/fi/cloudup/bootstrapchannelbuilder/bootstrapchannelbuilder.go +++ b/upup/pkg/fi/cloudup/bootstrapchannelbuilder/bootstrapchannelbuilder.go @@ -622,13 +622,12 @@ func (b *BootstrapChannelBuilder) buildAddons(c *fi.ModelBuilderContext) (*chann id := "k8s-1.9" addons.Spec.Addons = append(addons.Spec.Addons, &channelsapi.AddonSpec{ - Name: fi.String(key), - Version: fi.String(version), - Selector: map[string]string{"k8s-addon": key}, - Manifest: fi.String(location), - KubernetesVersion: ">=1.9.0", - Id: id, - NeedsPKI: true, + Name: fi.String(key), + Version: fi.String(version), + Selector: map[string]string{"k8s-addon": key}, + Manifest: fi.String(location), + Id: id, + NeedsPKI: true, }) } @@ -984,7 +983,7 @@ func (b *BootstrapChannelBuilder) buildAddons(c *fi.ModelBuilderContext) (*chann if kops.CloudProviderID(b.Cluster.Spec.CloudProvider) == kops.CloudProviderAWS { - if b.Cluster.Spec.ExternalCloudControllerManager != nil { + if b.IsKubernetesGTE("1.18") && b.Cluster.Spec.ExternalCloudControllerManager != nil { key := "aws-cloud-controller.addons.k8s.io" // Version refers to the addon configuration. The CCM tag is given by // the template function AWSCCMTag() @@ -993,12 +992,11 @@ func (b *BootstrapChannelBuilder) buildAddons(c *fi.ModelBuilderContext) (*chann id := "k8s-1.18" location := key + "/" + id + ".yaml" addons.Spec.Addons = append(addons.Spec.Addons, &channelsapi.AddonSpec{ - Name: fi.String(key), - Version: fi.String(version), - Manifest: fi.String(location), - Selector: map[string]string{"k8s-addon": key}, - KubernetesVersion: ">=1.18.0", - Id: id, + Name: fi.String(key), + Version: fi.String(version), + Manifest: fi.String(location), + Selector: map[string]string{"k8s-addon": key}, + Id: id, }) } } @@ -1010,12 +1008,11 @@ func (b *BootstrapChannelBuilder) buildAddons(c *fi.ModelBuilderContext) (*chann id := "k8s-1.17" location := key + "/" + id + ".yaml" addons.Spec.Addons = append(addons.Spec.Addons, &channelsapi.AddonSpec{ - Name: fi.String(key), - Version: fi.String(version), - Manifest: fi.String(location), - Selector: map[string]string{"k8s-addon": key}, - KubernetesVersion: ">=1.17.0", - Id: id, + Name: fi.String(key), + Version: fi.String(version), + Manifest: fi.String(location), + Selector: map[string]string{"k8s-addon": key}, + Id: id, }) } @@ -1026,7 +1023,7 @@ func (b *BootstrapChannelBuilder) buildAddons(c *fi.ModelBuilderContext) (*chann } } - if b.Cluster.Spec.SnapshotController != nil && fi.BoolValue(b.Cluster.Spec.SnapshotController.Enabled) { + if b.IsKubernetesGTE("1.20") && b.Cluster.Spec.SnapshotController != nil && fi.BoolValue(b.Cluster.Spec.SnapshotController.Enabled) { key := "snapshot-controller.addons.k8s.io" version := "4.0.0-kops.1" @@ -1034,13 +1031,12 @@ func (b *BootstrapChannelBuilder) buildAddons(c *fi.ModelBuilderContext) (*chann id := "k8s-1.20" location := key + "/" + id + ".yaml" addons.Spec.Addons = append(addons.Spec.Addons, &channelsapi.AddonSpec{ - Name: fi.String(key), - Version: fi.String(version), - Manifest: fi.String(location), - Selector: map[string]string{"k8s-addon": key}, - KubernetesVersion: ">=1.20.0", - NeedsPKI: true, - Id: id, + Name: fi.String(key), + Version: fi.String(version), + Manifest: fi.String(location), + Selector: map[string]string{"k8s-addon": key}, + NeedsPKI: true, + Id: id, }) } } diff --git a/upup/pkg/fi/cloudup/tests/bootstrapchannelbuilder/awscloudcontroller/manifest.yaml b/upup/pkg/fi/cloudup/tests/bootstrapchannelbuilder/awscloudcontroller/manifest.yaml index f80c4d41f9..15bd6b52f8 100644 --- a/upup/pkg/fi/cloudup/tests/bootstrapchannelbuilder/awscloudcontroller/manifest.yaml +++ b/upup/pkg/fi/cloudup/tests/bootstrapchannelbuilder/awscloudcontroller/manifest.yaml @@ -53,7 +53,6 @@ spec: k8s-addon: storage-aws.addons.k8s.io version: 1.17.0 - id: k8s-1.18 - kubernetesVersion: '>=1.18.0' manifest: aws-cloud-controller.addons.k8s.io/k8s-1.18.yaml manifestHash: 802a42830a525a9083c80e2ad58efb72ea34945e name: aws-cloud-controller.addons.k8s.io @@ -61,7 +60,6 @@ spec: k8s-addon: aws-cloud-controller.addons.k8s.io version: 1.18.0-kops.1 - id: k8s-1.17 - kubernetesVersion: '>=1.17.0' manifest: aws-ebs-csi-driver.addons.k8s.io/k8s-1.17.yaml manifestHash: 59c7723a8a9271558c6a87ccb0f0c61c2e36c6ed name: aws-ebs-csi-driver.addons.k8s.io