aboutsummaryrefslogtreecommitdiff
path: root/pkg/driver/controllerserver.go
diff options
context:
space:
mode:
Diffstat (limited to 'pkg/driver/controllerserver.go')
-rw-r--r--pkg/driver/controllerserver.go104
1 files changed, 104 insertions, 0 deletions
diff --git a/pkg/driver/controllerserver.go b/pkg/driver/controllerserver.go
new file mode 100644
index 0000000..e176866
--- /dev/null
+++ b/pkg/driver/controllerserver.go
@@ -0,0 +1,104 @@
+package driver
+
+import (
+ "context"
+
+ "github.com/container-storage-interface/spec/lib/go/csi"
+ "github.com/golang/glog"
+ "google.golang.org/grpc/codes"
+ "google.golang.org/grpc/status"
+)
+
+type ControllerServer struct {
+ Driver *SeaweedFsDriver
+}
+
+var _ = csi.ControllerServer(&ControllerServer{})
+
+func (cs *ControllerServer) CreateVolume(ctx context.Context, req *csi.CreateVolumeRequest) (*csi.CreateVolumeResponse, error) {
+
+ volumeId := req.GetName()
+ params := req.GetParameters()
+ glog.V(4).Info("params:%v", params)
+ capacity := req.GetCapacityRange().GetRequiredBytes()
+ capacityGB := capacity >> 30
+ if capacityGB == 0 {
+ return nil, status.Error(codes.InvalidArgument, "required bytes less than 1GB")
+ }
+ seaweedFsVolumeCount := capacityGB / 30
+ if seaweedFsVolumeCount == 0 {
+ seaweedFsVolumeCount = 1
+ }
+
+ err := cs.Driver.createBucket(volumeId, int(seaweedFsVolumeCount))
+
+ return &csi.CreateVolumeResponse{
+ Volume: &csi.Volume{
+ VolumeId: volumeId,
+ CapacityBytes: 0, // seaweedFsVolumeCount * 1024 * 1024 * 30,
+ VolumeContext: params,
+ },
+ }, err
+}
+
+func (cs *ControllerServer) DeleteVolume(ctx context.Context, req *csi.DeleteVolumeRequest) (*csi.DeleteVolumeResponse, error) {
+
+ volumeId := req.VolumeId
+ err := cs.Driver.deleteBucket(volumeId)
+
+ return &csi.DeleteVolumeResponse{}, err
+}
+
+func (cs *ControllerServer) ControllerPublishVolume(ctx context.Context, req *csi.ControllerPublishVolumeRequest) (*csi.ControllerPublishVolumeResponse, error) {
+ return nil, status.Error(codes.Unimplemented, "")
+}
+
+func (cs *ControllerServer) ControllerUnpublishVolume(ctx context.Context, req *csi.ControllerUnpublishVolumeRequest) (*csi.ControllerUnpublishVolumeResponse, error) {
+ return nil, status.Error(codes.Unimplemented, "")
+}
+
+func (cs *ControllerServer) ValidateVolumeCapabilities(ctx context.Context, req *csi.ValidateVolumeCapabilitiesRequest) (*csi.ValidateVolumeCapabilitiesResponse, error) {
+
+ return &csi.ValidateVolumeCapabilitiesResponse{
+ Confirmed: &csi.ValidateVolumeCapabilitiesResponse_Confirmed{
+ VolumeContext: req.GetVolumeContext(),
+ VolumeCapabilities: req.GetVolumeCapabilities(),
+ Parameters: req.GetParameters(),
+ },
+ }, nil
+
+}
+
+func (cs *ControllerServer) ListVolumes(ctx context.Context, req *csi.ListVolumesRequest) (*csi.ListVolumesResponse, error) {
+ return nil, status.Error(codes.Unimplemented, "")
+}
+
+func (cs *ControllerServer) GetCapacity(ctx context.Context, req *csi.GetCapacityRequest) (*csi.GetCapacityResponse, error) {
+ return nil, status.Error(codes.Unimplemented, "")
+}
+
+// ControllerGetCapabilities implements the default GRPC callout.
+// Default supports all capabilities
+func (cs *ControllerServer) ControllerGetCapabilities(ctx context.Context, req *csi.ControllerGetCapabilitiesRequest) (*csi.ControllerGetCapabilitiesResponse, error) {
+ glog.V(5).Infof("Using default ControllerGetCapabilities")
+
+ return &csi.ControllerGetCapabilitiesResponse{
+ Capabilities: cs.Driver.cscap,
+ }, nil
+}
+
+func (cs *ControllerServer) CreateSnapshot(ctx context.Context, req *csi.CreateSnapshotRequest) (*csi.CreateSnapshotResponse, error) {
+ return nil, status.Error(codes.Unimplemented, "")
+}
+
+func (cs *ControllerServer) DeleteSnapshot(ctx context.Context, req *csi.DeleteSnapshotRequest) (*csi.DeleteSnapshotResponse, error) {
+ return nil, status.Error(codes.Unimplemented, "")
+}
+
+func (cs *ControllerServer) ListSnapshots(ctx context.Context, req *csi.ListSnapshotsRequest) (*csi.ListSnapshotsResponse, error) {
+ return nil, status.Error(codes.Unimplemented, "")
+}
+
+func (cs *ControllerServer) ControllerExpandVolume(ctx context.Context, req *csi.ControllerExpandVolumeRequest) (*csi.ControllerExpandVolumeResponse, error) {
+ return nil, status.Error(codes.Unimplemented, "")
+}