in pkg/csi_driver/controller.go [93:130]
func (s *controllerServer) ValidateVolumeCapabilities(ctx context.Context, req *csi.ValidateVolumeCapabilitiesRequest) (*csi.ValidateVolumeCapabilitiesResponse, error) {
// Validate arguments
volumeID := req.GetVolumeId()
if len(volumeID) == 0 {
return nil, status.Error(codes.InvalidArgument, "ValidateVolumeCapabilities volumeID must be provided")
}
caps := req.GetVolumeCapabilities()
// Validate that the volume matches the capabilities
// Note that there is nothing in the instance that we actually need to validate
if err := s.driver.validateVolumeCapabilities(caps); err != nil {
return &csi.ValidateVolumeCapabilitiesResponse{
Message: err.Error(),
}, status.Error(codes.InvalidArgument, err.Error())
}
// Check the volume exists or not.
instance, err := volumeIDToInstance(volumeID)
if err != nil {
return nil, status.Error(codes.NotFound, err.Error())
}
newInstance, err := s.cloudProvider.LustreService.GetInstance(ctx, instance)
if err != nil && !lustre.IsNotFoundErr(err) {
return nil, status.Error(codes.Internal, err.Error())
}
if newInstance == nil {
return nil, status.Errorf(codes.NotFound, "volume %s not found", volumeID)
}
return &csi.ValidateVolumeCapabilitiesResponse{
Confirmed: &csi.ValidateVolumeCapabilitiesResponse_Confirmed{
VolumeContext: req.GetVolumeContext(),
VolumeCapabilities: req.GetVolumeCapabilities(),
Parameters: req.GetParameters(),
},
}, nil
}