diff --git a/gen_machines.py b/gen_machines.py index 617303c..b05b793 100755 --- a/gen_machines.py +++ b/gen_machines.py @@ -51,11 +51,20 @@ bridges = {} for i, n in [(x, 'net_'+str(x)) for x in range(1, 8)]: bridges[i] = Bridge(n, i) -def dump_bridges(fn): - with open(fn, 'w+') as f: - for br in bridges: - # Generate bridge.conf for the host - f.write('allow ' + bridges[br].name + '\n') +def gen_bridge_files(): + files = [ + 'bridge.conf', + 'gen_bridges.sh', + ] + context = {'bridges': bridges} + + loader = jinja2.FileSystemLoader('templates/') + environment = jinja2.Environment(loader=loader, trim_blocks=True, keep_trailing_newline=True) + for f in files: + template = environment.get_template(f) + template.stream(context).dump('output/' + f) + mode = os.stat('output/gen_bridges.sh').st_mode + os.chmod('output/gen_bridges.sh', mode | 0o0100) # Connections # dict[ net_num -> [comp_names] @@ -78,7 +87,7 @@ for net, cs in conns.items(): comps[c].add_to_bridge(bridges[net]) os.mkdir('output') -dump_bridges('output/bridge.conf') +gen_bridge_files() for c in comps.values(): c.gen_files() diff --git a/templates/bridge.conf b/templates/bridge.conf new file mode 100644 index 0000000..f48e26b --- /dev/null +++ b/templates/bridge.conf @@ -0,0 +1,3 @@ +{% for b in bridges %} +allow {{ b.name }} +{% endfor %} diff --git a/templates/gen_bridges.sh b/templates/gen_bridges.sh new file mode 100644 index 0000000..ff5c0d1 --- /dev/null +++ b/templates/gen_bridges.sh @@ -0,0 +1,8 @@ +#!/bin/sh + +# Run as root. + +{% for b in bridges %} +ip link add name {{ b.name }} type bridge +ip link set {{ b.name }} up +{% endfor %}