Skip to content

Commit 1bccfc3

Browse files
authored
feat(kubernetes): Add support for control_plane_ip_filter field (#253)
1 parent fe0e72e commit 1bccfc3

6 files changed

Lines changed: 76 additions & 19 deletions

File tree

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ See updating [Changelog example here](https://keepachangelog.com/en/1.0.0/)
55

66
## [Unreleased]
77

8+
### Added
9+
- kubernetes: `control_plane_ip_filter` field to cluster for configuring and reading IP addresses and ranges allowed to access cluster control-plane
810

911
## [6.5.0]
1012

upcloud/kubernetes.go

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -36,15 +36,16 @@ type (
3636
)
3737

3838
type KubernetesCluster struct {
39-
Name string `json:"name"`
40-
Network string `json:"network"`
41-
NetworkCIDR string `json:"network_cidr"`
42-
NodeGroups []KubernetesNodeGroup `json:"node_groups"`
43-
State KubernetesClusterState `json:"state"`
44-
UUID string `json:"uuid"`
45-
Zone string `json:"zone"`
46-
Plan string `json:"plan"`
47-
PrivateNodeGroups bool `json:"private_node_groups"`
39+
ControlPlaneIPFilter []string `json:"control_plane_ip_filter"`
40+
Name string `json:"name"`
41+
Network string `json:"network"`
42+
NetworkCIDR string `json:"network_cidr"`
43+
NodeGroups []KubernetesNodeGroup `json:"node_groups"`
44+
State KubernetesClusterState `json:"state"`
45+
UUID string `json:"uuid"`
46+
Zone string `json:"zone"`
47+
Plan string `json:"plan"`
48+
PrivateNodeGroups bool `json:"private_node_groups"`
4849
}
4950

5051
type KubernetesNodeGroup struct {

upcloud/kubernetes_test.go

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import (
99
)
1010

1111
const exampleKubernetesClusterJSON string = `{
12+
"control_plane_ip_filter": ["0.0.0.0/0"],
1213
"name": "upcloud-go-sdk-unit-test",
1314
"zone": "de-fra1",
1415
"uuid": "0ddab8f4-97c0-4222-91ba-85a4fff7499b",
@@ -151,9 +152,10 @@ func TestKubernetesNodeGroupDetails(t *testing.T) {
151152

152153
func exampleKubernetesCluster() KubernetesCluster {
153154
return KubernetesCluster{
154-
Name: "upcloud-go-sdk-unit-test",
155-
Network: "03a98be3-7daa-443f-bb25-4bc6854b396c",
156-
NetworkCIDR: "172.16.0.0/24",
155+
ControlPlaneIPFilter: []string{"0.0.0.0/0"},
156+
Name: "upcloud-go-sdk-unit-test",
157+
Network: "03a98be3-7daa-443f-bb25-4bc6854b396c",
158+
NetworkCIDR: "172.16.0.0/24",
157159
NodeGroups: []KubernetesNodeGroup{
158160
exampleKubernetesNodeGroup(true),
159161
exampleKubernetesNodeGroup(false),

upcloud/request/kubernetes.go

Lines changed: 25 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -48,19 +48,37 @@ func (r *GetKubernetesClusterRequest) RequestURL() string {
4848

4949
// CreateKubernetesClusterRequest represents a request to create a Kubernetes cluster
5050
type CreateKubernetesClusterRequest struct {
51-
Name string `json:"name"`
52-
Network string `json:"network"`
53-
NetworkCIDR string `json:"network_cidr"`
54-
NodeGroups []KubernetesNodeGroup `json:"node_groups"`
55-
Zone string `json:"zone"`
56-
Plan string `json:"plan,omitempty"`
57-
PrivateNodeGroups bool `json:"private_node_groups"`
51+
ControlPlaneIPFilter []string `json:"control_plane_ip_filter"`
52+
Name string `json:"name"`
53+
Network string `json:"network"`
54+
NetworkCIDR string `json:"network_cidr"`
55+
NodeGroups []KubernetesNodeGroup `json:"node_groups"`
56+
Zone string `json:"zone"`
57+
Plan string `json:"plan,omitempty"`
58+
PrivateNodeGroups bool `json:"private_node_groups"`
5859
}
5960

6061
func (r *CreateKubernetesClusterRequest) RequestURL() string {
6162
return kubernetesClusterBasePath
6263
}
6364

65+
type ModifyKubernetesCluster struct {
66+
ControlPlaneIPFilter []string `json:"control_plane_ip_filter"`
67+
}
68+
69+
type ModifyKubernetesClusterRequest struct {
70+
ClusterUUID string `json:"-"`
71+
Cluster ModifyKubernetesCluster
72+
}
73+
74+
func (r *ModifyKubernetesClusterRequest) MarshalJSON() ([]byte, error) {
75+
return json.Marshal(r.Cluster)
76+
}
77+
78+
func (r *ModifyKubernetesClusterRequest) RequestURL() string {
79+
return fmt.Sprintf("%s/%s", kubernetesClusterBasePath, r.ClusterUUID)
80+
}
81+
6482
// DeleteKubernetesClusterRequest represents a request to delete a Kubernetes cluster
6583
type DeleteKubernetesClusterRequest struct {
6684
UUID string `json:"-"`

upcloud/request/kubernetes_test.go

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import (
1010
)
1111

1212
const exampleCreateKubernetesClusterRequestJSON string = `{
13+
"control_plane_ip_filter": null,
1314
"network": "00000000-0000-0000-0000-000000000000",
1415
"network_cidr": "172.16.0.1/24",
1516
"plan": "production",
@@ -173,6 +174,32 @@ func TestKubernetes(t *testing.T) {
173174
)
174175
})
175176

177+
t.Run("ModifyKubernetesClusterRequestMarshal", func(t *testing.T) {
178+
t.Parallel()
179+
180+
expected := `{ "control_plane_ip_filter": ["0.0.0.0/0"] }`
181+
182+
uuid := "this-is-the-uuid-you-are-looking-for"
183+
r := ModifyKubernetesClusterRequest{
184+
ClusterUUID: uuid,
185+
Cluster: ModifyKubernetesCluster{
186+
ControlPlaneIPFilter: []string{"0.0.0.0/0"},
187+
},
188+
}
189+
190+
assert.Equal(t, fmt.Sprintf("%s/%s", kubernetesClusterBasePath, uuid), r.RequestURL())
191+
192+
b, err := json.Marshal(&r)
193+
actual := string(b)
194+
195+
assert.NoError(t, err)
196+
assert.JSONEq(
197+
t,
198+
expected,
199+
actual,
200+
)
201+
})
202+
176203
t.Run("DeleteKubernetesClusterRequest", func(t *testing.T) {
177204
t.Parallel()
178205

upcloud/service/kubernetes.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ type Kubernetes interface {
1313
GetKubernetesClusters(ctx context.Context, r *request.GetKubernetesClustersRequest) ([]upcloud.KubernetesCluster, error)
1414
GetKubernetesCluster(ctx context.Context, r *request.GetKubernetesClusterRequest) (*upcloud.KubernetesCluster, error)
1515
CreateKubernetesCluster(ctx context.Context, r *request.CreateKubernetesClusterRequest) (*upcloud.KubernetesCluster, error)
16+
ModifyKubernetesCluster(ctx context.Context, r *request.ModifyKubernetesClusterRequest) (*upcloud.KubernetesCluster, error)
1617
DeleteKubernetesCluster(ctx context.Context, r *request.DeleteKubernetesClusterRequest) error
1718
GetKubernetesKubeconfig(ctx context.Context, r *request.GetKubernetesKubeconfigRequest) (string, error)
1819
GetKubernetesVersions(ctx context.Context, r *request.GetKubernetesVersionsRequest) ([]string, error)
@@ -57,6 +58,12 @@ func (s *Service) CreateKubernetesCluster(ctx context.Context, r *request.Create
5758
return &cluster, s.create(ctx, r, &cluster)
5859
}
5960

61+
// ModifyKubernetesCluster modifies an existing node group.
62+
func (s *Service) ModifyKubernetesCluster(ctx context.Context, r *request.ModifyKubernetesClusterRequest) (*upcloud.KubernetesCluster, error) {
63+
cluster := upcloud.KubernetesCluster{}
64+
return &cluster, s.modify(ctx, r, &cluster)
65+
}
66+
6067
// DeleteKubernetesCluster deletes an existing Kubernetes cluster.
6168
func (s *Service) DeleteKubernetesCluster(ctx context.Context, r *request.DeleteKubernetesClusterRequest) error {
6269
return s.delete(ctx, r)

0 commit comments

Comments
 (0)