From bcb4a4ba169d3a5cf8b998ef8588075ed17157f9 Mon Sep 17 00:00:00 2001 From: Markus Zolliker Date: Wed, 14 Apr 2021 14:16:08 +0200 Subject: [PATCH] determine package for remote nicos servers + fix a bug in ServiceManager.do_list --- base.py | 4 ++-- nicosman.py | 29 +++++++++++++++++++++++++---- 2 files changed, 27 insertions(+), 6 deletions(-) diff --git a/base.py b/base.py index 10fa7e9..69eb955 100644 --- a/base.py +++ b/base.py @@ -148,7 +148,7 @@ class ServiceManager: nr = '%02d' % int(nr) self.commands[ins] = command services = self.get_services(section) - env = {k: get_subs(section, k, ins, nr) for k in defaults if k.isupper()} + env = {k: get_subs(section, k, ins, nr) for k in section if k.isupper()} result[ins] = services self.env[ins] = env self.info = result @@ -390,7 +390,7 @@ class ServiceManager: run_info.append(('', gs, port, cfg)) if len(plist) > 1: rows.append(['', ' WARNING: multiple processes %s' - % ', '.join(str(p.pid) for p, _ in plist)]) + % ', '.join(str(p.pid) for p in plist)]) extra = sm.extra_info(ins_i) if extra and show_ins: run_info.append(['', extra]) diff --git a/nicosman.py b/nicosman.py index 323531b..b94cc05 100644 --- a/nicosman.py +++ b/nicosman.py @@ -24,7 +24,7 @@ import os import sys import shutil from glob import glob -from os.path import join, abspath, dirname, expanduser, exists, islink +from os.path import join, abspath, dirname, basename, expanduser, exists, islink from configparser import ConfigParser from servicemanager.base import ServiceManager @@ -73,6 +73,19 @@ class NicosManager(ServiceManager): """ + def get_info(self): + super().get_info() + for ins, env in self.env.items(): + root = env.get('NICOS_ROOT') or os.environ['NICOS_ROOT'] + if 'NICOS_PACKAGE' not in env: + instdir = list(glob(join(root, '*', ins))) + if not instdir: + print('%s not found in any package' % ins) + elif len(instdir) > 1: + print('ambiguos package: %s' % ', '.join(instdir)) + else: + env['NICOS_PACKAGE'] = basename(dirname(instdir[0])) + def do_create(self, ins, *args): self.get_info() if ins == 'all' or ins == 'check': @@ -232,8 +245,8 @@ class NicosManager(ServiceManager): sys.path.insert(0, os.environ['NICOS_ROOT']) def run_client(self, ins, main, clientapp, **kwargs): - serverhost = os.environ.get('REMOTE_HOST', 'localhost') - login = os.environ.get('REMOTE_LOGIN', 'guest:guest') + serverhost = os.environ.get('REMOTE_HOST') or 'localhost' + login = os.environ.get('REMOTE_LOGIN') or 'guest:guest' sys.argv[:] = [clientapp, '%s@%s:%d' % (login, serverhost, self.info[ins]['daemon'])] sys.exit(main(sys.argv, **kwargs)) @@ -249,7 +262,15 @@ class NicosManager(ServiceManager): print('starting nicos gui %s' % ins) try: self.run_client(ins, main, 'nicos-gui', postfix='_'+ins) - except TypeError: # legacy arguments + return + except TypeError: + pass + # treat legacy cases + try: userpath = expanduser('~/.config/nicos_%s' % ins) self.run_client(ins, main, 'nicos-gui', userpath=userpath) + return + except TypeError: + pass + self.run_client(ins, main, 'nicos-gui')