From 90617d01a315034822681ce42c041f0de3fa9239 Mon Sep 17 00:00:00 2001 From: Sunny Date: Fri, 25 Jan 2019 13:16:10 +0530 Subject: [PATCH] hostpath: Implement ValidateVolumeCapabilities This implements a basic version of ValidateVolumeCapabilities for hostpath driver and removes this from the skip tests list in the e2e tests. --- hack/e2e-hostpath.sh | 3 --- pkg/hostpath/controllerserver.go | 30 +++++++++++++++++++++++++++++- 2 files changed, 29 insertions(+), 4 deletions(-) diff --git a/hack/e2e-hostpath.sh b/hack/e2e-hostpath.sh index 4096776be..71a29fcdf 100755 --- a/hack/e2e-hostpath.sh +++ b/hack/e2e-hostpath.sh @@ -13,9 +13,6 @@ CSI_MOUNTPOINT="/mnt" APP=hostpathplugin SKIP="WithCapacity" -if [ x${TRAVIS} = x"true" ] ; then - SKIP="ValidateVolumeCapabilities" -fi # Get csi-sanity ./hack/get-sanity.sh diff --git a/pkg/hostpath/controllerserver.go b/pkg/hostpath/controllerserver.go index cb8ab0836..f4c53546f 100644 --- a/pkg/hostpath/controllerserver.go +++ b/pkg/hostpath/controllerserver.go @@ -163,7 +163,35 @@ func (cs *controllerServer) ControllerGetCapabilities(ctx context.Context, req * } func (cs *controllerServer) ValidateVolumeCapabilities(ctx context.Context, req *csi.ValidateVolumeCapabilitiesRequest) (*csi.ValidateVolumeCapabilitiesResponse, error) { - return nil, status.Error(codes.Unimplemented, "") + + // Check arguments + if len(req.GetVolumeId()) == 0 { + return nil, status.Error(codes.InvalidArgument, "Volume ID cannot be empty") + } + if len(req.VolumeCapabilities) == 0 { + return nil, status.Error(codes.InvalidArgument, req.VolumeId) + } + + if _, err := getVolumeByID(req.GetVolumeId()); err != nil { + return nil, status.Error(codes.NotFound, req.GetVolumeId()) + } + + for _, cap := range req.GetVolumeCapabilities() { + if cap.GetMount() == nil && cap.GetBlock() == nil { + return nil, status.Error(codes.InvalidArgument, "cannot have both mount and block access type be undefined") + } + + // A real driver would check the capabilities of the given volume with + // the set of requested capabilities. + } + + return &csi.ValidateVolumeCapabilitiesResponse{ + Confirmed: &csi.ValidateVolumeCapabilitiesResponse_Confirmed{ + VolumeContext: req.GetVolumeContext(), + VolumeCapabilities: req.GetVolumeCapabilities(), + Parameters: req.GetParameters(), + }, + }, nil } func (cs *controllerServer) ControllerPublishVolume(ctx context.Context, req *csi.ControllerPublishVolumeRequest) (*csi.ControllerPublishVolumeResponse, error) {