11# -*- coding: utf-8 -*-
2+ # pylint: disable=too-many-lines
23import logging
3- from typing import Any , Dict , Optional
4+ from typing import Any , Dict , List , Optional
45
56import cherrypy
67from orchestrator import OrchestratorError
@@ -100,10 +101,13 @@ class NVMeoFSpdk(RESTController):
100101 @NvmeofCLICommand ("nvmeof spdk_log_level get" , model .SpdkNvmfLogFlagsAndLevelInfo )
101102 @convert_to_model (model .SpdkNvmfLogFlagsAndLevelInfo )
102103 @handle_nvmeof_error
103- def get_spdk_log_level (self , gw_group : Optional [str ] = None , traddr : Optional [str ] = None ):
104+ def get_spdk_log_level (
105+ self , all_log_flags : Optional [bool ] = None ,
106+ gw_group : Optional [str ] = None , traddr : Optional [str ] = None
107+ ):
104108 spdk_log_level = NVMeoFClient (gw_group = gw_group ,
105109 traddr = traddr ).stub .get_spdk_nvmf_log_flags_and_level (
106- NVMeoFClient .pb2 .get_spdk_nvmf_log_flags_and_level_req ()
110+ NVMeoFClient .pb2 .get_spdk_nvmf_log_flags_and_level_req (all_log_flags = all_log_flags )
107111 )
108112 return spdk_log_level
109113
@@ -114,13 +118,15 @@ def get_spdk_log_level(self, gw_group: Optional[str] = None, traddr: Optional[st
114118 @handle_nvmeof_error
115119 def set_spdk_log_level (self , log_level : Optional [str ] = None ,
116120 print_level : Optional [str ] = None ,
121+ extra_log_flags : Optional [List [str ]] = None ,
117122 gw_group : Optional [str ] = None , traddr : Optional [str ] = None ):
118123 log_level = log_level .upper () if log_level else None
119124 print_level = print_level .upper () if print_level else None
120125 spdk_log_level = NVMeoFClient (gw_group = gw_group ,
121- traddr = traddr ).stub .set_spdk_nvmf_logs_req (
126+ traddr = traddr ).stub .set_spdk_nvmf_logs (
122127 NVMeoFClient .pb2 .set_spdk_nvmf_logs_req (log_level = log_level ,
123- print_level = print_level )
128+ print_level = print_level ,
129+ extra_log_flags = extra_log_flags )
124130 )
125131 return spdk_log_level
126132
@@ -129,11 +135,14 @@ def set_spdk_log_level(self, log_level: Optional[str] = None,
129135 @NvmeofCLICommand ("nvmeof spdk_log_level disable" , model .RequestStatus )
130136 @convert_to_model (model .RequestStatus )
131137 @handle_nvmeof_error
132- def disable_spdk_log_level (self , gw_group : Optional [str ] = None ,
133- traddr : Optional [str ] = None ):
138+ def disable_spdk_log_level (
139+ self , extra_log_flags : Optional [List [str ]] = None ,
140+ gw_group : Optional [str ] = None ,
141+ traddr : Optional [str ] = None
142+ ):
134143 spdk_log_level = NVMeoFClient (gw_group = gw_group ,
135144 traddr = traddr ).stub .disable_spdk_nvmf_logs (
136- NVMeoFClient .pb2 .disable_spdk_nvmf_logs_req ()
145+ NVMeoFClient .pb2 .disable_spdk_nvmf_logs_req (extra_log_flags = extra_log_flags )
137146 )
138147 return spdk_log_level
139148
@@ -390,10 +399,12 @@ def create(
390399 trash_image : Optional [bool ] = False ,
391400 block_size : int = 512 ,
392401 load_balancing_group : Optional [int ] = None ,
402+ force : Optional [bool ] = False ,
403+ no_auto_visible : Optional [bool ] = False ,
404+ disable_auto_resize : Optional [bool ] = False ,
405+ read_only : Optional [bool ] = False ,
393406 gw_group : Optional [str ] = None ,
394407 traddr : Optional [str ] = None ,
395- force : Optional [bool ] = False ,
396- no_auto_visible : Optional [bool ] = False
397408 ):
398409 return NVMeoFClient (gw_group = gw_group , traddr = traddr ).stub .namespace_add (
399410 NVMeoFClient .pb2 .namespace_add_req (
@@ -406,7 +417,9 @@ def create(
406417 trash_image = trash_image ,
407418 anagrpid = load_balancing_group ,
408419 force = force ,
409- no_auto_visible = no_auto_visible
420+ no_auto_visible = no_auto_visible ,
421+ disable_auto_resize = disable_auto_resize ,
422+ read_only = read_only
410423 )
411424 )
412425
@@ -531,6 +544,11 @@ def resize(
531544 "nqn" : Param (str , "NVMeoF subsystem NQN" ),
532545 "nsid" : Param (str , "NVMeoF Namespace ID" ),
533546 "host_nqn" : Param (str , 'NVMeoF host NQN. Use "*" to allow any host.' ),
547+ "force" : Param (
548+ bool ,
549+ "Allow adding the host to the namespace even if the host "
550+ "has no access to the subsystem"
551+ ),
534552 "gw_group" : Param (str , "NVMeoF gateway group" , True , None ),
535553 "traddr" : Param (str , "NVMeoF gateway address" , True , None ),
536554 },
@@ -543,13 +561,15 @@ def add_host(
543561 nqn : str ,
544562 nsid : str ,
545563 host_nqn : str ,
564+ force : Optional [bool ] = None ,
546565 gw_group : Optional [str ] = None ,
547566 traddr : Optional [str ] = None
548567 ):
549568 return NVMeoFClient (gw_group = gw_group , traddr = traddr ).stub .namespace_add_host (
550569 NVMeoFClient .pb2 .namespace_add_host_req (subsystem_nqn = nqn ,
551570 nsid = int (nsid ),
552- host_nqn = host_nqn )
571+ host_nqn = host_nqn ,
572+ force = str_to_bool (force ))
553573 )
554574
555575 @ReadPermission
@@ -616,6 +636,41 @@ def change_visibility(
616636 )
617637 )
618638
639+ @ReadPermission
640+ @Endpoint ('PUT' , '{nsid}/set_auto_resize' )
641+ @EndpointDoc (
642+ "Enable or disable namespace auto resize when RBD image is resized" ,
643+ parameters = {
644+ "nqn" : Param (str , "NVMeoF subsystem NQN" ),
645+ "nsid" : Param (str , "NVMeoF Namespace ID" ),
646+ "auto_resize_enabled" : Param (
647+ bool ,
648+ 'Enable or disable auto resize of '
649+ 'namespace when RBD image is resized'
650+ ),
651+ "gw_group" : Param (str , "NVMeoF gateway group" , True , None ),
652+ "traddr" : Param (str , "NVMeoF gateway address" , True , None ),
653+ },
654+ )
655+ @NvmeofCLICommand ("nvmeof ns set_auto_resize" , model = model .RequestStatus )
656+ @convert_to_model (model .RequestStatus )
657+ @handle_nvmeof_error
658+ def set_auto_resize (
659+ self ,
660+ nqn : str ,
661+ nsid : str ,
662+ auto_resize_enabled : bool ,
663+ gw_group : Optional [str ] = None ,
664+ traddr : Optional [str ] = None
665+ ):
666+ return NVMeoFClient (gw_group = gw_group , traddr = traddr ).stub .namespace_set_auto_resize (
667+ NVMeoFClient .pb2 .namespace_set_auto_resize_req (
668+ subsystem_nqn = nqn ,
669+ nsid = int (nsid ),
670+ auto_resize = str_to_bool (auto_resize_enabled ),
671+ )
672+ )
673+
619674 @ReadPermission
620675 @Endpoint ('PUT' , '{nsid}/set_rbd_trash_image' )
621676 @EndpointDoc (
@@ -812,16 +867,21 @@ class NVMeoFHost(RESTController):
812867 "List all allowed hosts for an NVMeoF subsystem" ,
813868 parameters = {
814869 "nqn" : Param (str , "NVMeoF subsystem NQN" ),
870+ "clear_alerts" : Param (bool , "Clear any host alert signal after getting its value" ,
871+ True , False ),
815872 "gw_group" : Param (str , "NVMeoF gateway group" , True , None ),
816873 },
817874 )
818875 @pick ('hosts' )
819876 @NvmeofCLICommand ("nvmeof host list" , model .HostsInfo )
820877 @convert_to_model (model .HostsInfo , finalize = _update_hosts )
821878 @handle_nvmeof_error
822- def list (self , nqn : str , gw_group : Optional [str ] = None , traddr : Optional [str ] = None ):
879+ def list (
880+ self , nqn : str , clear_alerts : Optional [bool ],
881+ gw_group : Optional [str ] = None , traddr : Optional [str ] = None
882+ ):
823883 return NVMeoFClient (gw_group = gw_group , traddr = traddr ).stub .list_hosts (
824- NVMeoFClient .pb2 .list_hosts_req (subsystem = nqn )
884+ NVMeoFClient .pb2 .list_hosts_req (subsystem = nqn , clear_alerts = clear_alerts )
825885 )
826886
827887 @EndpointDoc (
@@ -860,6 +920,51 @@ def delete(self, nqn: str, host_nqn: str, gw_group: Optional[str] = None,
860920 NVMeoFClient .pb2 .remove_host_req (subsystem_nqn = nqn , host_nqn = host_nqn )
861921 )
862922
923+ @EndpointDoc (
924+ "Change host DH-HMAC-CHAP key" ,
925+ parameters = {
926+ "nqn" : Param (str , "NVMeoF subsystem NQN" ),
927+ "host_nqn" : Param (str , 'NVMeoF host NQN' ),
928+ "dhchap_key" : Param (str , 'Host DH-HMAC-CHAP key' ),
929+ "gw_group" : Param (str , "NVMeoF gateway group" , True , None ),
930+ },
931+ )
932+ @empty_response
933+ @NvmeofCLICommand ("nvmeof host change_key" , model .RequestStatus )
934+ @convert_to_model (model .RequestStatus )
935+ @handle_nvmeof_error
936+ def change_key (
937+ self , nqn : str , host_nqn : str , dhchap_key : str ,
938+ gw_group : Optional [str ] = None , traddr : Optional [str ] = None
939+ ):
940+ return NVMeoFClient (gw_group = gw_group , traddr = traddr ).stub .change_host_key (
941+ NVMeoFClient .pb2 .change_host_key_req (subsystem_nqn = nqn ,
942+ host_nqn = host_nqn ,
943+ dhchap_key = dhchap_key )
944+ )
945+
946+ @EndpointDoc (
947+ "Delete host DH-HMAC-CHAP key" ,
948+ parameters = {
949+ "nqn" : Param (str , "NVMeoF subsystem NQN" ),
950+ "host_nqn" : Param (str , 'NVMeoF host NQN.' ),
951+ "gw_group" : Param (str , "NVMeoF gateway group" , True , None ),
952+ },
953+ )
954+ @empty_response
955+ @NvmeofCLICommand ("nvmeof host del_key" , model .RequestStatus )
956+ @convert_to_model (model .RequestStatus )
957+ @handle_nvmeof_error
958+ def del_key (
959+ self , nqn : str , host_nqn : str , gw_group : Optional [str ] = None ,
960+ traddr : Optional [str ] = None
961+ ):
962+ return NVMeoFClient (gw_group = gw_group , traddr = traddr ).stub .change_host_key (
963+ NVMeoFClient .pb2 .change_host_key_req (subsystem_nqn = nqn ,
964+ host_nqn = host_nqn ,
965+ dhchap_key = None )
966+ )
967+
863968 @APIRouter ("/nvmeof/subsystem/{nqn}/connection" , Scope .NVME_OF )
864969 @APIDoc ("NVMe-oF Subsystem Connection Management API" , "NVMe-oF Subsystem Connection" )
865970 class NVMeoFConnection (RESTController ):
@@ -874,7 +979,10 @@ class NVMeoFConnection(RESTController):
874979 @NvmeofCLICommand ("nvmeof connection list" , model .ConnectionList )
875980 @convert_to_model (model .ConnectionList )
876981 @handle_nvmeof_error
877- def list (self , nqn : str , gw_group : Optional [str ] = None , traddr : Optional [str ] = None ):
982+ def list (self , nqn : Optional [str ] = None ,
983+ gw_group : Optional [str ] = None , traddr : Optional [str ] = None ):
984+ if not nqn :
985+ nqn = '*'
878986 return NVMeoFClient (gw_group = gw_group , traddr = traddr ).stub .list_connections (
879987 NVMeoFClient .pb2 .list_connections_req (subsystem = nqn )
880988 )
0 commit comments