Skip to content

Commit

Permalink
feat(kubernetes): add version field to KubernetesCluster and its cr…
Browse files Browse the repository at this point in the history
…eate request (#276)
  • Loading branch information
kangasta authored Nov 3, 2023
1 parent 2eb5a09 commit 079f58c
Show file tree
Hide file tree
Showing 7 changed files with 48 additions and 3 deletions.
5 changes: 5 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,11 @@ All notable changes to this project will be documented in this file.
See updating [Changelog example here](https://keepachangelog.com/en/1.0.0/)

## [Unreleased]
### Added
- kubernetes: add `Version` field to `request.CreateKubernetesClusterRequest` and `upcloud.KubernetesCluster`

### Changed
- **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)

## [6.8.3]
### Added
Expand Down
6 changes: 6 additions & 0 deletions upcloud/kubernetes.go
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ type KubernetesCluster struct {
NodeGroups []KubernetesNodeGroup `json:"node_groups"`
State KubernetesClusterState `json:"state"`
UUID string `json:"uuid"`
Version string `json:"version"`
Zone string `json:"zone"`
Plan string `json:"plan"`
PrivateNodeGroups bool `json:"private_node_groups"`
Expand Down Expand Up @@ -90,3 +91,8 @@ type KubernetesPlan struct {
ServerNumber int `json:"server_number"`
MaxNodes int `json:"max_nodes"`
}

type KubernetesVersion struct {
Id string `json:"id"`
Version string `json:"version"`
}
2 changes: 2 additions & 0 deletions upcloud/kubernetes_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import (
const exampleKubernetesClusterJSON string = `{
"control_plane_ip_filter": ["0.0.0.0/0"],
"name": "upcloud-go-sdk-unit-test",
"version": "1.27",
"zone": "de-fra1",
"uuid": "0ddab8f4-97c0-4222-91ba-85a4fff7499b",
"state": "running",
Expand Down Expand Up @@ -162,6 +163,7 @@ func exampleKubernetesCluster() KubernetesCluster {
},
State: KubernetesClusterStateRunning,
UUID: "0ddab8f4-97c0-4222-91ba-85a4fff7499b",
Version: "1.27",
Zone: "de-fra1",
Plan: "development",
PrivateNodeGroups: false,
Expand Down
1 change: 1 addition & 0 deletions upcloud/request/kubernetes.go
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@ type CreateKubernetesClusterRequest struct {
Network string `json:"network"`
NetworkCIDR string `json:"network_cidr"`
NodeGroups []KubernetesNodeGroup `json:"node_groups"`
Version string `json:"version"`
Zone string `json:"zone"`
Plan string `json:"plan,omitempty"`
PrivateNodeGroups bool `json:"private_node_groups"`
Expand Down
2 changes: 2 additions & 0 deletions upcloud/request/kubernetes_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,7 @@ const exampleCreateKubernetesClusterRequestJSON string = `{
}
],
"name": "title",
"version": "1.26",
"zone": "zone"
}`

Expand Down Expand Up @@ -424,6 +425,7 @@ func exampleCreateKubernetesClusterRequest() CreateKubernetesClusterRequest {
exampleKubernetesNodeGroup("withExplicitUtilityFalse", upcloud.BoolPtr(false)),
exampleKubernetesNodeGroup("withoutExplicitUtility", nil),
},
Version: "1.26",
Zone: "zone",
Plan: "production",
PrivateNodeGroups: false,
Expand Down
6 changes: 3 additions & 3 deletions upcloud/service/kubernetes.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ type Kubernetes interface {
ModifyKubernetesCluster(ctx context.Context, r *request.ModifyKubernetesClusterRequest) (*upcloud.KubernetesCluster, error)
DeleteKubernetesCluster(ctx context.Context, r *request.DeleteKubernetesClusterRequest) error
GetKubernetesKubeconfig(ctx context.Context, r *request.GetKubernetesKubeconfigRequest) (string, error)
GetKubernetesVersions(ctx context.Context, r *request.GetKubernetesVersionsRequest) ([]string, error)
GetKubernetesVersions(ctx context.Context, r *request.GetKubernetesVersionsRequest) ([]upcloud.KubernetesVersion, error)
WaitForKubernetesClusterState(ctx context.Context, r *request.WaitForKubernetesClusterStateRequest) (*upcloud.KubernetesCluster, error)
GetKubernetesNodeGroups(ctx context.Context, r *request.GetKubernetesNodeGroupsRequest) ([]upcloud.KubernetesNodeGroup, error)
GetKubernetesNodeGroup(ctx context.Context, r *request.GetKubernetesNodeGroupRequest) (*upcloud.KubernetesNodeGroupDetails, error)
Expand Down Expand Up @@ -162,8 +162,8 @@ func (s *Service) GetKubernetesKubeconfig(ctx context.Context, r *request.GetKub
}

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

Expand Down
29 changes: 29 additions & 0 deletions upcloud/service/kubernetes_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -151,6 +151,19 @@ const exampleNetworkResponse = `

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"}`

const exampleVersionsResponse = `
[
{
"id": "1.27",
"version": "v1.27.4"
},
{
"id": "1.26",
"version": "v1.26.3"
}
]
`

func TestGetKubernetesClusters(t *testing.T) {
t.Parallel()

Expand Down Expand Up @@ -604,3 +617,19 @@ func TestGetKubernetesKubeconfig(t *testing.T) {
assert.NoError(t, err)
assert.NotEmpty(t, res)
}

func TestGetKubernetesVersions(t *testing.T) {
t.Parallel()

srv, svc := setupTestServerAndService(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
assert.Equal(t, http.MethodGet, r.Method)
assert.Equal(t, fmt.Sprintf("/%s/kubernetes/versions", client.APIVersion), r.URL.Path)
_, _ = fmt.Fprint(w, exampleVersionsResponse)
}))
defer srv.Close()

res, err := svc.GetKubernetesVersions(context.Background(), &request.GetKubernetesVersionsRequest{})
assert.NoError(t, err)
assert.Len(t, res, 2)
assert.Equal(t, res[0].Version, "v1.27.4")
}

0 comments on commit 079f58c

Please sign in to comment.