]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mgr/dashboard: Add Archive zone configuration to the Dashboard 67060/head
authorAashish Sharma <aashish@li-e9bf2ecc-2ad7-11b2-a85c-baf05c5182ab.ibm.com>
Fri, 23 Jan 2026 11:15:28 +0000 (16:45 +0530)
committerAashish Sharma <aashish@li-e9bf2ecc-2ad7-11b2-a85c-baf05c5182ab.ibm.com>
Wed, 28 Jan 2026 09:35:21 +0000 (15:05 +0530)
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 <aasharma@redhat.com>
14 files changed:
src/pybind/mgr/dashboard/controllers/rgw.py
src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/models/rgw-multisite.ts
src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-details/rgw-multisite-details.component.html
src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-migrate/rgw-multisite-migrate.component.html
src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-migrate/rgw-multisite-migrate.component.ts
src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-wizard/rgw-multisite-wizard.component.html
src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-wizard/rgw-multisite-wizard.component.ts
src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-zone-form/rgw-multisite-zone-form.component.html
src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-zone-form/rgw-multisite-zone-form.component.spec.ts
src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-zone-form/rgw-multisite-zone-form.component.ts
src/pybind/mgr/dashboard/frontend/src/app/shared/api/rgw-multisite.service.ts
src/pybind/mgr/dashboard/frontend/src/app/shared/api/rgw-zone.service.ts
src/pybind/mgr/dashboard/openapi.yaml
src/pybind/mgr/dashboard/services/rgw_client.py

index 1b9d9fa36de779d6a6e01af11e0d1d033087329c..ec1ed24d540f6d725aae043b750125e3a7392863 100755 (executable)
@@ -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()
index f2309456009e5777a97b40304dd5e999e6a4158f..a8afb53f6e7c33379eb8e03c17d8ed1ed00e6f96 100644 (file)
@@ -48,6 +48,7 @@ export class RgwZone {
   realm_id: string;
   notif_pool: string;
   endpoints: string;
+  tier_type: string;
 }
 
 export class SystemKey {
index 59511246ac045d952d26d058befc73243da84f44..ddd34430c29036858d2b019f83a0f831919ae2ef 100644 (file)
               </span>
               <cds-tag class="tag-success me-2"
                        *ngIf="node?.data?.is_default">
-                  default
-            </cds-tag>
+                    default
+              </cds-tag>
               <cds-tag class="tag-warning me-2"
                        *ngIf="node?.data?.is_master"> master </cds-tag>
               <cds-tag class="tag-warning me-2"
                        *ngIf="node?.data?.secondary_zone">
-                secondary-zone
-            </cds-tag>
+                  secondary-zone
+              </cds-tag>
+              <cds-tag class="tag-info me-2"
+                       *ngIf="node?.data?.tier_type === 'archive'">
+                  archive
+              </cds-tag>
             </div>
             <div class="btn-group align-inline-btns"
                  [ngStyle]="{'visibility': activeNodeId === node?.data?.id ? 'visible' : 'hidden'}"
index aa3f59ae9d750db6790e73bc4572003f56793ebc..aa44b8a58d70685b93c23c64859a7838dad515fd 100644 (file)
                 i18n>The chosen zone name is already in use.</span>
         </div>
       </div>
+      <div class="form-group row">
+        <div class="cd-col-form-offset">
+          <input type="checkbox"
+                 formControlName="archive_zone"
+                 id="archive_zone">
+          <label for="archive_zone"
+                 class="custom-control-label cds-ml-3"
+                 i18n>Archive</label>
+          <cd-help-text>
+            <span i18n>Enable archival storage to keep all object versions and protect data from deletion or corruption.</span>
+          </cd-help-text>
+        </div>
+      </div>
       <div class="form-group row">
         <label class="cd-col-form-label required"
                for="zone_endpoints"
index f11bc87c4589d38d9ade07aaf5162017b4bc9161..5332df20db4ff0c494023fea2e11561eebdfc051 100644 (file)
@@ -81,6 +81,7 @@ export class RgwMultisiteMigrateComponent implements OnInit {
           })
         ]
       }),
+      archive_zone: new UntypedFormControl(false),
       zone_endpoints: new UntypedFormControl(null, {
         validators: [CdValidators.url, Validators.required]
       }),
@@ -127,6 +128,7 @@ export class RgwMultisiteMigrateComponent implements OnInit {
     this.zone = new RgwZone();
     this.zone.name = values['zoneName'];
     this.zone.endpoints = values['zone_endpoints'];
+    this.zone.tier_type = values['archive_zone'] ? 'archive' : '';
     this.rgwMultisiteService
       .migrate(this.realm, this.zonegroup, this.zone, values['username'])
       .subscribe(
index 9cc4afc6bf082cb69d0a46f26f96780026706821..af96cc9bd56a54e69146cba9e6884a0d2dc4374e 100644 (file)
                           i18n>This zone name is already in use. Choose a unique name.</span>
                   </div>
                 </div>
+                <div class="form-group row">
+                  <div class="cd-col-form-offset">
+                    <input type="checkbox"
+                           formControlName="archive_zone"
+                           id="archive_zone">
+                    <label for="archive_zone"
+                           class="custom-control-label cds-ml-3"
+                           i18n>Archive</label>
+                    <cd-help-text>
+                      <span i18n>Enable archival storage to keep all object versions and protect data from deletion or corruption.</span>
+                    </cd-help-text>
+                  </div>
+                </div>
                 <div class="form-group row">
                   <label class="cd-col-form-label required"
                          for="zone_endpoints"
               </div>
             </ng-container>
             <ng-container *ngSwitchCase="2">
-              <div *ngIf="multisiteSetupForm.get('configType').value === 'newRealm'"
+              <div *ngIf="multisiteSetupForm.get('configType').value === 'newRealm' && !isMultiClusterConfigured"
                    class="ms-5">
-                <ng-container *ngIf="isMultiClusterConfigured; else newRealmReviewTemplate">
-                  <ng-container *ngTemplateOutlet="replicationTemplate"></ng-container>
+                <ng-container *ngIf="loading; else nonMultiClusterFinal">
+                  <ng-container *ngTemplateOutlet="progressTemplate"></ng-container>
                 </ng-container>
               </div>
+              <ng-template #nonMultiClusterFinal>
+                <ng-container *ngIf="!setupCompleted; else exportTokenTemplate">
+                  <ng-container *ngTemplateOutlet="reviewTemplate"></ng-container>
+                </ng-container>
+              </ng-template>
+              <div *ngIf="multisiteSetupForm.get('configType').value === 'newRealm' && isMultiClusterConfigured"
+                   class="ms-5">
+                <ng-container *ngTemplateOutlet="replicationTemplate"></ng-container>
+              </div>
               <div *ngIf="multisiteSetupForm.get('configType').value === 'existingRealm' && isMultiClusterConfigured"
                    class="ms-5">
                 <ng-container *ngIf="!loading; else loadingTemplate">
                 </ng-container>
               </div>
             </ng-container>
-            <ng-template #newRealmReviewTemplate>
-              <ng-container *ngTemplateOutlet="reviewTemplate"></ng-container>
-            </ng-template>
             <ng-template #replicationTemplate>
               <div class="form-group row">
                 <label class="cd-col-form-label required"
index e29e186454c32cbdf0a9b5ec44be76ccb64f154e..f908df6750a78e77f44240fec12cf7bacc54990a 100644 (file)
@@ -223,6 +223,7 @@ export class RgwMultisiteWizardComponent extends BaseModal implements OnInit {
       zoneName: new UntypedFormControl('default_zone', {
         validators: [Validators.required]
       }),
+      archive_zone: new UntypedFormControl(false, {}),
       zone_endpoints: new UntypedFormControl(null, {
         validators: [Validators.required]
       }),
@@ -296,7 +297,7 @@ export class RgwMultisiteWizardComponent extends BaseModal implements OnInit {
       const zoneName = values['zoneName'];
       const zoneEndpoints = this.rgwEndpoints.value.join(',');
       const username = values['username'];
-
+      const tierType = values['archive_zone'] ? 'archive' : '';
       if (!this.isMultiClusterConfigured || this.stepsToSkip['Select Cluster']) {
         this.rgwMultisiteService
           .setUpMultisiteReplication(
@@ -304,6 +305,7 @@ export class RgwMultisiteWizardComponent extends BaseModal implements OnInit {
             zonegroupName,
             zonegroupEndpoints,
             zoneName,
+            tierType,
             zoneEndpoints,
             username
           )
@@ -329,6 +331,7 @@ export class RgwMultisiteWizardComponent extends BaseModal implements OnInit {
             zonegroupName,
             zonegroupEndpoints,
             zoneName,
+            tierType,
             zoneEndpoints,
             username,
             cluster,
index b30a8f1b7804016e61c80c75856a66ac83a269ce..093032c6aadc791ed9ee455a544b951e38462ee0 100644 (file)
           </cd-help-text>
         </cds-checkbox>
       </div>
+      <div class="form-item">
+        <cds-checkbox
+          id="archive_zone"
+          formControlName="archive_zone"
+          cdOptionalField="Archive"
+          i18n
+          >Archive
+          <cd-help-text>
+            <span
+              >Enable archival storage to keep all object versions and protect data from deletion or corruption.</span
+            >
+          </cd-help-text>
+        </cds-checkbox>
+      </div>
       <div class="form-item">
         <cds-text-label
           i18n
index 64ab2b15de67f2a993a359c70927f7ff2d8869cf..79b12d4d8bbded38a7863d1a5916af5f7b6fbb45 100644 (file)
@@ -90,7 +90,10 @@ describe('RgwMultisiteZoneFormComponent', () => {
         is_master: true,
         endpoints: ['http://192.168.100.100:80'],
         access_key: 'zxcftyuuhgg',
-        secret_key: 'Qwsdcfgghuiioklpoozsd'
+        secret_key: 'Qwsdcfgghuiioklpoozsd',
+        info: {
+          tier_type: 'archive'
+        }
       }
     };
 
index 6955bc2de9f54b581b83e82e4e9e8eaa29a8bde0..0c434d3540056916c9c02138a7027395aca11f75 100644 (file)
@@ -87,6 +87,7 @@ export class RgwMultisiteZoneFormComponent extends CdForm implements OnInit {
       }),
       default_zone: new UntypedFormControl(false),
       master_zone: new UntypedFormControl(false),
+      archive_zone: new UntypedFormControl(false),
       selectedZonegroup: new UntypedFormControl(null),
       zone_endpoints: new UntypedFormControl(null, {
         validators: [CdValidators.url, Validators.required]
@@ -162,6 +163,9 @@ export class RgwMultisiteZoneFormComponent extends CdForm implements OnInit {
       this.multisiteZoneForm.get('zone_endpoints').setValue(this.info.data.endpoints.toString());
       this.multisiteZoneForm.get('access_key').setValue(this.info.data.access_key);
       this.multisiteZoneForm.get('secret_key').setValue(this.info.data.secret_key);
+      this.multisiteZoneForm
+        .get('archive_zone')
+        .setValue(this.info.data.info.tier_type === 'archive');
       this.multisiteZoneForm
         .get('placementTarget')
         .setValue((this.info.data?.parentNode || this.info.parent.data)?.default_placement);
@@ -240,6 +244,7 @@ export class RgwMultisiteZoneFormComponent extends CdForm implements OnInit {
       this.zone.system_key = new SystemKey();
       this.zone.system_key.access_key = values['access_key'];
       this.zone.system_key.secret_key = values['secret_key'];
+      this.zone.tier_type = values['archive_zone'] ? 'archive' : '';
       this.rgwZoneService
         .create(
           this.zone,
@@ -269,6 +274,7 @@ export class RgwMultisiteZoneFormComponent extends CdForm implements OnInit {
       this.zone.system_key = new SystemKey();
       this.zone.system_key.access_key = values['access_key'];
       this.zone.system_key.secret_key = values['secret_key'];
+      this.zone.tier_type = values['archive_zone'] ? 'archive' : '';
       this.rgwZoneService
         .update(
           this.zone,
index 808362b90fb6be2aa785652ebad971edb962cea3..25bc6b7dc666b120f03088a480ad8e760546bd55 100644 (file)
@@ -32,7 +32,8 @@ export class RgwMultisiteService {
         zone_name: zone.name,
         zonegroup_endpoints: zonegroup.endpoints,
         zone_endpoints: zone.endpoints,
-        username: username
+        username: username,
+        tier_type: zone.tier_type
       });
       return this.http.put(`${this.uiUrl}/migrate`, null, { params: params });
     });
@@ -90,6 +91,7 @@ export class RgwMultisiteService {
     zonegroupName: string,
     zonegroupEndpoints: string,
     zoneName: string,
+    tierType: string,
     zoneEndpoints: string,
     username: string,
     cluster?: string,
@@ -102,6 +104,7 @@ export class RgwMultisiteService {
       .set('zonegroup_name', zonegroupName)
       .set('zonegroup_endpoints', zonegroupEndpoints)
       .set('zone_name', zoneName)
+      .set('tier_type', tierType)
       .set('zone_endpoints', zoneEndpoints)
       .set('username', username);
 
index c958b2e3928857a605116c2b51768aa0aa18ef2b..ab22e399eefc03adb157f12bc0850e4969ad69d9 100644 (file)
@@ -28,7 +28,8 @@ export class RgwZoneService {
       master: master,
       zone_endpoints: endpoints,
       access_key: zone.system_key.access_key,
-      secret_key: zone.system_key.secret_key
+      secret_key: zone.system_key.secret_key,
+      tier_type: zone.tier_type
     });
     return this.http.post(`${this.url}`, null, { params: params });
   }
@@ -93,7 +94,8 @@ export class RgwZoneService {
       data_extra_pool: dataExtraPool,
       storage_class: storageClass,
       data_pool_class: dataPoolClass,
-      compression: compression
+      compression: compression,
+      tier_type: zone.tier_type
     };
     return this.http.put(`${this.url}/${zone.name}`, requestBody);
   }
@@ -120,6 +122,7 @@ export class RgwZoneService {
     nodes['is_default'] = zone.id === defaultZoneId ? true : false;
     nodes['endpoints'] = zone.endpoints;
     nodes['is_master'] = zonegroup && zonegroup.master_zone === zone.id ? true : false;
+    nodes['tier_type'] = zonegroup?.zones?.find((z) => z.name === zone.name)?.tier_type || '';
     nodes['type'] = 'zone';
     const zoneNames = zones.map((zone: RgwZone) => {
       return zone['name'];
index 0c06a1ae2a9eaf01ea8cbf9a23de84a8c0d4aa04..1468fd1b41c9ff9775bfd955f0d3d22ab012b395 100755 (executable)
@@ -15984,6 +15984,9 @@ paths:
                   type: boolean
                 secret_key:
                   type: string
+                tier_type:
+                  default: ''
+                  type: string
                 zone_endpoints:
                   type: string
                 zone_name:
@@ -16355,6 +16358,9 @@ paths:
                 storage_class:
                   default: ''
                   type: string
+                tier_type:
+                  default: ''
+                  type: string
                 zone_endpoints:
                   default: ''
                   type: string
index 1ea1f0e63de83e6e5e12396a5f3f562a22aa951c..5355a9ef18562530c58871c469a826413bf7faac 100755 (executable)
@@ -1332,8 +1332,8 @@ class RgwMultisiteAutomation:
 
     def setup_multisite_replication(self, realm_name: str, zonegroup_name: str,
                                     zonegroup_endpoints: str, zone_name: str,
-                                    zone_endpoints: str, username: str,
-                                    cluster_fsid: Optional[str] = None,
+                                    tier_type: str, zone_endpoints: str,
+                                    username: str, cluster_fsid: Optional[str] = None,
                                     replication_zone_name: Optional[str] = None,
                                     cluster_details: Optional[str] = None,
                                     selectedRealmName: Optional[str] = None):
@@ -1355,7 +1355,8 @@ class RgwMultisiteAutomation:
         if not selectedRealmName:
             self.create_realm_and_zonegroup(
                 realm_name, zonegroup_name, zone_name, zonegroup_ip_url, username)
-            self.create_zone_and_user(zone_name, zonegroup_name, username, zone_ip_url)
+            self.create_zone_and_user(zone_name, tier_type, zonegroup_name, username,
+                                      zone_ip_url)
             self.restart_daemons()
 
         return self.export_and_import_realm(
@@ -1390,12 +1391,14 @@ class RgwMultisiteAutomation:
             self.update_progress("Failed to create realm or zonegroup", 'fail', str(e))
             raise
 
-    def create_zone_and_user(self, zone: str, zg: str, username: str, zone_url: str):
+    def create_zone_and_user(self, zone: str, tier_type: str, zg: str, username: str,
+                             zone_url: str):
         try:
             rgw_multisite_instance = RgwMultisite()
             if rgw_multisite_instance.create_zone(zone_name=zone, zonegroup_name=zg, default=True,
                                                   master=True, endpoints=zone_url,
-                                                  access_key=None, secret_key=None):
+                                                  access_key=None, secret_key=None,
+                                                  tier_type=tier_type):
                 self.progress_done += 1
                 user_details = rgw_multisite_instance.create_system_user(username, zone)
                 keys = user_details.get('keys', [{}])[0]
@@ -1405,7 +1408,7 @@ class RgwMultisiteAutomation:
                     rgw_multisite_instance.modify_zone(
                         zone_name=zone, zonegroup_name=zg, default='true',
                         master='true', endpoints=zone_url, access_key=access_key,
-                        secret_key=secret_key)
+                        secret_key=secret_key, tier_type=tier_type)
                 else:
                     raise DashboardException("Access key or secret key is missing",
                                              component='rgw', http_status_code=500)
@@ -1769,7 +1772,8 @@ class RgwRateLimit:
 
 class RgwMultisite:
     def migrate_to_multisite(self, realm_name: str, zonegroup_name: str, zone_name: str,
-                             zonegroup_endpoints: str, zone_endpoints: str, username: str):
+                             zonegroup_endpoints: str, zone_endpoints: str, username: str,
+                             tier_type: str):
         rgw_realm_create_cmd = ['realm', 'create', '--rgw-realm', realm_name, '--default']
         try:
             exit_code, _, err = mgr.send_rgwadmin_command(rgw_realm_create_cmd, False)
@@ -1845,7 +1849,8 @@ class RgwMultisite:
                                      default='true', master='true',
                                      endpoints=zone_endpoints,
                                      access_key=keys['access_key'],
-                                     secret_key=keys['secret_key'])
+                                     secret_key=keys['secret_key'],
+                                     tier_type=tier_type)
                 else:
                     raise DashboardException(msg='Access key or secret key is missing',
                                              http_status_code=500, component='rgw')
@@ -2365,7 +2370,7 @@ class RgwMultisite:
             raise DashboardException(error, http_status_code=500, component='rgw')
 
     def create_zone(self, zone_name, zonegroup_name, default, master, endpoints, access_key,
-                    secret_key):
+                    secret_key, tier_type):
         rgw_zone_create_cmd = ['zone', 'create']
         cmd_create_zone_options = ['--rgw-zone', zone_name]
         if zonegroup_name != 'null':
@@ -2384,6 +2389,9 @@ class RgwMultisite:
         if secret_key is not None:
             cmd_create_zone_options.append('--secret')
             cmd_create_zone_options.append(secret_key)
+        if tier_type:
+            cmd_create_zone_options.append('--tier-type')
+            cmd_create_zone_options.append(tier_type)
         rgw_zone_create_cmd += cmd_create_zone_options
         try:
             exit_code, out, err = mgr.send_rgwadmin_command(rgw_zone_create_cmd)
@@ -2405,7 +2413,7 @@ class RgwMultisite:
         return '', ''
 
     def modify_zone(self, zone_name: str, zonegroup_name: str, default: str, master: str,
-                    endpoints: str, access_key: str, secret_key: str):
+                    endpoints: str, access_key: str, secret_key: str, tier_type: str):
         rgw_zone_modify_cmd = ['zone', 'modify', '--rgw-zonegroup',
                                zonegroup_name, '--rgw-zone', zone_name]
         if endpoints:
@@ -2421,6 +2429,9 @@ class RgwMultisite:
         if secret_key is not None:
             rgw_zone_modify_cmd.append('--secret')
             rgw_zone_modify_cmd.append(secret_key)
+        if tier_type is not None:
+            rgw_zone_modify_cmd.append('--tier-type')
+            rgw_zone_modify_cmd.append(tier_type)
         try:
             exit_code, _, err = mgr.send_rgwadmin_command(rgw_zone_modify_cmd)
             if exit_code > 0:
@@ -2496,7 +2507,7 @@ class RgwMultisite:
                   master: str = '', 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 = ''):
         if new_zone_name != zone_name:
             rgw_zone_rename_cmd = ['zone', 'rename', '--rgw-zone',
                                    zone_name, '--zone-new-name', new_zone_name]
@@ -2510,7 +2521,7 @@ class RgwMultisite:
                 raise DashboardException(error, http_status_code=500, component='rgw')
             self.update_period()
         self.modify_zone(new_zone_name, zonegroup_name, default, master, endpoints, access_key,
-                         secret_key)
+                         secret_key, tier_type)
 
         if placement_target:
             self.add_placement_targets_storage_class_zone(