diff options
-rw-r--r-- | example.py | 3 | ||||
-rw-r--r-- | ouroboros_support.py | 42 | ||||
-rwxr-xr-x | rhumba.py | 57 | ||||
-rw-r--r-- | rhumba_irati.py | 50 | ||||
-rw-r--r-- | rhumba_ouroboros.py | 60 | ||||
-rw-r--r-- | rhumba_rlite.py | 51 |
6 files changed, 183 insertions, 80 deletions
@@ -3,6 +3,9 @@ # An example script using rhumba.py from rhumba import * +import rhumba_ouroboros as our +import rhumba_rlite as rl +import rhumba_irati as irati n1 = NormalDIF("n1", policies = {"rmt.pff": "lfa", "security-manager": "passwd"}) diff --git a/ouroboros_support.py b/ouroboros_support.py deleted file mode 100644 index 061c097..0000000 --- a/ouroboros_support.py +++ /dev/null @@ -1,42 +0,0 @@ -# -# Commands to instruct Ouroboros -# -# Sander Vrijders <sander.vrijders@intec.ugent.be> -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, -# MA 02110-1301 USA - -import ssh_support as ssh - -def setup_ouroboros(testbed, nodes): - cmds = list() - - cmds.append("sudo apt-get update") - cmds.append("sudo apt-get install cmake protobuf-c-compiler git --yes") - cmds.append("sudo rm -r ~/ouroboros/build") - cmds.append("cd ~/ouroboros; sudo ./install_release.sh") - cmds.append("sudo nohup irmd > /dev/null &") - - for node in nodes: - ssh.execute_commands(testbed, node.full_name, cmds, time_out = None) - return - -def bind_names(testbed, nodes): - for node in nodes: - cmds = list() - for name, ap in node.bindings.items(): - cmds.append("irm b ap " + ap + " n " + name) - - ssh.execute_commands(testbed, node.full_name, cmds, time_out = None) @@ -23,7 +23,6 @@ import emulab_support as es import jfed_support as js import abc import getpass -import ouroboros_support as our # Represents generic testbed info # @@ -41,7 +40,8 @@ class Testbed: @abc.abstractmethod def create_experiment(self, nodes, links): - return + raise Exception('create_experiment() not implemented') + # Represents an emulab testbed info # @@ -62,6 +62,7 @@ class EmulabTestbed: es.wait_until_nodes_up(self) es.complete_experiment_graph(self, nodes, links) + class jFedTestbed: def __init__(self, exp_name, username, cert_file, jfed_jar, exp_hours = "2", proj_name = "ARCFIRE", authority = "wall2.ilabt.iminds.be"): @@ -76,6 +77,17 @@ class jFedTestbed: def create_experiment(self, nodes, links): js.create_experiment(self, nodes, links) + +# Fake testbed, useful for testing +class FakeTestbed: + def __init__(self, exp_name, username, proj_name = "ARCFIRE", + password = ""): + Testbed.__init__(self, exp_name, username, password, proj_name) + + def create_experiment(self, nodes, links): + print("[Fake testbed] experiment swapped in") + + # Represents an interface on a node # # @name [string] interface name @@ -277,46 +289,15 @@ class Experiment: def add_node(self, node): self.nodes.append(node) - def add_node(self, node): + def del_node(self, node): self.nodes.remove(node) - def run(self): + # Realize the experiment, using a testbed-specific setup + def swap_in(self): self.links = get_links(self.nodes) self.testbed.create_experiment(self.nodes, self.links) -# An experiment over the IRATI implementation -class IRATIExperiment(Experiment): - def __init__(self, testbed, nodes = list()): - Experiment.__init__(self, testbed, nodes) - - def run(self): - print("[IRATI experiment] start") - Experiment.run(self) - print("[IRATI experiment] end") - - -# An experiment over the RLITE implementation -class RLITEExperiment(Experiment): - def __init__(self, testbed, nodes = list()): - Experiment.__init__(self, testbed, nodes) - + @abc.abstractmethod def run(self): - print("[RLITE experiment] start") - Experiment.run(self) - print("[RLITE experiment] end") - + raise Exception('run() method not implemented') -# An experiment over the Ouroboros implementation -class OuroborosExperiment(Experiment): - def __init__(self, testbed, nodes = list()): - Experiment.__init__(self, testbed, nodes) - - def run(self): - print("[Ouroboros experiment] start") - print("Creating resources...") - Experiment.run(self) - print("Setting up Ouroboros...") - our.setup_ouroboros(self.testbed, self.nodes) - print("Binding names...") - our.bind_names(self.testbed, self.nodes) - print("[Ouroboros experiment] end") diff --git a/rhumba_irati.py b/rhumba_irati.py new file mode 100644 index 0000000..d5c66d2 --- /dev/null +++ b/rhumba_irati.py @@ -0,0 +1,50 @@ +# +# Commands to setup and instruct IRATI +# +# Vincenzo Maffione <v.maffione@nextworks.it> +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, +# MA 02110-1301 USA + +import ssh_support as ssh +import rhumba + + +# An experiment over the IRATI implementation +class IRATIExperiment(rhumba.Experiment): + def __init__(self, testbed, nodes = list()): + rhumba.Experiment.__init__(self, testbed, nodes) + + def setup(self): + cmds = list() + + cmds.append("sudo apt-get update") + cmds.append("sudo apt-get install g++ gcc " + "protobuf-compiler libprotobuf-dev git --yes") + cmds.append("sudo rm -rf ~/irati") + cmds.append("cd && git clone https://github.com/IRATI/stack irati") + cmds.append("cd ~/irati && sudo ./install-from-scratch") + cmds.append("sudo nohup ipcm &> ipcm.log &") + + for node in self.nodes: + ssh.execute_commands(self.testbed, node.full_name, cmds, time_out = None) + + def run(self): + print("[IRATI experiment] start") + self.swap_in() + print("Setting up IRATI on the nodes...") + self.setup() + print("[IRATI experiment] end") + diff --git a/rhumba_ouroboros.py b/rhumba_ouroboros.py new file mode 100644 index 0000000..aca1f5f --- /dev/null +++ b/rhumba_ouroboros.py @@ -0,0 +1,60 @@ +# +# Commands to instruct Ouroboros +# +# Sander Vrijders <sander.vrijders@intec.ugent.be> +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, +# MA 02110-1301 USA + +import ssh_support as ssh +import rhumba + + +# An experiment over the Ouroboros implementation +class OuroborosExperiment(rhumba.Experiment): + def __init__(self, testbed, nodes = list()): + rhumba.Experiment.__init__(self, testbed, nodes) + + def setup_ouroboros(self): + cmds = list() + + cmds.append("sudo apt-get update") + cmds.append("sudo apt-get install cmake protobuf-c-compiler git --yes") + cmds.append("sudo rm -r ~/ouroboros/build") + cmds.append("cd ~/ouroboros; sudo ./install_release.sh") + cmds.append("sudo nohup irmd > /dev/null &") + + for node in self.nodes: + ssh.execute_commands(self.testbed, node.full_name, cmds, time_out = None) + return + + def bind_names(self): + for node in self.nodes: + cmds = list() + for name, ap in node.bindings.items(): + cmds.append("irm b ap " + ap + " n " + name) + + ssh.execute_commands(self.testbed, node.full_name, cmds, time_out = None) + + def run(self): + print("[Ouroboros experiment] start") + print("Creating resources...") + self.swap_in() + print("Setting up Ouroboros...") + self.setup_ouroboros() + print("Binding names...") + self.bind_names() + print("[Ouroboros experiment] end") + diff --git a/rhumba_rlite.py b/rhumba_rlite.py new file mode 100644 index 0000000..ac1f081 --- /dev/null +++ b/rhumba_rlite.py @@ -0,0 +1,51 @@ +# +# Commands to setup and instruct rlite +# +# Vincenzo Maffione <v.maffione@nextworks.it> +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, +# MA 02110-1301 USA + +import ssh_support as ssh +import rhumba + + +# An experiment over the RLITE implementation +class RLITEExperiment(rhumba.Experiment): + def __init__(self, testbed, nodes = list()): + rhumba.Experiment.__init__(self, testbed, nodes) + + def setup(self): + cmds = list() + + cmds.append("sudo apt-get update") + cmds.append("sudo apt-get install g++ gcc cmake " + "linux-headers-$(uname -r) " + "protobuf-compiler libprotobuf-dev git --yes") + cmds.append("sudo rm -rf ~/rlite") + cmds.append("cd ~; git clone https://github.com/vmaffione/rlite") + cmds.append("cd ~/rlite && ./configure && make && sudo make install") + cmds.append("sudo nohup rlite-uipcps -v DBG -k 0 -U -A &> uipcp.log &") + + for node in self.nodes: + ssh.execute_commands(self.testbed, node.full_name, cmds, time_out = None) + + def run(self): + print("[RLITE experiment] start") + self.swap_in() + print("Setting up rlite on the nodes...") + self.setup() + print("[RLITE experiment] end") + |