Support uploading disk images to volumes in API

Addresses #68
This commit is contained in:
2020-02-09 13:43:48 -05:00
parent 92df125a77
commit 49e5ce1176
4 changed files with 165 additions and 1 deletions

View File

@ -3334,6 +3334,53 @@ class API_Storage_Ceph_Volume_Element_Clone(Resource):
)
api.add_resource(API_Storage_Ceph_Volume_Element_Clone, '/storage/ceph/volume/<pool>/<volume>/clone')
# /storage/ceph/volume/<pool>/<volume>/upload
class API_Storage_Ceph_Volume_Element_Upload(Resource):
@Authenticator
def post(self, pool, volume):
"""
Upload a disk image to Ceph volume {volume} in pool {pool}
---
tags:
- storage / ceph
parameters:
- in: query
name: file
type: binary
required: true
description: The raw binary contents of the file
responses:
200:
description: OK
schema:
type: object
id: Message
404:
description: Not found
schema:
type: object
id: Message
400:
description: Bad request
schema:
type: object
id: Message
"""
from flask_restful import reqparse
from werkzeug.datastructures import FileStorage
parser = reqparse.RequestParser()
parser.add_argument('file', type=FileStorage, location='files')
data = parser.parse_args()
image_data = data.get('file', None)
if not image_data:
return {'message':'An image file contents must be specified'}, 400
return api_helper.ceph_volume_upload(
pool,
volume,
image_data
)
api.add_resource(API_Storage_Ceph_Volume_Element_Upload, '/storage/ceph/volume/<pool>/<volume>/upload')
# /storage/ceph/snapshot
class API_Storage_Ceph_Snapshot_Root(Resource):
@RequestParser([