func()

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
}