bundlewrap/bundles/dhcpd/metadata.py

58 lines
1.5 KiB
Python
Raw Normal View History

defaults = {
'apt': {
'packages': {
'isc-dhcp-server': {},
},
},
}
@metadata_reactor
def get_static_allocations(metadata):
allocations = {}
for rnode in repo.nodes:
if rnode.metadata.get('location', '') != metadata.get('location', ''):
continue
for identifier, interface in rnode.metadata.get('interfaces', {}).items():
if interface.get('dhcp', False):
allocations[rnode.name] = {
'ipv4': sorted(interface['ips'])[0],
'mac': interface['mac'],
}
return {
'dhcpd': {
'fixed_allocations': allocations,
}
}
2020-11-15 11:01:14 +00:00
@metadata_reactor
def get_listen_interfaces(metadata):
listen_interfaces = []
for identfier, subnet in node.metadata.get('dhcpd/subnets', {}).items():
2020-11-15 11:01:32 +00:00
listen_interfaces.append(subnet['interface'])
return {
'dhcpd': {
'listen_interfaces': ' '.join(sorted(listen_interfaces)),
}
}
2020-11-15 11:01:14 +00:00
@metadata_reactor
def iptables(metadata):
iptables = set()
for identfier, subnet in node.metadata.get('dhcpd/subnets', {}).items():
2020-11-15 11:01:32 +00:00
iptables.add('iptables -A INPUT -i {} -p udp --dport 67:68 -j ACCEPT'.format(subnet['interface']))
2020-11-15 11:01:14 +00:00
return {
'iptables': {
'bundle_rules': {
# iptables bundle relies on this being a list.
'dhcpd': sorted(list(iptables)),
},
}
}