From 0f2f12d94dc409a97900e95f2211b21393df7a16 Mon Sep 17 00:00:00 2001 From: Toni Kangas Date: Wed, 24 Jan 2024 16:09:30 +0200 Subject: [PATCH] feat(kubernetes): add cluster labels --- CHANGELOG.md | 6 +++ upcloud/kubernetes.go | 1 + upcloud/request/kubernetes.go | 4 +- upcloud/request/kubernetes_test.go | 63 +++++++++++++++++++++--------- 4 files changed, 54 insertions(+), 20 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6a8bed9f..2a3c22ed 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,12 @@ See updating [Changelog example here](https://keepachangelog.com/en/1.0.0/) ## [Unreleased] +### Added +- Kubernetes: support for cluster labels. + +### Changed +- **Breaking** Kubernetes: the `ControlPlaneIPFilter` of `ModifyKubernetesCluster` is changed from `[]string` to `*[]string`. + ### Removed - **Breaking**, Managed Database: connection related methods in favor of session diff --git a/upcloud/kubernetes.go b/upcloud/kubernetes.go index 3aba66be..9959e24c 100644 --- a/upcloud/kubernetes.go +++ b/upcloud/kubernetes.go @@ -37,6 +37,7 @@ type ( type KubernetesCluster struct { ControlPlaneIPFilter []string `json:"control_plane_ip_filter"` + Labels []Label `json:"labels"` Name string `json:"name"` Network string `json:"network"` NetworkCIDR string `json:"network_cidr"` diff --git a/upcloud/request/kubernetes.go b/upcloud/request/kubernetes.go index 4de0f251..797905d6 100644 --- a/upcloud/request/kubernetes.go +++ b/upcloud/request/kubernetes.go @@ -49,6 +49,7 @@ func (r *GetKubernetesClusterRequest) RequestURL() string { // CreateKubernetesClusterRequest represents a request to create a Kubernetes cluster type CreateKubernetesClusterRequest struct { ControlPlaneIPFilter []string `json:"control_plane_ip_filter"` + Labels []upcloud.Label `json:"labels,omitempty"` Name string `json:"name"` Network string `json:"network"` NetworkCIDR string `json:"network_cidr"` @@ -64,7 +65,8 @@ func (r *CreateKubernetesClusterRequest) RequestURL() string { } type ModifyKubernetesCluster struct { - ControlPlaneIPFilter []string `json:"control_plane_ip_filter"` + ControlPlaneIPFilter *[]string `json:"control_plane_ip_filter,omitempty"` + Labels *[]upcloud.Label `json:"labels,omitempty"` } type ModifyKubernetesClusterRequest struct { diff --git a/upcloud/request/kubernetes_test.go b/upcloud/request/kubernetes_test.go index 0000d70f..d2338e2d 100644 --- a/upcloud/request/kubernetes_test.go +++ b/upcloud/request/kubernetes_test.go @@ -178,27 +178,52 @@ func TestKubernetes(t *testing.T) { t.Run("ModifyKubernetesClusterRequestMarshal", func(t *testing.T) { t.Parallel() - expected := `{ "control_plane_ip_filter": ["0.0.0.0/0"] }` - - uuid := "this-is-the-uuid-you-are-looking-for" - r := ModifyKubernetesClusterRequest{ - ClusterUUID: uuid, - Cluster: ModifyKubernetesCluster{ - ControlPlaneIPFilter: []string{"0.0.0.0/0"}, + tests := []struct { + request ModifyKubernetesClusterRequest + expected string + }{ + { + request: ModifyKubernetesClusterRequest{ + ClusterUUID: "set-filter-omit-labels", + Cluster: ModifyKubernetesCluster{ + ControlPlaneIPFilter: &[]string{"0.0.0.0/0"}, + }, + }, + expected: `{ "control_plane_ip_filter": ["0.0.0.0/0"] }`, + }, + { + request: ModifyKubernetesClusterRequest{ + ClusterUUID: "omit-filter-set-labels", + Cluster: ModifyKubernetesCluster{ + Labels: &[]upcloud.Label{{Key: "tool", Value: "Go SDK"}}, + }, + }, + expected: `{ "labels": [{"key": "tool", "value": "Go SDK"}] }`, + }, + { + request: ModifyKubernetesClusterRequest{ + ClusterUUID: "clear-filter-clear-labels", + Cluster: ModifyKubernetesCluster{ + ControlPlaneIPFilter: &[]string{}, + Labels: &[]upcloud.Label{}, + }, + }, + expected: `{ "control_plane_ip_filter": [], "labels": [] }`, }, } - - assert.Equal(t, fmt.Sprintf("%s/%s", kubernetesClusterBasePath, uuid), r.RequestURL()) - - b, err := json.Marshal(&r) - actual := string(b) - - assert.NoError(t, err) - assert.JSONEq( - t, - expected, - actual, - ) + for _, test := range tests { + assert.Equal(t, fmt.Sprintf("%s/%s", kubernetesClusterBasePath, test.request.ClusterUUID), test.request.RequestURL()) + + b, err := json.Marshal(&test.request) + actual := string(b) + + assert.NoError(t, err) + assert.JSONEq( + t, + test.expected, + actual, + ) + } }) t.Run("DeleteKubernetesClusterRequest", func(t *testing.T) {