diff --git a/go.mod b/go.mod index 6710739e..ef959c16 100644 --- a/go.mod +++ b/go.mod @@ -20,6 +20,7 @@ require ( k8s.io/klog/v2 v2.30.0 k8s.io/kubernetes v1.23.3 k8s.io/mount-utils v0.23.3 + k8s.io/utils v0.0.0-20211116205334-6203023598ed sigs.k8s.io/yaml v1.2.0 ) diff --git a/pkg/nfs/nodeserver.go b/pkg/nfs/nodeserver.go index d1558d6f..ea5e0de4 100644 --- a/pkg/nfs/nodeserver.go +++ b/pkg/nfs/nodeserver.go @@ -91,6 +91,7 @@ func (ns *NodeServer) NodePublishVolume(ctx context.Context, req *csi.NodePublis if baseDir == "" { return nil, status.Error(codes.InvalidArgument, fmt.Sprintf("%v is a required parameter", paramShare)) } + server = getServerFromSource(server) source := fmt.Sprintf("%s:%s", server, baseDir) notMnt, err := ns.mounter.IsLikelyNotMountPoint(targetPath) diff --git a/pkg/nfs/utils.go b/pkg/nfs/utils.go index 0798c2ec..c4fc0788 100644 --- a/pkg/nfs/utils.go +++ b/pkg/nfs/utils.go @@ -29,6 +29,7 @@ import ( "k8s.io/apimachinery/pkg/util/sets" "k8s.io/klog/v2" + netutil "k8s.io/utils/net" ) func NewDefaultIdentityServer(d *Driver) *IdentityServer { @@ -151,3 +152,11 @@ func chmodIfPermissionMismatch(targetPath string, mode os.FileMode) error { } return nil } + +// getServerFromSource if server is IPv6, return [IPv6] +func getServerFromSource(server string) string { + if netutil.IsIPv6String(server) { + return fmt.Sprintf("[%s]", server) + } + return server +} diff --git a/pkg/nfs/utils_test.go b/pkg/nfs/utils_test.go index 85612049..b9b4997e 100644 --- a/pkg/nfs/utils_test.go +++ b/pkg/nfs/utils_test.go @@ -211,3 +211,39 @@ func getWorkDirPath(dir string) (string, error) { } return fmt.Sprintf("%s%c%s", path, os.PathSeparator, dir), nil } + +func TestGetServerFromSource(t *testing.T) { + tests := []struct { + desc string + server string + result string + }{ + { + desc: "ipv4", + server: "10.127.0.1", + result: "10.127.0.1", + }, + { + desc: "ipv6", + server: "0:0:0:0:0:0:0:1", + result: "[0:0:0:0:0:0:0:1]", + }, + { + desc: "ipv6 with brackets", + server: "[0:0:0:0:0:0:0:2]", + result: "[0:0:0:0:0:0:0:2]", + }, + { + desc: "other fqdn", + server: "bing.com", + result: "bing.com", + }, + } + + for _, test := range tests { + result := getServerFromSource(test.server) + if result != test.result { + t.Errorf("Unexpected result: %s, expected: %s", result, test.result) + } + } +} diff --git a/vendor/modules.txt b/vendor/modules.txt index 3091a106..12281484 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -879,6 +879,7 @@ k8s.io/kubernetes/test/utils/image ## explicit k8s.io/mount-utils # k8s.io/utils v0.0.0-20211116205334-6203023598ed +## explicit k8s.io/utils/buffer k8s.io/utils/clock k8s.io/utils/clock/testing