aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--rumba/model.py40
-rw-r--r--rumba/prototypes/irati.py6
-rw-r--r--rumba/prototypes/ouroboros.py8
-rw-r--r--rumba/prototypes/rlite.py8
-rw-r--r--rumba/ssh_support.py26
-rw-r--r--rumba/testbeds/emulab.py34
-rw-r--r--rumba/testbeds/faketestbed.py3
-rw-r--r--rumba/testbeds/jfed.py17
-rw-r--r--rumba/testbeds/qemu.py3
9 files changed, 72 insertions, 73 deletions
diff --git a/rumba/model.py b/rumba/model.py
index 0659cb1..c8c00ab 100644
--- a/rumba/model.py
+++ b/rumba/model.py
@@ -44,7 +44,7 @@ class Testbed:
# @name [string] DIF name
#
class DIF:
- def __init__(self, name, members = None):
+ def __init__(self, name, members=None):
self.name = name
if members is None:
members = list()
@@ -62,7 +62,7 @@ class DIF:
return other != None and self.name == other.name
def __neq__(self, other):
- return not (self == other)
+ return not self == other
def add_member(self, node):
self.members.append(node)
@@ -76,7 +76,7 @@ class DIF:
# Shim over UDP
#
class ShimUDPDIF(DIF):
- def __init__(self, name, members = None):
+ def __init__(self, name, members=None):
DIF.__init__(self, name, members)
def get_ipcp_class(self):
@@ -87,7 +87,7 @@ class ShimUDPDIF(DIF):
# @link_speed [int] Speed of the Ethernet network, in Mbps
#
class ShimEthDIF(DIF):
- def __init__(self, name, members = None, link_speed = 0):
+ def __init__(self, name, members=None, link_speed=0):
DIF.__init__(self, name, members)
self.link_speed = int(link_speed)
if self.link_speed < 0:
@@ -101,7 +101,7 @@ class ShimEthDIF(DIF):
# @policies [dict] Policies of the normal DIF
#
class NormalDIF(DIF):
- def __init__(self, name, members = None, policies = None):
+ def __init__(self, name, members=None, policies=None):
DIF.__init__(self, name, members)
if policies is None:
policies = dict()
@@ -127,10 +127,8 @@ class NormalDIF(DIF):
# @bindings: Binding of names on the processing system
#
class Node:
- def __init__(self, name, difs = None,
- dif_registrations = None,
- registrations = None,
- bindings = None):
+ def __init__(self, name, difs=None, dif_registrations=None,
+ registrations=None, bindings=None):
self.name = name
if difs is None:
difs = list()
@@ -208,7 +206,7 @@ class Node:
return other != None and self.name == other.name
def __neq__(self, other):
- return not (self == other)
+ return not self == other
def add_dif(self, dif):
self.difs.append(dif)
@@ -237,11 +235,11 @@ class Node:
self._validate()
def add_binding(self, name, ap):
- self.dif_bindings[name] = ap
+ self.bindings[name] = ap
self._validate()
def del_binding(self, name):
- del self.dif_bindings[name]
+ del self.bindings[name]
self._validate()
# Base class representing an IPC Process to be created in the experiment
@@ -276,17 +274,17 @@ class IPCP:
and self.dif == other.dif
def __neq__(self, other):
- return not (self == other)
+ return not self == other
class ShimEthIPCP(IPCP):
- def __init__(self, name, node, dif, ifname = None):
+ def __init__(self, name, node, dif, ifname=None):
IPCP.__init__(self, name, node, dif)
self.ifname = ifname
class ShimUDPIPCP(IPCP):
def __init__(self, name, node, dif):
IPCP.__init__(self, name, node, dif)
- # TODO add IP and port
+ # TODO: add IP and port
# Base class for ARCFIRE experiments
#
@@ -294,7 +292,7 @@ class ShimUDPIPCP(IPCP):
# @nodes: Nodes in the experiment
#
class Experiment:
- def __init__(self, testbed, nodes = None):
+ def __init__(self, testbed, nodes=None):
if nodes is None:
nodes = list()
self.nodes = nodes
@@ -396,7 +394,7 @@ class Experiment:
for node in self.nodes:
if dif in node.dif_registrations:
dif_graphs[dif][node] = [] # init for later use
- if first == None: # pick any node for later use
+ if first is None: # pick any node for later use
first = node
for lower_dif in node.dif_registrations[dif]:
if lower_dif not in neighsets:
@@ -413,7 +411,7 @@ class Experiment:
self.enrollments.append([])
- if first == None:
+ if first is None:
# This is a shim DIF, nothing to do
continue
@@ -452,7 +450,7 @@ class Experiment:
else:
# This is a bug
- assert(False)
+ assert False
print("Enrollments:")
for el in self.enrollments:
@@ -475,8 +473,8 @@ class Experiment:
continue
ipcp = dif.get_ipcp_class()(
- name = '%s.%s' % (dif.name, node.name),
- node = node, dif = dif)
+ name='%s.%s' % (dif.name, node.name),
+ node=node, dif=dif)
if dif in node.dif_registrations:
for lower in node.dif_registrations[dif]:
diff --git a/rumba/prototypes/irati.py b/rumba/prototypes/irati.py
index 90d0861..1babd57 100644
--- a/rumba/prototypes/irati.py
+++ b/rumba/prototypes/irati.py
@@ -23,7 +23,7 @@ import rumba.model as mod
# An experiment over the IRATI implementation
class Experiment(mod.Experiment):
- def __init__(self, testbed, nodes = None):
+ def __init__(self, testbed, nodes=None):
mod.Experiment.__init__(self, testbed, nodes)
def setup(self):
@@ -31,7 +31,7 @@ class Experiment(mod.Experiment):
cmds.append("sudo apt-get update")
cmds.append("sudo apt-get install g++ gcc "
- "protobuf-compiler libprotobuf-dev git --yes")
+ "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")
@@ -39,7 +39,7 @@ class Experiment(mod.Experiment):
for node in self.nodes:
ssh.execute_commands(self.testbed, node.full_name,
- cmds, time_out = None)
+ cmds, time_out=None)
def run(self):
print("[IRATI experiment] start")
diff --git a/rumba/prototypes/ouroboros.py b/rumba/prototypes/ouroboros.py
index 4359f19..57358cf 100644
--- a/rumba/prototypes/ouroboros.py
+++ b/rumba/prototypes/ouroboros.py
@@ -23,7 +23,7 @@ import rumba.model as mod
# An experiment over the Ouroboros implementation
class Experiment(mod.Experiment):
- def __init__(self, testbed, nodes = None):
+ def __init__(self, testbed, nodes=None):
mod.Experiment.__init__(self, testbed, nodes)
def setup_ouroboros(self):
@@ -36,7 +36,8 @@ class Experiment(mod.Experiment):
cmds.append("sudo nohup irmd > /dev/null &")
for node in self.nodes:
- ssh.execute_commands(self.testbed, node.full_name, cmds, time_out = None)
+ ssh.execute_commands(self.testbed, node.full_name,
+ cmds, time_out=None)
return
def bind_names(self):
@@ -45,7 +46,8 @@ class Experiment(mod.Experiment):
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)
+ ssh.execute_commands(self.testbed, node.full_name,
+ cmds, time_out=None)
def run(self):
print("[Ouroboros experiment] start")
diff --git a/rumba/prototypes/rlite.py b/rumba/prototypes/rlite.py
index 5fa2c37..b175e92 100644
--- a/rumba/prototypes/rlite.py
+++ b/rumba/prototypes/rlite.py
@@ -23,7 +23,7 @@ import rumba.model as mod
# An experiment over the RLITE implementation
class Experiment(mod.Experiment):
- def __init__(self, testbed, nodes = None):
+ def __init__(self, testbed, nodes=None):
mod.Experiment.__init__(self, testbed, nodes)
def setup(self):
@@ -31,8 +31,8 @@ class Experiment(mod.Experiment):
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")
+ "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")
@@ -40,7 +40,7 @@ class Experiment(mod.Experiment):
for node in self.nodes:
ssh.execute_commands(self.testbed, node.full_name,
- cmds, time_out = None)
+ cmds, time_out=None)
def run(self):
print("[RLITE experiment] start")
diff --git a/rumba/ssh_support.py b/rumba/ssh_support.py
index 552c43f..13ac1c6 100644
--- a/rumba/ssh_support.py
+++ b/rumba/ssh_support.py
@@ -27,7 +27,7 @@ def get_ssh_client():
return ssh_client
-def execute_commands(testbed, hostname, commands, time_out = 3):
+def execute_commands(testbed, hostname, commands, time_out=3):
'''
Remote execution of a list of shell command on hostname. By
default this function will exit (timeout) after 3 seconds.
@@ -44,9 +44,10 @@ def execute_commands(testbed, hostname, commands, time_out = 3):
try:
ssh_client.connect(hostname, 22,
testbed.username, testbed.password,
- look_for_keys = True, timeout = time_out)
+ look_for_keys=True, timeout=time_out)
for command in commands:
stdin, stdout, stderr = ssh_client.exec_command(command)
+ del stdin, stdout
err = str(stderr.read()).strip('b\'\"\\n')
if err != "":
err_array = err.split('\\n')
@@ -58,7 +59,7 @@ def execute_commands(testbed, hostname, commands, time_out = 3):
print(str(e))
return
-def execute_command(testbed, hostname, command, time_out = 3):
+def execute_command(testbed, hostname, command, time_out=3):
'''
Remote execution of a list of shell command on hostname. By
default this function will exit (timeout) after 3 seconds.
@@ -77,8 +78,9 @@ def execute_command(testbed, hostname, command, time_out = 3):
try:
ssh_client.connect(hostname, 22,
testbed.username, testbed.password,
- look_for_keys = True, timeout = time_out)
+ look_for_keys=True, timeout=time_out)
stdin, stdout, stderr = ssh_client.exec_command(command)
+ del stdin
err = str(stderr.read()).strip('b\'\"\\n')
if err != "":
print(err)
@@ -113,6 +115,7 @@ def copy_file_to_testbed(testbed, hostname, text, file_name):
"; chmod a+rwx " + file_name
stdin, stdout, stderr = ssh_client.exec_command(cmd)
+ del stdin, stdout
err = str(stderr.read()).strip('b\'\"\\n')
if err != "":
print(err)
@@ -126,31 +129,30 @@ def copy_file_to_testbed(testbed, hostname, text, file_name):
except Exception as e:
print(str(e))
-def setup_vlan(testbed, node_name, vlan_id, int_name):
+def setup_vlan(testbed, node, vlan_id, int_name):
'''
Gets the interface (ethx) to link mapping
@param testbed: testbed info
- @param node_name: the node to create the VLAN on
+ @param node: the node to create the VLAN on
@param vlan_id: the VLAN id
@param int_name: the name of the interface
'''
- print("Setting up VLAN on node " + node_name)
+ print("Setting up VLAN on node " + node.name)
- node_full_name = full_name(node_name, testbed)
cmd = "sudo ip link add link " + \
str(int_name) + \
" name " + str(int_name) + \
"." + str(vlan_id) + \
" type vlan id " + str(vlan_id)
- execute_command(testbed, node_full_name, cmd)
+ execute_command(testbed, node.full_name, cmd)
cmd = "sudo ifconfig " + \
str(int_name) + "." + \
str(vlan_id) + " up"
- execute_command(node_full_name, cmd, testbed)
+ execute_command(node.full_name, cmd, testbed)
cmd = "sudo ethtool -K " + \
str(int_name) + " rxvlan off"
- execute_command(node_full_name, cmd, testbed)
+ execute_command(node.full_name, cmd, testbed)
cmd = "sudo ethtool -K " + \
str(int_name) + " txvlan off"
- execute_command(node_full_name, cmd, testbed)
+ execute_command(node.full_name, cmd, testbed)
diff --git a/rumba/testbeds/emulab.py b/rumba/testbeds/emulab.py
index 971202b..134d344 100644
--- a/rumba/testbeds/emulab.py
+++ b/rumba/testbeds/emulab.py
@@ -23,11 +23,11 @@ import os
import time
import re
from ast import literal_eval
+import warnings
import rumba.ssh_support as ssh
import rumba.model as mod
-import warnings
warnings.filterwarnings("ignore")
# Represents an emulab testbed info
@@ -36,9 +36,9 @@ warnings.filterwarnings("ignore")
# @image [string] specific image to use
#
class Testbed(mod.Testbed):
- def __init__(self, exp_name, username, password = "",
- proj_name = "ARCFIRE", url = "wall2.ilabt.iminds.be",
- image = "UBUNTU14-64-STD"):
+ def __init__(self, exp_name, username, password="",
+ proj_name="ARCFIRE", url="wall2.ilabt.iminds.be",
+ image="UBUNTU14-64-STD"):
mod.Testbed.__init__(self, exp_name, username, password, proj_name)
self.url = url
self.image = image
@@ -66,7 +66,7 @@ class Testbed(mod.Testbed):
return node_name + '.' + self.exp_name + '.' + \
self.proj_name + '.' + self.url
- def get_experiment_list(self, project_name = None):
+ def get_experiment_list(self, project_name=None):
'''
Get list of made emulab experiments accessible with your credentials
@@ -80,11 +80,11 @@ class Testbed(mod.Testbed):
try:
if project_name != None:
- return literal_eval(out)[project_name][project_name]
+ return literal_eval(out)[project_name][project_name]
else:
- return literal_eval(out)
+ return literal_eval(out)
except:
- return { project_name: { project_name: [] }}
+ return {project_name: {project_name: []}}
def swap_exp_in(self):
'''
@@ -131,8 +131,8 @@ class Testbed(mod.Testbed):
'" exp="' + exp_name + '" noswapin=true ' + \
'nsfilepath="' + dest_file_name + '"'
- ssh.execute_command(self, self.ops_server(), cmd, time_out = None)
- ssh.execute_command(self, self.ops_server(),'rm ' + dest_file_name)
+ ssh.execute_command(self, self.ops_server(), cmd, time_out=None)
+ ssh.execute_command(self, self.ops_server(), 'rm ' + dest_file_name)
print("New experiment succesfully created.")
def generate_ns_script(self, experiment):
@@ -151,12 +151,12 @@ class Testbed(mod.Testbed):
ns2_script += "source tb_compat.tcl\n"
for node in experiment.nodes:
- ns2_script += "set " + node.name + " [$ns node]\n"
- ns2_script += "tb-set-node-os $" + node.name + " " + \
- self.image + "\n"
+ ns2_script += "set " + node.name + " [$ns node]\n"
+ ns2_script += "tb-set-node-os $" + node.name + " " + \
+ self.image + "\n"
for dif in experiment.dif_ordering:
- if type(dif) is mod.ShimEthDIF:
+ if isinstance(dif, mod.ShimEthDIF):
if len(dif.ipcps) != 2:
continue
ns2_script += "set " + dif.name + \
@@ -220,17 +220,17 @@ class Testbed(mod.Testbed):
continue
for ipcp in node.ipcps:
if ipcp.dif.name == link_name:
- self.ip[ipcp] = link_ip
+ self.ip[ipcp] = link_ip
for node in experiment.nodes:
cmd = 'cat /var/emulab/boot/ifmap'
- node_full_name = self.full_name(node.name)
+ node_full_name = self.full_name(node.name)
output = ssh.execute_command(self, node_full_name, cmd)
output = re.split('\\\\n', output)
for item in output:
item = item.split()
for ipcp in node.ipcps:
- if type(ipcp) is mod.ShimEthIPCP:
+ if isinstance(ipcp, mod.ShimEthIPCP):
if self.ip[ipcp] == item[1]:
ipcp.ifname = item[0]
node.full_name = self.full_name(node.name)
diff --git a/rumba/testbeds/faketestbed.py b/rumba/testbeds/faketestbed.py
index 8d5e724..4821aa8 100644
--- a/rumba/testbeds/faketestbed.py
+++ b/rumba/testbeds/faketestbed.py
@@ -22,8 +22,7 @@ import rumba.model as mod
# Fake testbed, useful for testing
class Testbed(mod.Testbed):
- def __init__(self, exp_name, username, proj_name = "ARCFIRE",
- password = ""):
+ def __init__(self, exp_name, username, proj_name="ARCFIRE", password=""):
mod.Testbed.__init__(self, exp_name, username, password, proj_name)
def create_experiment(self, experiment):
diff --git a/rumba/testbeds/jfed.py b/rumba/testbeds/jfed.py
index 4a36d4a..e606846 100644
--- a/rumba/testbeds/jfed.py
+++ b/rumba/testbeds/jfed.py
@@ -25,9 +25,9 @@ import xml.dom.minidom as xml
import rumba.model as mod
class Testbed(mod.Testbed):
- def __init__(self, exp_name, username, cert_file, jfed_jar, exp_hours = "2",
- proj_name = "ARCFIRE", authority = "wall2.ilabt.iminds.be"):
- passwd = getpass.getpass(prompt = "Password for certificate file: ")
+ def __init__(self, exp_name, username, cert_file, jfed_jar, exp_hours="2",
+ proj_name="ARCFIRE", authority="wall2.ilabt.iminds.be"):
+ passwd = getpass.getpass(prompt="Password for certificate file: ")
mod.Testbed.__init__(self, exp_name, username, passwd, proj_name)
self.authority = "urn:publicid:IDN+" + authority + "+authority+cm"
self.auth_name = authority
@@ -35,10 +35,10 @@ class Testbed(mod.Testbed):
self.jfed_jar = jfed_jar
self.exp_hours = exp_hours
self.if_id = dict()
-
- def create_rspec(self, experiment):
self.rspec = self.exp_name + ".rspec"
+ self.manifest = self.exp_name + ".rrspec"
+ def create_rspec(self, experiment):
impl = xml.getDOMImplementation()
doc = impl.createDocument(None, "rspec", None)
@@ -80,7 +80,7 @@ class Testbed(mod.Testbed):
node.ifs = 0
for ipcp in node.ipcps:
- if type(ipcp) is mod.ShimEthIPCP:
+ if isinstance(ipcp, mod.ShimEthIPCP):
el3 = doc.createElement("interface")
self.if_id[ipcp] = node.name + ":if" + str(node.ifs)
el3.setAttribute("client_id", self.if_id[ipcp])
@@ -88,7 +88,7 @@ class Testbed(mod.Testbed):
el.appendChild(el3)
for dif in experiment.dif_ordering:
- if type(dif) is mod.ShimEthDIF:
+ if isinstance(dif, mod.ShimEthDIF):
el = doc.createElement("link")
top_el.appendChild(el)
el.setAttribute("client_id", dif.name)
@@ -108,7 +108,6 @@ class Testbed(mod.Testbed):
def create_experiment(self, experiment):
self.create_rspec(experiment)
- self.manifest = self.exp_name + ".rrspec"
for node in experiment.nodes:
auth_name_r = self.auth_name.replace(".", "-")
@@ -140,7 +139,7 @@ class Testbed(mod.Testbed):
for intf in intfs:
i_name = intf.getAttribute("client_id")
for ipcp in node_n.ipcps:
- if type(ipcp) is mod.ShimEthIPCP:
+ if isinstance(ipcp, mod.ShimEthIPCP):
if self.if_id[ipcp] == i_name:
comp_id = intf.getAttribute("component_id")
comp_arr = comp_id.split(":")
diff --git a/rumba/testbeds/qemu.py b/rumba/testbeds/qemu.py
index 3f4cb4a..158f360 100644
--- a/rumba/testbeds/qemu.py
+++ b/rumba/testbeds/qemu.py
@@ -22,8 +22,7 @@ import rumba.model as mod
# Fake testbed, useful for testing
class Testbed(mod.Testbed):
- def __init__(self, exp_name, username, proj_name = "ARCFIRE",
- password = ""):
+ def __init__(self, exp_name, username, proj_name="ARCFIRE", password=""):
mod.Testbed.__init__(self, exp_name, username, password, proj_name)
def create_experiment(self, experiment):