Add clone volume to API
This commit is contained in:
@ -941,6 +941,23 @@ def ceph_volume_add(pool, name, size):
|
||||
}
|
||||
return flask.jsonify(output), retcode
|
||||
|
||||
def ceph_volume_clone(pool, name, source_volume):
|
||||
"""
|
||||
Clone a Ceph RBD volume to a new volume on the PVC Ceph storage cluster.
|
||||
"""
|
||||
zk_conn = pvc_common.startZKConnection(config['coordinators'])
|
||||
retflag, retdata = pvc_ceph.clone_volume(zk_conn, pool, source_volume, name)
|
||||
if retflag:
|
||||
retcode = 200
|
||||
else:
|
||||
retcode = 400
|
||||
|
||||
pvc_common.stopZKConnection(zk_conn)
|
||||
output = {
|
||||
'message': retdata.replace('\"', '\'')
|
||||
}
|
||||
return flask.jsonify(output), retcode
|
||||
|
||||
def ceph_volume_resize(pool, name, size):
|
||||
"""
|
||||
Resize an existing Ceph RBD volume in the PVC Ceph storage cluster.
|
||||
|
@ -809,13 +809,25 @@ def api_ceph_volume_root():
|
||||
else:
|
||||
return flask.jsonify({"message":"ERROR: A pool name must be spcified."}), 400
|
||||
|
||||
# Get source_volume
|
||||
if 'source_volume' in flask.request.values:
|
||||
source_volume = flask.request.values['source_volume']
|
||||
else:
|
||||
source_volume = None
|
||||
|
||||
# Get volume size
|
||||
if 'size' in flask.request.values:
|
||||
size = flask.request.values['size']
|
||||
elif source_volume:
|
||||
# We ignore size if we're cloning a volume
|
||||
size = None
|
||||
else:
|
||||
return flask.jsonify({"message":"ERROR: A volume size in bytes (or with an M/G/T suffix) must be specified."}), 400
|
||||
|
||||
return pvcapi.ceph_volume_add(pool, volume, size)
|
||||
if source_volume:
|
||||
return pvcapi.ceph_volume_clone(pool, volume, source_volume)
|
||||
else:
|
||||
return pvcapi.ceph_volume_add(pool, volume, size)
|
||||
|
||||
@api.route('/api/v1/storage/ceph/volume/<pool>/<volume>', methods=['GET', 'PUT', 'DELETE'])
|
||||
@authenticator
|
||||
|
Reference in New Issue
Block a user