This is merely a historical archive of years 2008-2021, before the migration to mailman3.
A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.
pespin gerrit-no-reply at lists.osmocom.orgpespin has submitted this change. ( https://gerrit.osmocom.org/c/osmo-gsm-tester/+/17123 ) Change subject: Allow passing remote env to process running in remote host ...................................................................... Allow passing remote env to process running in remote host Change-Id: Icc0ae8d79ca30ed0a289b67546735251fc46cb10 --- M src/osmo_gsm_tester/bts_osmotrx.py M src/osmo_gsm_tester/process.py M src/osmo_gsm_tester/remote.py 3 files changed, 23 insertions(+), 18 deletions(-) Approvals: Jenkins Builder: Verified pespin: Looks good to me, approved 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 -- To view, visit https://gerrit.osmocom.org/c/osmo-gsm-tester/+/17123 To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings Gerrit-Project: osmo-gsm-tester Gerrit-Branch: master Gerrit-Change-Id: Icc0ae8d79ca30ed0a289b67546735251fc46cb10 Gerrit-Change-Number: 17123 Gerrit-PatchSet: 1 Gerrit-Owner: pespin <pespin at sysmocom.de> Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: pespin <pespin at sysmocom.de> Gerrit-MessageType: merged -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.osmocom.org/pipermail/gerrit-log/attachments/20200211/f8392bc8/attachment.htm>