297
298
for addr in net_utils.get_all_interface_addresses()]
300
shared_networks = _process_network_parameters_v6(
301
rack_addrs, failover_peers, shared_networks)
304
return template.substitute(
305
global_dhcp_snippets=global_dhcp_snippets, hosts=hosts,
306
failover_peers=failover_peers, shared_networks=shared_networks,
307
platform_codename=platform_codename,
308
omapi_key=omapi_key, **helpers)
309
except (KeyError, NameError) as error:
310
raise DHCPConfigError(
311
"Failed to render DHCP configuration.") from error
314
def _process_network_parameters_v6(
315
rack_addrs, failover_peers, shared_networks):
316
"""Preprocess shared_networks prior to rendering the template.
318
This is a separate function, partly for readability, and partly for ease
321
:param rack_addrs: a list of IPAddress values for the interfaces on this
323
:param failover_peers: failover_peers from get_config_v6.
324
:param shared_networks: shared_networks from get_config_v6.
325
:return: an updated shared_networks, suitable for rendering the template.
327
peers = {x["name"]: x for x in failover_peers}
299
329
for shared_network in shared_networks:
300
330
for subnet in shared_network["subnets"]:
301
331
cidr = IPNetwork(subnet['subnet_cidr'])
312
342
ntp_servers_ipv4, ntp_servers_ipv6 = _get_addresses(*ntp_servers)
313
343
subnet["ntp_servers_ipv4"] = ", ".join(ntp_servers_ipv4)
314
344
subnet["ntp_servers_ipv6"] = ", ".join(ntp_servers_ipv6)
317
return template.substitute(
318
global_dhcp_snippets=global_dhcp_snippets, hosts=hosts,
319
failover_peers=failover_peers, shared_networks=shared_networks,
320
platform_codename=platform_codename,
321
omapi_key=omapi_key, **helpers)
322
except (KeyError, NameError) as error:
323
raise DHCPConfigError(
324
"Failed to render DHCP configuration.") from error
345
for pool in subnet["pools"]:
346
peer = pool.get("failover_peer", None)
349
pool["ip_range_low"],
350
pool["ip_range_high"])
351
if peers[peer]["mode"] == "primary":
352
pool["ip_range_high"] = str(
354
ip_range.first + int(ip_range.size / 2) - 1))
356
pool["ip_range_low"] = str(
358
ip_range.first + int(ip_range.size / 2)))
359
return shared_networks