Skip to content

Commit e751fad

Browse files
authored
chore: bump k8s dep to 1.19.0 and go to 1.15.0 (#22)
Signed-off-by: Patrik Cyvoct <[email protected]>
1 parent e7ec19f commit e751fad

File tree

11 files changed

+911
-266
lines changed

11 files changed

+911
-266
lines changed

.github/workflows/pull-request.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ jobs:
77
unit-test:
88
strategy:
99
matrix:
10-
go-version: [1.13.x, 1.14.x]
10+
go-version: [1.15.x]
1111
platform: [ubuntu-latest]
1212
runs-on: ${{ matrix.platform }}
1313
steps:
@@ -24,7 +24,7 @@ jobs:
2424
build-test:
2525
strategy:
2626
matrix:
27-
go-version: [1.13.x, 1.14.x]
27+
go-version: [1.15.x]
2828
platform: [ubuntu-latest]
2929
arch: [386, amd64, arm, arm64]
3030
runs-on: ${{ matrix.platform }}

Dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
FROM golang:1.13.8-alpine as builder
1+
FROM golang:1.15.0-alpine as builder
22

33
RUN apk update && apk add --no-cache git ca-certificates && update-ca-certificates
44

docs/development-setup.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ The CCM has a simple build system based on make.
44

55
## Requirements
66

7-
- Go (1.13+)
7+
- Go (1.15+)
88
- make
99
- docker
1010

go.mod

Lines changed: 31 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,41 +1,41 @@
11
module github.com/scaleway/scaleway-cloud-controller-manager
22

3-
go 1.13
3+
go 1.15
44

55
require (
6-
github.com/scaleway/scaleway-sdk-go v1.0.0-beta.6.0.20200814130755-648e470a1d42
7-
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7
8-
k8s.io/api v0.18.8
9-
k8s.io/apimachinery v0.18.8
10-
k8s.io/client-go v0.18.8
11-
k8s.io/cloud-provider v0.18.8
12-
k8s.io/component-base v0.18.8
6+
github.com/scaleway/scaleway-sdk-go v1.0.0-beta.6.0.20200820094136-e5e36003a999
7+
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543
8+
k8s.io/api v0.19.0
9+
k8s.io/apimachinery v0.19.0
10+
k8s.io/client-go v0.19.0
11+
k8s.io/cloud-provider v0.19.0
12+
k8s.io/component-base v0.19.0
1313
k8s.io/klog v1.0.0
14-
k8s.io/kubernetes v1.18.8
14+
k8s.io/kubernetes v1.19.0
1515
)
1616

1717
replace (
18-
k8s.io/api => k8s.io/api v0.18.8
19-
k8s.io/apiextensions-apiserver => k8s.io/apiextensions-apiserver v0.18.8
20-
k8s.io/apimachinery => k8s.io/apimachinery v0.18.8
21-
k8s.io/apiserver => k8s.io/apiserver v0.18.8
22-
k8s.io/cli-runtime => k8s.io/cli-runtime v0.18.8
23-
k8s.io/client-go => k8s.io/client-go v0.18.8
24-
k8s.io/cloud-provider => k8s.io/cloud-provider v0.18.8
25-
k8s.io/cluster-bootstrap => k8s.io/cluster-bootstrap v0.18.8
26-
k8s.io/code-generator => k8s.io/code-generator v0.18.8
27-
k8s.io/component-base => k8s.io/component-base v0.18.8
28-
k8s.io/cri-api => k8s.io/cri-api v0.18.8
29-
k8s.io/csi-translation-lib => k8s.io/csi-translation-lib v0.18.8
18+
k8s.io/api => k8s.io/api v0.19.0
19+
k8s.io/apiextensions-apiserver => k8s.io/apiextensions-apiserver v0.19.0
20+
k8s.io/apimachinery => k8s.io/apimachinery v0.19.0
21+
k8s.io/apiserver => k8s.io/apiserver v0.19.0
22+
k8s.io/cli-runtime => k8s.io/cli-runtime v0.19.0
23+
k8s.io/client-go => k8s.io/client-go v0.19.0
24+
k8s.io/cloud-provider => k8s.io/cloud-provider v0.19.0
25+
k8s.io/cluster-bootstrap => k8s.io/cluster-bootstrap v0.19.0
26+
k8s.io/code-generator => k8s.io/code-generator v0.19.0
27+
k8s.io/component-base => k8s.io/component-base v0.19.0
28+
k8s.io/cri-api => k8s.io/cri-api v0.19.0
29+
k8s.io/csi-translation-lib => k8s.io/csi-translation-lib v0.19.0
3030
k8s.io/klog => k8s.io/klog v1.0.0
31-
k8s.io/kube-aggregator => k8s.io/kube-aggregator v0.18.8
32-
k8s.io/kube-controller-manager => k8s.io/kube-controller-manager v0.18.8
33-
k8s.io/kube-proxy => k8s.io/kube-proxy v0.18.8
34-
k8s.io/kube-scheduler => k8s.io/kube-scheduler v0.18.8
35-
k8s.io/kubectl => k8s.io/kubectl v0.18.8
36-
k8s.io/kubelet => k8s.io/kubelet v0.18.8
37-
k8s.io/kubernetes => k8s.io/kubernetes v1.18.8
38-
k8s.io/legacy-cloud-providers => k8s.io/legacy-cloud-providers v0.18.8
39-
k8s.io/metrics => k8s.io/metrics v0.18.8
40-
k8s.io/sample-apiserver => k8s.io/sample-apiserver v0.18.8
31+
k8s.io/kube-aggregator => k8s.io/kube-aggregator v0.19.0
32+
k8s.io/kube-controller-manager => k8s.io/kube-controller-manager v0.19.0
33+
k8s.io/kube-proxy => k8s.io/kube-proxy v0.19.0
34+
k8s.io/kube-scheduler => k8s.io/kube-scheduler v0.19.0
35+
k8s.io/kubectl => k8s.io/kubectl v0.19.0
36+
k8s.io/kubelet => k8s.io/kubelet v0.19.0
37+
k8s.io/kubernetes => k8s.io/kubernetes v1.19.0
38+
k8s.io/legacy-cloud-providers => k8s.io/legacy-cloud-providers v0.19.0
39+
k8s.io/metrics => k8s.io/metrics v0.19.0
40+
k8s.io/sample-apiserver => k8s.io/sample-apiserver v0.19.0
4141
)

go.sum

Lines changed: 319 additions & 231 deletions
Large diffs are not rendered by default.

scaleway/baremetal.go

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -268,3 +268,79 @@ func (b *baremetal) getServerByProviderID(providerID string) (*scwbaremetal.Serv
268268
}
269269
return server, nil
270270
}
271+
272+
// InstanceV2
273+
274+
// InstanceExists returns true if the instance for the given node exists according to the cloud provider.
275+
// Use the node.name or node.spec.providerID field to find the node in the cloud provider.
276+
func (b *baremetal) InstanceExists(ctx context.Context, node *v1.Node) (bool, error) {
277+
var err error
278+
279+
if node.Spec.ProviderID == "" {
280+
_, err = b.getServerByName(node.Name)
281+
} else {
282+
_, err = b.getServerByProviderID(node.Spec.ProviderID)
283+
}
284+
285+
if err == cloudprovider.InstanceNotFound {
286+
return false, nil
287+
}
288+
if err != nil {
289+
return false, err
290+
}
291+
292+
return true, nil
293+
}
294+
295+
// InstanceShutdown returns true if the instance is shutdown according to the cloud provider.
296+
// Use the node.name or node.spec.providerID field to find the node in the cloud provider.
297+
func (b *baremetal) InstanceShutdown(ctx context.Context, node *v1.Node) (bool, error) {
298+
var bm *scwbaremetal.Server
299+
var err error
300+
301+
if node.Spec.ProviderID == "" {
302+
bm, err = b.getServerByName(node.Name)
303+
} else {
304+
bm, err = b.getServerByProviderID(node.Spec.ProviderID)
305+
}
306+
307+
if err != nil {
308+
return false, err
309+
}
310+
311+
switch bm.Status {
312+
case scwbaremetal.ServerStatusReady, scwbaremetal.ServerStatusStarting:
313+
return false, nil
314+
default:
315+
return true, nil
316+
}
317+
}
318+
319+
// InstanceMetadata returns the instance's metadata. The values returned in InstanceMetadata are
320+
// translated into specific fields in the Node object on registration.
321+
// Use the node.name or node.spec.providerID field to find the node in the cloud provider.
322+
func (b *baremetal) InstanceMetadata(ctx context.Context, node *v1.Node) (*cloudprovider.InstanceMetadata, error) {
323+
var bm *scwbaremetal.Server
324+
var err error
325+
326+
if node.Spec.ProviderID == "" {
327+
bm, err = b.getServerByName(node.Name)
328+
} else {
329+
bm, err = b.getServerByProviderID(node.Spec.ProviderID)
330+
}
331+
332+
if err != nil {
333+
return nil, err
334+
}
335+
336+
offerName, err := b.getServerOfferName(bm)
337+
if err != nil {
338+
return nil, err
339+
}
340+
341+
return &cloudprovider.InstanceMetadata{
342+
ProviderID: BuildProviderID(InstanceTypeBaremtal, bm.Zone.String(), bm.ID),
343+
InstanceType: offerName,
344+
NodeAddresses: baremetalAddresses(bm),
345+
}, nil
346+
}

scaleway/baremetal_test.go

Lines changed: 164 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import (
2525
scwbaremetal "github.com/scaleway/scaleway-sdk-go/api/baremetal/v1alpha1"
2626
"github.com/scaleway/scaleway-sdk-go/scw"
2727
v1 "k8s.io/api/core/v1"
28+
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2829
cloudprovider "k8s.io/cloud-provider"
2930
)
3031

@@ -300,3 +301,166 @@ func TestBaremetal_GetZoneByProviderID(t *testing.T) {
300301
AssertNoError(t, err)
301302
Equals(t, expected, result)
302303
}
304+
305+
func TestBaremetal_InstanceExists(t *testing.T) {
306+
baremetal := newFakeBaremetal()
307+
308+
t.Run("Running by ID", func(t *testing.T) {
309+
result, err := baremetal.InstanceExists(context.TODO(), &v1.Node{
310+
Spec: v1.NodeSpec{
311+
ProviderID: "scaleway://baremetal/fr-par-2/53a6ca14-0d8d-4f2e-9887-2f1bcfba58ed",
312+
},
313+
})
314+
AssertNoError(t, err)
315+
AssertTrue(t, result)
316+
})
317+
318+
t.Run("Stopped by ID", func(t *testing.T) {
319+
result, err := baremetal.InstanceExists(context.TODO(), &v1.Node{
320+
Spec: v1.NodeSpec{
321+
ProviderID: "scaleway://baremetal/fr-par-2/42d74979-992e-4650-9d05-31b834547d69",
322+
},
323+
})
324+
AssertNoError(t, err)
325+
AssertTrue(t, result)
326+
})
327+
328+
t.Run("NotFound by ID", func(t *testing.T) {
329+
result, err := baremetal.InstanceExists(context.TODO(), &v1.Node{
330+
Spec: v1.NodeSpec{
331+
ProviderID: "scaleway://baremetal/fr-par-2/4d17aad4-c77e-4d95-a6e8-d7bf3f02d345",
332+
},
333+
})
334+
AssertNoError(t, err)
335+
AssertFalse(t, result)
336+
})
337+
t.Run("Running by name", func(t *testing.T) {
338+
result, err := baremetal.InstanceExists(context.TODO(), &v1.Node{
339+
ObjectMeta: metav1.ObjectMeta{
340+
Name: "bm-keen-feistel",
341+
},
342+
})
343+
AssertNoError(t, err)
344+
AssertTrue(t, result)
345+
})
346+
347+
t.Run("Stopped by name", func(t *testing.T) {
348+
result, err := baremetal.InstanceExists(context.TODO(), &v1.Node{
349+
ObjectMeta: metav1.ObjectMeta{
350+
Name: "bm-optimistic-cohen",
351+
},
352+
})
353+
AssertNoError(t, err)
354+
AssertTrue(t, result)
355+
})
356+
357+
t.Run("NotFound by name", func(t *testing.T) {
358+
result, err := baremetal.InstanceExists(context.TODO(), &v1.Node{
359+
ObjectMeta: metav1.ObjectMeta{
360+
Name: "dummy-name",
361+
},
362+
})
363+
AssertNoError(t, err)
364+
AssertFalse(t, result)
365+
})
366+
367+
}
368+
369+
func TestBaremetal_InstanceShutdown(t *testing.T) {
370+
baremetal := newFakeBaremetal()
371+
372+
t.Run("Running by ID", func(t *testing.T) {
373+
result, err := baremetal.InstanceShutdown(context.TODO(), &v1.Node{
374+
Spec: v1.NodeSpec{
375+
ProviderID: "scaleway://baremetal/fr-par-2/53a6ca14-0d8d-4f2e-9887-2f1bcfba58ed",
376+
},
377+
})
378+
AssertNoError(t, err)
379+
AssertFalse(t, result)
380+
})
381+
382+
t.Run("Stopped by ID", func(t *testing.T) {
383+
result, err := baremetal.InstanceShutdown(context.TODO(), &v1.Node{
384+
Spec: v1.NodeSpec{
385+
ProviderID: "scaleway://baremetal/fr-par-2/42d74979-992e-4650-9d05-31b834547d69",
386+
},
387+
})
388+
AssertNoError(t, err)
389+
AssertTrue(t, result)
390+
})
391+
392+
t.Run("NotFound by ID", func(t *testing.T) {
393+
_, err := baremetal.InstanceShutdown(context.TODO(), &v1.Node{
394+
Spec: v1.NodeSpec{
395+
ProviderID: "scaleway://baremetal/fr-par-2/4d17aad4-c77e-4d95-a6e8-d7bf3f02d345",
396+
},
397+
})
398+
AssertTrue(t, err == cloudprovider.InstanceNotFound)
399+
})
400+
401+
t.Run("Running by name", func(t *testing.T) {
402+
result, err := baremetal.InstanceShutdown(context.TODO(), &v1.Node{
403+
ObjectMeta: metav1.ObjectMeta{
404+
Name: "bm-keen-feistel",
405+
},
406+
})
407+
AssertNoError(t, err)
408+
AssertFalse(t, result)
409+
})
410+
411+
t.Run("Stopped by name", func(t *testing.T) {
412+
result, err := baremetal.InstanceShutdown(context.TODO(), &v1.Node{
413+
ObjectMeta: metav1.ObjectMeta{
414+
Name: "bm-optimistic-cohen",
415+
},
416+
})
417+
AssertNoError(t, err)
418+
AssertTrue(t, result)
419+
})
420+
421+
t.Run("NotFound by name", func(t *testing.T) {
422+
_, err := baremetal.InstanceShutdown(context.TODO(), &v1.Node{
423+
ObjectMeta: metav1.ObjectMeta{
424+
Name: "dummy-name",
425+
},
426+
})
427+
AssertTrue(t, err == cloudprovider.InstanceNotFound)
428+
})
429+
}
430+
431+
func TestBaremetal_InstanceMetadata(t *testing.T) {
432+
baremetal := newFakeBaremetal()
433+
434+
expectedAddresses := []v1.NodeAddress{
435+
{Type: v1.NodeHostName, Address: "bm-keen-feistel"},
436+
{Type: v1.NodeExternalIP, Address: "62.210.16.2"},
437+
{Type: v1.NodeExternalDNS, Address: "53a6ca14-0d8d-4f2e-9887-2f1bcfba58ed.fr-par-2.baremetal.scw.cloud"},
438+
}
439+
440+
providerID := "scaleway://baremetal/fr-par-2/53a6ca14-0d8d-4f2e-9887-2f1bcfba58ed"
441+
offerName := "TEST1-L"
442+
443+
t.Run("By ID", func(t *testing.T) {
444+
metadata, err := baremetal.InstanceMetadata(context.TODO(), &v1.Node{
445+
Spec: v1.NodeSpec{
446+
ProviderID: providerID,
447+
},
448+
})
449+
AssertNoError(t, err)
450+
Equals(t, expectedAddresses, metadata.NodeAddresses)
451+
Equals(t, offerName, metadata.InstanceType)
452+
Equals(t, providerID, metadata.ProviderID)
453+
})
454+
455+
t.Run("By Name", func(t *testing.T) {
456+
metadata, err := baremetal.InstanceMetadata(context.TODO(), &v1.Node{
457+
ObjectMeta: metav1.ObjectMeta{
458+
Name: "bm-keen-feistel",
459+
},
460+
})
461+
AssertNoError(t, err)
462+
Equals(t, expectedAddresses, metadata.NodeAddresses)
463+
Equals(t, offerName, metadata.InstanceType)
464+
Equals(t, providerID, metadata.ProviderID)
465+
})
466+
}

scaleway/cloud.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ var (
4949
type cloud struct {
5050
client *client
5151
instances cloudprovider.Instances
52+
instancesV2 cloudprovider.InstancesV2
5253
zones cloudprovider.Zones
5354
loadbalancers cloudprovider.LoadBalancer
5455
syncController *syncController
@@ -82,6 +83,7 @@ func newCloud(config io.Reader) (cloudprovider.Interface, error) {
8283
return &cloud{
8384
client: client,
8485
instances: newServers(client),
86+
instancesV2: newServers(client),
8587
zones: newZones(client),
8688
loadbalancers: newLoadbalancers(client),
8789
}, nil
@@ -116,6 +118,10 @@ func (c *cloud) Instances() (cloudprovider.Instances, bool) {
116118
return c.instances, true
117119
}
118120

121+
func (c *cloud) InstancesV2() (cloudprovider.InstancesV2, bool) {
122+
return c.instancesV2, true
123+
}
124+
119125
func (c *cloud) Zones() (cloudprovider.Zones, bool) {
120126
return c.zones, true
121127
}

0 commit comments

Comments
 (0)