Skip to content

Commit

Permalink
Merge pull request #1 from calavera/embed_components
Browse files Browse the repository at this point in the history
Extract component versions to a static file
  • Loading branch information
rossedman authored and GitHub Enterprise committed Aug 11, 2021
2 parents 302224c + 67cef91 commit 880da81
Show file tree
Hide file tree
Showing 3 changed files with 122 additions and 20 deletions.
46 changes: 26 additions & 20 deletions cmd/check_versions.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@ package cmd

import (
"context"
"encoding/json"
"fmt"
"os"
"strings"

Expand All @@ -12,6 +14,8 @@ import (
"k8s.io/cli-runtime/pkg/printers"
"k8s.io/client-go/kubernetes"

_ "embed"

"github.com/blang/semver/v4"
)

Expand Down Expand Up @@ -49,22 +53,8 @@ type Services []Service
// that can be used for reference
type KubernetesVersions map[string]Services

// This is the source of truth for what versions
// belong on which servers
var (
versions = KubernetesVersions{
"v1.19": Services{
{Name: "cert-manager", Version: "1.4.0"},
{Name: "coredns", Version: "1.8.4"},
{Name: "kube-proxy", Version: "1.19.6-eksbuild.2"},
{Name: "kube-state-metrics", Version: "2.1.0"},
{Name: "metrics-server", Version: "0.5.0"},
{Name: "node-problem-detector", Version: "0.8.9"},
{Name: "nvidia-device-plugin", Version: "0.9.0"},
{Name: "cluster-autoscaler", Version: "1.19"},
},
}
)
//go:embed config/components.json
var componentsConfig []byte

var getVersionsCmd = &cobra.Command{
Use: "versions",
Expand All @@ -88,11 +78,19 @@ var getVersionsCmd = &cobra.Command{
return err
}

versions, err := loadKubernetesVersions()
if err != nil {
return err
}

// loop through services
for _, s := range svcs {
// walk through required versions and
// find the matching service
req := getRequiredVersion(kubeVersion, s.Name)
req, err := getRequiredVersion(versions, kubeVersion, s.Name)
if err != nil {
return err
}
if req == "unknown" {
continue
}
Expand Down Expand Up @@ -128,13 +126,13 @@ func isOutOfDate(required, current string) (bool, error) {
return r.Compare(c) > 0, nil
}

func getRequiredVersion(kubernetesVersion string, serviceName string) string {
func getRequiredVersion(versions KubernetesVersions, kubernetesVersion string, serviceName string) (string, error) {
for _, e := range versions[kubernetesVersion] {
if e.Name == serviceName {
return e.Version
return e.Version, nil
}
}
return "unknown"
return "unknown", nil
}

func getDeployments(clientset *kubernetes.Clientset, namespace string) (Services, error) {
Expand Down Expand Up @@ -180,3 +178,11 @@ func getAllServices(clientset *kubernetes.Clientset, namespaces []string) (Servi
}
return svcs, nil
}

func loadKubernetesVersions() (KubernetesVersions, error) {
var versions KubernetesVersions
if err := json.Unmarshal(componentsConfig, &versions); err != nil {
return nil, fmt.Errorf("unable to read components configuration: %w", err)
}
return versions, nil
}
60 changes: 60 additions & 0 deletions cmd/check_versions_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
package cmd

import "testing"

func TestGetRequiredVersions(t *testing.T) {
cases := Services{
{
Name: "cert-manager",
Version: "1.4.0",
},
{
Name: "coredns",
Version: "1.8.4",
},
{
Name: "kube-proxy",
Version: "1.19.6-eksbuild.2",
},
{
Name: "kube-state-metrics",
Version: "2.1.0",
},
{
Name: "metrics-server",
Version: "0.5.0",
},
{
Name: "node-problem-detector",
Version: "0.8.9",
},
{
Name: "nvidia-device-plugin",
Version: "0.9.0",
},
{
Name: "cluster-autoscaler",
Version: "1.19",
},
}

versions, err := loadKubernetesVersions()
if err != nil {
t.Fatal(err)
}

for _, test := range cases {
actual, err := getRequiredVersion(versions, "v1.19", test.Name)
if err != nil {
t.Fatal(err)
}
assertVersion(t, test.Name, test.Version, actual)
}
}

func assertVersion(t *testing.T, component, expected, actual string) {
t.Helper()
if expected != actual {
t.Fatalf("expected %s version %s, got %s", component, expected, actual)
}
}
36 changes: 36 additions & 0 deletions cmd/config/components.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
{
"v1.19": [
{
"Name": "cert-manager",
"Version": "1.4.0"
},
{
"Name": "coredns",
"Version": "1.8.4"
},
{
"Name": "kube-proxy",
"Version": "1.19.6-eksbuild.2"
},
{
"Name": "kube-state-metrics",
"Version": "2.1.0"
},
{
"Name": "metrics-server",
"Version": "0.5.0"
},
{
"Name": "node-problem-detector",
"Version": "0.8.9"
},
{
"Name": "nvidia-device-plugin",
"Version": "0.9.0"
},
{
"Name": "cluster-autoscaler",
"Version": "1.19"
}
]
}

0 comments on commit 880da81

Please sign in to comment.