77from mgr_module import HandleCommandResult
88from ceph .deployment .service_spec import NvmeofServiceSpec
99
10- from orchestrator import DaemonDescription , DaemonDescriptionStatus
10+ from orchestrator import OrchestratorError , DaemonDescription , DaemonDescriptionStatus
1111from .cephadmservice import CephadmDaemonDeploySpec , CephService
1212from .. import utils
1313
@@ -20,10 +20,16 @@ class NvmeofService(CephService):
2020
2121 def config (self , spec : NvmeofServiceSpec ) -> None : # type: ignore
2222 assert self .TYPE == spec .service_type
23- assert spec .pool
24- self .pool = spec .pool
25- assert spec .group is not None
26- self .group = spec .group
23+ # Looking at src/pybind/mgr/cephadm/services/iscsi.py
24+ # asserting spec.pool/spec.group might be appropriate
25+ if not spec .pool :
26+ raise OrchestratorError ("pool should be in the spec" )
27+ if spec .group is None :
28+ raise OrchestratorError ("group should be in the spec" )
29+ # unlike some other config funcs, if this fails we can't
30+ # go forward deploying the daemon and then retry later. For
31+ # that reason we make no attempt to catch the OrchestratorError
32+ # this may raise
2733 self .mgr ._check_pool_exists (spec .pool , spec .service_name ())
2834
2935 def prepare_create (self , daemon_spec : CephadmDaemonDeploySpec ) -> CephadmDaemonDeploySpec :
@@ -80,34 +86,33 @@ def prepare_create(self, daemon_spec: CephadmDaemonDeploySpec) -> CephadmDaemonD
8086
8187 daemon_spec .final_config , daemon_spec .deps = self .generate_config (daemon_spec )
8288 daemon_spec .deps = []
83- if not hasattr (self , 'gws' ):
84- self .gws = {} # id -> name map of gateways for this service.
85- self .gws [nvmeof_gw_id ] = name # add to map of service's gateway names
8689 return daemon_spec
8790
8891 def daemon_check_post (self , daemon_descrs : List [DaemonDescription ]) -> None :
8992 """ Overrides the daemon_check_post to add nvmeof gateways safely
9093 """
9194 self .mgr .log .info (f"nvmeof daemon_check_post { daemon_descrs } " )
92- # Assert configured
93- assert self .pool
94- assert self .group is not None
95+ spec = cast (NvmeofServiceSpec ,
96+ self .mgr .spec_store .all_specs .get (daemon_descrs [0 ].service_name (), None ))
97+ if not spec :
98+ self .mgr .log .error (f'Failed to find spec for { daemon_descrs [0 ].name ()} ' )
99+ return
100+ pool = spec .pool
101+ group = spec .group
95102 for dd in daemon_descrs :
96- self .mgr .log .info (f"nvmeof daemon_descr { dd } " )
97- assert dd .daemon_id in self .gws
98- name = self .gws [dd .daemon_id ]
99- self .mgr .log .info (f"nvmeof daemon name={ name } " )
100103 # Notify monitor about this gateway creation
101104 cmd = {
102105 'prefix' : 'nvme-gw create' ,
103- 'id' : name ,
104- 'group' : self . group ,
105- 'pool' : self . pool
106+ 'id' : f' { utils . name_to_config_section ( "nvmeof" ) } . { dd . daemon_id } ' ,
107+ 'group' : group ,
108+ 'pool' : pool
106109 }
107110 self .mgr .log .info (f"create gateway: monitor command { cmd } " )
108111 _ , _ , err = self .mgr .mon_command (cmd )
109112 if err :
110- self .mgr .log .error (f"Unable to send monitor command { cmd } , error { err } " )
113+ err_msg = (f"Unable to send monitor command { cmd } , error { err } " )
114+ logger .error (err_msg )
115+ raise OrchestratorError (err_msg )
111116 super ().daemon_check_post (daemon_descrs )
112117
113118 def config_dashboard (self , daemon_descrs : List [DaemonDescription ]) -> None :
@@ -119,8 +124,11 @@ def get_set_cmd_dicts(out: str) -> List[dict]:
119124 self .mgr .spec_store .all_specs .get (daemon_descrs [0 ].service_name (), None ))
120125
121126 for dd in daemon_descrs :
122- assert dd .hostname is not None
123127 service_name = dd .service_name ()
128+ if dd .hostname is None :
129+ err_msg = ('Trying to config_dashboard nvmeof but no hostname is defined' )
130+ logger .error (err_msg )
131+ raise OrchestratorError (err_msg )
124132
125133 if not spec :
126134 logger .warning (f'No ServiceSpec found for { service_name } ' )
@@ -182,41 +190,22 @@ def post_remove(self, daemon: DaemonDescription, is_failed_deploy: bool) -> None
182190 if not ret :
183191 logger .info (f'{ daemon .hostname } removed from nvmeof gateways dashboard config' )
184192
185- # Assert configured
186- assert self .pool
187- assert self .group is not None
188- assert daemon .daemon_id in self .gws
189- name = self .gws [daemon .daemon_id ]
190- self .gws .pop (daemon .daemon_id )
193+ spec = cast (NvmeofServiceSpec ,
194+ self .mgr .spec_store .all_specs .get (daemon .service_name (), None ))
195+ if not spec :
196+ self .mgr .log .error (f'Failed to find spec for { daemon .name ()} ' )
197+ return
198+ pool = spec .pool
199+ group = spec .group
200+
191201 # Notify monitor about this gateway deletion
192202 cmd = {
193203 'prefix' : 'nvme-gw delete' ,
194- 'id' : name ,
195- 'group' : self . group ,
196- 'pool' : self . pool
204+ 'id' : f' { utils . name_to_config_section ( "nvmeof" ) } . { daemon . daemon_id } ' ,
205+ 'group' : group ,
206+ 'pool' : pool
197207 }
198208 self .mgr .log .info (f"delete gateway: monitor command { cmd } " )
199209 _ , _ , err = self .mgr .mon_command (cmd )
200210 if err :
201211 self .mgr .log .error (f"Unable to send monitor command { cmd } , error { err } " )
202-
203- def purge (self , service_name : str ) -> None :
204- """Make sure no zombie gateway is left behind
205- """
206- # Assert configured
207- assert self .pool
208- assert self .group is not None
209- for daemon_id in self .gws :
210- name = self .gws [daemon_id ]
211- self .gws .pop (daemon_id )
212- # Notify monitor about this gateway deletion
213- cmd = {
214- 'prefix' : 'nvme-gw delete' ,
215- 'id' : name ,
216- 'group' : self .group ,
217- 'pool' : self .pool
218- }
219- self .mgr .log .info (f"purge delete gateway: monitor command { cmd } " )
220- _ , _ , err = self .mgr .mon_command (cmd )
221- if err :
222- self .mgr .log .error (f"Unable to send monitor command { cmd } , error { err } " )
0 commit comments