<p>pespin has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-gsm-tester/+/17123">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">Allow passing remote env to process running in remote host<br><br>Change-Id: Icc0ae8d79ca30ed0a289b67546735251fc46cb10<br>---<br>M src/osmo_gsm_tester/bts_osmotrx.py<br>M src/osmo_gsm_tester/process.py<br>M src/osmo_gsm_tester/remote.py<br>3 files changed, 23 insertions(+), 18 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/osmo-gsm-tester refs/changes/23/17123/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/osmo_gsm_tester/bts_osmotrx.py b/src/osmo_gsm_tester/bts_osmotrx.py</span><br><span>index 78c17cc..1322a74 100644</span><br><span>--- a/src/osmo_gsm_tester/bts_osmotrx.py</span><br><span>+++ b/src/osmo_gsm_tester/bts_osmotrx.py</span><br><span>@@ -287,14 +287,14 @@</span><br><span>         rem_host.scp('scp-cfg-to-remote', self.config_file, remote_config_file)</span><br><span> </span><br><span>         if have_inst:</span><br><span style="color: hsl(0, 100%, 40%);">-            remote_lib = self.remote_inst.child('lib')</span><br><span style="color: hsl(120, 100%, 40%);">+            remote_env = { 'LD_LIBRARY_PATH': self.remote_inst.child('lib') }</span><br><span>             remote_binary = self.remote_inst.child('bin', self.binary_name())</span><br><span>             args = (remote_binary, '-C', remote_config_file)</span><br><span>         else: # Use whatever is available i nremote system PATH:</span><br><span style="color: hsl(0, 100%, 40%);">-            remote_lib = None</span><br><span style="color: hsl(120, 100%, 40%);">+            remote_env = {}</span><br><span>             remote_binary = self.binary_name()</span><br><span>         args = (remote_binary, '-C', remote_config_file)</span><br><span style="color: hsl(0, 100%, 40%);">-        self.proc_trx = rem_host.RemoteProcessFixIgnoreSIGHUP(self.binary_name(), remote_run_dir, args, prepend_ldlibpath=remote_lib)</span><br><span style="color: hsl(120, 100%, 40%);">+        self.proc_trx = rem_host.RemoteProcessFixIgnoreSIGHUP(self.binary_name(), remote_run_dir, args, remote_env=remote_env)</span><br><span>         self.suite_run.remember_to_stop(self.proc_trx, keepalive)</span><br><span>         self.proc_trx.launch()</span><br><span> </span><br><span>diff --git a/src/osmo_gsm_tester/process.py b/src/osmo_gsm_tester/process.py</span><br><span>index 1c2f592..3880630 100644</span><br><span>--- a/src/osmo_gsm_tester/process.py</span><br><span>+++ b/src/osmo_gsm_tester/process.py</span><br><span>@@ -353,26 +353,28 @@</span><br><span> </span><br><span> class RemoteProcess(Process):</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    def __init__(self, name, run_dir, remote_user, remote_host, remote_cwd, popen_args, **popen_kwargs):</span><br><span style="color: hsl(120, 100%, 40%);">+    def __init__(self, name, run_dir, remote_user, remote_host, remote_cwd, popen_args, remote_env={}, **popen_kwargs):</span><br><span>         super().__init__(name, run_dir, popen_args, **popen_kwargs)</span><br><span>         self.remote_user = remote_user</span><br><span>         self.remote_host = remote_host</span><br><span>         self.remote_cwd = remote_cwd</span><br><span style="color: hsl(120, 100%, 40%);">+        self.remote_env = remote_env</span><br><span> </span><br><span>         # hacky: instead of just prepending ssh, i.e. piping stdout and stderr</span><br><span>         # over the ssh link, we should probably run on the remote side,</span><br><span>         # monitoring the process remotely.</span><br><span>         if self.remote_cwd:</span><br><span style="color: hsl(0, 100%, 40%);">-            cd = 'cd "%s"; ' % self.remote_cwd</span><br><span style="color: hsl(120, 100%, 40%);">+            cd = 'cd "%s";' % self.remote_cwd</span><br><span>         else:</span><br><span>             cd = ''</span><br><span>         # We need double -t to force tty and be able to forward signals to</span><br><span>         # processes (SIGHUP) when we close ssh on the local side. As a result,</span><br><span>         # stderr seems to be merged into stdout in ssh client.</span><br><span>         self.popen_args = ['ssh', '-t', '-t', self.remote_user+'@'+self.remote_host,</span><br><span style="color: hsl(0, 100%, 40%);">-                           '%s%s' % (cd,</span><br><span style="color: hsl(0, 100%, 40%);">-                                     ' '.join(self.popen_args))]</span><br><span style="color: hsl(0, 100%, 40%);">-        self.dbg(self.popen_args, dir=self.run_dir, conf=self.popen_kwargs)</span><br><span style="color: hsl(120, 100%, 40%);">+                           '%s %s %s' % (cd,</span><br><span style="color: hsl(120, 100%, 40%);">+                                         ' '.join(['%s=%r'%(k,v) for k,v in self.remote_env.items()]),</span><br><span style="color: hsl(120, 100%, 40%);">+                                         ' '.join(self.popen_args))]</span><br><span style="color: hsl(120, 100%, 40%);">+        self.dbg(self.popen_args, dir=self.run_dir, conf=self.popen_kwargs, remote_env=self.remote_env)</span><br><span> </span><br><span> class NetNSProcess(Process):</span><br><span>     NETNS_EXEC_BIN = 'osmo-gsm-tester_netns_exec.sh'</span><br><span>diff --git a/src/osmo_gsm_tester/remote.py b/src/osmo_gsm_tester/remote.py</span><br><span>index 92dd113..6be0a5e 100644</span><br><span>--- a/src/osmo_gsm_tester/remote.py</span><br><span>+++ b/src/osmo_gsm_tester/remote.py</span><br><span>@@ -34,6 +34,7 @@</span><br><span>         self.remote_user = remote_user</span><br><span>         self.remote_host = remote_host</span><br><span>         self.remote_cwd = remote_cwd</span><br><span style="color: hsl(120, 100%, 40%);">+        self.remote_env = {}</span><br><span> </span><br><span>     def user(self):</span><br><span>         return self.remote_user</span><br><span>@@ -44,9 +45,15 @@</span><br><span>     def cwd(self):</span><br><span>         return self.remote_cwd</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    def RemoteProcess(self, name, popen_args, **popen_kwargs):</span><br><span style="color: hsl(120, 100%, 40%);">+    def set_remote_env(self, remote_env_dict):</span><br><span style="color: hsl(120, 100%, 40%);">+        self.remote_env = remote_env_dict</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    def get_remote_env(self):</span><br><span style="color: hsl(120, 100%, 40%);">+        return self.remote_env</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    def RemoteProcess(self, name, popen_args, remote_env={}, **popen_kwargs):</span><br><span>         run_dir = self.run_dir.new_dir(name)</span><br><span style="color: hsl(0, 100%, 40%);">-        return process.RemoteProcess(name, run_dir, self.user(), self.host(), self.cwd(), popen_args, **popen_kwargs)</span><br><span style="color: hsl(120, 100%, 40%);">+        return process.RemoteProcess(name, run_dir, self.user(), self.host(), self.cwd(), popen_args, remote_env=remote_env, **popen_kwargs)</span><br><span> </span><br><span>     def generate_wrapper_script(self):</span><br><span>         wrapper_script = self.run_dir.new_file(RemoteHost.WRAPPER_SCRIPT)</span><br><span>@@ -72,7 +79,7 @@</span><br><span>         os.chmod(wrapper_script, st.st_mode | stat.S_IEXEC)</span><br><span>         return wrapper_script</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    def RemoteProcessFixIgnoreSIGHUP(self, name, remote_dir, popen_args,  prepend_ldlibpath=None, **popen_kwargs):</span><br><span style="color: hsl(120, 100%, 40%);">+    def RemoteProcessFixIgnoreSIGHUP(self, name, remote_dir, popen_args, remote_env={}, **popen_kwargs):</span><br><span>         # Run remotely through ssh. We need to run binary under a wrapper</span><br><span>         # script since osmo-trx ignores SIGHUP and will keep running after</span><br><span>         # we close local ssh session. The wrapper script catches SIGHUP and</span><br><span>@@ -83,15 +90,11 @@</span><br><span>         remote_wrapper_script = remote_dir.child(RemoteHost.WRAPPER_SCRIPT)</span><br><span>         self.scp('scp-wrapper-to-remote', wrapper_script, remote_wrapper_script)</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-        # Used fi to run stuff from an osmo-gsm-tester copied inst</span><br><span style="color: hsl(0, 100%, 40%);">-        if prepend_ldlibpath is not None:</span><br><span style="color: hsl(0, 100%, 40%);">-            args = ('LD_LIBRARY_PATH=%s' % prepend_ldlibpath, remote_wrapper_script,) + popen_args</span><br><span style="color: hsl(0, 100%, 40%);">-        else:</span><br><span style="color: hsl(0, 100%, 40%);">-            args = (remote_wrapper_script,) + popen_args</span><br><span style="color: hsl(0, 100%, 40%);">-        return self.RemoteProcess(name, args, **popen_kwargs)</span><br><span style="color: hsl(120, 100%, 40%);">+        args = (remote_wrapper_script,) + popen_args</span><br><span style="color: hsl(120, 100%, 40%);">+        return self.RemoteProcess(name, args, remote_env, **popen_kwargs)</span><br><span> </span><br><span>     def run_remote_sync(self, name, popen_args):</span><br><span style="color: hsl(0, 100%, 40%);">-        proc = self.RemoteProcess(name, popen_args)</span><br><span style="color: hsl(120, 100%, 40%);">+        proc = self.RemoteProcess(name, popen_args, remote_env=self.remote_env)</span><br><span>         proc.launch_sync()</span><br><span>         return proc</span><br><span> </span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-gsm-tester/+/17123">change 17123</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.osmocom.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.osmocom.org/c/osmo-gsm-tester/+/17123"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-gsm-tester </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: Icc0ae8d79ca30ed0a289b67546735251fc46cb10 </div>
<div style="display:none"> Gerrit-Change-Number: 17123 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>