From fbb4e2f7a5af8fecfc87abea5525ae945bee24da Mon Sep 17 00:00:00 2001 From: Franziska Kunsmann Date: Sat, 6 Jun 2020 10:18:25 +0200 Subject: [PATCH] systemd-networkd: first draft --- bundles/systemd-networkd/files/interfaces | 3 ++ .../systemd-networkd/files/template.network | 33 +++++++++++++++++++ bundles/systemd-networkd/items.py | 22 +++++++++++++ groups/all.py | 1 + 4 files changed, 59 insertions(+) create mode 100644 bundles/systemd-networkd/files/interfaces create mode 100644 bundles/systemd-networkd/files/template.network create mode 100644 bundles/systemd-networkd/items.py diff --git a/bundles/systemd-networkd/files/interfaces b/bundles/systemd-networkd/files/interfaces new file mode 100644 index 0000000..2e67d1c --- /dev/null +++ b/bundles/systemd-networkd/files/interfaces @@ -0,0 +1,3 @@ +auto lo +iface lo inet loopback +iface lo inet6 loopback diff --git a/bundles/systemd-networkd/files/template.network b/bundles/systemd-networkd/files/template.network new file mode 100644 index 0000000..3784104 --- /dev/null +++ b/bundles/systemd-networkd/files/template.network @@ -0,0 +1,33 @@ +[Match] +Name=${interface} + +[Network] +% if config.get('dhcp', False): +DHCP=yes +IPv6AcceptRA=yes +UseHostname=no +% else: +DHCP=no +IPv6AcceptRA=no +% endif + +% for addr in sorted(config.get('ip_addresses', set())): +Address=${addr} +% endfor + +% if config.get('ip4_masquerade_outgoing', False): +IPMasquerade=yes +IPForward=ipv4 +%endif + +% if 'ip6_gateway' in config: +[Route] +Gateway=${config['ip6_gateway']} +GatewayOnLink=yes +% endif + +% if 'ip4_gateway' in config: +[Route] +Gateway=${config['ip4_gateway']} +GatewayOnLink=yes +% endif diff --git a/bundles/systemd-networkd/items.py b/bundles/systemd-networkd/items.py new file mode 100644 index 0000000..6f0764e --- /dev/null +++ b/bundles/systemd-networkd/items.py @@ -0,0 +1,22 @@ +assert node.has_bundle('systemd') + +files = { + '/etc/network/interfaces': {}, +} + +for interface, config in node.metadata.get('interfaces', {}).items(): + files['/etc/systemd/network/10-{}.network'.format(interface)] = { + 'source': 'template.network', + 'content_type': 'mako', + 'context': { + 'interface': interface, + 'config': config, + }, + 'triggers': { + 'svc_systemd:systemd-networkd:restart', + }, + } + +svc_systemd = { + 'systemd-networkd': {}, +} diff --git a/groups/all.py b/groups/all.py index a8e4494..7a5e9e4 100644 --- a/groups/all.py +++ b/groups/all.py @@ -9,6 +9,7 @@ groups['all'] = { 'postfix', 'sudo', 'systemd', + 'systemd-networkd', 'users', }, 'metadata': {