diff --git a/data/koor-operator-v0.3.0.json b/data/koor-operator-v0.3.json similarity index 78% rename from data/koor-operator-v0.3.0.json rename to data/koor-operator-v0.3.json index 77b8fa6..71e8824 100644 --- a/data/koor-operator-v0.3.0.json +++ b/data/koor-operator-v0.3.json @@ -1,7 +1,9 @@ { "koor_operator": { - "0.3.0": { - "version": "0.3.0", + "0.3.4": { + "version": "0.3.4", + "image_uri": "koorinc/koor-operator:v0.3.4", + "image_hash": "76f242cddaccc3f8b88860a03735518079bcc098bd03d447ab0f04dc9123e95a", "helm_repository": "https://koor-tech.github.io/koor-operator", "helm_chart":"koor-operator" } diff --git a/server/v1/data.go b/server/v1/data.go index 0c154a2..52042a7 100644 --- a/server/v1/data.go +++ b/server/v1/data.go @@ -19,6 +19,7 @@ package serverv1 import ( "fmt" + semver "github.com/Masterminds/semver/v3" "google.golang.org/protobuf/encoding/protojson" apiv1 "github.com/koor-tech/version-service/api/v1" @@ -26,7 +27,12 @@ import ( ) func getVersionMatrix(koorOperatorVersion string) (*apiv1.VersionMatrix, error) { - filename := fmt.Sprintf("koor-operator-v%s.json", koorOperatorVersion) + sv, err := semver.NewVersion(koorOperatorVersion) + if err != nil { + return nil, fmt.Errorf("invalid koor operator version: %s", koorOperatorVersion) + } + + filename := fmt.Sprintf("koor-operator-v%d.%d.json", sv.Major(), sv.Minor()) contents, err := data.Data.ReadFile(filename) if err != nil { return nil, fmt.Errorf("data file not found: %s", filename) diff --git a/server/v1/server.go b/server/v1/server.go index ee293ee..7da9ee4 100644 --- a/server/v1/server.go +++ b/server/v1/server.go @@ -21,7 +21,6 @@ import ( "fmt" "log" "sort" - "strings" semver "github.com/Masterminds/semver/v3" "github.com/bufbuild/connect-go" @@ -29,6 +28,12 @@ import ( apiv1 "github.com/koor-tech/version-service/api/v1" ) +const ( + KoorOperatorModule = "Koor Operator" + KsdModule = "KSD" + CephModule = "Ceph" +) + type VersionServer struct{} func (s *VersionServer) Operator( @@ -48,22 +53,21 @@ func (s *VersionServer) Operator( } func getLatestVersions(opreq *apiv1.OperatorRequest) (*apiv1.DetailedProductVersions, error) { - kov := strings.TrimPrefix(opreq.Versions.KoorOperator, "v") - vm, err := getVersionMatrix(kov) + vm, err := getVersionMatrix(opreq.Versions.KoorOperator) if err != nil { return nil, connect.NewError(connect.CodeNotFound, err) } - latestKoorOperator, err := findLatestVersion(vm.KoorOperator, opreq.Versions.KoorOperator) + latestKoorOperator, err := findLatestVersion(KoorOperatorModule, vm.KoorOperator, opreq.Versions.KoorOperator) if err != nil { return nil, err } - latestKsd, err := findLatestVersion(vm.Ksd, opreq.Versions.Ksd) + latestKsd, err := findLatestVersion(KsdModule, vm.Ksd, opreq.Versions.Ksd) if err != nil { return nil, err } - latestCeph, err := findLatestVersion(vm.Ceph, opreq.Versions.Ceph) + latestCeph, err := findLatestVersion(CephModule, vm.Ceph, opreq.Versions.Ceph) if err != nil { return nil, err } @@ -77,21 +81,21 @@ func getLatestVersions(opreq *apiv1.OperatorRequest) (*apiv1.DetailedProductVers return latest, nil } -func findLatestVersion(versions map[string]*apiv1.DetailedVersion, current string) (*apiv1.DetailedVersion, error) { +func findLatestVersion(module string, versions map[string]*apiv1.DetailedVersion, current string) (*apiv1.DetailedVersion, error) { if len(versions) == 0 { - return nil, connect.NewError(connect.CodeNotFound, fmt.Errorf("could not find latest versions, current: %s", current)) + return nil, connect.NewError(connect.CodeNotFound, fmt.Errorf("could not find latest versions for %s, current: %s", module, current)) } currentSemver, err := semver.NewVersion(current) if err != nil { - return nil, connect.NewError(connect.CodeInvalidArgument, fmt.Errorf("invalid version: %s", current)) + return nil, connect.NewError(connect.CodeInvalidArgument, fmt.Errorf("invalid version for %s: %s", module, current)) } semvers := make([]*semver.Version, 0, len(versions)) for k := range versions { sv, err := semver.NewVersion(k) if err != nil { - return nil, connect.NewError(connect.CodeInternal, fmt.Errorf("could not parse version: %s", k)) + return nil, connect.NewError(connect.CodeInternal, fmt.Errorf("could not parse version for %s: %s", module, k)) } semvers = append(semvers, sv) } @@ -100,7 +104,7 @@ func findLatestVersion(versions map[string]*apiv1.DetailedVersion, current strin if currentSemver.GreaterThan(semvers[0]) { return nil, connect.NewError(connect.CodeNotFound, - fmt.Errorf("current version (%s) is bigger than latest known version (%s)", current, semvers[0])) + fmt.Errorf("current version for %s (%s) is bigger than latest known version (%s)", module, current, semvers[0])) } latest := semvers[0].String()