aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarco Capitani <m.capitani@nextworks.it>2017-06-01 16:43:03 +0200
committerMarco Capitani <m.capitani@nextworks.it>2017-06-01 16:43:03 +0200
commit30dbd8b5493480d2c302380735083c2d9b8f8260 (patch)
tree3f683a207ba7c4767c0e0870db8cddacc0205354
parent24c375545c6ef7d03e8a18dea2cb06763059b1b9 (diff)
downloadrumba-30dbd8b5493480d2c302380735083c2d9b8f8260.tar.gz
rumba-30dbd8b5493480d2c302380735083c2d9b8f8260.zip
model: added proxy field. ssh: added execute_proxy_commands
-rw-r--r--rumba/model.py10
-rw-r--r--rumba/prototypes/irati.py2
-rw-r--r--rumba/ssh_support.py42
-rw-r--r--rumba/testbeds/jfed.py7
4 files changed, 58 insertions, 3 deletions
diff --git a/rumba/model.py b/rumba/model.py
index 285d937..27fcc23 100644
--- a/rumba/model.py
+++ b/rumba/model.py
@@ -38,11 +38,19 @@ logger = log.get_logger(__name__)
# @exp_name [string] experiment name
#
class Testbed:
- def __init__(self, exp_name, username, password, proj_name):
+ def __init__(self,
+ exp_name,
+ username,
+ password,
+ proj_name,
+ http_proxy=None):
self.username = username
self.password = password
self.proj_name = proj_name
self.exp_name = exp_name
+ if http_proxy is None:
+ http_proxy = ""
+ self.http_proxy = http_proxy
@abc.abstractmethod
def swap_in(self, experiment):
diff --git a/rumba/prototypes/irati.py b/rumba/prototypes/irati.py
index e24dd60..894593b 100644
--- a/rumba/prototypes/irati.py
+++ b/rumba/prototypes/irati.py
@@ -79,7 +79,7 @@ class Experiment(mod.Experiment):
cmds.append("cd ~/irati && sudo ./install-from-scratch")
for node in self.nodes:
- ssh.execute_commands(self.testbed, node.ssh_config,
+ ssh.execute_proxy_commands(self.testbed, node.ssh_config,
cmds, time_out=None)
def setup(self):
diff --git a/rumba/ssh_support.py b/rumba/ssh_support.py
index cb36910..93a48f8 100644
--- a/rumba/ssh_support.py
+++ b/rumba/ssh_support.py
@@ -43,6 +43,48 @@ def _print_stream(stream):
return o
+def execute_proxy_commands(testbed, ssh_config, commands, time_out=3):
+ """
+ Remote execution of a list of shell command on hostname, using the
+ http and https proxy specified by the testbed. By
+ default this function will exit (timeout) after 3 seconds.
+
+ @param testbed: testbed info
+ @param ssh_config: ssh config of the node
+ @param commands: *nix shell command
+ @param time_out: time_out value in seconds, error will be generated if
+ no result received in given number of seconds, the value None can
+ be used when no timeout is needed
+ """
+ new_commands = []
+ for command in commands:
+ proxy = testbed.http_proxy
+ proxy_command = 'export http_proxy=' + proxy + '; ' \
+ + 'export https_proxy=' + proxy + ';'
+ new_commands.append(proxy_command + ' ' + command)
+ return execute_commands(testbed, ssh_config, new_commands, time_out)
+
+
+def execute_proxy_command(testbed, ssh_config, command, time_out=3):
+ """
+ Remote execution of a list of shell command on hostname, using
+ a proxy http and https.
+ By default this function will exit (timeout) after 3 seconds.
+
+ @param testbed: testbed info
+ @param ssh_config: ssh config of the node
+ @param command: *nix shell command
+ @param time_out: time_out value in seconds, error will be generated if
+ no result received in given number of seconds, the value None can
+ be used when no timeout is needed
+
+ @return: stdout resulting from the command
+ """
+ o = execute_proxy_commands(testbed, ssh_config, [command], time_out)
+ if o is not None:
+ return o
+
+
def execute_commands(testbed, ssh_config, commands, time_out=3):
"""
Remote execution of a list of shell command on hostname. By
diff --git a/rumba/testbeds/jfed.py b/rumba/testbeds/jfed.py
index 5394146..b1fc5ef 100644
--- a/rumba/testbeds/jfed.py
+++ b/rumba/testbeds/jfed.py
@@ -38,7 +38,12 @@ class Testbed(mod.Testbed):
proj_name="ARCFIRE", authority="wall2.ilabt.iminds.be",
image=None):
passwd = getpass.getpass(prompt="Password for certificate file: ")
- mod.Testbed.__init__(self, exp_name, username, passwd, proj_name)
+ mod.Testbed.__init__(self,
+ exp_name,
+ username,
+ passwd,
+ proj_name,
+ http_proxy="https://proxy.atlantis.ugent.be:8080")
self.authority = "urn:publicid:IDN+" + authority + "+authority+cm"
self.auth_name = authority
self.cert_file = cert_file