From 3616d31ce4f38d34cf0d5de65148c42e442dfadf Mon Sep 17 00:00:00 2001 From: avanthakkar Date: Tue, 21 Mar 2023 18:30:13 +0530 Subject: [PATCH] disable default check if already set to true for selected realm Fixes: https://tracker.ceph.com/issues/59171 Signed-off-by: avanthakkar (cherry picked from commit f658ac2670b8f4fcd1cb8231374123879cfa8a10) --- src/pybind/mgr/dashboard/controllers/rgw.py | 24 +++++----- .../rgw-multisite-details.component.scss | 2 +- .../rgw-multisite-realm-form.component.html | 3 ++ .../rgw-multisite-realm-form.component.ts | 3 ++ .../rgw-multisite-zonegroup-form.component.ts | 6 ++- .../src/app/shared/api/rgw-realm.service.ts | 8 ++-- src/pybind/mgr/dashboard/openapi.yaml | 8 ---- .../mgr/dashboard/services/rgw_client.py | 45 ++++++------------- 8 files changed, 41 insertions(+), 58 deletions(-) diff --git a/src/pybind/mgr/dashboard/controllers/rgw.py b/src/pybind/mgr/dashboard/controllers/rgw.py index a52b6e5bfbd..ffb757e86d4 100644 --- a/src/pybind/mgr/dashboard/controllers/rgw.py +++ b/src/pybind/mgr/dashboard/controllers/rgw.py @@ -710,7 +710,7 @@ class RgwRealm(RESTController): # pylint: disable=W0613 def create(self, realm_name, default, daemon_name=None): try: - instance = RgwClient.admin_instance() + instance = RgwClient.admin_instance(daemon_name=daemon_name) result = instance.create_realm(realm_name, default) return result except NoRgwDaemonsException as e: @@ -720,7 +720,7 @@ class RgwRealm(RESTController): # pylint: disable=W0613 def list(self, daemon_name=None): try: - instance = RgwClient.admin_instance() + instance = RgwClient.admin_instance(daemon_name=daemon_name) result = instance.list_realms() return result except NoRgwDaemonsException as e: @@ -730,7 +730,7 @@ class RgwRealm(RESTController): # pylint: disable=W0613 def get(self, realm_name, daemon_name=None): try: - instance = RgwClient.admin_instance() + instance = RgwClient.admin_instance(daemon_name=daemon_name) result = instance.get_realm(realm_name) return result except NoRgwDaemonsException as e: @@ -748,10 +748,10 @@ class RgwRealm(RESTController): @allow_empty_body # pylint: disable=W0613 - def set(self, realm_name, default, new_realm_name, daemon_name=None): + def set(self, realm_name: str, new_realm_name: str, default: str = None, daemon_name=None): try: - instance = RgwClient.admin_instance() - result = instance.edit_realm(realm_name, default, new_realm_name) + instance = RgwClient.admin_instance(daemon_name=daemon_name) + result = instance.edit_realm(realm_name, new_realm_name, default) return result except NoRgwDaemonsException as e: raise DashboardException(e, http_status_code=404, component='rgw') @@ -764,7 +764,7 @@ class RgwZonegroup(RESTController): def create(self, realm_name, zonegroup_name, default=None, master=None, zonegroup_endpoints=None, daemon_name=None): try: - instance = RgwClient.admin_instance() + instance = RgwClient.admin_instance(daemon_name=daemon_name) result = instance.create_zonegroup(realm_name, zonegroup_name, default, master, zonegroup_endpoints) return result @@ -775,7 +775,7 @@ class RgwZonegroup(RESTController): # pylint: disable=W0613 def list(self, daemon_name=None): try: - instance = RgwClient.admin_instance() + instance = RgwClient.admin_instance(daemon_name=daemon_name) result = instance.list_zonegroups() return result except NoRgwDaemonsException as e: @@ -785,7 +785,7 @@ class RgwZonegroup(RESTController): # pylint: disable=W0613 def get(self, zonegroup_name, daemon_name=None): try: - instance = RgwClient.admin_instance() + instance = RgwClient.admin_instance(daemon_name=daemon_name) result = instance.get_zonegroup(zonegroup_name) return result except NoRgwDaemonsException as e: @@ -809,7 +809,7 @@ class RgwZone(RESTController): def create(self, zone_name, zonegroup_name=None, default=False, master=False, zone_endpoints=None, user=None, daemon_name=None): try: - instance = RgwClient.admin_instance() + instance = RgwClient.admin_instance(daemon_name=daemon_name) result = instance.create_zone(zone_name, zonegroup_name, default, master, zone_endpoints, user) return result @@ -820,7 +820,7 @@ class RgwZone(RESTController): # pylint: disable=W0613 def list(self, daemon_name=None): try: - instance = RgwClient.admin_instance() + instance = RgwClient.admin_instance(daemon_name=daemon_name) result = instance.list_zones() return result except NoRgwDaemonsException as e: @@ -830,7 +830,7 @@ class RgwZone(RESTController): # pylint: disable=W0613 def get(self, zone_name, daemon_name=None): try: - instance = RgwClient.admin_instance() + instance = RgwClient.admin_instance(daemon_name=daemon_name) result = instance.get_zone(zone_name) return result except NoRgwDaemonsException as e: diff --git a/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-details/rgw-multisite-details.component.scss b/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-details/rgw-multisite-details.component.scss index f38f00565d2..423c078066a 100644 --- a/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-details/rgw-multisite-details.component.scss +++ b/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-details/rgw-multisite-details.component.scss @@ -5,5 +5,5 @@ } .align-inline-btns { - margin-left: 15em; + margin-left: 5em; } diff --git a/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-realm-form/rgw-multisite-realm-form.component.html b/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-realm-form/rgw-multisite-realm-form.component.html index a3f95d94979..46e732659c1 100644 --- a/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-realm-form/rgw-multisite-realm-form.component.html +++ b/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-realm-form/rgw-multisite-realm-form.component.html @@ -34,6 +34,9 @@ + + You cannot unset the default flag. Please create another realm and set it as default. + diff --git a/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-realm-form/rgw-multisite-realm-form.component.ts b/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-realm-form/rgw-multisite-realm-form.component.ts index 0d7d4e73232..b3d000c94fb 100644 --- a/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-realm-form/rgw-multisite-realm-form.component.ts +++ b/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-realm-form/rgw-multisite-realm-form.component.ts @@ -67,6 +67,9 @@ export class RgwMultisiteRealmFormComponent implements OnInit { if (this.action === 'edit') { this.multisiteRealmForm.get('realmName').setValue(this.info.data.name); this.multisiteRealmForm.get('default_realm').setValue(this.info.data.is_default); + if (this.info.data.is_default) { + this.multisiteRealmForm.get('default_realm').disable(); + } } } diff --git a/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-zonegroup-form/rgw-multisite-zonegroup-form.component.ts b/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-zonegroup-form/rgw-multisite-zonegroup-form.component.ts index 3a701a1bc0e..c36c636ce30 100644 --- a/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-zonegroup-form/rgw-multisite-zonegroup-form.component.ts +++ b/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-zonegroup-form/rgw-multisite-zonegroup-form.component.ts @@ -93,7 +93,11 @@ export class RgwMultisiteZonegroupFormComponent implements OnInit { ? this.multisiteInfo[1]['zonegroups'] : []; this.zonegroupList.forEach((zgp: any) => { - if (zgp.is_master === true && !_.isEmpty(zgp.realm_id)) { + if ( + zgp.is_master === true && + !_.isEmpty(zgp.realm_id) && + zgp.realm_id === this.defaultsInfo['defaultRealmName'] + ) { this.isMaster = true; } }); diff --git a/src/pybind/mgr/dashboard/frontend/src/app/shared/api/rgw-realm.service.ts b/src/pybind/mgr/dashboard/frontend/src/app/shared/api/rgw-realm.service.ts index 4c9c80c83f4..bacdedc19dc 100644 --- a/src/pybind/mgr/dashboard/frontend/src/app/shared/api/rgw-realm.service.ts +++ b/src/pybind/mgr/dashboard/frontend/src/app/shared/api/rgw-realm.service.ts @@ -24,13 +24,13 @@ export class RgwRealmService { } update(realm: RgwRealm, defaultRealm: boolean, newRealmName: string) { - return this.rgwDaemonService.request((params: HttpParams) => { - params = params.appendAll({ + return this.rgwDaemonService.request((requestBody: any) => { + requestBody = { realm_name: realm.name, default: defaultRealm, new_realm_name: newRealmName - }); - return this.http.put(`${this.url}/${realm.name}`, null, { params: params }); + }; + return this.http.put(`${this.url}/${realm.name}`, requestBody); }); } diff --git a/src/pybind/mgr/dashboard/openapi.yaml b/src/pybind/mgr/dashboard/openapi.yaml index 681bf03b95d..1f79dd12670 100644 --- a/src/pybind/mgr/dashboard/openapi.yaml +++ b/src/pybind/mgr/dashboard/openapi.yaml @@ -8549,22 +8549,14 @@ paths: application/json: schema: properties: -<<<<<<< HEAD - default: - default: '' -======= daemon_name: type: string default: ->>>>>>> e8048004324 (mgr/dashboard: edit rgw-multisite) type: string new_realm_name: type: string required: -<<<<<<< HEAD -======= - default ->>>>>>> e8048004324 (mgr/dashboard: edit rgw-multisite) - new_realm_name type: object responses: diff --git a/src/pybind/mgr/dashboard/services/rgw_client.py b/src/pybind/mgr/dashboard/services/rgw_client.py index 1fd66ef2be3..829a0f5c1e3 100644 --- a/src/pybind/mgr/dashboard/services/rgw_client.py +++ b/src/pybind/mgr/dashboard/services/rgw_client.py @@ -661,28 +661,11 @@ class RgwClient(RestClient): except SubprocessError as error: raise DashboardException(error, http_status_code=500, component='rgw') - def edit_realm(self, realm_name: str, default: bool, new_realm_name: str): + def edit_realm(self, realm_name: str, new_realm_name: str, default: str = None): rgw_realm_edit_cmd = [] - cmd_edit_realm_options = [] - if new_realm_name == realm_name: - if str_to_bool(default): - rgw_realm_edit_cmd = ['realm', 'default'] - cmd_edit_realm_options = ['--rgw-realm', realm_name] - rgw_realm_edit_cmd += cmd_edit_realm_options - try: - exit_code, _, err = mgr.send_rgwadmin_command(rgw_realm_edit_cmd) - if exit_code > 0: - raise DashboardException(e=err, msg='Unable to set {} as default realm'.format(realm_name), # noqa E501 #pylint: disable=line-too-long - http_status_code=500, component='rgw') - except SubprocessError as error: - raise DashboardException(error, http_status_code=500, component='rgw') - else: - raise DashboardException(msg='The realm already exists', - http_status_code=400, component='rgw') - else: - rgw_realm_edit_cmd = ['realm', 'rename'] - cmd_edit_realm_options = ['--rgw-realm', realm_name, '--realm-new-name', new_realm_name] - rgw_realm_edit_cmd += cmd_edit_realm_options + if new_realm_name != realm_name: + rgw_realm_edit_cmd = ['realm', 'rename', '--rgw-realm', + realm_name, '--realm-new-name', new_realm_name] try: exit_code, _, err = mgr.send_rgwadmin_command(rgw_realm_edit_cmd, False) if exit_code > 0: @@ -690,17 +673,15 @@ class RgwClient(RestClient): http_status_code=500, component='rgw') except SubprocessError as error: raise DashboardException(error, http_status_code=500, component='rgw') - if str_to_bool(default): - rgw_realm_edit_cmd = ['realm', 'default'] - cmd_edit_realm_options = ['--rgw-realm', new_realm_name] - rgw_realm_edit_cmd += cmd_edit_realm_options - try: - exit_code, _, _ = mgr.send_rgwadmin_command(rgw_realm_edit_cmd, False) - if exit_code > 0: - raise DashboardException(msg='Unable to set {} as default realm'.format(new_realm_name), # noqa E501 #pylint: disable=line-too-long - http_status_code=500, component='rgw') - except SubprocessError as error: - raise DashboardException(error, http_status_code=500, component='rgw') + if default and str_to_bool(default): + rgw_realm_edit_cmd = ['realm', 'default', '--rgw-realm', new_realm_name] + try: + exit_code, _, _ = mgr.send_rgwadmin_command(rgw_realm_edit_cmd, False) + if exit_code > 0: + raise DashboardException(msg='Unable to set {} as default realm'.format(new_realm_name), # noqa E501 #pylint: disable=line-too-long + http_status_code=500, component='rgw') + except SubprocessError as error: + raise DashboardException(error, http_status_code=500, component='rgw') def create_zonegroup(self, realm_name: str, zonegroup_name: str, default: bool, master: bool, endpoints: List[str]): -- 2.39.5