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") +  | 
