Change in osmo-gsm-tester[master]: Allow passing remote env to process running in remote host

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.org
Tue Feb 11 13:47:53 UTC 2020


pespin has uploaded this change for review. ( 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(-)



  git pull ssh://gerrit.osmocom.org:29418/osmo-gsm-tester refs/changes/23/17123/1

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-MessageType: newchange
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osmocom.org/pipermail/gerrit-log/attachments/20200211/276e6fe3/attachment.htm>


More information about the gerrit-log mailing list