bundlewrap/bundles/dhcpd/metadata.py

55 lines
1.4 KiB
Python
Raw Normal View History

defaults = {
'apt': {
'packages': {
'isc-dhcp-server': {},
},
},
'bash_aliases': {
'leases': 'sudo dhcp-lease-list | tail -n +4 | sort -k 2,2',
},
}
@metadata_reactor.provides(
'dhcpd/fixed_allocations',
)
def get_static_allocations(metadata):
allocations = {}
for rnode in repo.nodes:
if rnode.metadata.get('location', '') != metadata.get('location', ''):
continue
2021-02-12 19:37:36 +00:00
for iface_name, iface_config in rnode.metadata.get('interfaces', {}).items():
if iface_config.get('dhcp', False):
try:
2021-02-12 19:37:36 +00:00
allocations[f'{rnode.name}_{iface_name}'] = {
'ipv4': sorted(iface_config['ips'])[0],
'mac': iface_config['mac'],
}
except KeyError:
pass
return {
'dhcpd': {
'fixed_allocations': allocations,
}
}
2020-11-15 11:01:14 +00:00
@metadata_reactor.provides(
'nftables/rules/10-dhcpd',
)
def nftables(metadata):
2021-02-12 19:37:36 +00:00
rules = set()
for iface in node.metadata.get('dhcpd/subnets', {}):
rules.add(f'inet filter input udp dport {{ 67, 68 }} iif {iface} accept')
2020-11-15 11:01:14 +00:00
return {
'nftables': {
'rules': {
# can't use port_rules here, because we're generating interface based rules.
'10-dhcpd': sorted(rules),
2020-11-15 11:01:14 +00:00
},
}
}