Merge lp:~rvb/maas/multiple-dhcp-intf2 into lp:~maas-committers/maas/trunk

Proposed by Raphaël Badin
Status: Merged
Approved by: Raphaël Badin
Approved revision: no longer in the source branch.
Merged at revision: 1864
Proposed branch: lp:~rvb/maas/multiple-dhcp-intf2
Merge into: lp:~maas-committers/maas/trunk
Diff against target: 105 lines (+12/-0)
6 files modified
etc/maas/templates/dhcp/dhcpd.conf.template (+1/-0)
src/maasserver/dhcp.py (+1/-0)
src/maasserver/tests/test_dhcp.py (+1/-0)
src/provisioningserver/dhcp/tests/test_config.py (+2/-0)
src/provisioningserver/dhcp/tests/test_writer.py (+4/-0)
src/provisioningserver/dhcp/writer.py (+3/-0)
To merge this branch: bzr merge lp:~rvb/maas/multiple-dhcp-intf2
Reviewer Review Type Date Requested Status
Jeroen T. Vermeulen (community) Approve
Review via email: mp+203703@code.launchpad.net

Commit message

Include the "interface <inft>" statement in each subnet declaration in the DHCP config.

Description of the change

Although this feature is not well documented, the experiment shows that it does what we want: restrict each subnet to a particular interface.

While fixing src/provisioningserver/dhcp/writer.py, I discovered that we don't actually use this script in the packaging anymore. Maybe it's a feature on which people rely but if it's not, we might as well get rid of this. The normal way to write MAAS' DHCP config file is through the celery task (triggered from the UI or the API/CLI).

To post a comment you must log in.
Revision history for this message
Jeroen T. Vermeulen (jtv) :
review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'etc/maas/templates/dhcp/dhcpd.conf.template'
2--- etc/maas/templates/dhcp/dhcpd.conf.template 2014-01-27 20:16:45 +0000
3+++ etc/maas/templates/dhcp/dhcpd.conf.template 2014-01-29 10:42:41 +0000
4@@ -8,6 +8,7 @@
5 {{for dhcp_subnet in dhcp_subnets}}
6 subnet {{dhcp_subnet['subnet']}} netmask {{dhcp_subnet['subnet_mask']}} {
7 filename "{{bootloader}}";
8+ interface {{dhcp_subnet['interface']}};
9 ignore-client-uids true;
10 option subnet-mask {{dhcp_subnet['subnet_mask']}};
11 option broadcast-address {{dhcp_subnet['broadcast_ip']}};
12
13=== modified file 'src/maasserver/dhcp.py'
14--- src/maasserver/dhcp.py 2014-01-29 08:22:53 +0000
15+++ src/maasserver/dhcp.py 2014-01-29 10:42:41 +0000
16@@ -63,6 +63,7 @@
17 IPAddress(interface.subnet_mask)),
18 subnet_mask=interface.subnet_mask,
19 broadcast_ip=interface.broadcast_ip,
20+ interface=interface.interface,
21 router_ip=interface.router_ip,
22 dns_servers=dns_server,
23 ntp_server=ntp_server,
24
25=== modified file 'src/maasserver/tests/test_dhcp.py'
26--- src/maasserver/tests/test_dhcp.py 2014-01-29 08:27:52 +0000
27+++ src/maasserver/tests/test_dhcp.py 2014-01-29 10:42:41 +0000
28@@ -110,6 +110,7 @@
29 dhcp_subnets = []
30 for interface in nodegroup.get_managed_interfaces():
31 dhcp_params = [
32+ 'interface',
33 'subnet_mask',
34 'broadcast_ip',
35 'router_ip',
36
37=== modified file 'src/provisioningserver/dhcp/tests/test_config.py'
38--- src/provisioningserver/dhcp/tests/test_config.py 2014-01-27 19:55:37 +0000
39+++ src/provisioningserver/dhcp/tests/test_config.py 2014-01-29 10:42:41 +0000
40@@ -37,6 +37,7 @@
41 {{omapi_key}}
42 {{for dhcp_subnet in dhcp_subnets}}
43 {{dhcp_subnet['subnet']}}
44+ {{dhcp_subnet['interface']}}
45 {{dhcp_subnet['subnet_mask']}}
46 {{dhcp_subnet['broadcast_ip']}}
47 {{dhcp_subnet['dns_servers']}}
48@@ -57,6 +58,7 @@
49 omapi_key="random",
50 dhcp_subnets=[dict(
51 subnet="10.0.0.0",
52+ interface="eth0",
53 subnet_mask="255.0.0.0",
54 broadcast_ip="10.255.255.255",
55 dns_servers="10.1.0.1 10.1.0.2",
56
57=== modified file 'src/provisioningserver/dhcp/tests/test_writer.py'
58--- src/provisioningserver/dhcp/tests/test_writer.py 2014-01-20 09:01:25 +0000
59+++ src/provisioningserver/dhcp/tests/test_writer.py 2014-01-29 10:42:41 +0000
60@@ -37,6 +37,7 @@
61
62 test_args = (
63 '--subnet', 'subnet',
64+ '--interface', 'eth0',
65 '--subnet-mask', 'subnet-mask',
66 '--broadcast-ip', 'broadcast-ip',
67 '--dns-servers', 'dns-servers',
68@@ -67,6 +68,7 @@
69 self.assertThat(
70 args, MatchesStructure.byEquality(
71 subnet='subnet',
72+ interface='eth0',
73 subnet_mask='subnet-mask',
74 broadcast_ip='broadcast-ip',
75 dns_servers='dns-servers',
76@@ -86,6 +88,7 @@
77 output = sys.stdout.getvalue()
78 contains_all_params = ContainsAll([
79 'subnet',
80+ 'interface',
81 'subnet-mask',
82 'broadcast-ip',
83 'omapi-key',
84@@ -109,6 +112,7 @@
85 output = stream.read()
86 contains_all_params = ContainsAll([
87 'subnet',
88+ 'interface',
89 'subnet-mask',
90 'broadcast-ip',
91 'omapi-key',
92
93=== modified file 'src/provisioningserver/dhcp/writer.py'
94--- src/provisioningserver/dhcp/writer.py 2014-01-27 19:43:00 +0000
95+++ src/provisioningserver/dhcp/writer.py 2014-01-29 10:42:41 +0000
96@@ -31,6 +31,9 @@
97 "--subnet", action="store", required=True, help=(
98 "Base subnet declaration, e.g. 192.168.1.0"))
99 parser.add_argument(
100+ "--interface", action="store", required=True, help=(
101+ "Interface name, e.g. eth0"))
102+ parser.add_argument(
103 "--subnet-mask", action="store", required=True, help=(
104 "The mask for the subnet, e.g. 255.255.255.0"))
105 parser.add_argument(