determine package for remote nicos servers

+ fix a bug in ServiceManager.do_list
This commit is contained in:
zolliker 2021-04-14 14:16:08 +02:00
parent 9e3a3cbbfc
commit bcb4a4ba16
2 changed files with 27 additions and 6 deletions

View File

@ -148,7 +148,7 @@ class ServiceManager:
nr = '%02d' % int(nr) nr = '%02d' % int(nr)
self.commands[ins] = command self.commands[ins] = command
services = self.get_services(section) 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 result[ins] = services
self.env[ins] = env self.env[ins] = env
self.info = result self.info = result
@ -390,7 +390,7 @@ class ServiceManager:
run_info.append(('', gs, port, cfg)) run_info.append(('', gs, port, cfg))
if len(plist) > 1: if len(plist) > 1:
rows.append(['', ' WARNING: multiple processes %s' 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) extra = sm.extra_info(ins_i)
if extra and show_ins: if extra and show_ins:
run_info.append(['', extra]) run_info.append(['', extra])

View File

@ -24,7 +24,7 @@ import os
import sys import sys
import shutil import shutil
from glob import glob 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 configparser import ConfigParser
from servicemanager.base import ServiceManager 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): def do_create(self, ins, *args):
self.get_info() self.get_info()
if ins == 'all' or ins == 'check': if ins == 'all' or ins == 'check':
@ -232,8 +245,8 @@ class NicosManager(ServiceManager):
sys.path.insert(0, os.environ['NICOS_ROOT']) sys.path.insert(0, os.environ['NICOS_ROOT'])
def run_client(self, ins, main, clientapp, **kwargs): def run_client(self, ins, main, clientapp, **kwargs):
serverhost = os.environ.get('REMOTE_HOST', 'localhost') serverhost = os.environ.get('REMOTE_HOST') or 'localhost'
login = os.environ.get('REMOTE_LOGIN', 'guest:guest') login = os.environ.get('REMOTE_LOGIN') or 'guest:guest'
sys.argv[:] = [clientapp, '%s@%s:%d' % (login, serverhost, self.info[ins]['daemon'])] sys.argv[:] = [clientapp, '%s@%s:%d' % (login, serverhost, self.info[ins]['daemon'])]
sys.exit(main(sys.argv, **kwargs)) sys.exit(main(sys.argv, **kwargs))
@ -249,7 +262,15 @@ class NicosManager(ServiceManager):
print('starting nicos gui %s' % ins) print('starting nicos gui %s' % ins)
try: try:
self.run_client(ins, main, 'nicos-gui', postfix='_'+ins) 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) userpath = expanduser('~/.config/nicos_%s' % ins)
self.run_client(ins, main, 'nicos-gui', userpath=userpath) self.run_client(ins, main, 'nicos-gui', userpath=userpath)
return
except TypeError:
pass
self.run_client(ins, main, 'nicos-gui')