@@ -227,6 +227,31 @@ def config_dashboard(self, daemon_descrs: List[DaemonDescription]) -> None:
227227 service_url
228228 )
229229
230+ def reset_config (self , daemon : DaemonDescription ) -> None :
231+
232+ if daemon .hostname is None :
233+ return
234+ try :
235+ current_api_host = self .mgr .check_mon_command ({"prefix" : "dashboard get-grafana-api-url" }).stdout .strip ()
236+ daemon_addr = daemon .ip if daemon .ip else self .mgr .get_fqdn (daemon .hostname )
237+ daemon_port = daemon .ports [0 ] if daemon .ports else self .DEFAULT_SERVICE_PORT
238+ service_url = build_url (scheme = 'https' , host = daemon_addr , port = daemon_port )
239+
240+ if current_api_host == service_url :
241+ remaining_daemons = [d for d in self .mgr .cache .get_daemons_by_service (self .TYPE )
242+ if d .name () != daemon .name ()]
243+ if remaining_daemons :
244+ self .config_dashboard (remaining_daemons )
245+ logger .info ("Updated dashboard API settings to point to the remaining daemon" )
246+ else :
247+ self .mgr .check_mon_command ({"prefix" : "dashboard reset-grafana-api-url" })
248+ self .mgr .check_mon_command ({"prefix" : "dashboard reset-grafana-api-ssl-verify" })
249+ logger .info ("Reset dashboard API settings as no Grafana daemons are remaining" )
250+ else :
251+ logger .info (f"Grafana daemon { daemon .name ()} removed; no changes" )
252+ except Exception as e :
253+ logger .error (f"Error in Grafana pre_remove: { str (e )} " )
254+
230255 def pre_remove (self , daemon : DaemonDescription ) -> None :
231256 """
232257 Called before grafana daemon is removed.
@@ -235,6 +260,7 @@ def pre_remove(self, daemon: DaemonDescription) -> None:
235260 # delete cert/key entires for this grafana daemon
236261 self .mgr .cert_mgr .rm_cert ('grafana_cert' , host = daemon .hostname )
237262 self .mgr .cert_mgr .rm_key ('grafana_key' , host = daemon .hostname )
263+ self .reset_config (daemon )
238264
239265 def ok_to_stop (self ,
240266 daemon_ids : List [str ],
0 commit comments