aboutsummaryrefslogtreecommitdiff
path: root/rumba
diff options
context:
space:
mode:
authorMarco Capitani <m.capitani@nextworks.it>2017-07-28 11:04:53 +0200
committerMarco Capitani <m.capitani@nextworks.it>2017-07-28 11:04:53 +0200
commit9733485acfc611cea59119a096e528357aa438a5 (patch)
tree62926bef082bbcacf3ddfb3813c8c580dd73347b /rumba
parent815839bf3cac2fcfd2d25a69395055397d55a8bb (diff)
parent7b43f02b415968371f1b5719232bd7741cb7f12f (diff)
downloadrumba-9733485acfc611cea59119a096e528357aa438a5.tar.gz
rumba-9733485acfc611cea59119a096e528357aa438a5.zip
Merge branch 'master' into storyboard-impl
Diffstat (limited to 'rumba')
-rw-r--r--rumba/model.py23
-rw-r--r--rumba/prototypes/irati.py2
-rw-r--r--rumba/testbeds/jfed.py10
-rw-r--r--rumba/testbeds/qemu.py47
4 files changed, 50 insertions, 32 deletions
diff --git a/rumba/model.py b/rumba/model.py
index d2f7567..ffb67cc 100644
--- a/rumba/model.py
+++ b/rumba/model.py
@@ -20,7 +20,9 @@
# MA 02110-1301 USA
import abc
+import os
import random
+import stat
import time
import rumba.log as log
@@ -39,7 +41,22 @@ except ImportError:
return random.expovariate(1.0 / mean_duration)
logger.debug("Falling back to simple implementations.")
- # PROBLEM! These logs will almost never be printed...
+ # PROBLEM! These logs will almost never be printed... But we might not care
+
+tmp_dir = '/tmp/rumba'
+try:
+ os.mkdir(tmp_dir)
+ os.chmod(tmp_dir, stat.S_IRWXU | stat.S_IRWXG | stat.S_IRWXO)
+except OSError:
+ # Already there, nothing to do
+ pass
+
+cache_dir = os.path.join(os.path.expanduser("~"), '.cache/rumba/')
+try:
+ os.mkdir(cache_dir)
+except OSError:
+ # Already there, nothing to do
+ pass
# Represents generic testbed info
@@ -245,8 +262,6 @@ class Node:
s += ", ".join(rl)
s += " ]\n"
- s += " Policies: [ "
-
return s
def __hash__(self):
@@ -719,7 +734,7 @@ class Experiment:
break
def dump_ssh_info(self):
- f = open('ssh_info', 'w')
+ f = open(os.path.join(tmp_dir, 'ssh_info'), 'w')
for node in self.nodes:
f.write("%s;%s;%s;%s;%s\n" % (node.name,
self.testbed.username,
diff --git a/rumba/prototypes/irati.py b/rumba/prototypes/irati.py
index c01e413..57901fc 100644
--- a/rumba/prototypes/irati.py
+++ b/rumba/prototypes/irati.py
@@ -58,7 +58,7 @@ class Experiment(mod.Experiment):
else:
self.sudo = self.real_sudo
- self._conf_dir = os.path.join(os.getcwd(), 'IRATI_conf')
+ self._conf_dir = os.path.join(mod.tmp_dir, 'IRATI_conf')
try:
os.mkdir(self._conf_dir)
except OSError:
diff --git a/rumba/testbeds/jfed.py b/rumba/testbeds/jfed.py
index ad6b98a..8867dc6 100644
--- a/rumba/testbeds/jfed.py
+++ b/rumba/testbeds/jfed.py
@@ -51,9 +51,10 @@ class Testbed(mod.Testbed):
self.cert_file = cert_file
self.exp_hours = exp_hours
self.if_id = dict()
- self.rspec = self.exp_name + ".rspec"
- self.manifest = self.exp_name + ".rrspec"
- self.jfed_jar = "jfed_cli/experimenter-cli.jar"
+ self.rspec = os.path.join(mod.tmp_dir, self.exp_name + ".rspec")
+ self.manifest = os.path.join(mod.tmp_dir, self.exp_name + ".rrspec")
+ self.jfed_jar = os.path.join(mod.cache_dir,
+ 'jfed_cli/experimenter-cli.jar')
if image is not None:
self.image = "urn:publicid:IDN+" + authority + \
"+image+wall2-ilabt-iminds-be:" + image
@@ -68,7 +69,8 @@ class Testbed(mod.Testbed):
tar = tarfile.open(tarball)
tar.extractall()
tar.close()
- logger.info("Extracted in current directory")
+ os.rename(os.path.join(os.getcwd(), 'jfed_cli'),
+ os.path.join(mod.cache_dir, 'jfed_cli'))
os.remove(tarball)
self.flags['no_vlan_offload'] = True
diff --git a/rumba/testbeds/qemu.py b/rumba/testbeds/qemu.py
index 34458e2..3d30ce2 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.')
@@ -257,13 +256,15 @@ class Testbed(mod.Testbed):
node.ssh_config.port = fwdp
node.ssh_config.username = self.username
node.ssh_config.password = self.password
+ 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
@@ -281,7 +282,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
)
@@ -309,7 +310,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(),