aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--rumba/prototypes/ouroboros.py3
-rw-r--r--rumba/ssh_support.py4
-rw-r--r--rumba/testbeds/emulab.py45
3 files changed, 42 insertions, 10 deletions
diff --git a/rumba/prototypes/ouroboros.py b/rumba/prototypes/ouroboros.py
index 49323c5..97cd05f 100644
--- a/rumba/prototypes/ouroboros.py
+++ b/rumba/prototypes/ouroboros.py
@@ -50,7 +50,8 @@ class Experiment(mod.Experiment):
cmds = list()
cmds.append("sudo apt-get update")
- cmds.append("sudo apt-get install cmake protobuf-c-compiler git --yes")
+ cmds.append("sudo apt-get install cmake protobuf-c-compiler " +
+ "git libfuse-dev --yes")
cmds.append("sudo rm -r ~/ouroboros/build")
cmds.append("cd ~/ouroboros; sudo ./install_debug.sh /")
diff --git a/rumba/ssh_support.py b/rumba/ssh_support.py
index 64d17e6..8b07c13 100644
--- a/rumba/ssh_support.py
+++ b/rumba/ssh_support.py
@@ -163,9 +163,9 @@ def execute_commands(testbed, ssh_config, commands, time_out=3):
chan.exec_command(command)
except paramiko.ssh_exception.SSHException as e:
raise SSHException('Failed to execute command')
- if (chan.recv_exit_status() != 0):
- raise SSHException('A remote command returned an error')
o = _print_stream(stdout)
+ if (chan.recv_exit_status() != 0):
+ raise SSHException('A remote command returned an error.\n' + o)
ssh_client.close()
return o
diff --git a/rumba/testbeds/emulab.py b/rumba/testbeds/emulab.py
index 66c5b7f..7568815 100644
--- a/rumba/testbeds/emulab.py
+++ b/rumba/testbeds/emulab.py
@@ -102,6 +102,8 @@ class Testbed(mod.Testbed):
Swaps experiment in
@param self: testbed info
+
+ @return: Is the experiment newly swapped in
"""
cmd = '/usr/testbed/bin/sslxmlrpc_client.py swapexp proj=' + \
self.proj_name + \
@@ -109,9 +111,17 @@ class Testbed(mod.Testbed):
self.exp_name + \
' direction=in'
- output = ssh.execute_command(self, self.ops_ssh_config, cmd)
+ try:
+ ssh.execute_command(self, self.ops_ssh_config, cmd)
+ except ssh.SSHException as e:
+ line = re.findall(r'not swapped out', str(e))
+ if line:
+ logger.info("Experiment is already swapped in.")
+ return False
+ else:
+ raise e
- return output
+ return True
def _create_experiment(self, experiment):
"""
@@ -142,9 +152,14 @@ class Testbed(mod.Testbed):
'" exp="' + exp_name + '" noswapin=true ' + \
'nsfilepath="' + dest_file_name + '"'
- ssh.execute_command(self, self.ops_ssh_config, cmd, time_out=None)
- ssh.execute_command(self, self.ops_ssh_config, 'rm ' + dest_file_name)
- logger.info("New experiment succesfully created.")
+ try:
+ ssh.execute_command(self, self.ops_ssh_config, cmd, time_out=None)
+ logger.info("New experiment succesfully created.")
+ except:
+ logger.info("Experiment already exists.")
+ finally:
+ ssh.execute_command(self, self.ops_ssh_config,
+ 'rm ' + dest_file_name)
def generate_ns_script(self, experiment):
"""
@@ -250,6 +265,22 @@ class Testbed(mod.Testbed):
def swap_in(self, experiment):
self._create_experiment(experiment)
- self.swap_exp_in()
- self.wait_until_nodes_up()
+ wait = self.swap_exp_in()
+ if wait:
+ self.wait_until_nodes_up()
self.complete_experiment_graph(experiment)
+
+
+ def swap_out(self, experiment):
+ """
+ Swaps experiment out
+
+ @param self: testbed info
+ """
+ cmd = '/usr/testbed/bin/sslxmlrpc_client.py swapexp proj=' + \
+ self.proj_name + \
+ ' exp=' + \
+ self.exp_name + \
+ ' direction=out'
+
+ ssh.execute_command(self, self.ops_ssh_config, cmd)