]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
mgr/dashboard: rbd: image copy implementation
authorRicardo Dias <rdias@suse.com>
Thu, 12 Apr 2018 00:34:23 +0000 (01:34 +0100)
committerRicardo Dias <rdias@suse.com>
Fri, 13 Apr 2018 14:58:49 +0000 (15:58 +0100)
Signed-off-by: Ricardo Dias <rdias@suse.com>
src/pybind/mgr/dashboard/controllers/rbd.py

index daeab560e762e2fcc448f0e339c637426f4faff4..254f4402af9358542e0527c5aa4ed2c2edb1da3e 100644 (file)
@@ -313,6 +313,34 @@ class Rbd(RESTController):
 
         return _rbd_image_call(pool_name, image_name, _edit)
 
+    @RbdTask('copy',
+             {'src_pool_name': '{pool_name}',
+              'src_image_name': '{image_name}',
+              'dest_pool_name': '{dest_pool_name}',
+              'dest_image_name': '{dest_image_name}'}, 2.0)
+    @RESTController.resource(['POST'])
+    @RESTController.args_from_json
+    def copy(self, pool_name, image_name, dest_pool_name, dest_image_name,
+             obj_size=None, features=None, stripe_unit=None,
+             stripe_count=None, data_pool=None):
+
+        def _src_copy(s_ioctx, s_img):
+            def _copy(d_ioctx):
+                # Set order
+                l_order = None
+                if obj_size and obj_size > 0:
+                    l_order = int(round(math.log(float(obj_size), 2)))
+
+                # Set features
+                feature_bitmask = _format_features(features)
+
+                s_img.copy(d_ioctx, dest_image_name, feature_bitmask, l_order,
+                           stripe_unit, stripe_count, data_pool)
+
+            return _rbd_call(dest_pool_name, _copy)
+
+        return _rbd_image_call(pool_name, image_name, _src_copy)
+
 
 @ApiController('rbd/:pool_name/:image_name/snap')
 class RbdSnapshot(RESTController):