mirror of
https://github.com/ceph/ceph-csi.git
synced 2024-11-26 08:10:20 +00:00
rbd: add check for imageFeatures parameter
This commit adds checks for missing `imageFeatures` parameter in createvolumerequest and nodestagerequest(only for static PVs). Missing `imageFeatures` parameter is ignored in case of non-static PVs to ensure backwards compatibility with older versions which did not have `imageFeatures` as required parameter. Signed-off-by: Rakshith R <rar@redhat.com>
This commit is contained in:
parent
a852e66133
commit
84b046d736
@ -111,6 +111,10 @@ func (cs *ControllerServer) parseVolCreateRequest(ctx context.Context, req *csi.
|
|||||||
return nil, status.Error(codes.InvalidArgument, "multi node access modes are only supported on rbd `block` type volumes")
|
return nil, status.Error(codes.InvalidArgument, "multi node access modes are only supported on rbd `block` type volumes")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if imageFeatures, ok := req.GetParameters()["imageFeatures"]; checkImageFeatures(imageFeatures, ok, true) {
|
||||||
|
return nil, status.Error(codes.InvalidArgument, "missing required parameter imageFeatures")
|
||||||
|
}
|
||||||
|
|
||||||
// if it's NOT SINGLE_NODE_WRITER and it's BLOCK we'll set the parameter to ignore the in-use checks
|
// if it's NOT SINGLE_NODE_WRITER and it's BLOCK we'll set the parameter to ignore the in-use checks
|
||||||
rbdVol, err := genVolFromVolumeOptions(ctx, req.GetParameters(), req.GetSecrets(), (isMultiNode && isBlock))
|
rbdVol, err := genVolFromVolumeOptions(ctx, req.GetParameters(), req.GetSecrets(), (isMultiNode && isBlock))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -166,6 +166,12 @@ func (ns *NodeServer) NodeStageVolume(ctx context.Context, req *csi.NodeStageVol
|
|||||||
return &csi.NodeStageVolumeResponse{}, nil
|
return &csi.NodeStageVolumeResponse{}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// throw error when imageFeatures parameter is missing or empty
|
||||||
|
// for backward compatibility, ignore error for non-static volumes from older cephcsi version
|
||||||
|
if imageFeatures, ok := req.GetVolumeContext()["imageFeatures"]; checkImageFeatures(imageFeatures, ok, staticVol) {
|
||||||
|
return nil, status.Error(codes.InvalidArgument, "missing required parameter imageFeatures")
|
||||||
|
}
|
||||||
|
|
||||||
volOptions, err := genVolFromVolumeOptions(ctx, req.GetVolumeContext(), req.GetSecrets(), disableInUseChecks)
|
volOptions, err := genVolFromVolumeOptions(ctx, req.GetVolumeContext(), req.GetSecrets(), disableInUseChecks)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, status.Error(codes.Internal, err.Error())
|
return nil, status.Error(codes.Internal, err.Error())
|
||||||
|
@ -448,6 +448,13 @@ func (rv *rbdVolume) isInUse() (bool, error) {
|
|||||||
return len(watchers) > defaultWatchers, nil
|
return len(watchers) > defaultWatchers, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// checkImageFeatures check presence of imageFeatures parameter. It returns true when
|
||||||
|
// there imageFeatures is missing or empty, skips missing parameter for non-static volumes
|
||||||
|
// for backward compatibility.
|
||||||
|
func checkImageFeatures(imageFeatures string, ok, static bool) bool {
|
||||||
|
return static && (!ok || imageFeatures == "")
|
||||||
|
}
|
||||||
|
|
||||||
// addRbdManagerTask adds a ceph manager task to execute command
|
// addRbdManagerTask adds a ceph manager task to execute command
|
||||||
// asynchronously. If command is not found returns a bool set to false
|
// asynchronously. If command is not found returns a bool set to false
|
||||||
// example arg ["trash", "remove","pool/image"].
|
// example arg ["trash", "remove","pool/image"].
|
||||||
|
Loading…
Reference in New Issue
Block a user