Skip to content

Commit

Permalink
MGMT-15425: Change chosen mce release to match openshift version
Browse files Browse the repository at this point in the history
  • Loading branch information
danmanor committed Nov 20, 2023
1 parent 270b38b commit df3e42a
Show file tree
Hide file tree
Showing 7 changed files with 130 additions and 8 deletions.
13 changes: 13 additions & 0 deletions internal/common/version.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package common

import (
"errors"
"fmt"
"strings"

"github.com/hashicorp/go-version"
Expand Down Expand Up @@ -57,3 +58,15 @@ func BaseVersionEqual(version1, versionMayEqual string) (bool, error) {

return v1[0] == v2[0] && v1[1] == v2[1], nil
}

func GetBaseVersion(version string) (*string, error) {
version = strings.Split(version, "-")[0]
splittedVersion := strings.Split(version, ".")

if len(splittedVersion) < 2 {
return nil, errors.New("invalid version")
}

versionStr := fmt.Sprintf("%s.%s", splittedVersion[0], splittedVersion[1])
return &versionStr, nil
}
2 changes: 1 addition & 1 deletion internal/operators/manager_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ var _ = BeforeEach(func() {
cluster = &common.Cluster{
Cluster: models.Cluster{
ID: &clusterID,
OpenshiftVersion: "4.8.1",
OpenshiftVersion: "4.14.0",
},
}
cluster.ImageInfo = &models.ImageInfo{}
Expand Down
60 changes: 59 additions & 1 deletion internal/operators/mce/config.go
Original file line number Diff line number Diff line change
@@ -1,8 +1,66 @@
package mce

import (
"embed"
"encoding/json"
"errors"
"fmt"

"github.com/openshift/assisted-service/internal/common"
)

//go:embed ocp_mce_release_matrix.json
var jsonFile embed.FS

func getMCEVersion(openshiftVersion string) (*string, error) {

type OCPMCEReleaseMatrix struct {
OpenshiftVersion string `json:"openshift_version"`
MceVersions []string `json:"mce_versions"`
}

baseVersion, err := common.GetBaseVersion(openshiftVersion)
if err != nil {
return nil, fmt.Errorf("failed to get base version of %s", openshiftVersion)
}

content, err := jsonFile.ReadFile("ocp_mce_release_matrix.json")
if err != nil {
return nil, fmt.Errorf("failed to read ocp mce releases matrix: %w", err)
}

var matrix []OCPMCEReleaseMatrix
if err = json.Unmarshal(content, &matrix); err != nil {
return nil, fmt.Errorf("failed to unmarshal ocp mce release matrix: %w", err)
}

var mceVersions []string
for _, record := range matrix {
if record.OpenshiftVersion == *baseVersion {
mceVersions = record.MceVersions
}
}
if len(mceVersions) == 0 {
return nil, errors.New("failed to find mce versions for the given openshift version")
}

latestVersion := mceVersions[0]
for _, version := range mceVersions {
isGreaterOrEqaul, err := common.VersionGreaterOrEqual(version, latestVersion)
if err != nil {
return nil, fmt.Errorf("failed to compare version %s with version %s", latestVersion, version)
}

if isGreaterOrEqaul {
latestVersion = version
}
}

return &latestVersion, nil
}

const (
MceMinOpenshiftVersion string = "4.10.0"
MceChannel string = "stable-2.3"

// Memory value provided in GiB
MinimumMemory int64 = 16
Expand Down
16 changes: 12 additions & 4 deletions internal/operators/mce/manifest.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,14 @@ package mce

import (
"bytes"
"fmt"
"text/template"

"github.com/go-openapi/swag"
)

// Manifests returns manifests needed to deploy MCE.
func Manifests() (openshiftManifests map[string][]byte, customManifests []byte, err error) {
func Manifests(openshiftVersion string) (openshiftManifests map[string][]byte, customManifests []byte, err error) {
// Generate the OpenShift manifests:
namespaceManifest, err := getNamespace()
if err != nil {
Expand All @@ -16,7 +19,7 @@ func Manifests() (openshiftManifests map[string][]byte, customManifests []byte,
if err != nil {
return
}
operatorSubscriptionManifest, err := getSubscription()
operatorSubscriptionManifest, err := getSubscription(openshiftVersion)
if err != nil {
return
}
Expand All @@ -34,11 +37,16 @@ func Manifests() (openshiftManifests map[string][]byte, customManifests []byte,
return openshiftManifests, mceManifest, nil
}

func getSubscription() ([]byte, error) {
func getSubscription(openshiftVersion string) ([]byte, error) {
mceVersion, err := getMCEVersion(openshiftVersion)
if err != nil {
return nil, err
}
mceChannel := fmt.Sprintf("stable-%s", swag.StringValue(mceVersion))
data := map[string]string{
"OPERATOR_NAMESPACE": Operator.Namespace,
"OPERATOR_SUBSCRIPTION_NAME": Operator.SubscriptionName,
"OPERATOR_SUBSCRIPTION_CHANNEL": MceChannel,
"OPERATOR_SUBSCRIPTION_CHANNEL": mceChannel,
}
return executeTemplate(data, operatorSubscriptionManifestTemplate)
}
Expand Down
35 changes: 35 additions & 0 deletions internal/operators/mce/manifest_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,41 @@ var _ = Describe("MCE manifest generation", func() {
}

Context("MCE Manifest", func() {
It("Get MCE channel", func() {
var (
version *string
err error
)

version, err = getMCEVersion("4.14")
Expect(err).ToNot(HaveOccurred())
Expect(*version).To(Equal("2.4"))

version, err = getMCEVersion("4.13")
Expect(err).ToNot(HaveOccurred())
Expect(*version).To(Equal("2.3"))

version, err = getMCEVersion("4.12")
Expect(err).ToNot(HaveOccurred())
Expect(*version).To(Equal("2.2"))

version, err = getMCEVersion("4.11")
Expect(err).ToNot(HaveOccurred())
Expect(*version).To(Equal("2.1"))

version, err = getMCEVersion("4.10")
Expect(err).ToNot(HaveOccurred())
Expect(*version).To(Equal("2.0"))

version, err = getMCEVersion("4.12.0-0.nightly-2022-10-25-210451")
Expect(err).ToNot(HaveOccurred())
Expect(*version).To(Equal("2.2"))

version, err = getMCEVersion("4.11.0-ec.3")
Expect(err).ToNot(HaveOccurred())
Expect(*version).To(Equal("2.1"))
})

It("Check YAMLs of MCE", func() {
cluster = getCluster("4.10.17")
openshiftManifests, manifest, err := operator.GenerateManifests(cluster)
Expand Down
4 changes: 2 additions & 2 deletions internal/operators/mce/mce_operator.go
Original file line number Diff line number Diff line change
Expand Up @@ -131,8 +131,8 @@ func (o *operator) ValidateHost(ctx context.Context, cluster *common.Cluster, ho
}

// GenerateManifests generates manifests for the operator.
func (o *operator) GenerateManifests(_ *common.Cluster) (map[string][]byte, []byte, error) {
return Manifests()
func (o *operator) GenerateManifests(cluster *common.Cluster) (map[string][]byte, []byte, error) {
return Manifests(cluster.OpenshiftVersion)
}

// GetProperties provides description of operator properties.
Expand Down
8 changes: 8 additions & 0 deletions internal/operators/mce/ocp_mce_release_matrix.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
[
{"openshift_version": "4.10", "mce_versions": ["2.0"]},
{"openshift_version": "4.11", "mce_versions": ["2.1"]},
{"openshift_version": "4.12", "mce_versions": ["2.2"]},
{"openshift_version": "4.13", "mce_versions": ["2.3"]},
{"openshift_version": "4.14", "mce_versions": ["2.3", "2.4"]},
{"openshift_version": "4.15", "mce_versions": ["2.4"]}
]

0 comments on commit df3e42a

Please sign in to comment.