//CreateVolume : Create a Volume func (h *StorageHandlersImpl) CreateVolume(params storage.CreateVolumeParams) middleware.Responder { defer trace.End(trace.Begin("storage_handlers.CreateVolume")) //TODO: FIXME: add more errorcodes as we identify error scenarios. storeURL, err := util.VolumeStoreNameToURL(params.VolumeRequest.Store) if err != nil { log.Errorf("storagehandler: VolumeStoreName error: %s", err) return storage.NewCreateVolumeInternalServerError().WithPayload(&models.Error{ Code: swag.Int64(http.StatusInternalServerError), Message: err.Error(), }) } byteMap := make(map[string][]byte) for key, value := range params.VolumeRequest.Metadata { byteMap[key] = []byte(value) } capacity := uint64(0) if params.VolumeRequest.Capacity < 0 { capacity = uint64(1024) //FIXME: this should look for a default cap and set or fail here. } else { capacity = uint64(params.VolumeRequest.Capacity) } op := trace.NewOperation(context.Background(), fmt.Sprintf("VolumeCreate(%s)", params.VolumeRequest.Name)) volume, err := h.volumeCache.VolumeCreate(op, params.VolumeRequest.Name, storeURL, capacity*1024, byteMap) if err != nil { log.Errorf("storagehandler: VolumeCreate error: %#v", err) if os.IsExist(err) { return storage.NewCreateVolumeConflict().WithPayload(&models.Error{ Code: swag.Int64(http.StatusConflict), Message: err.Error(), }) } if _, ok := err.(spl.VolumeStoreNotFoundError); ok { return storage.NewCreateVolumeNotFound().WithPayload(&models.Error{ Code: swag.Int64(http.StatusNotFound), Message: err.Error(), }) } return storage.NewCreateVolumeInternalServerError().WithPayload(&models.Error{ Code: swag.Int64(http.StatusInternalServerError), Message: err.Error(), }) } response := volumeToCreateResponse(volume, params.VolumeRequest) return storage.NewCreateVolumeCreated().WithPayload(&response) }
//CreateVolume : Create a Volume func (handler *StorageHandlersImpl) CreateVolume(params storage.CreateVolumeParams) middleware.Responder { defer trace.End(trace.Begin("storage_handlers.CreateVolume")) //TODO: FIXME: add more errorcodes as we identify error scenarios. storeURL, err := util.VolumeStoreNameToURL(params.VolumeRequest.Store) if err != nil { log.Errorf("storagehandler: VolumeStoreName error: %s", err) return storage.NewCreateVolumeInternalServerError().WithPayload(&models.Error{ Code: swag.Int64(http.StatusInternalServerError), Message: err.Error(), }) } byteMap := make(map[string][]byte) for key, value := range params.VolumeRequest.Metadata { byteMap[key] = []byte(value) } capacity := uint64(0) if params.VolumeRequest.Capacity < 0 { capacity = uint64(1024) //FIXME: this should look for a default cap and set or fail here. } else { capacity = uint64(params.VolumeRequest.Capacity) } volume, err := storageVolumeLayer.VolumeCreate(context.TODO(), params.VolumeRequest.Name, storeURL, capacity*1024, byteMap) if err != nil { log.Errorf("storagehandler: VolumeCreate error: %s", err) return storage.NewCreateVolumeInternalServerError().WithPayload(&models.Error{ Code: swag.Int64(http.StatusInternalServerError), Message: err.Error(), }) } response := volumeToCreateResponse(volume, params.VolumeRequest) return storage.NewCreateVolumeCreated().WithPayload(&response) }