Allow passing remote env to process running in remote host
Change-Id: Icc0ae8d79ca30ed0a289b67546735251fc46cb10
diff --git a/src/osmo_gsm_tester/bts_osmotrx.py b/src/osmo_gsm_tester/bts_osmotrx.py
index 78c17cc..1322a74 100644
--- a/src/osmo_gsm_tester/bts_osmotrx.py
+++ b/src/osmo_gsm_tester/bts_osmotrx.py
@@ -287,14 +287,14 @@
rem_host.scp('scp-cfg-to-remote', self.config_file, remote_config_file)
if have_inst:
- remote_lib = self.remote_inst.child('lib')
+ remote_env = { 'LD_LIBRARY_PATH': self.remote_inst.child('lib') }
remote_binary = self.remote_inst.child('bin', self.binary_name())
args = (remote_binary, '-C', remote_config_file)
else: # Use whatever is available i nremote system PATH:
- remote_lib = None
+ remote_env = {}
remote_binary = self.binary_name()
args = (remote_binary, '-C', remote_config_file)
- self.proc_trx = rem_host.RemoteProcessFixIgnoreSIGHUP(self.binary_name(), remote_run_dir, args, prepend_ldlibpath=remote_lib)
+ self.proc_trx = rem_host.RemoteProcessFixIgnoreSIGHUP(self.binary_name(), remote_run_dir, args, remote_env=remote_env)
self.suite_run.remember_to_stop(self.proc_trx, keepalive)
self.proc_trx.launch()
diff --git a/src/osmo_gsm_tester/process.py b/src/osmo_gsm_tester/process.py
index 1c2f592..3880630 100644
--- a/src/osmo_gsm_tester/process.py
+++ b/src/osmo_gsm_tester/process.py
@@ -353,26 +353,28 @@
class RemoteProcess(Process):
- def __init__(self, name, run_dir, remote_user, remote_host, remote_cwd, popen_args, **popen_kwargs):
+ def __init__(self, name, run_dir, remote_user, remote_host, remote_cwd, popen_args, remote_env={}, **popen_kwargs):
super().__init__(name, run_dir, popen_args, **popen_kwargs)
self.remote_user = remote_user
self.remote_host = remote_host
self.remote_cwd = remote_cwd
+ self.remote_env = remote_env
# hacky: instead of just prepending ssh, i.e. piping stdout and stderr
# over the ssh link, we should probably run on the remote side,
# monitoring the process remotely.
if self.remote_cwd:
- cd = 'cd "%s"; ' % self.remote_cwd
+ cd = 'cd "%s";' % self.remote_cwd
else:
cd = ''
# We need double -t to force tty and be able to forward signals to
# processes (SIGHUP) when we close ssh on the local side. As a result,
# stderr seems to be merged into stdout in ssh client.
self.popen_args = ['ssh', '-t', '-t', self.remote_user+'@'+self.remote_host,
- '%s%s' % (cd,
- ' '.join(self.popen_args))]
- self.dbg(self.popen_args, dir=self.run_dir, conf=self.popen_kwargs)
+ '%s %s %s' % (cd,
+ ' '.join(['%s=%r'%(k,v) for k,v in self.remote_env.items()]),
+ ' '.join(self.popen_args))]
+ self.dbg(self.popen_args, dir=self.run_dir, conf=self.popen_kwargs, remote_env=self.remote_env)
class NetNSProcess(Process):
NETNS_EXEC_BIN = 'osmo-gsm-tester_netns_exec.sh'
diff --git a/src/osmo_gsm_tester/remote.py b/src/osmo_gsm_tester/remote.py
index 92dd113..6be0a5e 100644
--- a/src/osmo_gsm_tester/remote.py
+++ b/src/osmo_gsm_tester/remote.py
@@ -34,6 +34,7 @@
self.remote_user = remote_user
self.remote_host = remote_host
self.remote_cwd = remote_cwd
+ self.remote_env = {}
def user(self):
return self.remote_user
@@ -44,9 +45,15 @@
def cwd(self):
return self.remote_cwd
- def RemoteProcess(self, name, popen_args, **popen_kwargs):
+ def set_remote_env(self, remote_env_dict):
+ self.remote_env = remote_env_dict
+
+ def get_remote_env(self):
+ return self.remote_env
+
+ def RemoteProcess(self, name, popen_args, remote_env={}, **popen_kwargs):
run_dir = self.run_dir.new_dir(name)
- return process.RemoteProcess(name, run_dir, self.user(), self.host(), self.cwd(), popen_args, **popen_kwargs)
+ return process.RemoteProcess(name, run_dir, self.user(), self.host(), self.cwd(), popen_args, remote_env=remote_env, **popen_kwargs)
def generate_wrapper_script(self):
wrapper_script = self.run_dir.new_file(RemoteHost.WRAPPER_SCRIPT)
@@ -72,7 +79,7 @@
os.chmod(wrapper_script, st.st_mode | stat.S_IEXEC)
return wrapper_script
- def RemoteProcessFixIgnoreSIGHUP(self, name, remote_dir, popen_args, prepend_ldlibpath=None, **popen_kwargs):
+ def RemoteProcessFixIgnoreSIGHUP(self, name, remote_dir, popen_args, remote_env={}, **popen_kwargs):
# Run remotely through ssh. We need to run binary under a wrapper
# script since osmo-trx ignores SIGHUP and will keep running after
# we close local ssh session. The wrapper script catches SIGHUP and
@@ -83,15 +90,11 @@
remote_wrapper_script = remote_dir.child(RemoteHost.WRAPPER_SCRIPT)
self.scp('scp-wrapper-to-remote', wrapper_script, remote_wrapper_script)
- # Used fi to run stuff from an osmo-gsm-tester copied inst
- if prepend_ldlibpath is not None:
- args = ('LD_LIBRARY_PATH=%s' % prepend_ldlibpath, remote_wrapper_script,) + popen_args
- else:
- args = (remote_wrapper_script,) + popen_args
- return self.RemoteProcess(name, args, **popen_kwargs)
+ args = (remote_wrapper_script,) + popen_args
+ return self.RemoteProcess(name, args, remote_env, **popen_kwargs)
def run_remote_sync(self, name, popen_args):
- proc = self.RemoteProcess(name, popen_args)
+ proc = self.RemoteProcess(name, popen_args, remote_env=self.remote_env)
proc.launch_sync()
return proc