aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMCapitani <m.capitani@nextworks.it>2017-09-18 13:34:11 +0000
committerMCapitani <m.capitani@nextworks.it>2017-09-18 13:34:11 +0000
commitc14f1a95ff9691fc970c9af4988eb8a4d1d5a9ef (patch)
treec93c663be034a7ff58935c0f263f0eff132175af
parent943cfb97dabe94c5db4efbe33892adcc071c3bd1 (diff)
parentfd32fd1d2e417b1abafb9ac780e900bde19af46a (diff)
downloadrumba-c14f1a95ff9691fc970c9af4988eb8a4d1d5a9ef.tar.gz
rumba-c14f1a95ff9691fc970c9af4988eb8a4d1d5a9ef.zip
Merge branch 'emulab-fix' into 'master'
testbeds: emulab: Continue if experiment is swapped in See merge request arcfire/rumba!68
-rw-r--r--rumba/prototypes/ouroboros.py3
-rw-r--r--rumba/ssh_support.py4
-rw-r--r--rumba/testbeds/emulab.py45
-rw-r--r--rumba/testbeds/jfed.py6
4 files changed, 48 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)
diff --git a/rumba/testbeds/jfed.py b/rumba/testbeds/jfed.py
index d938179..a99a077 100644
--- a/rumba/testbeds/jfed.py
+++ b/rumba/testbeds/jfed.py
@@ -156,6 +156,12 @@ class Testbed(mod.Testbed):
file.write(doc.toprettyxml())
file.close()
+ def swap_out(self, experiment):
+ subprocess.call(["java", "-jar", self.jfed_jar, "delete", "-S",
+ self.proj_name, "-s",
+ self.exp_name, "-p", self.cert_file,
+ "-P", self.password])
+
def swap_in(self, experiment):
self.create_rspec(experiment)