/usr/lib/python3/dist-packages/provisioningserver/dhcp/testing/config.py is in python3-maas-provisioningserver 2.0.0~beta3+bzr4941-0ubuntu1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 | # Copyright 2014-2016 Canonical Ltd. This software is licensed under the
# GNU Affero General Public License version 3 (see the file LICENSE).
"""Test helpers related to DHCP configuration."""
__all__ = [
'make_subnet_config',
]
import random
from maastesting.factory import factory
from netaddr import IPAddress
def make_subnet_pool(
network, start_ip=None, end_ip=None, failover_peer=None):
"""Return a pool entry for a subnet from network."""
if start_ip is None and end_ip is None:
start_ip, end_ip = factory.make_ip_range(network)
if failover_peer is None:
failover_peer = factory.make_name("failover")
return {
"ip_range_low": str(start_ip),
"ip_range_high": str(end_ip),
"failover_peer": failover_peer,
}
def make_dhcp_snippets(allow_empty=True):
# DHCP snippets are optional
if allow_empty and factory.pick_bool():
return []
return [{
'name': factory.make_name('name'),
'description': factory.make_name('description'),
'value': factory.make_name('value'),
} for _ in range(3)]
def make_host(
hostname=None, interface_name=None,
mac_address=None, ip=None, ipv6=False, dhcp_snippets=None):
"""Return a host entry for a subnet from network."""
if hostname is None:
hostname = factory.make_name("host")
if interface_name is None:
interface_name = factory.make_name("eth")
if mac_address is None:
mac_address = factory.make_mac_address()
if ip is None:
if ipv6 is True:
ip = str(factory.make_ipv6_address())
else:
ip = str(factory.make_ipv4_address())
if dhcp_snippets is None:
dhcp_snippets = make_dhcp_snippets()
return {
"host": "%s-%s" % (hostname, interface_name),
"mac": mac_address,
"ip": ip,
"dhcp_snippets": dhcp_snippets,
}
def make_subnet_config(network=None, pools=None, ipv6=False,
dhcp_snippets=None):
"""Return complete DHCP configuration dict for a subnet."""
if network is None:
if ipv6 is True:
network = factory.make_ipv6_network()
else:
network = factory.make_ipv4_network()
if pools is None:
pools = [make_subnet_pool(network)]
if dhcp_snippets is None:
dhcp_snippets = make_dhcp_snippets()
return {
'subnet': str(IPAddress(network.first)),
'subnet_mask': str(network.netmask),
'subnet_cidr': str(network.cidr),
'broadcast_ip': str(network.broadcast),
'dns_servers': str(factory.pick_ip_in_network(network)),
'ntp_server': str(factory.pick_ip_in_network(network)),
'domain_name': '%s.example.com' % factory.make_name('domain'),
'router_ip': str(factory.pick_ip_in_network(network)),
'pools': pools,
'dhcp_snippets': dhcp_snippets,
}
def make_shared_network(name=None, subnets=None, ipv6=False):
"""Return complete DHCP configuration dict for a shared network."""
if name is None:
name = factory.make_name("vlan")
if subnets is None:
subnets = [
make_subnet_config(ipv6=ipv6)
for _ in range(3)
]
return {
"name": name,
"subnets": subnets,
}
def make_failover_peer_config(
name=None, mode=None, address=None, peer_address=None):
"""Return complete DHCP configuration dict for a failover peer."""
if name is None:
name = factory.make_name("failover")
if mode is None:
mode = random.choice(["primary", "secondary"])
if address is None:
address = factory.make_ip_address()
if peer_address is None:
peer_address = factory.make_ip_address()
return {
'name': name,
'mode': mode,
'address': address,
'peer_address': peer_address,
}
def make_interface(name=None):
if name is None:
name = factory.make_name("eth")
return {
'name': name,
}
|