From: Tomer Haskalovitch Date: Mon, 8 Dec 2025 11:25:18 +0000 (+0200) Subject: mgr/dashboard: add get_subsystem nvme command X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=50528e01e5ec7c9d05ba8ac00bef5916b1f38163;p=ceph.git mgr/dashboard: add get_subsystem nvme command Signed-off-by: Tomer Haskalovitch --- diff --git a/src/pybind/mgr/dashboard/controllers/nvmeof.py b/src/pybind/mgr/dashboard/controllers/nvmeof.py index 1d04b75b5292d..27479c40aa132 100644 --- a/src/pybind/mgr/dashboard/controllers/nvmeof.py +++ b/src/pybind/mgr/dashboard/controllers/nvmeof.py @@ -310,6 +310,14 @@ else: ) ) + @NvmeofCLICommand("nvmeof get_subsystems", model.GetSubsystems) + @convert_to_model(model.GetSubsystems) + @handle_nvmeof_error + def get_subsystems(self, gw_group: Optional[str] = None, traddr: Optional[str] = None): + return NVMeoFClient(gw_group=gw_group, traddr=traddr).stub.get_subsystems( + NVMeoFClient.pb2.get_subsystems_req() + ) + @APIRouter("/nvmeof/subsystem/{nqn}/listener", Scope.NVME_OF) @APIDoc("NVMe-oF Subsystem Listener Management API", "NVMe-oF Subsystem Listener") class NVMeoFListener(RESTController): diff --git a/src/pybind/mgr/dashboard/model/nvmeof.py b/src/pybind/mgr/dashboard/model/nvmeof.py index 9b1349d2f2b6b..3539dd51f15b3 100644 --- a/src/pybind/mgr/dashboard/model/nvmeof.py +++ b/src/pybind/mgr/dashboard/model/nvmeof.py @@ -267,3 +267,43 @@ class GatewayListenersInfo(NamedTuple): class RequestStatus(NamedTuple): status: Annotated[int, CliFlags.EXCLUSIVE_RESULT] error_message: str + + +class ListenAdress(NamedTuple): + trtype: str + adrfam: str + traddr: str + trsvcid: str + transport: Optional[str] + secure: Optional[bool] + + +class NamespaceInfo(NamedTuple): + nsid: int + name: str + bdev_name: Optional[str] + nguid: Optional[str] + uuid: Optional[str] + anagrpid: Optional[int] + nonce: Optional[str] + auto_visible: Optional[bool] + hosts: List[Host] + + +class SubsystemInfo(NamedTuple): + nqn: str + subtype: str + listen_addresses: List[ListenAdress] + hosts: List[Host] + allow_any_host: bool + serial_number: Optional[str] + model_number: Optional[str] + max_namespaces: Optional[int] + min_cntlid: Optional[int] + max_cntlid: Optional[int] + namespaces: List[Namespace] + has_dhchap_key: Optional[bool] + + +class GetSubsystems(NamedTuple): + subsystems: List[Subsystem] diff --git a/src/pybind/mgr/dashboard/services/nvmeof_client.py b/src/pybind/mgr/dashboard/services/nvmeof_client.py index 8ac76f2a8e34e..31ded6cb18720 100644 --- a/src/pybind/mgr/dashboard/services/nvmeof_client.py +++ b/src/pybind/mgr/dashboard/services/nvmeof_client.py @@ -111,11 +111,14 @@ else: component="nvmeof", ) - if response.status != 0: + status = getattr(response, "status", None) + error_message = getattr(response, "error_message", None) + + if status not in (None, 0): raise DashboardException( - msg=response.error_message, - code=response.status, - http_status_code=NVMeoFError2HTTP.get(response.status, 400), + msg=error_message or "NVMeoF operation failed", + code=status, + http_status_code=NVMeoFError2HTTP.get(status, 400), # type: ignore[arg-type] component="nvmeof", ) return response