Skip to content

Commit 079f58c

Browse files
authored
feat(kubernetes): add version field to KubernetesCluster and its create request (#276)
1 parent 2eb5a09 commit 079f58c

7 files changed

Lines changed: 48 additions & 3 deletions

File tree

CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,11 @@ All notable changes to this project will be documented in this file.
44
See updating [Changelog example here](https://keepachangelog.com/en/1.0.0/)
55

66
## [Unreleased]
7+
### Added
8+
- kubernetes: add `Version` field to `request.CreateKubernetesClusterRequest` and `upcloud.KubernetesCluster`
9+
10+
### Changed
11+
- **Breaking**, kubernetes: update `GetKubernetesVersions` return value from `[]string` to `[]upcloud.KubernetesVersion`. (No major version bump, because this end-point has not been included in the API docs)
712

813
## [6.8.3]
914
### Added

upcloud/kubernetes.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ type KubernetesCluster struct {
4343
NodeGroups []KubernetesNodeGroup `json:"node_groups"`
4444
State KubernetesClusterState `json:"state"`
4545
UUID string `json:"uuid"`
46+
Version string `json:"version"`
4647
Zone string `json:"zone"`
4748
Plan string `json:"plan"`
4849
PrivateNodeGroups bool `json:"private_node_groups"`
@@ -90,3 +91,8 @@ type KubernetesPlan struct {
9091
ServerNumber int `json:"server_number"`
9192
MaxNodes int `json:"max_nodes"`
9293
}
94+
95+
type KubernetesVersion struct {
96+
Id string `json:"id"`
97+
Version string `json:"version"`
98+
}

upcloud/kubernetes_test.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import (
1111
const exampleKubernetesClusterJSON string = `{
1212
"control_plane_ip_filter": ["0.0.0.0/0"],
1313
"name": "upcloud-go-sdk-unit-test",
14+
"version": "1.27",
1415
"zone": "de-fra1",
1516
"uuid": "0ddab8f4-97c0-4222-91ba-85a4fff7499b",
1617
"state": "running",
@@ -162,6 +163,7 @@ func exampleKubernetesCluster() KubernetesCluster {
162163
},
163164
State: KubernetesClusterStateRunning,
164165
UUID: "0ddab8f4-97c0-4222-91ba-85a4fff7499b",
166+
Version: "1.27",
165167
Zone: "de-fra1",
166168
Plan: "development",
167169
PrivateNodeGroups: false,

upcloud/request/kubernetes.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ type CreateKubernetesClusterRequest struct {
5353
Network string `json:"network"`
5454
NetworkCIDR string `json:"network_cidr"`
5555
NodeGroups []KubernetesNodeGroup `json:"node_groups"`
56+
Version string `json:"version"`
5657
Zone string `json:"zone"`
5758
Plan string `json:"plan,omitempty"`
5859
PrivateNodeGroups bool `json:"private_node_groups"`

upcloud/request/kubernetes_test.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,7 @@ const exampleCreateKubernetesClusterRequestJSON string = `{
104104
}
105105
],
106106
"name": "title",
107+
"version": "1.26",
107108
"zone": "zone"
108109
}`
109110

@@ -424,6 +425,7 @@ func exampleCreateKubernetesClusterRequest() CreateKubernetesClusterRequest {
424425
exampleKubernetesNodeGroup("withExplicitUtilityFalse", upcloud.BoolPtr(false)),
425426
exampleKubernetesNodeGroup("withoutExplicitUtility", nil),
426427
},
428+
Version: "1.26",
427429
Zone: "zone",
428430
Plan: "production",
429431
PrivateNodeGroups: false,

upcloud/service/kubernetes.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ type Kubernetes interface {
1919
ModifyKubernetesCluster(ctx context.Context, r *request.ModifyKubernetesClusterRequest) (*upcloud.KubernetesCluster, error)
2020
DeleteKubernetesCluster(ctx context.Context, r *request.DeleteKubernetesClusterRequest) error
2121
GetKubernetesKubeconfig(ctx context.Context, r *request.GetKubernetesKubeconfigRequest) (string, error)
22-
GetKubernetesVersions(ctx context.Context, r *request.GetKubernetesVersionsRequest) ([]string, error)
22+
GetKubernetesVersions(ctx context.Context, r *request.GetKubernetesVersionsRequest) ([]upcloud.KubernetesVersion, error)
2323
WaitForKubernetesClusterState(ctx context.Context, r *request.WaitForKubernetesClusterStateRequest) (*upcloud.KubernetesCluster, error)
2424
GetKubernetesNodeGroups(ctx context.Context, r *request.GetKubernetesNodeGroupsRequest) ([]upcloud.KubernetesNodeGroup, error)
2525
GetKubernetesNodeGroup(ctx context.Context, r *request.GetKubernetesNodeGroupRequest) (*upcloud.KubernetesNodeGroupDetails, error)
@@ -162,8 +162,8 @@ func (s *Service) GetKubernetesKubeconfig(ctx context.Context, r *request.GetKub
162162
}
163163

164164
// GetKubernetesVersions retrieves a list of Kubernetes cluster versions.
165-
func (s *Service) GetKubernetesVersions(ctx context.Context, r *request.GetKubernetesVersionsRequest) ([]string, error) {
166-
versions := make([]string, 0)
165+
func (s *Service) GetKubernetesVersions(ctx context.Context, r *request.GetKubernetesVersionsRequest) ([]upcloud.KubernetesVersion, error) {
166+
versions := make([]upcloud.KubernetesVersion, 0)
167167
return versions, s.get(ctx, r.RequestURL(), &versions)
168168
}
169169

upcloud/service/kubernetes_test.go

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,19 @@ const exampleNetworkResponse = `
151151

152152
const exampleKubeconfigResponse = `{"kubeconfig":"apiVersion: v1\nclusters:\n- cluster:\n certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUM2akNDQWRLZ0F3SUJBZ0lCQURBTkJna3Foa2lHOXcwQkFRc0ZBREFWTVJNd0VRWURWUVFERXdwcmRXSmwKY201bGRHVnpNQjRYRFRJek1ERXdNekUwTVRJeE1sb1hEVE15TVRJek1URTBNVGN4TWxvd0ZURVRNQkVHQTFVRQpBeE1LYTNWaVpYSnVaWFJsY3pDQ0FTSXdEUVlKS29aSWh2Y05BUUVCQlFBRGdnRVBBRENDQVFvQ2dnRUJBS2JJCnZYQkRKM1NSaHdkcG1LaVFjdFpMYkxVUU9sT29MMUVkNEx6aEd2cFBSUGd6VWFMSGFQSjZnTVdXTVliRGswMXMKZVF6VlY3dGZWWTNMQTFxWmhUVDgxNnYyNEdUcVEvSjdzOEs0REUyb2RNL0ZlUE1KRDEraWdKS1BtU2dOQmloawp2c2ZvU3hZanhoS0pXeTJ3OThYby9pUTlHNnhQNUpmUHdPcm9UNWFXTWZlblhjNytIZkRrN2V5SnBsdFF4ZmxqCjEvMHhQUnRNWWlqNnRYVmkzbHRYangrTnN5ZW9ueGdYYitNaU1LbVRKTmJnRU1lcnJXQnlQK3R5bnJUZGNnWXAKckFoOU5kS0I5T2x5KzV4c3Q3WHNJcXhaYkFQS05KQ0s1UUFTcTVJWmhENTVaUjlIaTFHUzF6ZTNsS2lKMTMyTgpLQ05YSUozajIxOGxsT2pCek84Q0F3RUFBYU5GTUVNd0RnWURWUjBQQVFIL0JBUURBZ0trTUJJR0ExVWRFd0VCCi93UUlNQVlCQWY4Q0FRQXdIUVlEVlIwT0JCWUVGR2tQL3dJampEVnVyVkJOeWNKazV6Y2FCems3TUEwR0NTcUcKU0liM0RRRUJDd1VBQTRJQkFRQXZCVUZnclErVEkyMnpuZlJZRG9WdW4xT2cydTAwMUVNbk1KN3NUR204UnBNdQpsZCtjNkZzY21SMHZ0K2pTS21oa3NKdXZ3U1BwZlV3OEJHNmlMem9KczlKSzV3a2psb0taYllYL2gyT2lheVdWCnM0TWx1TlpDU0wzR2pkaldxVnJNZ1J6RlUxQXJwNXNxR0Z2VWVERnpkRFVrR01rU3FYbWxyTGlCS29ZN3hmOU8KcDMvNWoxT0E0TzRtTnVvL2ZMVU85VDcyalBHTW1CZFg2TFU3VXcwMFdlejdDdC9CM2UwSDMvT1puSnpoQm51TQpQR0kyckRSSTJ0c2JLN1RseHEzTUFRSFY0Nk1LWmFpc2NlRHYralFEemcxenViRFFFcXhrNldncXc5aGR2YXlxCkJLbUFzeHQ4U3FPcEpZWFZKeXVHQjJvU2VKeW5lam96dWNvVUpRM0oKLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=\n server: https://lb-0abebeafda2c4602a5e9a07f9108fb83-1.upcloudlb.com:6443\n name: go-sdk-test-ctx\ncontexts:\n- context:\n cluster: go-sdk-test-ctx\n user: go-sdk-test-ctx-admin\n name: go-sdk-test-ctx-admin@go-sdk-test-ctx\ncurrent-context: go-sdk-test-ctx-admin@go-sdk-test-ctx\nkind: Config\npreferences: {}\nusers:\n- name: go-sdk-test-ctx-admin\n user:\n client-certificate-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURFekNDQWZ1Z0F3SUJBZ0lJWUhNM2wrYk9vdGN3RFFZSktvWklodmNOQVFFTEJRQXdGVEVUTUJFR0ExVUUKQXhNS2EzVmlaWEp1WlhSbGN6QWVGdzB5TXpBeE1ETXhOREV5TVRKYUZ3MHlOREF4TURNeE5ERTNNVE5hTURReApGekFWQmdOVkJBb1REbk41YzNSbGJUcHRZWE4wWlhKek1Sa3dGd1lEVlFRREV4QnJkV0psY201bGRHVnpMV0ZrCmJXbHVNSUlCSWpBTkJna3Foa2lHOXcwQkFRRUZBQU9DQVE4QU1JSUJDZ0tDQVFFQW4xbVpZYkZtY3dPMWsrcEUKdDgwVjBTL255eUY3Qmt6b3FlRXhEQXZZWTVyU1ZlbDNjQkNlV3g0b2VvM3I2YmZJQzhuYnVPWjNuR0cwQ1IzNgpiS3BXYTRzdkcyTFRCMlQ1bVk2QjBqY1lhcWZRa1dQNnN3Um1SLzJlYjBYenFST3J5Ly9rOEhhNTNGNEZzMmt2ClBzanhKK1ZpQkd6TWFKVFE2WVgxYTdYa3grQXlkTHIwTmtVcWk2RWIxelhUOFcrZ1pjek9uNXNmZytkMXdTaEgKUk9CSU94L0k4YXY5dUQ4YlEzclF2TVloR0wwSVRZcmxaUmhkUG12d2JzY2p6cUJlN2FmWnF5ZmZBRGxZOXJ3eQpCVGlsRk1oTEJUL0JVb3ZtZGZZUkpSOW8xRzQ3S2dFRVJSVS9DeUd6WHBzS2k3ZDBtaW4vU1NYVVJqMU44TlpuCkFzWS9jd0lEQVFBQm8wZ3dSakFPQmdOVkhROEJBZjhFQkFNQ0JhQXdFd1lEVlIwbEJBd3dDZ1lJS3dZQkJRVUgKQXdJd0h3WURWUjBqQkJnd0ZvQVVhUS8vQWlPTU5XNnRVRTNKd21Ubk54b0hPVHN3RFFZSktvWklodmNOQVFFTApCUUFEZ2dFQkFLSjE1VTIzbWtrNTlsQ2Q3V292aUVMSEorNGFtZnVHU2JyUDRCVjBYSWZGZ0lLWkk4RzRTdU8zCkZMQWZNMnphV1FPZ0ZCanpNaUZXbExFZFVTU0pKUm5ZNVdONmlBRmtydWpEbHFZakxkTE16V1Q4ZytSTnJ6WDAKSWlYbnoyaW5lVDRNZXB0VmsrVm4yeFpWd2lYbmJOR3BCVUM5QU10REU5WlllZnFNOU9qZG4valk4TzJUTDJaUApLTTBqamJHWmZYREdpNEE0aHVlcGRHRlBVZjJmWU9zQk1ZTEo1VUVZbWpJUnZGYi94S1NNdUNxRHRFVzI2VmJiCnhQc1gxcEhOUXhDVkNIK1ZjeUtJejNPK0NrNFo1ZmY0QWhqNU4zc0xkOUZ2RnpmVG5JWVk3WGZvUlZUdFVKb3AKL09NQ1RKVDZGK3N5dmg5ZUxROE5lZ0VDc1c4YkRYST0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=\n client-key-data: LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlFb3dJQkFBS0NBUUVBbjFtWlliRm1jd08xaytwRXQ4MFYwUy9ueXlGN0Jrem9xZUV4REF2WVk1clNWZWwzCmNCQ2VXeDRvZW8zcjZiZklDOG5idU9aM25HRzBDUjM2YktwV2E0c3ZHMkxUQjJUNW1ZNkIwamNZYXFmUWtXUDYKc3dSbVIvMmViMFh6cVJPcnkvL2s4SGE1M0Y0RnMya3ZQc2p4SitWaUJHek1hSlRRNllYMWE3WGt4K0F5ZExyMApOa1VxaTZFYjF6WFQ4VytnWmN6T241c2ZnK2Qxd1NoSFJPQklPeC9JOGF2OXVEOGJRM3JRdk1ZaEdMMElUWXJsClpSaGRQbXZ3YnNjanpxQmU3YWZacXlmZkFEbFk5cnd5QlRpbEZNaExCVC9CVW92bWRmWVJKUjlvMUc0N0tnRUUKUlJVL0N5R3pYcHNLaTdkMG1pbi9TU1hVUmoxTjhOWm5Bc1kvY3dJREFRQUJBb0lCQUh6Rzlsb1BSYi9PS2NNWApjSlBVWGI4ZUdnMXZ2QnZrNFZNVTZRa2J4V2ZKZGVhY0dGQ0NVdDNhc2F1MXNnT2pTMXdmeHBQMHM3aWFzUlZxCmlndkpIajY4RURrTG0xOXc3Qm9ZQXdRTzdHbW4ycVBlZkJMdDRRR0NVU3VreFBXaVY2WTRUSmNYQU5iVU1QYVoKNk1yckloc3hmUjBsN0xIL3hjNzJmSVRKTzhwZVFjR2Rpa2Z2UENQVk9sWG1HNFVyVEd5WU9JS0N1TWZGYkxDUgpZR09HT1VDaHlEY1JYRjBRdTlrWU1TNlFTV1RiazhpZmhEdDNxZndnZ0pTU3FYYkNqSFZETE04cXM4ODhlbnFZCmJRclBwUEJMRXdhY0dOaEFTdHJ0Mm1UVFhZUE01TTJLQ0d2dkhJblpseUxYeEF5N3graVNLNWV3amY5TEpFUFMKalJhZFhQRUNnWUVBMDA5bGQyZnJjMXBINHRXcWdlRkxRTG00Si8vcG91VmhVaHdwUm4vbjlNaFpIUUlXbG02VQo4Ykxpa0RXckxMaGE2MHBkSnF6Z0o4NE1BbjdpVUZ2OVR3L1M4M0VvOHhLU2oxN05pMDZFNGNlVDZ4NkpNR2U1CnB1d2lCcTFabHBDVVc1bk1zNkxqUzZzb2pvWGI2V3ZYb2JRek52N1c0QkRVZGJyd2U1bHowbjhDZ1lFQXdRMEQKZFFSQ05ac29aNE5oL1J6SjhiVEhBNmZlU1g2ZDBvV0NJdEVDVytVRWdVQUFHYlJWVitFQ1d5d3RjVFA5bnlsVgprYVlJTVRDVzIvdXJwY2FrcnFHdW5nQlV4TlFvcU5xRHBrNzFOcHNzd1cyVG82bU9WdFFmbnI0a1NydElwUjJuCmVFTXRLMW5nYW41MXpjM1ZrSE1lUjlFcXVCRm9KZnlKUjAzRjhRMENnWUFzelMyZkptcFdON0w4RmY4anNHZXIKSG5VOERkYzBVVnZUOCtLUWJ2ZjMveTVkcHg2dzRGczE3NDUzc3RsTER2OC8yYkZzVE1UdHk1TGlTSktsSlF2TQo0bmNBWkdLaFByUFNML0IyYzd4YXZselBRZGNtYXllQ2k1Z2ZRRXU1VDRnVTc4UGw1a2c0dDk1T2NYVVJ4V3FmCmZ6eElrYmx2SWtKWmY3d1RDSkwwOHdLQmdCN2piQ2d1OUVFTGdGMS9vaEFUcVNRcFhxWnhGNW4remxXKzB1R3IKTzR0a2kySDYwWWxMVjFSbVJqQThVMUVIbG83KzJCZ2p6cS9BTElNcU0zNmsxL2l4R2ZWaDdDNUtHKzlZZHpRRwo4aWs0anVLc0c3RldFZFpHdm9CeHYvRE5Jb1I0eUREdjNxeFBCeDlDK0twalFzYUlCTkpNMzE3d09nL0o1bFVvClZvR0pBb0dCQUtUZGt0SjU4bHQ3WXplTGViZU9qTHdMOTVzM1RlckppcmxJdTdHTjllVlR1VWZtZ3MyTWVXdzcKMEpsVy9pU2JDR1dmSko1N3ZZVHdHbi84N0dBNXhaRWxOUG8xQ3NoSVF6YXhDQzZpMS9yZUswTlJKYnZoUTQwaQp1eG9xZk91aVdjRkNXbTg5ektpeE5KbkRxd082UE02dzgyczR1RFRXQXdqTG05eDdvblQxCi0tLS0tRU5EIFJTQSBQUklWQVRFIEtFWS0tLS0tCg==\n"}`
153153

154+
const exampleVersionsResponse = `
155+
[
156+
{
157+
"id": "1.27",
158+
"version": "v1.27.4"
159+
},
160+
{
161+
"id": "1.26",
162+
"version": "v1.26.3"
163+
}
164+
]
165+
`
166+
154167
func TestGetKubernetesClusters(t *testing.T) {
155168
t.Parallel()
156169

@@ -604,3 +617,19 @@ func TestGetKubernetesKubeconfig(t *testing.T) {
604617
assert.NoError(t, err)
605618
assert.NotEmpty(t, res)
606619
}
620+
621+
func TestGetKubernetesVersions(t *testing.T) {
622+
t.Parallel()
623+
624+
srv, svc := setupTestServerAndService(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
625+
assert.Equal(t, http.MethodGet, r.Method)
626+
assert.Equal(t, fmt.Sprintf("/%s/kubernetes/versions", client.APIVersion), r.URL.Path)
627+
_, _ = fmt.Fprint(w, exampleVersionsResponse)
628+
}))
629+
defer srv.Close()
630+
631+
res, err := svc.GetKubernetesVersions(context.Background(), &request.GetKubernetesVersionsRequest{})
632+
assert.NoError(t, err)
633+
assert.Len(t, res, 2)
634+
assert.Equal(t, res[0].Version, "v1.27.4")
635+
}

0 commit comments

Comments
 (0)