From 5fda52de0213e0e17280205144521d51f1d3f5dd Mon Sep 17 00:00:00 2001 From: Aashish Sharma Date: Fri, 23 Jan 2026 16:45:28 +0530 Subject: [PATCH] mgr/dashboard: Add Archive zone configuration to the Dashboard Allow the user to create an archive zone or modify an existing zone to make it archive Fixes: https://tracker.ceph.com/issues/74528 Signed-off-by: Aashish Sharma --- src/pybind/mgr/dashboard/controllers/rgw.py | 23 ++++++------ .../src/app/ceph/rgw/models/rgw-multisite.ts | 1 + .../rgw-multisite-details.component.html | 12 ++++--- .../rgw-multisite-migrate.component.html | 13 +++++++ .../rgw-multisite-migrate.component.ts | 2 ++ .../rgw-multisite-wizard.component.html | 31 ++++++++++++---- .../rgw-multisite-wizard.component.ts | 5 ++- .../rgw-multisite-zone-form.component.html | 14 ++++++++ .../rgw-multisite-zone-form.component.spec.ts | 5 ++- .../rgw-multisite-zone-form.component.ts | 6 ++++ .../app/shared/api/rgw-multisite.service.ts | 5 ++- .../src/app/shared/api/rgw-zone.service.ts | 7 ++-- src/pybind/mgr/dashboard/openapi.yaml | 6 ++++ .../mgr/dashboard/services/rgw_client.py | 35 ++++++++++++------- 14 files changed, 127 insertions(+), 38 deletions(-) diff --git a/src/pybind/mgr/dashboard/controllers/rgw.py b/src/pybind/mgr/dashboard/controllers/rgw.py index 1b9d9fa36de7..ec1ed24d540f 100755 --- a/src/pybind/mgr/dashboard/controllers/rgw.py +++ b/src/pybind/mgr/dashboard/controllers/rgw.py @@ -119,25 +119,26 @@ class RgwMultisiteStatus(RESTController): @allow_empty_body # pylint: disable=W0102,W0613 def migrate(self, daemon_name=None, realm_name=None, zonegroup_name=None, zone_name=None, - zonegroup_endpoints=None, zone_endpoints=None, username=None): + zonegroup_endpoints=None, zone_endpoints=None, username=None, tier_type=None): multisite_instance = RgwMultisite() result = multisite_instance.migrate_to_multisite(realm_name, zonegroup_name, zone_name, zonegroup_endpoints, - zone_endpoints, username) + zone_endpoints, username, tier_type) return result @RESTController.Collection(method='POST', path='/multisite-replications') @allow_empty_body # pylint: disable=W0102,W0613 def setup_multisite_replication(self, daemon_name=None, realm_name=None, zonegroup_name=None, - zonegroup_endpoints=None, zone_name=None, zone_endpoints=None, - username=None, cluster_fsid=None, replication_zone_name=None, - cluster_details=None, selectedRealmName=None): + zonegroup_endpoints=None, zone_name=None, tier_type=None, + zone_endpoints=None, username=None, cluster_fsid=None, + replication_zone_name=None, cluster_details=None, + selectedRealmName=None): multisite_instance = RgwMultisiteAutomation() result = multisite_instance.setup_multisite_replication(realm_name, zonegroup_name, zonegroup_endpoints, zone_name, - zone_endpoints, username, - cluster_fsid, + tier_type, zone_endpoints, + username, cluster_fsid, replication_zone_name, cluster_details, selectedRealmName) @@ -1489,11 +1490,11 @@ class RgwZone(RESTController): @allow_empty_body # pylint: disable=W0613 def create(self, zone_name, zonegroup_name=None, default=False, master=False, - zone_endpoints=None, access_key=None, secret_key=None): + zone_endpoints=None, access_key=None, secret_key=None, tier_type=''): multisite_instance = RgwMultisite() result = multisite_instance.create_zone(zone_name, zonegroup_name, default, master, zone_endpoints, access_key, - secret_key) + secret_key, tier_type) return result @allow_empty_body @@ -1538,13 +1539,13 @@ class RgwZone(RESTController): master: str = '', zone_endpoints: str = '', access_key: str = '', secret_key: str = '', placement_target: str = '', data_pool: str = '', index_pool: str = '', data_extra_pool: str = '', storage_class: str = '', data_pool_class: str = '', - compression: str = ''): + compression: str = '', tier_type: str = ''): multisite_instance = RgwMultisite() result = multisite_instance.edit_zone(zone_name, new_zone_name, zonegroup_name, default, master, zone_endpoints, access_key, secret_key, placement_target, data_pool, index_pool, data_extra_pool, storage_class, data_pool_class, - compression) + compression, tier_type) return result @Endpoint() diff --git a/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/models/rgw-multisite.ts b/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/models/rgw-multisite.ts index f2309456009e..a8afb53f6e7c 100644 --- a/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/models/rgw-multisite.ts +++ b/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/models/rgw-multisite.ts @@ -48,6 +48,7 @@ export class RgwZone { realm_id: string; notif_pool: string; endpoints: string; + tier_type: string; } export class SystemKey { diff --git a/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-details/rgw-multisite-details.component.html b/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-details/rgw-multisite-details.component.html index 59511246ac04..ddd34430c290 100644 --- a/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-details/rgw-multisite-details.component.html +++ b/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-details/rgw-multisite-details.component.html @@ -93,14 +93,18 @@ - default - + default + master - secondary-zone - + secondary-zone + + + archive +
The chosen zone name is already in use.
+
+
+ + + + Enable archival storage to keep all object versions and protect data from deletion or corruption. + +
+
+
+
+ + + + Enable archival storage to keep all object versions and protect data from deletion or corruption. + +
+