support for connecting clients to remote servers

- define REMOTE_HOST and REMOTE_LOGIN in servicemanager.cfg
- added app argument to gui client main
This commit is contained in:
2021-04-12 18:08:14 +02:00
parent c7584d70b1
commit d73ec3ab9a
2 changed files with 14 additions and 7 deletions

View File

@ -87,6 +87,7 @@ class ServiceManager:
def __init__(self):
self.env = {}
self.remote_hosts = {}
self.commands = {}
# self.revcmd = {}
self.info = {}
@ -138,6 +139,8 @@ class ServiceManager:
section = dict(parser[ins])
if ins == 'MAIN':
ins = self.main_ins = basename(expanduser('~'))
if 'REMOTE_HOST' in section:
self.remote_hosts[ins] = section['REMOTE_HOST']
command = section.get('%s_command' % self.group)
self.revcmd[command] = self.group
nr = section.get(self.group)
@ -205,6 +208,8 @@ class ServiceManager:
if ins not in self.info:
raise KeyError("don't know %r" % ins)
sp_ins = ' ' + ins if ins != self.main_ins else ''
if ins in self.remote_hosts:
return
if not self.get_procs().get(ins, {}).get(service):
startcmd = '%s start%s' % (self.group, sp_ins)
raise ServiceDown('%s%s is not running - please use %r' % (self.group, sp_ins, startcmd))
@ -271,6 +276,8 @@ class ServiceManager:
service_ports = self.get_ins_info(ins)
except ValueError:
raise ValueError('do not know %r' % ins)
if ins in self.remote_hosts:
raise ValueError('can not start, %s is running on a remote host' % self.group)
services = list(service_ports) if service is None else [service]
if restart:
self.stop(ins, service)

View File

@ -231,22 +231,22 @@ class NicosManager(ServiceManager):
os.chdir(join(os.environ['NICOS_ROOT'], env['NICOS_PACKAGE']))
sys.path.insert(0, os.environ['NICOS_ROOT'])
def run_client(self, ins, main, app, **kwargs):
serverhost = os.environ.get('NICOS_SERVER_HOST', 'localhost')
sys.argv[:] = [app, 'guest:guest@%s:%d' % (serverhost, self.info[ins]['daemon'])]
def run_client(self, ins, main, clientapp, **kwargs):
serverhost = os.environ.get('REMOTE_HOST', 'localhost')
login = os.environ.get('REMOTE_LOGIN', 'guest:guest')
sys.argv[:] = [clientapp, '%s@%s:%d' % (login, serverhost, self.info[ins]['daemon'])]
sys.exit(main(sys.argv, **kwargs))
def do_cli(self, ins):
self.prepare_client(ins)
from nicos.clients.cli import main
os.environ['NICOS_HISTORY_FILE'] = expanduser('~/.nicoshistory_%s' % ins)
self.run_client(ins, main, 'nicos-client',
userpath=expanduser('~/.config/nicos_client_%s' % ins))
self.run_client(ins, main, 'nicos-client')
def do_gui(self, ins):
self.prepare_client(ins)
from nicos.clients.gui.main import main
userpath = expanduser('~/.config/nicos_%s' % ins)
print('starting nicos gui %s' % ins, userpath)
self.run_client(ins, main, 'nicos-gui', userpath=userpath)
self.run_client(ins, main, 'nicos-gui', userpath=userpath, app='gui_' + ins)