diff options
author | Sander Vrijders <sander.vrijders@ugent.be> | 2017-09-13 11:26:53 +0200 |
---|---|---|
committer | Sander Vrijders <sander.vrijders@ugent.be> | 2017-09-13 17:18:56 +0200 |
commit | 440ab00aa57dd8c7c0076d93011814b7fb25ec76 (patch) | |
tree | 3f65d7b4866c4cc6de68929d254fd04c8adb52e7 /rumba/testbeds | |
parent | e7a0deed26ec4015e783742da0796a77c589ce55 (diff) | |
download | rumba-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.py | 10 | ||||
-rw-r--r-- | rumba/testbeds/qemu.py | 54 |
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, |