aboutsummaryrefslogtreecommitdiff
path: root/tools/democonf2rumba.py
diff options
context:
space:
mode:
authorDimitri Staessens <dimitri@ouroboros.rocks>2026-03-01 11:02:25 +0100
committerDimitri Staessens <dimitri@ouroboros.rocks>2026-03-07 11:29:02 +0100
commit6cbcfb039e608419bd6ced673723918aca6fb278 (patch)
tree172061d95f50cda09c3872d32c5f77e459044cd8 /tools/democonf2rumba.py
parent4e35c6b445d0cfbad9cf15a48f2d341e29dbd806 (diff)
downloadrumba-6cbcfb039e608419bd6ced673723918aca6fb278.tar.gz
rumba-6cbcfb039e608419bd6ced673723918aca6fb278.zip
rumba: Remove irati/rlite, python2 and qemu support
Remove IRATI and rlite prototype plugins, keeping only Ouroboros. Delete .gitlab-ci.yml (only contained an irati test job and a Sphinx pages job). Clean up all irati/rlite imports and references from examples, documentation, and tools. Qemu was tied heavily with rlite and irati. As it's less useful for ouroboros it's removed rather than reworked. Updated README.md and AUTHORS Signed-off-by: Dimitri Staessens <dimitri@ouroboros.rocks>
Diffstat (limited to 'tools/democonf2rumba.py')
-rwxr-xr-xtools/democonf2rumba.py292
1 files changed, 0 insertions, 292 deletions
diff --git a/tools/democonf2rumba.py b/tools/democonf2rumba.py
deleted file mode 100755
index 795cf22..0000000
--- a/tools/democonf2rumba.py
+++ /dev/null
@@ -1,292 +0,0 @@
-#!/usr/bin/env python
-
-import argparse
-import re
-
-import rumba.model as mod
-import rumba.log as log
-
-
-def make_experiment(filename, experiment_class, experiment_kwargs,
- testbed_class, testbed_kwargs, verbosity):
- """
- :type filename str
- :param filename: path to the .conf file
- :param experiment_class: subclass of mod.Experiment
- :param experiment_kwargs: args dict for experiment constructor
- (nodes will be overwritten)
- :param testbed_class: subclass of mod.Testbed
- :param testbed_kwargs: args dict for experiment constructor
- (nodes will be overwritten)
- """
- shims = {}
- nodes = {}
- difs = {}
-
- print('Reading file %s.' % (filename,))
- print('+++++++++++++++++++')
- print()
-
- with open(filename, 'r') as conf:
-
- line_cnt = 0
-
- while 1:
- line = conf.readline()
- if line == '':
- break
- line_cnt += 1
-
- line = line.replace('\n', '').strip()
-
- if line.startswith('#') or line == "":
- continue
-
- m = re.match(r'\s*eth\s+([\w-]+)\s+(\d+)([GMK])bps\s+(\w.*)$', line)
- if m:
- shim = m.group(1)
- speed = int(m.group(2))
- speed_unit = m.group(3).lower()
- vm_list = m.group(4).split()
-
- if shim in shims or shim in difs:
- print('Error: Line %d: shim %s already defined'
- % (line_cnt, shim))
- continue
-
- if speed_unit == 'K':
- speed = speed // 1000
- if speed_unit == 'G':
- speed = speed * 1000
-
- shims[shim] = {'name': shim,
- 'speed': speed,
- 'type': 'eth'}
-
- for vm in vm_list:
- nodes.setdefault(vm, {'name': vm, 'difs': [],
- 'dif_registrations': {},
- 'registrations': {}})
- nodes[vm]['difs'].append(shim)
- continue
-
- m = re.match(r'\s*dif\s+([\w-]+)\s+([\w-]+)\s+(\w.*)$', line)
- if m:
- dif = m.group(1)
- vm = m.group(2)
- dif_list = m.group(3).split()
-
- if dif in shims:
- print('Error: Line %d: dif %s already defined as shim'
- % (line_cnt, dif))
- continue
-
- difs.setdefault(dif, {
- 'name': dif}) # Other dict contents might be policies.
-
- if vm in nodes and dif in nodes[vm]['dif_registrations']:
- print('Error: Line %d: vm %s in dif %s already specified'
- % (line_cnt, vm, dif))
- continue
-
- nodes.setdefault(vm, {'name': vm, 'difs': [],
- 'dif_registrations': {},
- 'registrations': {}})
- nodes[vm]['difs'].append(dif)
- nodes[vm]['dif_registrations'][dif] = dif_list
- # It is not defined yet, per check above.
-
- continue
-
- # No match, spit a warning
- print('Warning: Line %d unrecognized and ignored' % line_cnt)
-
- # File parsed
-
- parsed_difs = {}
-
- for shim_name, shim in shims.items():
- parsed_difs[shim_name] = (mod.ShimEthDIF(
- shim_name,
- link_quality=mod.LinkQuality(rate=shim['speed']))
- )
-
- for dif_name, dif in difs.items():
- parsed_difs[dif_name] = (mod.NormalDIF(dif_name))
-
- parsed_nodes = []
- for node, node_data in nodes.items():
- name = node_data['name']
- difs = [parsed_difs[x] for x in node_data['difs']]
- dif_registrations = {parsed_difs[x]: [parsed_difs[y] for y in l]
- for x, l in node_data['dif_registrations']
- .items()}
- parsed_nodes.append(mod.Node(name, difs, dif_registrations))
-
- log.set_logging_level(verbosity)
- print()
- print('++++++++++++++++++++')
- print('Calling constructor of testbed %s with args %s.'
- % (testbed_class, testbed_kwargs))
- print('++++++++++++++++++++')
- print()
-
- testbed = testbed_class(**testbed_kwargs)
-
- experiment_kwargs['testbed'] = testbed
- experiment_kwargs['nodes'] = parsed_nodes
-
- exp = experiment_class(**experiment_kwargs)
- try:
- exp.swap_in()
- exp.bootstrap_prototype()
- input("Press ENTER to quit")
- finally:
- exp.swap_out()
-
-
-def setup_testbed_common_args(t_p):
-
- t_p.add_argument('-E', '--exp_name', metavar='EXP_NAME', type=str,
- required=True,
- help='Experiment name')
- t_p.add_argument('-U', '--username', metavar='USERNAME', type=str,
- required=True,
- help='Testbed user name')
- t_p.add_argument('-P', '--proj_name', metavar='PROJECT_NAME', type=str,
- help='Project name')
- t_p.add_argument('-W', '--password', metavar='PASSWORD', type=str,
- help='Testbed password')
-
-
-if __name__ == '__main__':
- description = "Demonstrator config file to rumba script converter"
- epilog = "2017 Marco Capitani <m.capitani@nextworks.it>"
-
- parser = argparse.ArgumentParser(description=description,
- epilog=epilog)
-
- parser.add_argument('-P', '--prototype', type=str, required=True,
- choices=['irati', 'ouroboros', 'rlite'],
- help='The kind of prototype plugin to use to run'
- ' the experiment.')
-
- parser.add_argument('-C', '--conf', metavar='CONFIG', type=str,
- required=True,
- help='Path to the config file to parse')
-
- parser.add_argument(
- '--verbosity', metavar='VERBOSITY', type=str,
- default='INFO',
- choices=['DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL'],
- help='Rumba output verbosity')
-
- subparsers = parser.add_subparsers(dest='testbed')
- emulab_p = subparsers.add_parser('emulab', help='Use emulab testbed')
- jfed_p = subparsers.add_parser('jfed', help='Use jfed testbed')
- qemu_p = subparsers.add_parser('qemu', help='Use qemu testbed')
- fake_p = subparsers.add_parser('fake', help='Use fake testbed')
-
- for t in [emulab_p, jfed_p, qemu_p, fake_p]:
- setup_testbed_common_args(t)
-
- qemu_p.add_argument('-B', '--bzimage-path', metavar='BZIMAGE', type=str,
- required=True,
- help='path to the bzImage file to use')
- qemu_p.add_argument('-I', '--initramfs-path', metavar='INITRAMFS', type=str,
- required=True,
- help='path to the initramfs file to use')
- qemu_p.add_argument('-V', '--use_vhost', action='store_true',
- default=False, help='Use vhost')
- qemu_p.add_argument('-Q', '--qemu_logs_dir', metavar='QEMU_LOGS', type=str,
- default=None, help='path to the folder for qemu logs')
- qemu_p.add_argument('--public-key-path', metavar='PATH', type=str,
- default=None, help='path to the user ssh public key.')
-
- emulab_p.add_argument('-R', '--url', metavar='URL', type=str,
- default="wall2.ilabt.iminds.be",
- help='Url')
- emulab_p.add_argument('-I', '--image', metavar='IMG', type=str,
- default="UBUNTU14-64-STD",
- help='Ubuntu image')
-
- jfed_p.add_argument('-C', '--cert_file', metavar='CERT', type=str,
- required=True,
- help='Certificate file')
- jfed_p.add_argument('-H', '--exp_hours', metavar='HOURS', type=str,
- default="2", help='Experiment hours')
- jfed_p.add_argument('-A', '--authority', metavar='AUTH', type=str,
- default="wall2.ilabt.iminds.be",
- help='Authority')
- jfed_p.add_argument('-I', '--image', metavar='IMAGE', type=str,
- default=None,
- help='Image to be used')
- jfed_p.add_argument('--image-custom', metavar='I_CUSTOM', type=bool,
- default=False,
- help='Is the image a custom one?')
- jfed_p.add_argument('--image-owner', metavar='I_OWNER', type=str,
- default=None,
- help='Creator of the image')
- jfed_p.add_argument('--use-physical-machines', metavar='USE_PM', type=bool,
- default=None,
- help='Try to allocate physical machines if True')
-
- args = parser.parse_args()
-
- if args.testbed == 'emulab':
- import rumba.testbeds.emulab as emulab
- test_class = emulab.Testbed
- testbed_args = {a.dest: getattr(args, a.dest)
- for a in emulab_p._actions
- if a.dest != 'help'
- and getattr(args, a.dest) is not None}
- elif args.testbed == 'jfed':
- import rumba.testbeds.jfed as jfed
- test_class = jfed.Testbed
- testbed_args = {a.dest: getattr(args, a.dest)
- for a in jfed_p._actions
- if a.dest != 'help'
- and getattr(args, a.dest) is not None}
- elif args.testbed == 'qemu':
- import rumba.testbeds.qemu as qemu
- test_class = qemu.Testbed
- testbed_args = {a.dest: getattr(args, a.dest)
- for a in qemu_p._actions
- if a.dest != 'help'
- and getattr(args, a.dest) is not None}
- elif args.testbed == 'local':
- import rumba.testbeds.local as local
- test_class = local.Testbed
- testbed_args = {a.dest: getattr(args, a.dest)
- for a in fake_p._actions
- if a.dest != 'help'
- and getattr(args, a.dest) is not None}
- else:
- if args.testbed is None:
- print('Testbed type must be specified!')
- print(parser.format_help())
- exit(1)
- raise ValueError('Unexpected testbed: %s.' % args.testbed)
-
- if args.prototype == 'irati':
- import rumba.prototypes.irati as irati
- exp_class = irati.Experiment
- elif args.prototype == 'ouroboros':
- import rumba.prototypes.ouroboros as ouroboros
- exp_class = ouroboros.Experiment
- elif args.prototype == 'rlite':
- import rumba.prototypes.rlite as rlite
- exp_class = rlite.Experiment
- else:
- raise ValueError('Unexpected prototype: %s.' % args.testbed)
-
- try:
- make_experiment(args.conf,
- experiment_class=exp_class,
- experiment_kwargs={},
- testbed_class=test_class,
- testbed_kwargs=testbed_args,
- verbosity=args.verbosity)
-
- except KeyboardInterrupt:
- print("Interrupted. Closing down.")