cp over all the bundles from kunsis bw repo
This commit is contained in:
parent
65b117b819
commit
1f73b04351
89 changed files with 3991 additions and 0 deletions
3
bundles/systemd-networkd/files/resolv.conf
Normal file
3
bundles/systemd-networkd/files/resolv.conf
Normal file
|
@ -0,0 +1,3 @@
|
|||
% for nameserver in sorted(node.metadata.get('nameservers', {'9.9.9.10', '2620:fe::10'})):
|
||||
nameserver ${nameserver}
|
||||
% endfor
|
13
bundles/systemd-networkd/files/template-bond.netdev
Normal file
13
bundles/systemd-networkd/files/template-bond.netdev
Normal file
|
@ -0,0 +1,13 @@
|
|||
[NetDev]
|
||||
Name=${bond}
|
||||
Kind=bond
|
||||
|
||||
[Bond]
|
||||
Mode=${mode}
|
||||
% if mode in {'balance-rr', '802.3ad', 'balance-tlp'}:
|
||||
TransmitHashPolicy=layer3+4
|
||||
% endif
|
||||
MIIMonitorSec=0.1
|
||||
% if mode == '802.3ad':
|
||||
LACPTransmitRate=fast
|
||||
% endif
|
5
bundles/systemd-networkd/files/template-bond.network
Normal file
5
bundles/systemd-networkd/files/template-bond.network
Normal file
|
@ -0,0 +1,5 @@
|
|||
[Match]
|
||||
Name=${' '.join(sorted(match))}
|
||||
|
||||
[Network]
|
||||
Bond=${bond}
|
|
@ -0,0 +1,7 @@
|
|||
[Match]
|
||||
Name=${bridge}
|
||||
|
||||
[Network]
|
||||
% for vlan in sorted(vlans):
|
||||
VLAN=${bridge}.${vlan}
|
||||
% endfor
|
6
bundles/systemd-networkd/files/template-bridge.netdev
Normal file
6
bundles/systemd-networkd/files/template-bridge.netdev
Normal file
|
@ -0,0 +1,6 @@
|
|||
[NetDev]
|
||||
Name=${bridge}
|
||||
Kind=bridge
|
||||
|
||||
[Bridge]
|
||||
STP=off
|
6
bundles/systemd-networkd/files/template-bridge.network
Normal file
6
bundles/systemd-networkd/files/template-bridge.network
Normal file
|
@ -0,0 +1,6 @@
|
|||
[Match]
|
||||
Name=${' '.join(sorted(match))}
|
||||
|
||||
[Network]
|
||||
Bridge=${bridge}
|
||||
BindCarrier=${' '.join(sorted(match))}
|
3
bundles/systemd-networkd/files/template-dummy.netdev
Normal file
3
bundles/systemd-networkd/files/template-dummy.netdev
Normal file
|
@ -0,0 +1,3 @@
|
|||
[NetDev]
|
||||
Name=${name}
|
||||
Kind=dummy
|
27
bundles/systemd-networkd/files/template-iface-dhcp.network
Normal file
27
bundles/systemd-networkd/files/template-iface-dhcp.network
Normal file
|
@ -0,0 +1,27 @@
|
|||
<%
|
||||
from ipaddress import ip_network
|
||||
%>\
|
||||
[Match]
|
||||
Name=${interface}
|
||||
|
||||
[Network]
|
||||
DHCP=yes
|
||||
IPv6AcceptRA=yes
|
||||
|
||||
[DHCPv4]
|
||||
UseDomains=${str(config.get('use_dhcp_domains', False)).lower()}
|
||||
UseHostname=no
|
||||
UseMTU=${str(config.get('use_dhcp_mtu', True)).lower()}
|
||||
UseNTP=${str(config.get('use_dhcp_ntp', False)).lower()}
|
||||
UseTimezone=no
|
||||
|
||||
% if config.get('send_hostname', True):
|
||||
SendHostname=yes
|
||||
Hostname=${node.name.split('.')[-1]}
|
||||
% else:
|
||||
SendHostname=no
|
||||
% endif
|
||||
|
||||
% if config.get('forwarding', False):
|
||||
IPForward=yes
|
||||
%endif
|
50
bundles/systemd-networkd/files/template-iface-nodhcp.network
Normal file
50
bundles/systemd-networkd/files/template-iface-nodhcp.network
Normal file
|
@ -0,0 +1,50 @@
|
|||
<%
|
||||
from ipaddress import ip_network
|
||||
%>\
|
||||
[Match]
|
||||
Name=${interface}
|
||||
|
||||
% for addr in sorted(config.get('ips', set())):
|
||||
[Address]
|
||||
<%
|
||||
if '/' in addr:
|
||||
ip, prefix = addr.split('/')
|
||||
else:
|
||||
ip = addr
|
||||
prefix = '32'
|
||||
%>\
|
||||
Address=${ip}/${prefix}
|
||||
|
||||
% endfor
|
||||
% for route, rconfig in sorted(config.get('routes', {}).items()):
|
||||
[Route]
|
||||
% if 'via' in rconfig:
|
||||
Gateway=${rconfig['via']}
|
||||
% endif
|
||||
Destination=${route}
|
||||
GatewayOnlink=yes
|
||||
|
||||
% endfor
|
||||
% if 'gateway4' in config:
|
||||
[Route]
|
||||
Gateway=${config['gateway4']}
|
||||
GatewayOnlink=yes
|
||||
|
||||
% endif
|
||||
% if 'gateway6' in config:
|
||||
[Route]
|
||||
Gateway=${config['gateway6']}
|
||||
GatewayOnlink=yes
|
||||
|
||||
% endif
|
||||
[Network]
|
||||
DHCP=no
|
||||
IPv6AcceptRA=no
|
||||
|
||||
% if config.get('forwarding', False):
|
||||
IPForward=yes
|
||||
%endif
|
||||
|
||||
% for vlan in sorted(config.get('vlans', set())):
|
||||
VLAN=${interface}.${vlan}
|
||||
% endfor
|
|
@ -0,0 +1,7 @@
|
|||
[NetDev]
|
||||
Name=${interface}
|
||||
Kind=vlan
|
||||
MACAddress=${mac}
|
||||
|
||||
[VLAN]
|
||||
Id=${vlan}
|
181
bundles/systemd-networkd/items.py
Normal file
181
bundles/systemd-networkd/items.py
Normal file
|
@ -0,0 +1,181 @@
|
|||
from bundlewrap.exceptions import BundleError
|
||||
|
||||
repo.libs.tools.require_bundle(node, 'systemd')
|
||||
|
||||
files = {
|
||||
'/etc/network/interfaces': {
|
||||
'delete': True,
|
||||
},
|
||||
}
|
||||
|
||||
if node.metadata.get('systemd-networkd/enable-resolved', False):
|
||||
symlinks['/etc/resolv.conf'] = {
|
||||
'target': '/run/systemd/resolve/stub-resolv.conf',
|
||||
}
|
||||
svc_systemd['systemd-resolved'] = {}
|
||||
else:
|
||||
files['/etc/resolv.conf'] = {
|
||||
'content_type': 'mako',
|
||||
}
|
||||
|
||||
|
||||
directories = {
|
||||
'/etc/systemd/network': {
|
||||
'purge': True,
|
||||
'needed_by': {
|
||||
'svc_systemd:systemd-networkd',
|
||||
},
|
||||
'triggers': {
|
||||
'svc_systemd:systemd-networkd:restart',
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
mac_host_prefix = '%04x' % (node.magic_number % 65534)
|
||||
generated_mac = f'52:54:00:{mac_host_prefix[0:2]}:{mac_host_prefix[2:4]}:{{}}'
|
||||
|
||||
# Don't use .get() here. We might end up with a node without a network
|
||||
# config!
|
||||
for interface, config in node.metadata['interfaces'].items():
|
||||
if config.get('dhcp', False):
|
||||
if 'vlans' in config:
|
||||
raise BundleError(f'{node.name} interface {interface} cannot use vlans and dhcp!')
|
||||
template = 'template-iface-dhcp.network'
|
||||
else:
|
||||
template = 'template-iface-nodhcp.network'
|
||||
|
||||
if '.' in interface:
|
||||
vlan_id = int(interface.split('.')[1])
|
||||
vlan_hex = '%02x' % (vlan_id % 255)
|
||||
files[f'/etc/systemd/network/{interface}.netdev'] = {
|
||||
'source': 'template-iface-vlan.netdev',
|
||||
'content_type': 'mako',
|
||||
'context': {
|
||||
'interface': interface,
|
||||
'vlan': vlan_id,
|
||||
'mac': generated_mac.format(vlan_hex)
|
||||
},
|
||||
'needed_by': {
|
||||
'svc_systemd:systemd-networkd',
|
||||
},
|
||||
'triggers': {
|
||||
'svc_systemd:systemd-networkd:restart',
|
||||
},
|
||||
}
|
||||
elif interface.startswith('dummy'):
|
||||
files[f'/etc/systemd/network/{interface}.netdev'] = {
|
||||
'source': 'template-dummy.netdev',
|
||||
'content_type': 'mako',
|
||||
'context': {
|
||||
'name': interface,
|
||||
},
|
||||
'needed_by': {
|
||||
'svc_systemd:systemd-networkd',
|
||||
},
|
||||
'triggers': {
|
||||
'svc_systemd:systemd-networkd:restart',
|
||||
},
|
||||
}
|
||||
|
||||
if not config.get('ignore', False):
|
||||
files[f'/etc/systemd/network/{interface}.network'] = {
|
||||
'source': template,
|
||||
'content_type': 'mako',
|
||||
'context': {
|
||||
'interface': interface,
|
||||
'config': config,
|
||||
},
|
||||
'needed_by': {
|
||||
'svc_systemd:systemd-networkd',
|
||||
},
|
||||
'triggers': {
|
||||
'svc_systemd:systemd-networkd:restart',
|
||||
},
|
||||
}
|
||||
|
||||
for bond, config in node.metadata.get('systemd-networkd/bonds', {}).items():
|
||||
files[f'/etc/systemd/network/{bond}.netdev'] = {
|
||||
'source': 'template-bond.netdev',
|
||||
'content_type': 'mako',
|
||||
'context': {
|
||||
'bond': bond,
|
||||
'mode': config.get('mode', '802.3ad'),
|
||||
'prio': config.get('priority', '32768'),
|
||||
},
|
||||
'needed_by': {
|
||||
'svc_systemd:systemd-networkd',
|
||||
},
|
||||
'triggers': {
|
||||
'svc_systemd:systemd-networkd:restart',
|
||||
},
|
||||
}
|
||||
|
||||
files[f'/etc/systemd/network/{bond}.network'] = {
|
||||
'source': 'template-bond.network',
|
||||
'content_type': 'mako',
|
||||
'context': {
|
||||
'bond': bond,
|
||||
'match': config['match'],
|
||||
},
|
||||
'needed_by': {
|
||||
'svc_systemd:systemd-networkd',
|
||||
},
|
||||
'triggers': {
|
||||
'svc_systemd:systemd-networkd:restart',
|
||||
},
|
||||
}
|
||||
|
||||
for brname, config in node.metadata.get('systemd-networkd/bridges', {}).items():
|
||||
filename = '{}-match-{}'.format(
|
||||
brname,
|
||||
'-'.join(sorted(config['match'])),
|
||||
)
|
||||
|
||||
files[f'/etc/systemd/network/{brname}.netdev'] = {
|
||||
'source': 'template-bridge.netdev',
|
||||
'content_type': 'mako',
|
||||
'context': {
|
||||
'bridge': brname,
|
||||
},
|
||||
'needed_by': {
|
||||
'svc_systemd:systemd-networkd',
|
||||
},
|
||||
'triggers': {
|
||||
'svc_systemd:systemd-networkd:restart',
|
||||
},
|
||||
}
|
||||
|
||||
files[f'/etc/systemd/network/{filename}.network'] = {
|
||||
'source': 'template-bridge.network',
|
||||
'content_type': 'mako',
|
||||
'context': {
|
||||
'bridge': brname,
|
||||
'match': config['match'],
|
||||
},
|
||||
'needed_by': {
|
||||
'svc_systemd:systemd-networkd',
|
||||
},
|
||||
'triggers': {
|
||||
'svc_systemd:systemd-networkd:restart',
|
||||
},
|
||||
}
|
||||
|
||||
if config.get('vlans', set()):
|
||||
files[f'/etc/systemd/network/{brname}.network'] = {
|
||||
'source': 'template-bridge-vlan.network',
|
||||
'content_type': 'mako',
|
||||
'context': {
|
||||
'bridge': brname,
|
||||
'vlans': config.get('vlans', set()),
|
||||
},
|
||||
'needed_by': {
|
||||
'svc_systemd:systemd-networkd',
|
||||
},
|
||||
'triggers': {
|
||||
'svc_systemd:systemd-networkd:restart',
|
||||
},
|
||||
}
|
||||
|
||||
svc_systemd = {
|
||||
'systemd-networkd': {},
|
||||
}
|
46
bundles/systemd-networkd/metadata.py
Normal file
46
bundles/systemd-networkd/metadata.py
Normal file
|
@ -0,0 +1,46 @@
|
|||
defaults = {
|
||||
'apt': {
|
||||
'packages': {
|
||||
'resolvconf': {
|
||||
'installed': False,
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
@metadata_reactor.provides(
|
||||
'interfaces',
|
||||
'systemd-networkd/bridges',
|
||||
)
|
||||
def add_vlan_infos_to_interface(metadata):
|
||||
interfaces = {}
|
||||
bridges = {}
|
||||
|
||||
for iface in metadata.get('interfaces', {}):
|
||||
if '.' not in iface:
|
||||
continue
|
||||
|
||||
interface,vlan = iface.split('.')
|
||||
|
||||
interfaces.setdefault(interface, {}).setdefault('vlans', set())
|
||||
interfaces[interface]['vlans'].add(vlan)
|
||||
|
||||
for bridge, config in metadata.get('systemd-networkd/bridges', {}).items():
|
||||
for iface in config.get('match', {}):
|
||||
if '.' not in iface:
|
||||
continue
|
||||
|
||||
interface,vlan = iface.split('.')
|
||||
|
||||
bridges.setdefault(interface, {}).setdefault('vlans', set())
|
||||
bridges[interface]['vlans'].add(vlan)
|
||||
|
||||
interfaces.setdefault(iface, {'ignore': True})
|
||||
|
||||
return {
|
||||
'interfaces': interfaces,
|
||||
'systemd-networkd': {
|
||||
'bridges': bridges,
|
||||
},
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue