From a812b1a29c2ad6768c066ae5b12fa6c2503dfa33 Mon Sep 17 00:00:00 2001
From: Stefano Alberto Russo <stefano.russo@gmail.com>
Date: Tue, 5 May 2020 01:14:13 +0200
Subject: [PATCH] Added support for bindings in Singularity sys conf.

---
 .../webapp/code/rosetta/core_app/computing_managers.py |  7 ++++++-
 services/webapp/code/rosetta/core_app/models.py        | 10 ++++++++--
 2 files changed, 14 insertions(+), 3 deletions(-)

diff --git a/services/webapp/code/rosetta/core_app/computing_managers.py b/services/webapp/code/rosetta/core_app/computing_managers.py
index 6dda222..87f64d3 100644
--- a/services/webapp/code/rosetta/core_app/computing_managers.py
+++ b/services/webapp/code/rosetta/core_app/computing_managers.py
@@ -332,12 +332,17 @@ class SlurmComputingManager(ComputingManager):
             else:
                 authstring = ''
 
+            bindings = task.computing.get_conf_param('bindings', from_sys_only=True )
+            if not bindings:
+                bindings = ''
+            else:
+                bindings = '-B {}'.format(bindings)
 
             run_command = 'ssh -i {} -4 -o StrictHostKeyChecking=no {}@{} '.format(user_keys.private_key_file, user, host)
 
             run_command += '\'bash -c "echo \\"#!/bin/bash\nwget {}/api/v1/base/agent/?task_uuid={} -O \$HOME/agent_{}.py &> \$HOME/{}.log && export BASE_PORT=\\\\\\$(python \$HOME/agent_{}.py 2> \$HOME/{}.log) && '.format(webapp_conn_string, task.uuid, task.uuid, task.uuid, task.uuid, task.uuid)
             run_command += 'export SINGULARITY_NOHTTPS=true && export SINGULARITYENV_BASE_PORT=\\\\\\$BASE_PORT && {} '.format(authstring)
-            run_command += 'exec nohup singularity run --pid --writable-tmpfs --containall --cleanenv '
+            run_command += 'exec nohup singularity run {} --pid --writable-tmpfs --containall --cleanenv '.format(bindings)
             
             # Double to escape for python six for shell (double times three as \\\ escapes a single slash in shell)
 
diff --git a/services/webapp/code/rosetta/core_app/models.py b/services/webapp/code/rosetta/core_app/models.py
index 142f0cb..8ee8a36 100644
--- a/services/webapp/code/rosetta/core_app/models.py
+++ b/services/webapp/code/rosetta/core_app/models.py
@@ -152,11 +152,17 @@ class Computing(models.Model):
             self._user_conf_data = None
 
 
-    def get_conf_param(self, param):
+    def get_conf_param(self, param, from_sys_only=False):
         try:
             param_value = self.sys_conf_data[param]
         except (TypeError, KeyError):
-            param_value = self.user_conf_data[param]
+            if not from_sys_only:
+                try:
+                    param_value = self.user_conf_data[param]
+                except (TypeError, KeyError):
+                    return None
+            else:
+                return None
         return param_value
 
 
-- 
GitLab