Skip to content

Commit fe0da73

Browse files
yogev-lblev-lb
authored andcommitted
go.mod: Remove dependecy on k8s.io/kubernetes
While I was trying to bump up the dependecy in go mod for k8s.io/kubernetes I noticed we our go mod fails, and I could not add a new depedency on volume subpackage. There are some client packages like client-go and k8s.io/utils that are meant to be imported and are simple to do. There is an effort to extract common code to client packages so they can be imported easily. Some example libraries are: * k8s.io/utils/exec * k8s.io/mount-utils that enable to use the mount/resizefs functions. all packages under k8s.io/kubernetes are not meant to be imported but sometimes we must, cause there are useful stuff there. See this post about the problem: https://suraj.io/post/2021/05/k8s-import/ I came across this comment: kubernetes/kubernetes#79384 (comment) recomending using replace Changes applied: * use mount-utils package instead of k8s.io/kubernetes/pkg/utils/mount * use mount-utils package instead of k8s.io/kubernetes/pkg/util/resizefs * upgrade k8s.io/kubernetes dependency to 1.20 * upgrade csi spec to 1.3.0 * upgrade go.mod to golang 1.16 and update vendor folder * scripts/download-deps.sh: add script to upgrade k8s deps easily issue: LBM1-17861
1 parent b7b6b1f commit fe0da73

File tree

829 files changed

+155787
-139983
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

829 files changed

+155787
-139983
lines changed

go.mod

Lines changed: 43 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,53 @@
11
module github.com/lightbitslabs/los-csi
22

3-
go 1.10
3+
go 1.16
44

55
require (
6-
github.com/container-storage-interface/spec v1.2.0
6+
github.com/container-storage-interface/spec v1.3.0
77
github.com/dell/gofsutil v1.4.0
88
github.com/fsnotify/fsnotify v1.4.9
9-
github.com/gogo/protobuf v1.3.1 // indirect
10-
github.com/golang/protobuf v1.3.3
11-
github.com/google/uuid v1.1.1
12-
github.com/grpc-ecosystem/go-grpc-middleware v1.0.0
13-
github.com/grpc-ecosystem/grpc-gateway v1.11.3
9+
github.com/golang/protobuf v1.5.2
10+
github.com/google/uuid v1.1.2
11+
github.com/grpc-ecosystem/go-grpc-middleware v1.3.0
12+
github.com/grpc-ecosystem/grpc-gateway v1.16.0
1413
github.com/kubernetes-csi/csi-test/v3 v3.1.1
15-
github.com/sirupsen/logrus v1.4.2
16-
github.com/spf13/afero v1.2.2 // indirect
14+
github.com/sirupsen/logrus v1.8.1
1715
github.com/spf13/pflag v1.0.5
18-
github.com/stretchr/testify v1.2.2
19-
google.golang.org/genproto v0.0.0-20191114150713-6bbd007550de
20-
google.golang.org/grpc v1.29.1
16+
github.com/stretchr/testify v1.7.0
17+
google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c
18+
google.golang.org/grpc v1.38.0
2119
gopkg.in/yaml.v2 v2.4.0
22-
k8s.io/apimachinery v0.0.0-20181108192626-90473842928c // indirect
23-
k8s.io/kubernetes v1.11.10
24-
k8s.io/utils v0.0.0-20180726175726-66066c83e385 // indirect
20+
k8s.io/mount-utils v0.21.4
21+
k8s.io/utils v0.0.0-20210707171843-4b05e18ac7d9
22+
)
23+
24+
replace (
25+
//
26+
// k8s.io/kubernetes depends on these k8s.io packages, but unversioned
27+
//
28+
k8s.io/api => k8s.io/api v0.21.4
29+
k8s.io/apiextensions-apiserver => k8s.io/apiextensions-apiserver v0.21.4
30+
k8s.io/apimachinery => k8s.io/apimachinery v0.21.4
31+
k8s.io/apiserver => k8s.io/apiserver v0.21.4
32+
k8s.io/cli-runtime => k8s.io/cli-runtime v0.21.4
33+
k8s.io/client-go => k8s.io/client-go v0.21.4
34+
k8s.io/cloud-provider => k8s.io/cloud-provider v0.21.4
35+
k8s.io/cluster-bootstrap => k8s.io/cluster-bootstrap v0.21.4
36+
k8s.io/code-generator => k8s.io/code-generator v0.21.4
37+
k8s.io/component-base => k8s.io/component-base v0.21.4
38+
k8s.io/component-helpers => k8s.io/component-helpers v0.21.4
39+
k8s.io/controller-manager => k8s.io/controller-manager v0.21.4
40+
k8s.io/cri-api => k8s.io/cri-api v0.21.4
41+
k8s.io/csi-translation-lib => k8s.io/csi-translation-lib v0.21.4
42+
k8s.io/kube-aggregator => k8s.io/kube-aggregator v0.21.4
43+
k8s.io/kube-controller-manager => k8s.io/kube-controller-manager v0.21.4
44+
k8s.io/kube-proxy => k8s.io/kube-proxy v0.21.4
45+
k8s.io/kube-scheduler => k8s.io/kube-scheduler v0.21.4
46+
k8s.io/kubectl => k8s.io/kubectl v0.21.4
47+
k8s.io/kubelet => k8s.io/kubelet v0.21.4
48+
k8s.io/legacy-cloud-providers => k8s.io/legacy-cloud-providers v0.21.4
49+
k8s.io/metrics => k8s.io/metrics v0.21.4
50+
k8s.io/mount-utils => k8s.io/mount-utils v0.21.4
51+
k8s.io/pod-security-admission => k8s.io/pod-security-admission v0.21.4
52+
k8s.io/sample-apiserver => k8s.io/sample-apiserver v0.21.4
2553
)

go.sum

Lines changed: 140 additions & 39 deletions
Large diffs are not rendered by default.

pkg/driver/controller.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -359,6 +359,12 @@ func (d *Driver) CreateVolume(
359359
return vol, nil
360360
}
361361

362+
func (d *Driver) ControllerGetVolume(
363+
ctx context.Context, req *csi.ControllerGetVolumeRequest,
364+
) (*csi.ControllerGetVolumeResponse, error) {
365+
return nil, status.Error(codes.Unimplemented, "")
366+
}
367+
362368
func (d *Driver) DeleteVolume(
363369
ctx context.Context, req *csi.DeleteVolumeRequest,
364370
) (*csi.DeleteVolumeResponse, error) {

pkg/driver/driver.go

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,8 @@ import (
2626
"google.golang.org/grpc/codes"
2727
"google.golang.org/grpc/metadata"
2828
"google.golang.org/grpc/status"
29-
"k8s.io/kubernetes/pkg/util/mount"
29+
mountutils "k8s.io/mount-utils"
30+
"k8s.io/utils/exec"
3031

3132
"github.com/lightbitslabs/los-csi/pkg/driver/backend"
3233
_ "github.com/lightbitslabs/los-csi/pkg/driver/backend/dsc" // register backend
@@ -105,7 +106,7 @@ type Driver struct {
105106

106107
lbclients *lb.ClientPool
107108

108-
mounter *mount.SafeFormatAndMount
109+
mounter *mountutils.SafeFormatAndMount
109110

110111
be backend.Backend
111112

@@ -289,9 +290,9 @@ func New(cfg Config) (*Driver, error) { // nolint:gocritic
289290
// it's too good to reimplement from scratch.
290291
// TODO: actually, should be passed in as part of the config, to allow
291292
// testing/mocking...
292-
d.mounter = &mount.SafeFormatAndMount{
293-
Interface: mount.New(""),
294-
Exec: mount.NewOsExec(),
293+
d.mounter = &mountutils.SafeFormatAndMount{
294+
Interface: mountutils.New(""),
295+
Exec: exec.New(),
295296
}
296297

297298
lbdialer := func(

pkg/driver/node.go

Lines changed: 22 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,7 @@ import (
1818
"github.com/sirupsen/logrus"
1919
"google.golang.org/grpc/codes"
2020
"google.golang.org/grpc/status"
21-
"k8s.io/kubernetes/pkg/util/mount"
22-
"k8s.io/kubernetes/pkg/util/resizefs"
21+
mountutils "k8s.io/mount-utils"
2322

2423
"github.com/lightbitslabs/los-csi/pkg/driver/backend"
2524
"github.com/lightbitslabs/los-csi/pkg/lb"
@@ -226,7 +225,7 @@ func (d *Driver) NodeStageVolume(
226225
// path, or some such). and i THINK i can see `kubelet` creating it
227226
// before calling the plugins...
228227
tgtPath := req.StagingTargetPath
229-
notMnt, err := d.mounter.IsNotMountPoint(tgtPath)
228+
notMnt, err := mountutils.IsNotMountPoint(d.mounter, tgtPath)
230229
if os.IsNotExist(err) {
231230
return nil, mkEinvalf("staging_target_path",
232231
"'%s' doesn't exist", tgtPath)
@@ -235,7 +234,7 @@ func (d *Driver) NodeStageVolume(
235234
}
236235
// don't you not like double negatives?
237236
if !notMnt {
238-
dev, _, err := mount.GetDeviceNameFromMount(d.mounter, tgtPath)
237+
dev, _, err := mountutils.GetDeviceNameFromMount(d.mounter, tgtPath)
239238
if err != nil {
240239
log.Debugf("failed to find what's mounted at '%s': %s", tgtPath, err)
241240
}
@@ -317,7 +316,7 @@ func (d *Driver) NodeStageVolume(
317316
// In case the volume came from a snapshot and happens to also be
318317
// larger in capacity, we want to update the fs size accordingly, we
319318
// don't care really if any actual resize happened...
320-
resizer := resizefs.NewResizeFs(d.mounter)
319+
resizer := mountutils.NewResizeFs(d.mounter.Exec)
321320
_, err = resizer.Resize(devPath, tgtPath)
322321
if err != nil {
323322
return nil, mkEExec("error when resizing device %s after mount: %v", vid.uuid, err)
@@ -353,7 +352,7 @@ func (d *Driver) NodeUnstageVolume(
353352
// retrying the call...
354353
vid = vid
355354

356-
notMnt, err := d.mounter.IsNotMountPoint(tgtPath)
355+
notMnt, err := mountutils.IsNotMountPoint(d.mounter, tgtPath)
357356
if err != nil && !os.IsNotExist(err) {
358357
return nil, mkEExec("can't examine staging path: %s", err)
359358
}
@@ -385,7 +384,7 @@ func (d *Driver) nodePublishVolumeForBlock(
385384

386385
// Create the mount point as a file since bind mount device node requires it to be a file
387386
log.Debugf("Creating target file %s", target)
388-
err = d.mounter.MakeFile(target)
387+
err = MakeFile(target)
389388
if err != nil {
390389
if removeErr := os.Remove(target); removeErr != nil {
391390
return &csi.NodePublishVolumeResponse{},
@@ -408,6 +407,19 @@ func (d *Driver) nodePublishVolumeForBlock(
408407
return &csi.NodePublishVolumeResponse{}, nil
409408
}
410409

410+
func MakeFile(path string) error {
411+
f, err := os.OpenFile(path, os.O_CREATE, os.FileMode(0644))
412+
if err != nil {
413+
if !os.IsExist(err) {
414+
return err
415+
}
416+
}
417+
if err = f.Close(); err != nil {
418+
return err
419+
}
420+
return nil
421+
}
422+
411423
func getDeviceNameFromMount(ctx context.Context, tgtPath string) (string, error) {
412424
info, err := gofsutil.GetMounts(ctx)
413425
if err != nil {
@@ -495,7 +507,7 @@ func (d *Driver) NodePublishVolume(
495507

496508
// for idempotency - start in reverse order:
497509
if _, err := os.Stat(req.TargetPath); err == nil {
498-
notMnt, err := d.mounter.IsNotMountPoint(req.TargetPath)
510+
notMnt, err := mountutils.IsNotMountPoint(d.mounter, req.TargetPath)
499511
if os.IsNotExist(err) {
500512
return nil, mkEinvalf("target_path", "'%s' doesn't exist", req.TargetPath)
501513
} else if err != nil {
@@ -550,7 +562,7 @@ func (d *Driver) NodeUnpublishVolume(
550562
defer d.bdl.Unlock()
551563

552564
tgtPath := req.TargetPath
553-
notMnt, err := d.mounter.IsNotMountPoint(tgtPath)
565+
notMnt, err := mountutils.IsNotMountPoint(d.mounter, tgtPath)
554566
if err != nil && !os.IsNotExist(err) {
555567
return nil, mkEExec("can't examine staging path: %s", err)
556568
}
@@ -638,7 +650,7 @@ func (d *Driver) NodeExpandVolume(
638650
return nil, err
639651
}
640652

641-
resizer := resizefs.NewResizeFs(d.mounter)
653+
resizer := mountutils.NewResizeFs(d.mounter.Exec)
642654
resizedOccurred, err := resizer.Resize(devicePath, volumePath)
643655
if err != nil {
644656
return nil, mkInternal("Could not resize volume %s (%s): %s", vid.uuid, devicePath, err)

scripts/download-deps.sh

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
#!/bin/bash
2+
3+
VERSION=${1#"v"}
4+
if [ -z "$VERSION" ]; then
5+
echo "Please specify the Kubernetes version: e.g."
6+
echo "./download-deps.sh v1.21.0"
7+
exit 1
8+
fi
9+
10+
set -euo pipefail
11+
12+
# Find out all the replaced imports, make a list of them.
13+
MODS=($(
14+
curl -sS "https://raw.githubusercontent.com/kubernetes/kubernetes/v${VERSION}/go.mod" |
15+
sed -n 's|.*k8s.io/\(.*\) => ./staging/src/k8s.io/.*|k8s.io/\1|p'
16+
))
17+
18+
# Now add those similar replace statements in the local go.mod file, but first find the version that
19+
# the Kubernetes is using for them.
20+
for MOD in "${MODS[@]}"; do
21+
V=$(
22+
go mod download -json "${MOD}@kubernetes-${VERSION}" |
23+
sed -n 's|.*"Version": "\(.*\)".*|\1|p'
24+
)
25+
26+
go mod edit "-replace=${MOD}=${MOD}@${V}"
27+
done
28+
29+
go get "k8s.io/kubernetes@v${VERSION}"
30+
go mod download
31+
go mod vendor

0 commit comments

Comments
 (0)