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)
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])

View File

@ -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')