From d7eb3cea8e28dd7e482d6674c209c142e0e33613 Mon Sep 17 00:00:00 2001 From: Imran Imtiaz Date: Mon, 1 Dec 2025 14:25:07 +0000 Subject: [PATCH] mgr/dashboard: add API endpoint to delete images from consistency groups Signed-off-by: Imran Imtiaz Fixes: https://tracker.ceph.com/issues/74033 Create a consistency group dashboard API endpoint that enables removal of RBD images from the group. --- src/pybind/mgr/dashboard/controllers/rbd.py | 16 +++++++ src/pybind/mgr/dashboard/openapi.yaml | 50 +++++++++++++++++++++ 2 files changed, 66 insertions(+) diff --git a/src/pybind/mgr/dashboard/controllers/rbd.py b/src/pybind/mgr/dashboard/controllers/rbd.py index 810555621740..4c1bbadc82f8 100644 --- a/src/pybind/mgr/dashboard/controllers/rbd.py +++ b/src/pybind/mgr/dashboard/controllers/rbd.py @@ -548,3 +548,19 @@ class RbdGroup(RESTController): RbdService.validate_namespace(ioctx, namespace) ioctx.set_namespace(namespace) return group.add_image(ioctx, image_name) + + @RESTController.Collection('DELETE', path='/{group_name}/image') + @handle_rbd_error() + @EndpointDoc("Remove image from a group", + parameters={ + 'pool_name': (str, 'Name of the pool'), + 'group_name': (str, 'Name of the group'), + 'image_name': (str, 'Name of the image'), + }, + responses={200: None}) + def remove_image(self, pool_name, group_name, image_name, namespace=None): + with mgr.rados.open_ioctx(pool_name) as ioctx: + group = rbd.Group(ioctx, group_name) + RbdService.validate_namespace(ioctx, namespace) + ioctx.set_namespace(namespace) + return group.remove_image(ioctx, image_name) diff --git a/src/pybind/mgr/dashboard/openapi.yaml b/src/pybind/mgr/dashboard/openapi.yaml index ca7683f12c72..da561a761c13 100755 --- a/src/pybind/mgr/dashboard/openapi.yaml +++ b/src/pybind/mgr/dashboard/openapi.yaml @@ -1739,6 +1739,56 @@ paths: tags: - RbdGroup /api/block/pool/{pool_name}/group/{group_name}/image: + delete: + parameters: + - description: Name of the pool + in: path + name: pool_name + required: true + schema: + type: string + - description: Name of the group + in: path + name: group_name + required: true + schema: + type: string + - description: Name of the image + in: query + name: image_name + required: true + schema: + type: string + - allowEmptyValue: true + in: query + name: namespace + schema: + type: string + responses: + '202': + content: + application/vnd.ceph.api.v1.0+json: + type: object + description: Operation is still executing. Please check the task queue. + '204': + content: + application/vnd.ceph.api.v1.0+json: + type: object + description: Resource deleted. + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + summary: Remove image from a group + tags: + - RbdGroup post: parameters: - description: Name of the pool -- 2.47.3