diff options
-rw-r--r-- | rumba/prototypes/ouroboros.py | 3 | ||||
-rw-r--r-- | rumba/ssh_support.py | 4 | ||||
-rw-r--r-- | rumba/testbeds/emulab.py | 45 |
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) |