xref: /spdk/python/spdk/spdkcli/ui_root.py (revision 1758092c7de201bc2a19abefe6c361e41d31c12d)
1588dfe31SMichal Berger#  SPDX-License-Identifier: BSD-3-Clause
2588dfe31SMichal Berger#  Copyright (C) 2018 Intel Corporation.
3588dfe31SMichal Berger#  All rights reserved.
4588dfe31SMichal Berger
57610bc38SKonrad Sztyberfrom .ui_node import UINode, UIBdevs, UILvolStores, UIVhosts
67610bc38SKonrad Sztyberfrom .ui_node_nvmf import UINVMf
77610bc38SKonrad Sztyberfrom .ui_node_iscsi import UIISCSI
87610bc38SKonrad Sztyberfrom .. import rpc
97610bc38SKonrad Sztyberfrom functools import wraps
107610bc38SKonrad Sztyber
117610bc38SKonrad Sztyber
127610bc38SKonrad Sztyberclass UIRoot(UINode):
137610bc38SKonrad Sztyber    """
147610bc38SKonrad Sztyber    Root node for CLI menu tree structure. Refreshes running config on startup.
157610bc38SKonrad Sztyber    """
167610bc38SKonrad Sztyber    def __init__(self, client, shell):
177610bc38SKonrad Sztyber        UINode.__init__(self, "/", shell=shell)
187610bc38SKonrad Sztyber        self.current_bdevs = []
197610bc38SKonrad Sztyber        self.current_lvol_stores = []
207610bc38SKonrad Sztyber        self.current_vhost_ctrls = []
217610bc38SKonrad Sztyber        self.current_nvmf_transports = []
227610bc38SKonrad Sztyber        self.current_nvmf_subsystems = []
23470e8518SSlawomir Ptak        self.current_nvmf_referrals = []
247610bc38SKonrad Sztyber        self.set_rpc_target(client)
257610bc38SKonrad Sztyber        self.verbose = False
267610bc38SKonrad Sztyber        self.is_init = self.check_init()
277610bc38SKonrad Sztyber        self.methods = []
287610bc38SKonrad Sztyber
297610bc38SKonrad Sztyber    def refresh(self):
307610bc38SKonrad Sztyber        self.methods = self.rpc_get_methods(current=True)
317610bc38SKonrad Sztyber        if self.is_init is False:
327610bc38SKonrad Sztyber            methods = "\n".join(self.methods)
337610bc38SKonrad Sztyber            self.shell.log.warning("SPDK Application is not yet initialized.\n"
347610bc38SKonrad Sztyber                                   "Please initialize subsystems with framework_start_init command.\n"
357610bc38SKonrad Sztyber                                   "List of available commands in current state:\n"
367610bc38SKonrad Sztyber                                   "%s" % methods)
377610bc38SKonrad Sztyber        else:
387610bc38SKonrad Sztyber            # Pass because we'd like to build main tree structure for "ls"
397610bc38SKonrad Sztyber            # even if state is uninitialized
407610bc38SKonrad Sztyber            pass
417610bc38SKonrad Sztyber
427610bc38SKonrad Sztyber        self._children = set([])
437610bc38SKonrad Sztyber        UIBdevs(self)
447610bc38SKonrad Sztyber        UILvolStores(self)
45e0516095STomasz Zawadzki        if self.has_subsystem("vhost_scsi") or self.has_subsystem("vhost_blk"):
467610bc38SKonrad Sztyber            UIVhosts(self)
477610bc38SKonrad Sztyber        if self.has_subsystem("nvmf"):
487610bc38SKonrad Sztyber            UINVMf(self)
497610bc38SKonrad Sztyber        if self.has_subsystem("iscsi"):
507610bc38SKonrad Sztyber            UIISCSI(self)
517610bc38SKonrad Sztyber
527610bc38SKonrad Sztyber    def set_rpc_target(self, client):
537610bc38SKonrad Sztyber        self.client = client
547610bc38SKonrad Sztyber
557610bc38SKonrad Sztyber    def print_array(self, a):
567610bc38SKonrad Sztyber        return " ".join(a)
577610bc38SKonrad Sztyber
587610bc38SKonrad Sztyber    def verbose(f):
597610bc38SKonrad Sztyber        # For any configuration calls (create, delete, construct, etc.)
607610bc38SKonrad Sztyber        # Check if verbose option is to be used and set appropriately.
617610bc38SKonrad Sztyber        # Do not use for "get_*" methods so that output is not
627610bc38SKonrad Sztyber        # flooded.
637610bc38SKonrad Sztyber        def w(self, **kwargs):
647610bc38SKonrad Sztyber            self.client.log_set_level("INFO" if self.verbose else "ERROR")
657610bc38SKonrad Sztyber            r = f(self, **kwargs)
667610bc38SKonrad Sztyber            self.client.log_set_level("ERROR")
677610bc38SKonrad Sztyber            return r
687610bc38SKonrad Sztyber        return w
697610bc38SKonrad Sztyber
707610bc38SKonrad Sztyber    def is_method_available(f):
717610bc38SKonrad Sztyber        # Check if method f is available for given spdk target
727610bc38SKonrad Sztyber        def w(self, **kwargs):
737610bc38SKonrad Sztyber            if f.__name__ in self.methods:
747610bc38SKonrad Sztyber                r = f(self, **kwargs)
757610bc38SKonrad Sztyber                return r
767610bc38SKonrad Sztyber            # If given method is not available return empty list
777610bc38SKonrad Sztyber            # similar to real get_* like rpc
787610bc38SKonrad Sztyber            return []
797610bc38SKonrad Sztyber        return w
807610bc38SKonrad Sztyber
817610bc38SKonrad Sztyber    def ui_command_framework_start_init(self):
827610bc38SKonrad Sztyber        if rpc.framework_start_init(self.client):
837610bc38SKonrad Sztyber            self.is_init = True
847610bc38SKonrad Sztyber            self.refresh()
857610bc38SKonrad Sztyber
867610bc38SKonrad Sztyber    def ui_command_load_config(self, filename):
877610bc38SKonrad Sztyber        with open(filename, "r") as fd:
887610bc38SKonrad Sztyber            rpc.load_config(self.client, fd)
897610bc38SKonrad Sztyber
907610bc38SKonrad Sztyber    def ui_command_load_subsystem_config(self, filename):
917610bc38SKonrad Sztyber        with open(filename, "r") as fd:
927610bc38SKonrad Sztyber            rpc.load_subsystem_config(self.client, fd)
937610bc38SKonrad Sztyber
947610bc38SKonrad Sztyber    def ui_command_save_config(self, filename, indent=2):
957610bc38SKonrad Sztyber        with open(filename, "w") as fd:
967610bc38SKonrad Sztyber            rpc.save_config(self.client, fd, indent)
977610bc38SKonrad Sztyber
987610bc38SKonrad Sztyber    def ui_command_save_subsystem_config(self, filename, subsystem, indent=2):
997610bc38SKonrad Sztyber        with open(filename, "w") as fd:
1007610bc38SKonrad Sztyber            rpc.save_subsystem_config(self.client, fd, indent, subsystem)
1017610bc38SKonrad Sztyber
1027610bc38SKonrad Sztyber    def rpc_get_methods(self, current=False):
1037610bc38SKonrad Sztyber        return rpc.rpc_get_methods(self.client, current=current)
1047610bc38SKonrad Sztyber
1057610bc38SKonrad Sztyber    def check_init(self):
1067610bc38SKonrad Sztyber        return "framework_start_init" not in self.rpc_get_methods(current=True)
1077610bc38SKonrad Sztyber
1087610bc38SKonrad Sztyber    def bdev_get_bdevs(self, bdev_type):
1097610bc38SKonrad Sztyber        if self.is_init:
1107610bc38SKonrad Sztyber            self.current_bdevs = rpc.bdev.bdev_get_bdevs(self.client)
1117610bc38SKonrad Sztyber            # Following replace needs to be done in order for some of the bdev
1127610bc38SKonrad Sztyber            # listings to work: logical volumes, split disk.
1137610bc38SKonrad Sztyber            # For example logical volumes: listing in menu is "Logical_Volume"
1147610bc38SKonrad Sztyber            # (cannot have space), but the product name in SPDK is "Logical Volume"
1157610bc38SKonrad Sztyber            bdev_type = bdev_type.replace("_", " ")
1167610bc38SKonrad Sztyber            for bdev in [x for x in self.current_bdevs if bdev_type in x["product_name"].lower()]:
1177610bc38SKonrad Sztyber                test = Bdev(bdev)
1187610bc38SKonrad Sztyber                yield test
1197610bc38SKonrad Sztyber
1207610bc38SKonrad Sztyber    def bdev_get_iostat(self, **kwargs):
1217610bc38SKonrad Sztyber        return rpc.bdev.bdev_get_iostat(self.client, **kwargs)
1227610bc38SKonrad Sztyber
1237610bc38SKonrad Sztyber    @verbose
1247610bc38SKonrad Sztyber    def bdev_split_create(self, **kwargs):
1257610bc38SKonrad Sztyber        response = rpc.bdev.bdev_split_create(self.client, **kwargs)
1267610bc38SKonrad Sztyber        return self.print_array(response)
1277610bc38SKonrad Sztyber
1287610bc38SKonrad Sztyber    @verbose
1297610bc38SKonrad Sztyber    def bdev_split_delete(self, **kwargs):
1307610bc38SKonrad Sztyber        rpc.bdev.bdev_split_delete(self.client, **kwargs)
1317610bc38SKonrad Sztyber
1327610bc38SKonrad Sztyber    @verbose
1337610bc38SKonrad Sztyber    def create_malloc_bdev(self, **kwargs):
1347610bc38SKonrad Sztyber        response = rpc.bdev.bdev_malloc_create(self.client, **kwargs)
1357610bc38SKonrad Sztyber        return response
1367610bc38SKonrad Sztyber
1377610bc38SKonrad Sztyber    @verbose
1387610bc38SKonrad Sztyber    def bdev_malloc_delete(self, **kwargs):
1397610bc38SKonrad Sztyber        rpc.bdev.bdev_malloc_delete(self.client, **kwargs)
1407610bc38SKonrad Sztyber
1417610bc38SKonrad Sztyber    @verbose
1427610bc38SKonrad Sztyber    def create_iscsi_bdev(self, **kwargs):
1437610bc38SKonrad Sztyber        response = rpc.bdev.bdev_iscsi_create(self.client, **kwargs)
1447610bc38SKonrad Sztyber        return response
1457610bc38SKonrad Sztyber
1467610bc38SKonrad Sztyber    @verbose
1477610bc38SKonrad Sztyber    def bdev_iscsi_delete(self, **kwargs):
1487610bc38SKonrad Sztyber        rpc.bdev.bdev_iscsi_delete(self.client, **kwargs)
1497610bc38SKonrad Sztyber
1507610bc38SKonrad Sztyber    @verbose
1517610bc38SKonrad Sztyber    def bdev_aio_create(self, **kwargs):
1527610bc38SKonrad Sztyber        response = rpc.bdev.bdev_aio_create(self.client, **kwargs)
1537610bc38SKonrad Sztyber        return response
1547610bc38SKonrad Sztyber
1557610bc38SKonrad Sztyber    @verbose
1567610bc38SKonrad Sztyber    def bdev_aio_delete(self, **kwargs):
1577610bc38SKonrad Sztyber        rpc.bdev.bdev_aio_delete(self.client, **kwargs)
1587610bc38SKonrad Sztyber
1597610bc38SKonrad Sztyber    @verbose
1607610bc38SKonrad Sztyber    def create_lvol_bdev(self, **kwargs):
1617610bc38SKonrad Sztyber        response = rpc.lvol.bdev_lvol_create(self.client, **kwargs)
1627610bc38SKonrad Sztyber        return response
1637610bc38SKonrad Sztyber
1647610bc38SKonrad Sztyber    @verbose
1657610bc38SKonrad Sztyber    def bdev_lvol_delete(self, **kwargs):
1667610bc38SKonrad Sztyber        response = rpc.lvol.bdev_lvol_delete(self.client, **kwargs)
1677610bc38SKonrad Sztyber        return response
1687610bc38SKonrad Sztyber
1697610bc38SKonrad Sztyber    @verbose
1707610bc38SKonrad Sztyber    def create_nvme_bdev(self, **kwargs):
1717610bc38SKonrad Sztyber        response = rpc.bdev.bdev_nvme_attach_controller(self.client, **kwargs)
1727610bc38SKonrad Sztyber        return response
1737610bc38SKonrad Sztyber
1747610bc38SKonrad Sztyber    @verbose
1757610bc38SKonrad Sztyber    def bdev_nvme_detach_controller(self, **kwargs):
1767610bc38SKonrad Sztyber        rpc.bdev.bdev_nvme_detach_controller(self.client, **kwargs)
1777610bc38SKonrad Sztyber
1787610bc38SKonrad Sztyber    @verbose
1797610bc38SKonrad Sztyber    def bdev_null_create(self, **kwargs):
1807610bc38SKonrad Sztyber        response = rpc.bdev.bdev_null_create(self.client, **kwargs)
1817610bc38SKonrad Sztyber        return response
1827610bc38SKonrad Sztyber
1837610bc38SKonrad Sztyber    @verbose
1847610bc38SKonrad Sztyber    def bdev_null_delete(self, **kwargs):
1857610bc38SKonrad Sztyber        rpc.bdev.bdev_null_delete(self.client, **kwargs)
1867610bc38SKonrad Sztyber
1877610bc38SKonrad Sztyber    @verbose
1887610bc38SKonrad Sztyber    def create_error_bdev(self, **kwargs):
1897610bc38SKonrad Sztyber        response = rpc.bdev.bdev_error_create(self.client, **kwargs)
1907610bc38SKonrad Sztyber
1917610bc38SKonrad Sztyber    @verbose
1927610bc38SKonrad Sztyber    def bdev_error_delete(self, **kwargs):
1937610bc38SKonrad Sztyber        rpc.bdev.bdev_error_delete(self.client, **kwargs)
1947610bc38SKonrad Sztyber
1957610bc38SKonrad Sztyber    @verbose
1967610bc38SKonrad Sztyber    @is_method_available
1977610bc38SKonrad Sztyber    def bdev_lvol_get_lvstores(self):
1987610bc38SKonrad Sztyber        if self.is_init:
1997610bc38SKonrad Sztyber            self.current_lvol_stores = rpc.lvol.bdev_lvol_get_lvstores(self.client)
2007610bc38SKonrad Sztyber            for lvs in self.current_lvol_stores:
2017610bc38SKonrad Sztyber                yield LvolStore(lvs)
2027610bc38SKonrad Sztyber
2037610bc38SKonrad Sztyber    @verbose
2047610bc38SKonrad Sztyber    def bdev_lvol_create_lvstore(self, **kwargs):
2057610bc38SKonrad Sztyber        response = rpc.lvol.bdev_lvol_create_lvstore(self.client, **kwargs)
2067610bc38SKonrad Sztyber        return response
2077610bc38SKonrad Sztyber
2087610bc38SKonrad Sztyber    @verbose
2097610bc38SKonrad Sztyber    def bdev_lvol_delete_lvstore(self, **kwargs):
2107610bc38SKonrad Sztyber        rpc.lvol.bdev_lvol_delete_lvstore(self.client, **kwargs)
2117610bc38SKonrad Sztyber
2127610bc38SKonrad Sztyber    @verbose
2137610bc38SKonrad Sztyber    def create_rbd_bdev(self, **kwargs):
2147610bc38SKonrad Sztyber        response = rpc.bdev.bdev_rbd_create(self.client, **kwargs)
2157610bc38SKonrad Sztyber        return response
2167610bc38SKonrad Sztyber
2177610bc38SKonrad Sztyber    @verbose
2187610bc38SKonrad Sztyber    def bdev_rbd_delete(self, **kwargs):
2197610bc38SKonrad Sztyber        response = rpc.bdev.bdev_rbd_delete(self.client, **kwargs)
2207610bc38SKonrad Sztyber        return response
2217610bc38SKonrad Sztyber
2227610bc38SKonrad Sztyber    @verbose
2237610bc38SKonrad Sztyber    def create_virtio_dev(self, **kwargs):
2247610bc38SKonrad Sztyber        response = rpc.vhost.bdev_virtio_attach_controller(self.client, **kwargs)
2257610bc38SKonrad Sztyber        return self.print_array(response)
2267610bc38SKonrad Sztyber
2277610bc38SKonrad Sztyber    @verbose
2287610bc38SKonrad Sztyber    def bdev_virtio_detach_controller(self, **kwargs):
2297610bc38SKonrad Sztyber        response = rpc.vhost.bdev_virtio_detach_controller(self.client, **kwargs)
2307610bc38SKonrad Sztyber        return response
2317610bc38SKonrad Sztyber
2327610bc38SKonrad Sztyber    @verbose
2337610bc38SKonrad Sztyber    def bdev_raid_create(self, **kwargs):
2347610bc38SKonrad Sztyber        rpc.bdev.bdev_raid_create(self.client, **kwargs)
2357610bc38SKonrad Sztyber
2367610bc38SKonrad Sztyber    @verbose
2377610bc38SKonrad Sztyber    def bdev_raid_delete(self, **kwargs):
2387610bc38SKonrad Sztyber        rpc.bdev.bdev_raid_delete(self.client, **kwargs)
2397610bc38SKonrad Sztyber
2407610bc38SKonrad Sztyber    @verbose
241da846dd4SKarol Latecki    def bdev_uring_create(self, **kwargs):
242da846dd4SKarol Latecki        response = rpc.bdev.bdev_uring_create(self.client, **kwargs)
243da846dd4SKarol Latecki        return response
244da846dd4SKarol Latecki
245da846dd4SKarol Latecki    @verbose
246da846dd4SKarol Latecki    def bdev_uring_delete(self, **kwargs):
247da846dd4SKarol Latecki        rpc.bdev.bdev_uring_delete(self.client, **kwargs)
248da846dd4SKarol Latecki
249da846dd4SKarol Latecki    @verbose
2507610bc38SKonrad Sztyber    @is_method_available
2517610bc38SKonrad Sztyber    def bdev_virtio_scsi_get_devices(self):
2527610bc38SKonrad Sztyber        if self.is_init:
2537610bc38SKonrad Sztyber            for bdev in rpc.vhost.bdev_virtio_scsi_get_devices(self.client):
2547610bc38SKonrad Sztyber                test = Bdev(bdev)
2557610bc38SKonrad Sztyber                yield test
2567610bc38SKonrad Sztyber
2577610bc38SKonrad Sztyber    def list_vhost_ctrls(self):
2587610bc38SKonrad Sztyber        if self.is_init:
2597610bc38SKonrad Sztyber            self.current_vhost_ctrls = rpc.vhost.vhost_get_controllers(self.client)
2607610bc38SKonrad Sztyber
2617610bc38SKonrad Sztyber    @verbose
2627610bc38SKonrad Sztyber    @is_method_available
2637610bc38SKonrad Sztyber    def vhost_get_controllers(self, ctrlr_type):
2647610bc38SKonrad Sztyber        if self.is_init:
2657610bc38SKonrad Sztyber            self.list_vhost_ctrls()
2667610bc38SKonrad Sztyber            for ctrlr in [x for x in self.current_vhost_ctrls if ctrlr_type in list(x["backend_specific"].keys())]:
2677610bc38SKonrad Sztyber                yield VhostCtrlr(ctrlr)
2687610bc38SKonrad Sztyber
2697610bc38SKonrad Sztyber    @verbose
2707610bc38SKonrad Sztyber    def vhost_delete_controller(self, **kwargs):
2717610bc38SKonrad Sztyber        rpc.vhost.vhost_delete_controller(self.client, **kwargs)
2727610bc38SKonrad Sztyber
2737610bc38SKonrad Sztyber    @verbose
2747610bc38SKonrad Sztyber    def vhost_create_scsi_controller(self, **kwargs):
2757610bc38SKonrad Sztyber        rpc.vhost.vhost_create_scsi_controller(self.client, **kwargs)
2767610bc38SKonrad Sztyber
2777610bc38SKonrad Sztyber    @verbose
278dc93bd85SHaoqian He    def vhost_start_scsi_controller(self, **kwargs):
279dc93bd85SHaoqian He        rpc.vhost.vhost_start_scsi_controller(self.client, **kwargs)
280dc93bd85SHaoqian He
281dc93bd85SHaoqian He    @verbose
2827610bc38SKonrad Sztyber    def vhost_create_blk_controller(self, **kwargs):
2837610bc38SKonrad Sztyber        rpc.vhost.vhost_create_blk_controller(self.client, **kwargs)
2847610bc38SKonrad Sztyber
2857610bc38SKonrad Sztyber    @verbose
2867610bc38SKonrad Sztyber    def vhost_scsi_controller_remove_target(self, **kwargs):
2877610bc38SKonrad Sztyber        rpc.vhost.vhost_scsi_controller_remove_target(self.client, **kwargs)
2887610bc38SKonrad Sztyber
2897610bc38SKonrad Sztyber    @verbose
2907610bc38SKonrad Sztyber    def vhost_scsi_controller_add_target(self, **kwargs):
2917610bc38SKonrad Sztyber        rpc.vhost.vhost_scsi_controller_add_target(self.client, **kwargs)
2927610bc38SKonrad Sztyber
2937610bc38SKonrad Sztyber    def vhost_controller_set_coalescing(self, **kwargs):
2947610bc38SKonrad Sztyber        rpc.vhost.vhost_controller_set_coalescing(self.client, **kwargs)
2957610bc38SKonrad Sztyber
2967610bc38SKonrad Sztyber    @verbose
2977610bc38SKonrad Sztyber    def create_nvmf_transport(self, **kwargs):
2987610bc38SKonrad Sztyber        rpc.nvmf.nvmf_create_transport(self.client, **kwargs)
2997610bc38SKonrad Sztyber
3007610bc38SKonrad Sztyber    def list_nvmf_transports(self):
3017610bc38SKonrad Sztyber        if self.is_init:
3027610bc38SKonrad Sztyber            self.current_nvmf_transports = rpc.nvmf.nvmf_get_transports(self.client)
3037610bc38SKonrad Sztyber
3047610bc38SKonrad Sztyber    @verbose
3057610bc38SKonrad Sztyber    @is_method_available
3067610bc38SKonrad Sztyber    def nvmf_get_transports(self):
3077610bc38SKonrad Sztyber        if self.is_init:
3087610bc38SKonrad Sztyber            self.list_nvmf_transports()
3097610bc38SKonrad Sztyber            for transport in self.current_nvmf_transports:
3107610bc38SKonrad Sztyber                yield NvmfTransport(transport)
3117610bc38SKonrad Sztyber
3127610bc38SKonrad Sztyber    def list_nvmf_subsystems(self):
3137610bc38SKonrad Sztyber        if self.is_init:
3147610bc38SKonrad Sztyber            self.current_nvmf_subsystems = rpc.nvmf.nvmf_get_subsystems(self.client)
3157610bc38SKonrad Sztyber
3167610bc38SKonrad Sztyber    @verbose
3177610bc38SKonrad Sztyber    @is_method_available
3187610bc38SKonrad Sztyber    def nvmf_get_subsystems(self):
3197610bc38SKonrad Sztyber        if self.is_init:
3207610bc38SKonrad Sztyber            self.list_nvmf_subsystems()
3217610bc38SKonrad Sztyber            for subsystem in self.current_nvmf_subsystems:
3227610bc38SKonrad Sztyber                yield NvmfSubsystem(subsystem)
3237610bc38SKonrad Sztyber
324470e8518SSlawomir Ptak    def list_nvmf_referrals(self):
325470e8518SSlawomir Ptak        if self.is_init:
326470e8518SSlawomir Ptak            self.current_nvmf_referrals = rpc.nvmf.nvmf_discovery_get_referrals(self.client)
327470e8518SSlawomir Ptak
328470e8518SSlawomir Ptak    @verbose
329470e8518SSlawomir Ptak    @is_method_available
330470e8518SSlawomir Ptak    def nvmf_discovery_get_referrals(self):
331470e8518SSlawomir Ptak        if self.is_init:
332470e8518SSlawomir Ptak            self.list_nvmf_referrals()
333470e8518SSlawomir Ptak            for referral in self.current_nvmf_referrals:
334470e8518SSlawomir Ptak                yield NvmfReferral(referral)
335470e8518SSlawomir Ptak
336470e8518SSlawomir Ptak    @verbose
337470e8518SSlawomir Ptak    def nvmf_discovery_add_referral(self, **kwargs):
338470e8518SSlawomir Ptak        rpc.nvmf.nvmf_discovery_add_referral(self.client, **kwargs)
339470e8518SSlawomir Ptak
340470e8518SSlawomir Ptak    @verbose
341470e8518SSlawomir Ptak    def nvmf_discovery_remove_referral(self, **kwargs):
342470e8518SSlawomir Ptak        rpc.nvmf.nvmf_discovery_remove_referral(self.client, **kwargs)
343470e8518SSlawomir Ptak
3447610bc38SKonrad Sztyber    @verbose
3457610bc38SKonrad Sztyber    def create_nvmf_subsystem(self, **kwargs):
3467610bc38SKonrad Sztyber        rpc.nvmf.nvmf_create_subsystem(self.client, **kwargs)
3477610bc38SKonrad Sztyber
3487610bc38SKonrad Sztyber    @verbose
3497610bc38SKonrad Sztyber    def nvmf_delete_subsystem(self, **kwargs):
3507610bc38SKonrad Sztyber        rpc.nvmf.nvmf_delete_subsystem(self.client, **kwargs)
3517610bc38SKonrad Sztyber
3527610bc38SKonrad Sztyber    @verbose
3537610bc38SKonrad Sztyber    def nvmf_subsystem_add_listener(self, **kwargs):
3547610bc38SKonrad Sztyber        rpc.nvmf.nvmf_subsystem_add_listener(self.client, **kwargs)
3557610bc38SKonrad Sztyber
3567610bc38SKonrad Sztyber    @verbose
3577610bc38SKonrad Sztyber    def nvmf_subsystem_remove_listener(self, **kwargs):
3587610bc38SKonrad Sztyber        rpc.nvmf.nvmf_subsystem_remove_listener(self.client, **kwargs)
3597610bc38SKonrad Sztyber
3607610bc38SKonrad Sztyber    @verbose
3617610bc38SKonrad Sztyber    def nvmf_subsystem_add_host(self, **kwargs):
3627610bc38SKonrad Sztyber        rpc.nvmf.nvmf_subsystem_add_host(self.client, **kwargs)
3637610bc38SKonrad Sztyber
3647610bc38SKonrad Sztyber    @verbose
3657610bc38SKonrad Sztyber    def nvmf_subsystem_remove_host(self, **kwargs):
3667610bc38SKonrad Sztyber        rpc.nvmf.nvmf_subsystem_remove_host(self.client, **kwargs)
3677610bc38SKonrad Sztyber
3687610bc38SKonrad Sztyber    @verbose
3697610bc38SKonrad Sztyber    def nvmf_subsystem_allow_any_host(self, **kwargs):
3707610bc38SKonrad Sztyber        rpc.nvmf.nvmf_subsystem_allow_any_host(self.client, **kwargs)
3717610bc38SKonrad Sztyber
3727610bc38SKonrad Sztyber    @verbose
3737610bc38SKonrad Sztyber    def nvmf_subsystem_add_ns(self, **kwargs):
3747610bc38SKonrad Sztyber        rpc.nvmf.nvmf_subsystem_add_ns(self.client, **kwargs)
3757610bc38SKonrad Sztyber
3767610bc38SKonrad Sztyber    @verbose
3777610bc38SKonrad Sztyber    def nvmf_subsystem_remove_ns(self, **kwargs):
3787610bc38SKonrad Sztyber        rpc.nvmf.nvmf_subsystem_remove_ns(self.client, **kwargs)
3797610bc38SKonrad Sztyber
3807610bc38SKonrad Sztyber    @verbose
3817610bc38SKonrad Sztyber    def nvmf_subsystem_allow_any_host(self, **kwargs):
3827610bc38SKonrad Sztyber        rpc.nvmf.nvmf_subsystem_allow_any_host(self.client, **kwargs)
3837610bc38SKonrad Sztyber
3847610bc38SKonrad Sztyber    @verbose
3857610bc38SKonrad Sztyber    @is_method_available
3867610bc38SKonrad Sztyber    def scsi_get_devices(self):
3877610bc38SKonrad Sztyber        if self.is_init:
3887610bc38SKonrad Sztyber            for device in rpc.iscsi.scsi_get_devices(self.client):
3897610bc38SKonrad Sztyber                yield ScsiObj(device)
3907610bc38SKonrad Sztyber
3917610bc38SKonrad Sztyber    @verbose
3927610bc38SKonrad Sztyber    @is_method_available
3937610bc38SKonrad Sztyber    def iscsi_get_target_nodes(self):
3947610bc38SKonrad Sztyber        if self.is_init:
3957610bc38SKonrad Sztyber            for tg in rpc.iscsi.iscsi_get_target_nodes(self.client):
3967610bc38SKonrad Sztyber                yield tg
3977610bc38SKonrad Sztyber
3987610bc38SKonrad Sztyber    @verbose
3997610bc38SKonrad Sztyber    def iscsi_create_target_node(self, **kwargs):
4007610bc38SKonrad Sztyber        rpc.iscsi.iscsi_create_target_node(self.client, **kwargs)
4017610bc38SKonrad Sztyber
4027610bc38SKonrad Sztyber    @verbose
4037610bc38SKonrad Sztyber    def iscsi_delete_target_node(self, **kwargs):
4047610bc38SKonrad Sztyber        rpc.iscsi.iscsi_delete_target_node(self.client, **kwargs)
4057610bc38SKonrad Sztyber
4067610bc38SKonrad Sztyber    @verbose
4077610bc38SKonrad Sztyber    @is_method_available
4087610bc38SKonrad Sztyber    def iscsi_get_portal_groups(self):
4097610bc38SKonrad Sztyber        if self.is_init:
4107610bc38SKonrad Sztyber            for pg in rpc.iscsi.iscsi_get_portal_groups(self.client):
4117610bc38SKonrad Sztyber                yield ScsiObj(pg)
4127610bc38SKonrad Sztyber
4137610bc38SKonrad Sztyber    @verbose
4147610bc38SKonrad Sztyber    @is_method_available
4157610bc38SKonrad Sztyber    def iscsi_get_initiator_groups(self):
4167610bc38SKonrad Sztyber        if self.is_init:
4177610bc38SKonrad Sztyber            for ig in rpc.iscsi.iscsi_get_initiator_groups(self.client):
4187610bc38SKonrad Sztyber                yield ScsiObj(ig)
4197610bc38SKonrad Sztyber
4207610bc38SKonrad Sztyber    @verbose
4217610bc38SKonrad Sztyber    def construct_portal_group(self, **kwargs):
4227610bc38SKonrad Sztyber        rpc.iscsi.iscsi_create_portal_group(self.client, **kwargs)
4237610bc38SKonrad Sztyber
4247610bc38SKonrad Sztyber    @verbose
4257610bc38SKonrad Sztyber    def iscsi_delete_portal_group(self, **kwargs):
4267610bc38SKonrad Sztyber        rpc.iscsi.iscsi_delete_portal_group(self.client, **kwargs)
4277610bc38SKonrad Sztyber
4287610bc38SKonrad Sztyber    @verbose
4297610bc38SKonrad Sztyber    def construct_initiator_group(self, **kwargs):
4307610bc38SKonrad Sztyber        rpc.iscsi.iscsi_create_initiator_group(self.client, **kwargs)
4317610bc38SKonrad Sztyber
4327610bc38SKonrad Sztyber    @verbose
4337610bc38SKonrad Sztyber    def iscsi_delete_initiator_group(self, **kwargs):
4347610bc38SKonrad Sztyber        rpc.iscsi.iscsi_delete_initiator_group(self.client, **kwargs)
4357610bc38SKonrad Sztyber
4367610bc38SKonrad Sztyber    @verbose
4377610bc38SKonrad Sztyber    @is_method_available
4387610bc38SKonrad Sztyber    def iscsi_get_connections(self, **kwargs):
4397610bc38SKonrad Sztyber        if self.is_init:
4407610bc38SKonrad Sztyber            for ic in rpc.iscsi.iscsi_get_connections(self.client, **kwargs):
4417610bc38SKonrad Sztyber                yield ic
4427610bc38SKonrad Sztyber
4437610bc38SKonrad Sztyber    @verbose
4447610bc38SKonrad Sztyber    def iscsi_initiator_group_add_initiators(self, **kwargs):
4457610bc38SKonrad Sztyber        rpc.iscsi.iscsi_initiator_group_add_initiators(self.client, **kwargs)
4467610bc38SKonrad Sztyber
4477610bc38SKonrad Sztyber    @verbose
4487610bc38SKonrad Sztyber    def iscsi_initiator_group_remove_initiators(self, **kwargs):
4497610bc38SKonrad Sztyber        rpc.iscsi.iscsi_initiator_group_remove_initiators(self.client, **kwargs)
4507610bc38SKonrad Sztyber
4517610bc38SKonrad Sztyber    @verbose
4527610bc38SKonrad Sztyber    def iscsi_target_node_add_pg_ig_maps(self, **kwargs):
4537610bc38SKonrad Sztyber        rpc.iscsi.iscsi_target_node_add_pg_ig_maps(self.client, **kwargs)
4547610bc38SKonrad Sztyber
4557610bc38SKonrad Sztyber    @verbose
4567610bc38SKonrad Sztyber    def iscsi_target_node_remove_pg_ig_maps(self, **kwargs):
4577610bc38SKonrad Sztyber        rpc.iscsi.iscsi_target_node_remove_pg_ig_maps(self.client, **kwargs)
4587610bc38SKonrad Sztyber
4597610bc38SKonrad Sztyber    @verbose
4607610bc38SKonrad Sztyber    def iscsi_auth_group_add_secret(self, **kwargs):
4617610bc38SKonrad Sztyber        rpc.iscsi.iscsi_auth_group_add_secret(self.client, **kwargs)
4627610bc38SKonrad Sztyber
4637610bc38SKonrad Sztyber    @verbose
4647610bc38SKonrad Sztyber    def iscsi_auth_group_remove_secret(self, **kwargs):
4657610bc38SKonrad Sztyber        rpc.iscsi.iscsi_auth_group_remove_secret(self.client, **kwargs)
4667610bc38SKonrad Sztyber
4677610bc38SKonrad Sztyber    @verbose
4687610bc38SKonrad Sztyber    @is_method_available
4697610bc38SKonrad Sztyber    def iscsi_get_auth_groups(self, **kwargs):
4707610bc38SKonrad Sztyber        return rpc.iscsi.iscsi_get_auth_groups(self.client, **kwargs)
4717610bc38SKonrad Sztyber
4727610bc38SKonrad Sztyber    @verbose
4737610bc38SKonrad Sztyber    def iscsi_create_auth_group(self, **kwargs):
4747610bc38SKonrad Sztyber        rpc.iscsi.iscsi_create_auth_group(self.client, **kwargs)
4757610bc38SKonrad Sztyber
4767610bc38SKonrad Sztyber    @verbose
4777610bc38SKonrad Sztyber    def iscsi_delete_auth_group(self, **kwargs):
4787610bc38SKonrad Sztyber        rpc.iscsi.iscsi_delete_auth_group(self.client, **kwargs)
4797610bc38SKonrad Sztyber
4807610bc38SKonrad Sztyber    @verbose
4817610bc38SKonrad Sztyber    def iscsi_target_node_set_auth(self, **kwargs):
4827610bc38SKonrad Sztyber        rpc.iscsi.iscsi_target_node_set_auth(self.client, **kwargs)
4837610bc38SKonrad Sztyber
4847610bc38SKonrad Sztyber    @verbose
4857610bc38SKonrad Sztyber    def iscsi_target_node_add_lun(self, **kwargs):
4867610bc38SKonrad Sztyber        rpc.iscsi.iscsi_target_node_add_lun(self.client, **kwargs)
4877610bc38SKonrad Sztyber
4887610bc38SKonrad Sztyber    @verbose
4897610bc38SKonrad Sztyber    def iscsi_set_discovery_auth(self, **kwargs):
4907610bc38SKonrad Sztyber        rpc.iscsi.iscsi_set_discovery_auth(self.client, **kwargs)
4917610bc38SKonrad Sztyber
4927610bc38SKonrad Sztyber    @verbose
4937610bc38SKonrad Sztyber    @is_method_available
4947610bc38SKonrad Sztyber    def iscsi_get_options(self, **kwargs):
4957610bc38SKonrad Sztyber        return rpc.iscsi.iscsi_get_options(self.client, **kwargs)
4967610bc38SKonrad Sztyber
4977610bc38SKonrad Sztyber    def has_subsystem(self, subsystem):
4987610bc38SKonrad Sztyber        for system in rpc.subsystem.framework_get_subsystems(self.client):
4997610bc38SKonrad Sztyber            if subsystem.lower() == system["subsystem"].lower():
5007610bc38SKonrad Sztyber                return True
5017610bc38SKonrad Sztyber        return False
5027610bc38SKonrad Sztyber
503*1758092cSYankun Li    @verbose
504*1758092cSYankun Li    def create_compress_bdev(self, **kwargs):
505*1758092cSYankun Li        response = rpc.bdev.bdev_compress_create(self.client, **kwargs)
506*1758092cSYankun Li        return response
507*1758092cSYankun Li
508*1758092cSYankun Li    @verbose
509*1758092cSYankun Li    def bdev_compress_delete(self, **kwargs):
510*1758092cSYankun Li        rpc.bdev.bdev_compress_delete(self.client, **kwargs)
511*1758092cSYankun Li
5127610bc38SKonrad Sztyber
5137610bc38SKonrad Sztyberclass Bdev(object):
5147610bc38SKonrad Sztyber    def __init__(self, bdev_info):
5157610bc38SKonrad Sztyber        """
5167610bc38SKonrad Sztyber        All class attributes are set based on what information is received
5177610bc38SKonrad Sztyber        from bdev_get_bdevs RPC call.
5187610bc38SKonrad Sztyber        # TODO: Document in docstring parameters which describe bdevs.
5197610bc38SKonrad Sztyber        # TODO: Possible improvement: JSON schema might be used here in future
5207610bc38SKonrad Sztyber        """
5217610bc38SKonrad Sztyber        for i in list(bdev_info.keys()):
5227610bc38SKonrad Sztyber            setattr(self, i, bdev_info[i])
5237610bc38SKonrad Sztyber
5247610bc38SKonrad Sztyber
5257610bc38SKonrad Sztyberclass LvolStore(object):
5267610bc38SKonrad Sztyber    def __init__(self, lvs_info):
5277610bc38SKonrad Sztyber        """
5287610bc38SKonrad Sztyber        All class attributes are set based on what information is received
5297610bc38SKonrad Sztyber        from bdev_get_bdevs RPC call.
5307610bc38SKonrad Sztyber        # TODO: Document in docstring parameters which describe bdevs.
5317610bc38SKonrad Sztyber        # TODO: Possible improvement: JSON schema might be used here in future
5327610bc38SKonrad Sztyber        """
5337610bc38SKonrad Sztyber        for i in list(lvs_info.keys()):
5347610bc38SKonrad Sztyber            setattr(self, i, lvs_info[i])
5357610bc38SKonrad Sztyber
5367610bc38SKonrad Sztyber
5377610bc38SKonrad Sztyberclass VhostCtrlr(object):
5387610bc38SKonrad Sztyber    def __init__(self, ctrlr_info):
5397610bc38SKonrad Sztyber        """
5407610bc38SKonrad Sztyber        All class attributes are set based on what information is received
5417610bc38SKonrad Sztyber        from vhost_get_controllers RPC call.
5427610bc38SKonrad Sztyber        # TODO: Document in docstring parameters which describe bdevs.
5437610bc38SKonrad Sztyber        # TODO: Possible improvement: JSON schema might be used here in future
5447610bc38SKonrad Sztyber        """
5457610bc38SKonrad Sztyber        for i in list(ctrlr_info.keys()):
5467610bc38SKonrad Sztyber            setattr(self, i, ctrlr_info[i])
5477610bc38SKonrad Sztyber
5487610bc38SKonrad Sztyber
5497610bc38SKonrad Sztyberclass NvmfTransport(object):
5507610bc38SKonrad Sztyber    def __init__(self, transport_info):
5517610bc38SKonrad Sztyber        """
5527610bc38SKonrad Sztyber        All class attributes are set based on what information is received
5537610bc38SKonrad Sztyber        from get_nvmf_transport RPC call.
5547610bc38SKonrad Sztyber        # TODO: Document in docstring parameters which describe bdevs.
5557610bc38SKonrad Sztyber        # TODO: Possible improvement: JSON schema might be used here in future
5567610bc38SKonrad Sztyber        """
5577610bc38SKonrad Sztyber        for i in transport_info.keys():
5587610bc38SKonrad Sztyber            setattr(self, i, transport_info[i])
5597610bc38SKonrad Sztyber
5607610bc38SKonrad Sztyber
5617610bc38SKonrad Sztyberclass NvmfSubsystem(object):
5627610bc38SKonrad Sztyber    def __init__(self, subsystem_info):
5637610bc38SKonrad Sztyber        """
5647610bc38SKonrad Sztyber        All class attributes are set based on what information is received
5657610bc38SKonrad Sztyber        from get_nvmf_subsystem RPC call.
5667610bc38SKonrad Sztyber        # TODO: Document in docstring parameters which describe bdevs.
5677610bc38SKonrad Sztyber        # TODO: Possible improvement: JSON schema might be used here in future
5687610bc38SKonrad Sztyber        """
5697610bc38SKonrad Sztyber        for i in subsystem_info.keys():
5707610bc38SKonrad Sztyber            setattr(self, i, subsystem_info[i])
5717610bc38SKonrad Sztyber
5727610bc38SKonrad Sztyber
573470e8518SSlawomir Ptakclass NvmfReferral(object):
574470e8518SSlawomir Ptak    def __init__(self, referral_info):
575470e8518SSlawomir Ptak        """
576470e8518SSlawomir Ptak        All class attributes are set based on what information is received
577470e8518SSlawomir Ptak        from get_nvmf_referrals RPC call.
578470e8518SSlawomir Ptak        """
579470e8518SSlawomir Ptak        for i in referral_info.keys():
580470e8518SSlawomir Ptak            setattr(self, i, referral_info[i])
581470e8518SSlawomir Ptak
582470e8518SSlawomir Ptak
5837610bc38SKonrad Sztyberclass ScsiObj(object):
5847610bc38SKonrad Sztyber    def __init__(self, device_info):
5857610bc38SKonrad Sztyber        """
5867610bc38SKonrad Sztyber        All class attributes are set based on what information is received
5877610bc38SKonrad Sztyber        from iscsi related RPC calls.
5887610bc38SKonrad Sztyber        # TODO: Document in docstring parameters which describe bdevs.
5897610bc38SKonrad Sztyber        # TODO: Possible improvement: JSON schema might be used here in future
5907610bc38SKonrad Sztyber        """
5917610bc38SKonrad Sztyber        for i in device_info.keys():
5927610bc38SKonrad Sztyber            setattr(self, i, device_info[i])
593