Skip to content

Commit 3e8ba17

Browse files
authored
feat(k8s): add a default for choosing latest version in cluster create (#1781)
1 parent d243670 commit 3e8ba17

File tree

3 files changed

+37
-1
lines changed

3 files changed

+37
-1
lines changed

cmd/scw/testdata/test-all-usage-k8s-cluster-create-usage.golden

+1-1
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ ARGS:
1717
name=<generated> The name of the cluster
1818
[description] The description of the cluster
1919
[tags.{index}] The tags associated with the cluster
20-
version The Kubernetes version of the cluster
20+
version=latest The Kubernetes version of the cluster
2121
cni=cilium The Container Network Interface (CNI) plugin that will run in the cluster (unknown_cni | cilium | calico | weave | flannel)
2222
[enable-dashboard] The enablement of the Kubernetes Dashboard in the cluster
2323
[ingress] The Ingress Controller that will run in the cluster (unknown_ingress | none | nginx | traefik | traefik2)

internal/namespaces/k8s/v1/custom_cluster.go

+16
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,22 @@ func clusterCreateBuilder(c *core.Command) *core.Command {
8787
c.WaitFunc = waitForClusterFunc(clusterActionCreate)
8888

8989
c.ArgSpecs.GetByName("cni").Default = core.DefaultValueSetter("cilium")
90+
c.ArgSpecs.GetByName("version").Default = core.DefaultValueSetter("latest")
91+
92+
c.Interceptor = func(ctx context.Context, argsI interface{}, runner core.CommandRunner) (interface{}, error) {
93+
args := argsI.(*k8s.CreateClusterRequest)
94+
95+
// Handle default latest version for k8s cluster
96+
if args.Version == "latest" {
97+
latestVersion, err := getLatestK8SVersion(core.ExtractClient(ctx))
98+
if err != nil {
99+
return nil, fmt.Errorf("could not retrieve latest K8S version")
100+
}
101+
args.Version = latestVersion
102+
}
103+
104+
return runner(ctx, args)
105+
}
90106

91107
return c
92108
}

internal/namespaces/k8s/v1/custom_version.go

+20
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,13 @@ package k8s
22

33
import (
44
"context"
5+
"fmt"
56

7+
"github.com/hashicorp/go-version"
68
"github.com/scaleway/scaleway-cli/internal/core"
79
"github.com/scaleway/scaleway-cli/internal/human"
810
k8s "github.com/scaleway/scaleway-sdk-go/api/k8s/v1"
11+
"github.com/scaleway/scaleway-sdk-go/scw"
912
)
1013

1114
func versionListBuilder(c *core.Command) *core.Command {
@@ -61,3 +64,20 @@ func versionMarshalerFunc(i interface{}, opt *human.MarshalOpt) (string, error)
6164

6265
return str, nil
6366
}
67+
68+
func getLatestK8SVersion(scwClient *scw.Client) (string, error) {
69+
api := k8s.NewAPI(scwClient)
70+
versions, err := api.ListVersions(&k8s.ListVersionsRequest{})
71+
if err != nil {
72+
return "", fmt.Errorf("could not get latest K8S version: %s", err)
73+
}
74+
75+
latestVersion, _ := version.NewVersion("0.0.0")
76+
for _, v := range versions.Versions {
77+
newVersion, _ := version.NewVersion(v.Name)
78+
if newVersion.GreaterThan(latestVersion) {
79+
latestVersion = newVersion
80+
}
81+
}
82+
return latestVersion.String(), nil
83+
}

0 commit comments

Comments
 (0)