aboutsummaryrefslogtreecommitdiff
path: root/rumba/testbeds/qemu.py
diff options
context:
space:
mode:
authorSander Vrijders <sander.vrijders@ugent.be>2017-06-16 17:58:40 +0200
committerSander Vrijders <sander.vrijders@ugent.be>2017-06-19 11:35:38 +0200
commitc76edec913dbdd847d6d5229d8b8cef090084cef (patch)
treefc25bb188d954b8ea79e6270aab50236e389b355 /rumba/testbeds/qemu.py
parent67288b3505dab7e9ea74fc87d139301e945b4a78 (diff)
downloadrumba-c76edec913dbdd847d6d5229d8b8cef090084cef.tar.gz
rumba-c76edec913dbdd847d6d5229d8b8cef090084cef.zip
rumba: Better placement of files created by Rumba
Temporary files such as ssh_info, the rspecs, logs, ... are now created in /tmp/rumba to avoid too many files being created and never removed. The VM images and jFed CLI are kept in ~/.cache/rumba to avoid redownloading every reboot. Closes #18, #19
Diffstat (limited to 'rumba/testbeds/qemu.py')
-rw-r--r--rumba/testbeds/qemu.py47
1 files changed, 24 insertions, 23 deletions
diff --git a/rumba/testbeds/qemu.py b/rumba/testbeds/qemu.py
index 1d449dc..f0b73a8 100644
--- a/rumba/testbeds/qemu.py
+++ b/rumba/testbeds/qemu.py
@@ -28,23 +28,20 @@ import rumba.log as log
import rumba.ssh_support as ssh_support
import wget
-
logger = log.get_logger(__name__)
class Testbed(mod.Testbed):
- def __init__(self, exp_name, bzimage=None, initramfs=None, proj_name="ARCFIRE",
- password="root", username="root",
- use_vhost=True, qemu_logs_dir=None):
+ def __init__(self, exp_name, bzimage_path=None, initramfs_path=None,
+ proj_name="ARCFIRE", password="root", username="root",
+ use_vhost=True):
mod.Testbed.__init__(self, exp_name, username, password, proj_name)
self.vms = {}
self.shims = []
self.vhost = use_vhost
- self.qemu_logs_dir = os.getcwd() if qemu_logs_dir is None \
- else qemu_logs_dir
self.boot_processes = []
- self.bzimage = bzimage
- self.initramfs = initramfs
+ self.bzimage_path = bzimage_path
+ self.initramfs_path = initramfs_path
@staticmethod
def _run_command_chain(commands, results_queue,
@@ -127,17 +124,19 @@ class Testbed(mod.Testbed):
# Download the proper buildroot images, if the user did not specify
# local images
url_prefix = "https://bitbucket.org/vmaffione/rina-images/downloads/"
- if not self.bzimage:
- self.bzimage = '%s.bzImage' % (experiment.prototype_name())
- if not os.path.exists(self.bzimage):
- logger.info("Downloading %s" % (url_prefix + self.bzimage))
- wget.download(url_prefix + self.bzimage)
+ if not self.bzimage_path:
+ bzimage = '%s.bzImage' % (experiment.prototype_name())
+ 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)
print("\n")
- if not self.initramfs:
- self.initramfs = '%s.rootfs.cpio' % (experiment.prototype_name())
- if not os.path.exists(self.initramfs):
- logger.info("Downloading %s" % (url_prefix + self.initramfs))
- wget.download(url_prefix + self.initramfs)
+ 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)
print("\n")
logger.info('Setting up interfaces.')
@@ -255,13 +254,15 @@ class Testbed(mod.Testbed):
vm['id'] = vmid
node.ssh_config.hostname = "localhost"
node.ssh_config.port = fwdp
+ log_file = os.path.join(mod.tmp_dir, name + '.log')
vars_dict = {'fwdp': fwdp, 'id': vmid, 'mac': mac,
- 'bzimage': self.bzimage,
- 'initramfs': self.initramfs,
+ 'bzimage': self.bzimage_path,
+ 'initramfs': self.initramfs_path,
'fwdc': fwdc,
'memory': vm_memory, 'frontend': vm_frontend,
- 'vmname': name}
+ 'vmname': name,
+ 'log_file' : log_file}
host_fwd_str = 'hostfwd=tcp::%(fwdp)s-:22' % vars_dict
vars_dict['hostfwdstr'] = host_fwd_str
@@ -279,7 +280,7 @@ class Testbed(mod.Testbed):
'-m %(memory)sM '
'-device %(frontend)s,mac=%(mac)s,netdev=mgmt '
'-netdev user,id=mgmt,%(hostfwdstr)s '
- '-serial file:%(vmname)s.log '
+ '-serial file:%(log_file)s '
% vars_dict
)
@@ -307,7 +308,7 @@ class Testbed(mod.Testbed):
time.sleep(boot_backoff)
booting_budget = boot_batch_size
- with open('%s/qemu_out_%s' % (self.qemu_logs_dir, vmid), 'w')\
+ with open('%s/qemu_out_%s' % (mod.tmp_dir, vmid), 'w')\
as out_file:
logger.debug('executing >> %s', command)
self.boot_processes.append(subprocess.Popen(command.split(),