From 1e3c10291fdee07cc422d6fb738472d39a40e35b Mon Sep 17 00:00:00 2001 From: Amber Brown Date: Thu, 31 Aug 2023 09:22:24 +1000 Subject: [PATCH] Remove old upgradestreams logic from the monitor & old parts of the RP (#3092) --- cmd/aro/update_ocp_versions.go | 2 +- pkg/deploy/saveversion.go | 17 +-- pkg/monitor/cluster/clusterversions.go | 18 --- pkg/monitor/cluster/clusterversions_test.go | 81 ------------- pkg/util/version/const.go | 38 +----- pkg/util/version/stream.go | 44 ------- pkg/util/version/stream_test.go | 125 -------------------- 7 files changed, 8 insertions(+), 317 deletions(-) delete mode 100644 pkg/util/version/stream.go delete mode 100644 pkg/util/version/stream_test.go diff --git a/cmd/aro/update_ocp_versions.go b/cmd/aro/update_ocp_versions.go index 2b0d60d3893..4d53b84b8a2 100644 --- a/cmd/aro/update_ocp_versions.go +++ b/cmd/aro/update_ocp_versions.go @@ -64,7 +64,7 @@ func getLatestOCPVersions(ctx context.Context, log *logrus.Entry) ([]api.OpenShi return nil, err } - for _, vers := range version.HiveInstallStreams { + for _, vers := range version.AvailableInstallStreams { installerPullSpec := fmt.Sprintf("%s/aro-installer:%s", dstRepo, vers.Version.MinorVersion()) digest, ok := installerImageDigests[vers.Version.MinorVersion()] if !ok { diff --git a/pkg/deploy/saveversion.go b/pkg/deploy/saveversion.go index dd6ee7ca677..21ae6d0c124 100644 --- a/pkg/deploy/saveversion.go +++ b/pkg/deploy/saveversion.go @@ -6,15 +6,12 @@ package deploy import ( "bytes" "context" - "encoding/json" "net/url" "time" mgmtstorage "github.com/Azure/azure-sdk-for-go/services/storage/mgmt/2019-06-01/storage" azstorage "github.com/Azure/azure-sdk-for-go/storage" "github.com/Azure/go-autorest/autorest/date" - - "github.com/Azure/ARO-RP/pkg/util/version" ) // SaveVersion for current location in shared storage account for environment @@ -45,17 +42,5 @@ func (d *deployer) SaveVersion(ctx context.Context) error { // save version of RP which is deployed in this location containerRef := blobClient.GetContainerReference("rpversion") blobRef := containerRef.GetBlobReference(d.config.Location) - err = blobRef.CreateBlockBlobFromReader(bytes.NewReader([]byte(d.version)), nil) - if err != nil { - return err - } - - // save OCP upgrade streams which are used by RP in this location - containerRef = blobClient.GetContainerReference("ocpversions") - blobRef = containerRef.GetBlobReference(d.config.Location) - streams, err := json.Marshal(version.UpgradeStreams) - if err != nil { - return err - } - return blobRef.CreateBlockBlobFromReader(bytes.NewReader(streams), nil) + return blobRef.CreateBlockBlobFromReader(bytes.NewReader([]byte(d.version)), nil) } diff --git a/pkg/monitor/cluster/clusterversions.go b/pkg/monitor/cluster/clusterversions.go index 6489cde8daf..86231df69cb 100644 --- a/pkg/monitor/cluster/clusterversions.go +++ b/pkg/monitor/cluster/clusterversions.go @@ -54,7 +54,6 @@ func (mon *Monitor) emitClusterVersions(ctx context.Context) error { "provisionedByResourceProviderVersion": mon.oc.Properties.ProvisionedBy, // last successful Put or Patch "resourceProviderVersion": version.GitCommit, // RP version currently running "operatorVersion": operatorVersion, // operator version in the cluster - "availableVersion": availableVersion(cv, version.UpgradeStreams), // current available version for upgrade from stream "availableRP": availableRP, // current RP version available for document update, empty when none "latestGaMinorVersion": version.DefaultInstallStream.Version.MinorVersion(), // Latest GA in ARO Minor version "actualMinorVersion": actualMinorVersion, // Minor version, empty if actual version is not in expected form @@ -83,20 +82,3 @@ func desiredVersion(cv *configv1.ClusterVersion) string { return cv.Status.Desired.Version } - -// availableVersion checks the upgradeStreams for possible upgrade of the cluster -// when the upgrade is possible withing the current Y version, return true and closest upgrade stream version -func availableVersion(cv *configv1.ClusterVersion, streams []*version.Stream) string { - av := actualVersion(cv) - v, err := version.ParseVersion(av) - if err != nil { - return "" - } - - uStream := version.GetUpgradeStream(streams, v, false) - if uStream == nil { - return "" - } - - return uStream.Version.String() -} diff --git a/pkg/monitor/cluster/clusterversions_test.go b/pkg/monitor/cluster/clusterversions_test.go index fc8da6f2669..b96b9ebc37d 100644 --- a/pkg/monitor/cluster/clusterversions_test.go +++ b/pkg/monitor/cluster/clusterversions_test.go @@ -42,7 +42,6 @@ func TestEmitClusterVersion(t *testing.T) { wantActualVersion string wantDesiredVersion string wantProvisionedByResourceProviderVersion string - wantAvailableVersion string wantAvailableRP string wantActualMinorVersion string }{ @@ -78,7 +77,6 @@ func TestEmitClusterVersion(t *testing.T) { wantActualVersion: "4.5.1", wantDesiredVersion: "4.5.3", wantProvisionedByResourceProviderVersion: "", - wantAvailableVersion: "4.5.39", wantAvailableRP: "unknown", wantActualMinorVersion: "4.5", }, @@ -159,7 +157,6 @@ func TestEmitClusterVersion(t *testing.T) { "provisionedByResourceProviderVersion": tt.wantProvisionedByResourceProviderVersion, "operatorVersion": "test", "resourceProviderVersion": "unknown", - "availableVersion": tt.wantAvailableVersion, "availableRP": tt.wantAvailableRP, "latestGaMinorVersion": version.DefaultInstallStream.Version.MinorVersion(), "actualMinorVersion": tt.wantActualMinorVersion, @@ -172,81 +169,3 @@ func TestEmitClusterVersion(t *testing.T) { }) } } - -func TestBaselineVersion(t *testing.T) { - streams := []*version.Stream{ - { - Version: version.NewVersion(4, 4, 38), - }, - { - Version: version.NewVersion(4, 5, 2), - }, - { - Version: version.NewVersion(4, 6, 17), - }, - } - - for _, tt := range []struct { - cv configv1.ClusterVersion - want string - upgrade bool - }{ - { - cv: configv1.ClusterVersion{ - Status: configv1.ClusterVersionStatus{ - History: []configv1.UpdateHistory{ - { - State: configv1.CompletedUpdate, - Version: "4.4.2", - }, - }, - }, - }, - want: "4.4.38", - }, - { - cv: configv1.ClusterVersion{ - Status: configv1.ClusterVersionStatus{ - History: []configv1.UpdateHistory{ - { - State: configv1.CompletedUpdate, - Version: "4.4.40", - }, - }, - }, - }, - want: "", - }, - { - cv: configv1.ClusterVersion{ - Status: configv1.ClusterVersionStatus{ - History: []configv1.UpdateHistory{ - { - State: configv1.CompletedUpdate, - Version: "4.5.1", - }, - }, - }, - }, - want: "4.5.2", - }, - { - cv: configv1.ClusterVersion{ - Status: configv1.ClusterVersionStatus{ - History: []configv1.UpdateHistory{ - { - State: configv1.CompletedUpdate, - Version: "4.5.2", - }, - }, - }, - }, - want: "", - }, - } { - bVersion := availableVersion(&tt.cv, streams) - if bVersion != tt.want { - t.Fatalf("Upgrade version does not match. want==%s, got==%s\n", tt.want, bVersion) - } - } -} diff --git a/pkg/util/version/const.go b/pkg/util/version/const.go index 6804b105a86..5873769f764 100644 --- a/pkg/util/version/const.go +++ b/pkg/util/version/const.go @@ -25,6 +25,11 @@ const ( var GitCommit = "unknown" +type Stream struct { + Version *Version `json:"version"` + PullSpec string `json:"-"` +} + // DefaultMinorVersion describes the minor OpenShift version to default to var DefaultMinorVersion = 11 @@ -47,7 +52,7 @@ var DefaultInstallStreams = map[int]*Stream{ // DefaultInstallStream describes stream we are defaulting to for all new clusters var DefaultInstallStream = DefaultInstallStreams[DefaultMinorVersion] -var HiveInstallStreams = []*Stream{ +var AvailableInstallStreams = []*Stream{ DefaultInstallStreams[10], { Version: NewVersion(4, 10, 54), @@ -65,37 +70,6 @@ var HiveInstallStreams = []*Stream{ DefaultInstallStreams[12], } -// UpgradeStreams describes list of streams we support for upgrades -var ( - UpgradeStreams = []*Stream{ - DefaultInstallStream, - { - Version: NewVersion(4, 9, 28), - PullSpec: "quay.io/openshift-release-dev/ocp-release@sha256:4084d94969b186e20189649b5affba7da59f7d1943e4e5bc7ef78b981eafb7a8", - }, - { - Version: NewVersion(4, 8, 18), - PullSpec: "quay.io/openshift-release-dev/ocp-release@sha256:321aae3d3748c589bc2011062cee9fd14e106f258807dc2d84ced3f7461160ea", - }, - { - Version: NewVersion(4, 7, 30), - PullSpec: "quay.io/openshift-release-dev/ocp-release@sha256:aba54b293dc151f5c0fd96d4353ced6ced3e7da6620c1c10714ab32d0577486f", - }, - { - Version: NewVersion(4, 6, 44), - PullSpec: "quay.io/openshift-release-dev/ocp-release@sha256:d042aa235b538721a39989b13d7d9d3537af9b57e9fd10f485dd04461932ec85", - }, - { - Version: NewVersion(4, 5, 39), - PullSpec: "quay.io/openshift-release-dev/ocp-release@sha256:c4b9eb565c64df97afe7841bbcc0469daec7973e46ae588739cc30ea9062172b", - }, - { - Version: NewVersion(4, 4, 33), - PullSpec: "quay.io/openshift-release-dev/ocp-release@sha256:a035dddd8a5e5c99484138951ef4aba021799b77eb9046f683a5466c23717738", - }, - } -) - // FluentbitImage contains the location of the Fluentbit container image func FluentbitImage(acrDomain string) string { return acrDomain + "/fluentbit:1.9.10-cm20230805" diff --git a/pkg/util/version/stream.go b/pkg/util/version/stream.go deleted file mode 100644 index d82a37cc97b..00000000000 --- a/pkg/util/version/stream.go +++ /dev/null @@ -1,44 +0,0 @@ -package version - -// Copyright (c) Microsoft Corporation. -// Licensed under the Apache License 2.0. - -type Stream struct { - Version *Version `json:"version"` - PullSpec string `json:"-"` -} - -// GetUpgradeStream returns an upgrade Stream for a Version or nil if no upgrade -// should be performed. -func GetUpgradeStream(streams []*Stream, v *Version, upgradeY bool) *Stream { - // don't automatically upgrade unknown hotfixes/nightlies - if v.Suffix != "" { - return nil - } - - s := getStream(streams, v) - if s == nil { - return nil - } - - if v.Lt(s.Version) { - return s - } - - if upgradeY { - return getStream(streams, &Version{V: [3]uint32{v.V[0], v.V[1] + 1}}) - } - - return nil -} - -// getStream receives a Version x.y.z and returns the Stream x.y.0 if it exists. -func getStream(streams []*Stream, v *Version) *Stream { - for _, s := range streams { - if s.Version.V[0] == v.V[0] && s.Version.V[1] == v.V[1] { - return s - } - } - - return nil -} diff --git a/pkg/util/version/stream_test.go b/pkg/util/version/stream_test.go deleted file mode 100644 index 4afbe312d23..00000000000 --- a/pkg/util/version/stream_test.go +++ /dev/null @@ -1,125 +0,0 @@ -package version - -// Copyright (c) Microsoft Corporation. -// Licensed under the Apache License 2.0. - -import ( - "fmt" - "reflect" - "regexp" - "testing" - - "github.com/Azure/ARO-RP/pkg/util/cmp" -) - -func TestOpenShiftReleaseImages(t *testing.T) { - for _, u := range UpgradeStreams { - if !regexp.MustCompile(`^quay.io/openshift-release-dev/ocp-release@sha256:[a-z0-9]{64}$`).MatchString(u.PullSpec) { - t.Errorf("PullSpec format invalid: %s", u.PullSpec) - } - } -} - -func TestOpenShiftVersions(t *testing.T) { - for _, u := range UpgradeStreams { - _, err := ParseVersion(u.Version.String()) - if err != nil { - t.Error(err) - } - } -} - -func TestUnique(t *testing.T) { - unique := make(map[string]int, len(UpgradeStreams)) - for _, u := range UpgradeStreams { - unique[fmt.Sprintf("%d.%d", u.Version.V[0], u.Version.V[1])]++ - } - - for i, j := range unique { - if j > 1 { - t.Errorf("multiple x.Y version upgrade path found for %s", i) - } - } -} - -func TestGetUpgradeStream(t *testing.T) { - stream43 := &Stream{ - Version: NewVersion(4, 3, 18), - } - stream44 := &Stream{ - Version: NewVersion(4, 4, 3), - } - stream45 := &Stream{ - Version: NewVersion(4, 5, 0), - } - - for _, tt := range []struct { - name string - v *Version - want *Stream - upgradeY bool - streams []*Stream - }{ - { - name: "upgrade when Y versions match and candidate Z (4.3.18) is greater", - v: NewVersion(4, 3, 17), - streams: []*Stream{stream43, stream44}, - want: stream43, - }, - { - name: "don't upgrade when Y versions match but current Z (4.3.19) is greater", - v: NewVersion(4, 3, 19), - streams: []*Stream{stream43, stream44}, - }, - { - name: "upgrade when Y versions match and candidate Z (4.4.3) is greater", - v: NewVersion(4, 4, 2), - streams: []*Stream{stream43, stream44}, - want: stream44, - }, - { - name: "don't upgrade when Y versions match but current Z (4.4.9) is greater", - v: NewVersion(4, 4, 9), - streams: []*Stream{stream43, stream44}, - }, - { - name: "upgrade to Y+1 when allowed and candidate y.Z (4.3.18) < current y.Z (4.3.19)", - v: NewVersion(4, 3, 19), - upgradeY: true, - streams: []*Stream{stream43, stream44}, - want: stream44, - }, - { - name: "upgrade to Y+1 when allowed and candidate y.Z == current y.Z (4.3.18)", - v: stream43.Version, - upgradeY: true, - streams: []*Stream{stream43, stream44}, - want: stream44, - }, - { - name: "upgrade to Y+1 (not Y+2) when allowed and candidate y.Z == current y.Z (4.3.18)", - v: stream43.Version, - upgradeY: true, - streams: []*Stream{stream43, stream44, stream45}, - want: stream44, - }, - { - name: "don't upgrade Y when not allowed", - v: stream43.Version, - streams: []*Stream{stream43, stream44}, - }, - { - name: "don't upgrade hotfixes automatically", - v: &Version{V: [3]uint32{4, 4, 0}, Suffix: "hotfix"}, - streams: []*Stream{stream44}, - }, - } { - t.Run(tt.name, func(t *testing.T) { - got := GetUpgradeStream(tt.streams, tt.v, tt.upgradeY) - - if !reflect.DeepEqual(got, tt.want) { - t.Error(cmp.Diff(tt.want, got)) - } - }) - } -}