diff --git a/devices.py b/devices.py index e9d4cdb..66f22fa 100644 --- a/devices.py +++ b/devices.py @@ -297,11 +297,13 @@ class FrappyNode(SecNodeDevice, Moveable): code, text = status.DISABLED, 'disabled' SecNodeDevice._set_status(self, code, text) - def restart(self, cfg=None, restart=True): + def restart(self, cfg=None, forced=True): """restart frappy server :param cfg: config for frappy server, if not given, restart with the same config - :param restart: when false, do not restart when already running with same cfg + :param forced: True: restart anyway, force using cfg + False: try to get cfg (1) from sea, (2) from running frappy server, (3) from given cfg + when cfg has not changed, do not restart """ if cfg is None: cfg = self._cfgvalue @@ -310,10 +312,18 @@ class FrappyNode(SecNodeDevice, Moveable): cfginfo = {} self._service_manager.get_procs(cfginfo=cfginfo) running_cfg = cfginfo.get((ins, self.service), '') - if cfg == running_cfg: - if not restart: - return - else: + if not forced: + sea_cfg = self._service_manager.cfg_from_sea(ins).get(self.service) + if sea_cfg == '?': + self.log.warning('undefined sea device') + cfg = '' # stop server + elif sea_cfg: + cfg = sea_cfg + elif running_cfg: + return + if cfg == running_cfg: + return + if cfg != running_cfg: self.disable() if running_cfg: self._disconnect()