aboutsummaryrefslogtreecommitdiff
path: root/rumba/testbeds
diff options
context:
space:
mode:
authorSander Vrijders <sander.vrijders@ugent.be>2017-09-13 11:26:53 +0200
committerSander Vrijders <sander.vrijders@ugent.be>2017-09-13 17:18:56 +0200
commit440ab00aa57dd8c7c0076d93011814b7fb25ec76 (patch)
tree3f65d7b4866c4cc6de68929d254fd04c8adb52e7 /rumba/testbeds
parente7a0deed26ec4015e783742da0796a77c589ce55 (diff)
downloadrumba-440ab00aa57dd8c7c0076d93011814b7fb25ec76.tar.gz
rumba-440ab00aa57dd8c7c0076d93011814b7fb25ec76.zip
build: Add continuous integration
This adds CI to Rumba.
Diffstat (limited to 'rumba/testbeds')
-rw-r--r--rumba/testbeds/jfed.py10
-rw-r--r--rumba/testbeds/qemu.py54
2 files changed, 42 insertions, 22 deletions
diff --git a/rumba/testbeds/jfed.py b/rumba/testbeds/jfed.py
index c541037..d938179 100644
--- a/rumba/testbeds/jfed.py
+++ b/rumba/testbeds/jfed.py
@@ -27,10 +27,14 @@ import subprocess
import getpass
import xml.dom.minidom as xml
import os.path
-
import time
-import wget
import tarfile
+import sys
+
+if sys.version_info[0] >= 3:
+ from urllib.request import urlretrieve
+else:
+ from urllib import urlretrieve
import rumba.model as mod
import rumba.log as log
@@ -70,7 +74,7 @@ class Testbed(mod.Testbed):
logger.info("Couldn't find jFed CLI. Downloading.")
tarball = "jfed_cli.tar.gz"
url = "http://jfed.iminds.be/downloads/stable/jar/" + tarball
- wget.download(url)
+ urlretrieve(url, filename=tarball)
tar = tarfile.open(tarball)
tar.extractall()
tar.close()
diff --git a/rumba/testbeds/qemu.py b/rumba/testbeds/qemu.py
index 47f4670..80a3d4c 100644
--- a/rumba/testbeds/qemu.py
+++ b/rumba/testbeds/qemu.py
@@ -27,11 +27,16 @@ import multiprocessing
import time
import subprocess
import os
+import sys
+
+if sys.version_info[0] >= 3:
+ from urllib.request import urlretrieve
+else:
+ from urllib import urlretrieve
import rumba.model as mod
import rumba.log as log
import rumba.ssh_support as ssh_support
-import wget
logger = log.get_logger(__name__)
@@ -48,6 +53,12 @@ class Testbed(mod.Testbed):
self.bzimage_path = bzimage_path
self.initramfs_path = initramfs_path
+ # Prepend sudo to all commands if the user is not 'root'
+ def may_sudo(self, cmds):
+ if os.geteuid() != 0:
+ for i in range(len(cmds)):
+ cmds[i] = "sudo %s" % cmds[i]
+
@staticmethod
def _run_command_chain(commands, results_queue,
error_queue, ignore_errors=False):
@@ -72,7 +83,7 @@ class Testbed(mod.Testbed):
logger.debug('executing >> %s', command)
try:
subprocess.check_call(command.split())
- except subprocess.CalledProcessError as e:
+ except (subprocess.CalledProcessError, IOError) as e:
error_queue.put(str(e))
errors += 1
if not ignore_errors:
@@ -134,14 +145,16 @@ class Testbed(mod.Testbed):
self.bzimage_path = os.path.join(mod.cache_dir, bzimage)
if not os.path.exists(self.bzimage_path):
logger.info("Downloading %s" % (url_prefix + bzimage))
- wget.download(url_prefix + bzimage, out=self.bzimage_path)
+ urlretrieve(url_prefix + bzimage,
+ filename=self.bzimage_path)
print("\n")
if not self.initramfs_path:
initramfs = '%s.rootfs.cpio' % (experiment.prototype_name())
self.initramfs_path = os.path.join(mod.cache_dir, initramfs)
if not os.path.exists(self.initramfs_path):
logger.info("Downloading %s" % (url_prefix + initramfs))
- wget.download(url_prefix + initramfs, out=self.initramfs_path)
+ urlretrieve(url_prefix + initramfs,
+ filename=self.initramfs_path)
print("\n")
logger.info('Setting up interfaces.')
@@ -157,8 +170,8 @@ class Testbed(mod.Testbed):
self.shims.append(shim)
ipcps = shim.ipcps
command_list = []
- command_list += ('sudo brctl addbr %(br)s\n'
- 'sudo ip link set dev %(br)s up'
+ command_list += ('brctl addbr %(br)s\n'
+ 'ip link set dev %(br)s up'
% {'br': shim.name}
).split('\n')
for node in shim.members: # type:mod.Node
@@ -167,9 +180,9 @@ class Testbed(mod.Testbed):
port_id = len(vm['ports']) + 1
tap_id = '%s.%02x' % (name, port_id)
- command_list += ('sudo ip tuntap add mode tap name %(tap)s\n'
- 'sudo ip link set dev %(tap)s up\n'
- 'sudo brctl addif %(br)s %(tap)s'
+ command_list += ('ip tuntap add mode tap name %(tap)s\n'
+ 'ip link set dev %(tap)s up\n'
+ 'brctl addif %(br)s %(tap)s'
% {'tap': tap_id, 'br': shim.name}
).split('\n')
@@ -178,11 +191,11 @@ class Testbed(mod.Testbed):
# Rate limit the traffic transmitted on the TAP interface
command_list += (
- 'sudo tc qdisc add dev %(tap)s handle 1: root '
+ 'tc qdisc add dev %(tap)s handle 1: root '
'htb default 11\n'
- 'sudo tc class add dev %(tap)s parent 1: classid '
+ 'tc class add dev %(tap)s parent 1: classid '
'1:1 htb rate 10gbit\n'
- 'sudo tc class add dev %(tap)s parent 1:1 classid '
+ 'tc class add dev %(tap)s parent 1:1 classid '
'1:11 htb rate %(speed)s'
% {'tap': tap_id, 'speed': speed}
).split('\n')
@@ -206,6 +219,7 @@ class Testbed(mod.Testbed):
if not e_queue.empty():
break
# Launch commands asynchronously
+ self.may_sudo(command_list)
process = multiprocessing.Process(target=self._run_command_chain,
args=(command_list,
r_queue,
@@ -283,9 +297,10 @@ class Testbed(mod.Testbed):
'-append "console=ttyS0" '
'-initrd %(initramfs)s '
% vars_dict)
+ if os.path.exists('/dev/kvm'):
+ command += '--enable-kvm '
command += ('-vga std '
'-display none '
- '--enable-kvm '
'-smp 1 '
'-m %(memory)sM '
'-device %(frontend)s,mac=%(mac)s,netdev=mgmt '
@@ -367,12 +382,12 @@ class Testbed(mod.Testbed):
shim = port['shim']
commands = []
-
- commands += ('sudo brctl delif %(br)s %(tap)s\n'
- 'sudo ip link set dev %(tap)s down\n'
- 'sudo ip tuntap del mode tap name %(tap)s'
+ commands += ('brctl delif %(br)s %(tap)s\n'
+ 'ip link set dev %(tap)s down\n'
+ 'ip tuntap del mode tap name %(tap)s'
% {'tap': tap, 'br': shim.name}
).split('\n')
+ self.may_sudo(commands)
process = multiprocessing.Process(
target=self._run_command_chain,
args=(commands, results_queue, error_queue),
@@ -407,10 +422,11 @@ class Testbed(mod.Testbed):
for shim in self.shims:
commands = []
- commands += ('sudo ip link set dev %(br)s down\n'
- 'sudo brctl delbr %(br)s'
+ commands += ('ip link set dev %(br)s down\n'
+ 'brctl delbr %(br)s'
% {'br': shim.name}
).split('\n')
+ self.may_sudo(commands)
process = multiprocessing.Process(target=self._run_command_chain,
args=(commands,
results_queue,