From 07ecd8bee7d2a5e9c3a97e6d395b5fa8425bc24f Mon Sep 17 00:00:00 2001 From: Cameron Braid Date: Thu, 5 Mar 2020 21:20:27 +1100 Subject: [PATCH 1/3] added support for secretName in PV volumeAttributes to override the default rclone-secret --- pkg/rclone/nodeserver.go | 30 ++++++++++++++++++++++-------- 1 file changed, 22 insertions(+), 8 deletions(-) diff --git a/pkg/rclone/nodeserver.go b/pkg/rclone/nodeserver.go index f6d957d..6501e05 100644 --- a/pkg/rclone/nodeserver.go +++ b/pkg/rclone/nodeserver.go @@ -74,10 +74,7 @@ func (ns *nodeServer) NodePublishVolume(ctx context.Context, req *csi.NodePublis mountOptions = append(mountOptions, "ro") } - // Load default connection settings from secret - secret, e := getSecret("rclone-secret") - - remote, remotePath, flags, e := extractFlags(req.GetVolumeContext(), secret) + remote, remotePath, flags, e := extractFlags(req.GetVolumeContext()) if e != nil { klog.Warningf("storage parameter error: %s", e) return nil, e @@ -97,13 +94,30 @@ func (ns *nodeServer) NodePublishVolume(ctx context.Context, req *csi.NodePublis return &csi.NodePublishVolumeResponse{}, nil } -func extractFlags(volumeContext map[string]string, secret *v1.Secret) (string, string, map[string]string, error) { +func extractFlags(volumeContext map[string]string) (string, string, map[string]string, error) { + + // Load default connection settings from secret + + var secret *v1.Secret + + if volumeContext["secretName"] != "" { + // Load the secret that the PV spec defines + var e error + secret, e = getSecret(volumeContext["secretName"]) + if e != nil { + // if the user explicitly requested a secret and there is an error fetching it, bail with an error + return "", "", nil, e + } + } else { + // use rclone-secret as the default secret if none was defined + secret, _ = getSecret("rclone-secret") + } // Empty argument list flags := make(map[string]string) // Secret values are default, gets merged and overriden by corresponding PV values - if secret !=nil && secret.Data != nil && len(secret.Data) > 0 { + if secret != nil && secret.Data != nil && len(secret.Data) > 0 { // Needs byte to string casting for map values for k, v := range secret.Data { @@ -152,10 +166,10 @@ func (ns *nodeServer) NodeUnpublishVolume(ctx context.Context, req *csi.NodeUnpu if err != nil && !mount.IsCorruptedMnt(err) { return nil, status.Error(codes.Internal, err.Error()) } - + if notMnt && !mount.IsCorruptedMnt(err) { klog.Infof("Volume not mounted") - + } else { err = util.UnmountPath(req.GetTargetPath(), m) if err != nil { From acdb31d24d07c6e97ee5802a3f0a964a563b928e Mon Sep 17 00:00:00 2001 From: Cameron Braid Date: Thu, 5 Mar 2020 21:24:52 +1100 Subject: [PATCH 2/3] fix syntax for getting secretName from volumeContext --- pkg/rclone/nodeserver.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkg/rclone/nodeserver.go b/pkg/rclone/nodeserver.go index 6501e05..498af1a 100644 --- a/pkg/rclone/nodeserver.go +++ b/pkg/rclone/nodeserver.go @@ -100,10 +100,10 @@ func extractFlags(volumeContext map[string]string) (string, string, map[string]s var secret *v1.Secret - if volumeContext["secretName"] != "" { + if secretName, ok := volumeContext["secretName"]; ok { // Load the secret that the PV spec defines var e error - secret, e = getSecret(volumeContext["secretName"]) + secret, e = getSecret(secretName) if e != nil { // if the user explicitly requested a secret and there is an error fetching it, bail with an error return "", "", nil, e From 696d17b1e4a9f2b1020c6d890bf76face127bc29 Mon Sep 17 00:00:00 2001 From: Cameron Braid Date: Thu, 5 Mar 2020 21:26:40 +1100 Subject: [PATCH 3/3] delte secretName from flags --- pkg/rclone/nodeserver.go | 1 + 1 file changed, 1 insertion(+) diff --git a/pkg/rclone/nodeserver.go b/pkg/rclone/nodeserver.go index 498af1a..9305f58 100644 --- a/pkg/rclone/nodeserver.go +++ b/pkg/rclone/nodeserver.go @@ -147,6 +147,7 @@ func extractFlags(volumeContext map[string]string) (string, string, map[string]s delete(flags, "remote") delete(flags, "remotePath") + delete(flags, "secretName") return remote, remotePath, flags, nil }