diff --git a/frappyman.py b/frappyman.py index 58c81bb..83cb0ee 100644 --- a/frappyman.py +++ b/frappyman.py @@ -22,7 +22,9 @@ import sys import os -from os.path import join +from glob import glob +from os.path import join, isdir, basename +from configparser import ConfigParser from servicemanager.base import ServiceManager, ServiceDown, UsageError @@ -36,6 +38,7 @@ class FrappyManager(ServiceManager): frappy start frappy restart [] [] frappy stop [] + frappy listcfg [] # list available cfg files is one of main, stick, addons %s @@ -44,7 +47,13 @@ class FrappyManager(ServiceManager): def config_dirs(self, ins, service): cfgpaths = [] for cfgpath in self.env[ins].get('SECOP_CONFDIR', '').split(os.pathsep): - cfgpaths.extend([join(cfgpath, service), cfgpath]) + if cfgpath.endswith('SERV'): + cfgpaths.append(cfgpath[:-4] + service) + else: + scfg = join(cfgpath, service) + if isdir(scfg): + cfgpaths.append(scfg) + cfgpaths.append(cfgpath) return cfgpaths def prepare_start(self, ins, service): @@ -85,3 +94,24 @@ class FrappyManager(ServiceManager): win.show() return app.exec_() + + def do_listcfg(self, ins='', service='main'): + for cfgdir in self.config_dirs(ins, service): + table = [] + for cfgfile in glob(join(cfgdir, '*.cfg')): + desc = '' + try: + parser = ConfigParser() + parser.read(cfgfile) + for s in parser.sections(): + if s == 'NODE' or s.startswith('node '): + desc = parser[s].get('description', '').split('\n')[0] + break + except Exception: + pass + table.append((basename(cfgfile)[:-4], desc)) + if table: + print('\n--- %s:\n' % cfgdir) + lcol = max(len(c) for c, _ in table) + for cfg, desc in table: + print('%s %s' % (cfg.ljust(lcol), desc))