diff --git a/base.py b/base.py index 50243f6..779a7d4 100644 --- a/base.py +++ b/base.py @@ -286,7 +286,7 @@ class ServiceManager: env = self.env[ins] return env.get('%s_ROOT' % gr, ''), env - def do_start(self, ins, service=None, cfg='', restart=False, wait=False, logger=None): + def do_start(self, ins, service=None, cfg='', restart=False, wait=False, logger=None, opts=''): ins_list = self.wildcard(ins) if ins_list is not None: return ins_list @@ -326,6 +326,8 @@ class ServiceManager: for service_i in services: port = service_ports[service_i] cmd = self.commands[ins] % dict(ins=ins, serv=service_i, port=port, cfg=cfg, pkg=self.pkg) + if opts: + cmd = f'{cmd} {opts}' if '%(cfg)s' in self.commands[ins] and not cfg: cmd = self.stopped[ins].get(service_i) if not cmd: @@ -394,7 +396,7 @@ class ServiceManager: return ins_list self.do_start(ins, service, cfg, True, logger=logger) - def do_run(self, ins, service=None, cfg=None): + def do_run(self, ins, service=None, cfg=None, opts=''): """for tests: run and wait""" if self.wildcard(ins) is not None: raise UsageError('no wildcards allowed with %s run' % self.group) @@ -403,7 +405,7 @@ class ServiceManager: service, = self.services except ValueError: raise UsageError('need service to start (one of %s)' % ', '.join(self.services)) - self.do_start(ins, service, cfg, wait=True) + self.do_start(ins, service, cfg, wait=True, opts=opts) def do_list(self, ins=None, *args): """info about running services""" diff --git a/frappyman.py b/frappyman.py index 538e860..99f1f96 100644 --- a/frappyman.py +++ b/frappyman.py @@ -229,12 +229,12 @@ class FrappyManager(ServiceManager): env_update['PYTHONPATH'] = os.environ['PYTHONPATH'] = ':'.join(pypathlist) return start_dir, dict(env, **env_update) - def do_start(self, ins, service=None, cfg='', restart=False, wait=False, logger=None): + def do_start(self, ins, service=None, cfg='', restart=False, wait=False, logger=None, opts=''): if self.wildcard(ins) is not None: raise UsageError('no wildcards allowed with %s start' % self.group) if cfg and not service and len(self.services) != 1: raise UsageError('need service to start (one of %s)' % ', '.join(self.services)) - super().do_start(ins, service, cfg, restart, wait, logger) + super().do_start(ins, service, cfg, restart, wait, logger, opts=opts) def do_restart(self, ins, service=None, cfg=None, logger=None): ins_list = super().do_restart(ins, service, cfg, logger) @@ -383,14 +383,22 @@ class FrappyManager(ServiceManager): print(f'{gap} ! {round(ambiguous)} ambiguous mappings sea -> frappy') def treat_args(self, argdict, unknown=(), extra=()): - if len(unknown) == 1: - cfg = unknown[0] + cfg = None + extra = list(extra) + for arg in unknown: + if arg.startswith('-'): # this is an option + extra.append(arg) + elif cfg is None: + cfg = arg + else: + cfg = '' + if cfg: if cfg == 'develop': argdict['service'] = cfg - return super().treat_args(argdict, (), ()) + return super().treat_args(argdict, (), extra) if (',' in cfg or cfg.endswith('.cfg') or self.is_cfg(argdict.get('ins'), argdict.get('service'), cfg)): - return super().treat_args(argdict, (), unknown) + return super().treat_args(argdict, (), [cfg] + extra) return super().treat_args(argdict, unknown, extra) def check_cfg_file(self, ins, service, cfg, needsea=False):