diff --git a/internal/rbd/controllerserver.go b/internal/rbd/controllerserver.go index 29e4af599..e82f1e894 100644 --- a/internal/rbd/controllerserver.go +++ b/internal/rbd/controllerserver.go @@ -240,8 +240,7 @@ func (cs *ControllerServer) parseVolCreateRequest( } func buildCreateVolumeResponse(req *csi.CreateVolumeRequest, rbdVol *rbdVolume) *csi.CreateVolumeResponse { - // remove kubernetes csi prefixed parameters. - volumeContext := k8s.RemoveCSIPrefixedParameters(req.GetParameters()) + volumeContext := util.GetVolumeContext(req.GetParameters()) volumeContext["pool"] = rbdVol.Pool volumeContext["journalPool"] = rbdVol.JournalPool volumeContext["imageName"] = rbdVol.RbdImageName diff --git a/internal/rbd/rbd_attach.go b/internal/rbd/rbd_attach.go index 54025efac..ee17a7c7e 100644 --- a/internal/rbd/rbd_attach.go +++ b/internal/rbd/rbd_attach.go @@ -353,7 +353,6 @@ func attachRBDImage(ctx context.Context, volOptions *rbdVolume, device string, c } err = waitForrbdImage(ctx, backoff, volOptions) - if err != nil { return "", err } @@ -364,7 +363,7 @@ func attachRBDImage(ctx context.Context, volOptions *rbdVolume, device string, c } func appendNbdDeviceTypeAndOptions(cmdArgs []string, userOptions, cookie string) []string { - isUnmap := CheckSliceContains(cmdArgs, "unmap") + isUnmap := util.CheckSliceContains(cmdArgs, "unmap") if !isUnmap { if !strings.Contains(userOptions, useNbdNetlink) { cmdArgs = append(cmdArgs, "--"+useNbdNetlink) diff --git a/internal/rbd/rbd_util.go b/internal/rbd/rbd_util.go index c50ebedd2..ae0ea389f 100644 --- a/internal/rbd/rbd_util.go +++ b/internal/rbd/rbd_util.go @@ -2071,17 +2071,6 @@ func getCephClientLogFileName(id, logDir, prefix string) string { return fmt.Sprintf("%s/%s-%s.log", logDir, prefix, id) } -// CheckSliceContains checks the slice for string. -func CheckSliceContains(options []string, opt string) bool { - for _, o := range options { - if o == opt { - return true - } - } - - return false -} - // strategicActionOnLogFile act on log file based on cephLogStrategy. func strategicActionOnLogFile(ctx context.Context, logStrategy, logFile string) { var err error diff --git a/internal/util/topology.go b/internal/util/topology.go index 1f08ca6ff..e24a05aca 100644 --- a/internal/util/topology.go +++ b/internal/util/topology.go @@ -30,6 +30,9 @@ import ( const ( keySeparator rune = '/' labelSeparator string = "," + + // topologyPoolsParam is the parameter name used to pass topology constrained pools. + topologyPoolsParam = "topologyConstrainedPools" ) // GetTopologyFromDomainLabels returns the CSI topology map, determined from @@ -129,7 +132,7 @@ func GetTopologyFromRequest( var topologyPools []TopologyConstrainedPool // check if parameters have pool configuration pertaining to topology - topologyPoolsStr := req.GetParameters()["topologyConstrainedPools"] + topologyPoolsStr := req.GetParameters()[topologyPoolsParam] if topologyPoolsStr == "" { return nil, nil, nil } diff --git a/internal/util/util.go b/internal/util/util.go index 76607f9db..83a470e25 100644 --- a/internal/util/util.go +++ b/internal/util/util.go @@ -27,6 +27,7 @@ import ( "strings" "time" + "github.com/ceph/ceph-csi/internal/util/k8s" "github.com/ceph/ceph-csi/internal/util/log" "golang.org/x/sys/unix" @@ -381,3 +382,34 @@ func CallStack() string { return string(stack) } + +// CheckSliceContains checks the slice for string. +func CheckSliceContains(options []string, opt string) bool { + for _, o := range options { + if o == opt { + return true + } + } + + return false +} + +// GetVolumeContext filters out parameters that are not required in volume context. +func GetVolumeContext(parameters map[string]string) map[string]string { + volumeContext := map[string]string{} + + // parameters that are not required in the volume context + notRequiredParams := []string{ + topologyPoolsParam, + } + for k, v := range parameters { + if !CheckSliceContains(notRequiredParams, k) { + volumeContext[k] = v + } + } + + // remove kubernetes csi prefixed parameters. + volumeContext = k8s.RemoveCSIPrefixedParameters(volumeContext) + + return volumeContext +}