~ltrager/maas/remove_di_from_kernel_opts

« back to all changes in this revision

Viewing changes to src/provisioningserver/dhcp/config.py

  • Committer: Lee Trager
  • Date: 2016-10-22 06:06:12 UTC
  • mfrom: (5457.1.44 maas)
  • Revision ID: lee.trager@canonical.com-20161022060612-ukar20f6ffs45nas
Merge trunk

Show diffs side-by-side

added added

removed removed

Lines of Context:
20
20
from netaddr import (
21
21
    IPAddress,
22
22
    IPNetwork,
 
23
    IPRange,
23
24
)
24
25
from provisioningserver.boot import BootMethodRegistry
25
26
from provisioningserver.utils import (
296
297
        IPAddress(addr)
297
298
        for addr in net_utils.get_all_interface_addresses()]
298
299
 
 
300
    shared_networks = _process_network_parameters_v6(
 
301
        rack_addrs, failover_peers, shared_networks)
 
302
 
 
303
    try:
 
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
 
312
 
 
313
 
 
314
def _process_network_parameters_v6(
 
315
        rack_addrs, failover_peers, shared_networks):
 
316
    """Preprocess shared_networks prior to rendering the template.
 
317
 
 
318
    This is a separate function, partly for readability, and partly for ease
 
319
    of testing.
 
320
 
 
321
    :param rack_addrs: a list of IPAddress values for the interfaces on this
 
322
        rack controller.
 
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.
 
326
    """
 
327
    peers = {x["name"]: x for x in failover_peers}
 
328
 
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)
315
 
 
316
 
    try:
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)
 
347
                if peer is not None:
 
348
                    ip_range = IPRange(
 
349
                        pool["ip_range_low"],
 
350
                        pool["ip_range_high"])
 
351
                    if peers[peer]["mode"] == "primary":
 
352
                        pool["ip_range_high"] = str(
 
353
                            IPAddress(
 
354
                                ip_range.first + int(ip_range.size / 2) - 1))
 
355
                    else:
 
356
                        pool["ip_range_low"] = str(
 
357
                            IPAddress(
 
358
                                ip_range.first + int(ip_range.size / 2)))
 
359
    return shared_networks