Merge ~ddstreet/maas:lp1896684-28 into maas:2.8
- Git
- lp:~ddstreet/maas
- lp1896684-28
- Merge into 2.8
Proposed by
Dan Streetman
Status: | Merged |
---|---|
Approved by: | Lee Trager |
Approved revision: | 843b1c54a4c01853dbdf7ae37929c92483d410fd |
Merge reported by: | MAAS Lander |
Merged at revision: | not available |
Proposed branch: | ~ddstreet/maas:lp1896684-28 |
Merge into: | maas:2.8 |
Diff against target: |
364 lines (+158/-43) 6 files modified
src/maasserver/dhcp.py (+13/-1) src/maasserver/models/node.py (+6/-11) src/maasserver/models/tests/test_node.py (+20/-0) src/maasserver/preseed_network.py (+26/-21) src/maasserver/tests/test_dhcp.py (+44/-10) src/maasserver/tests/test_preseed_network.py (+49/-0) |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Lee Trager (community) | Approve | ||
MAAS Lander | Approve | ||
Review via email: mp+392313@code.launchpad.net |
Commit message
LP: #1896684 - If no subnet gateway, only use in-subnet dns addresses
If DHCP is not providing any gateway, it should not provide any
DNS server addresses that aren't directly reachable.
Similarly, if the network preseed is not configuring any gateway,
it should not provide per-interface DNS server addresses, nor default
dns server addresses, that aren't directly reachable.
Only apply rack DNS server address if subnet.allow_dns == True
Description of the change
To post a comment you must log in.
Revision history for this message
Lee Trager (ltrager) : | # |
review:
Approve
Revision history for this message
MAAS Lander (maas-lander) wrote : | # |
UNABLE TO START LANDING
STATUS: MISSING COMMIT MESSAGE
Preview Diff
[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1 | diff --git a/src/maasserver/dhcp.py b/src/maasserver/dhcp.py | |||
2 | index 848ff1b..05e9f7a 100644 | |||
3 | --- a/src/maasserver/dhcp.py | |||
4 | +++ b/src/maasserver/dhcp.py | |||
5 | @@ -438,7 +438,15 @@ def make_subnet_config( | |||
6 | 438 | dns_servers = [] | 438 | dns_servers = [] |
7 | 439 | if subnet.allow_dns and default_dns_servers: | 439 | if subnet.allow_dns and default_dns_servers: |
8 | 440 | # If the MAAS DNS server is enabled make sure that is used first. | 440 | # If the MAAS DNS server is enabled make sure that is used first. |
10 | 441 | dns_servers += default_dns_servers | 441 | if subnet.gateway_ip: |
11 | 442 | dns_servers += default_dns_servers | ||
12 | 443 | else: | ||
13 | 444 | # if there is no gateway, only provide in-subnet dns servers | ||
14 | 445 | dns_servers += [ | ||
15 | 446 | ipaddress | ||
16 | 447 | for ipaddress in default_dns_servers | ||
17 | 448 | if ipaddress in ip_network | ||
18 | 449 | ] | ||
19 | 442 | if subnet.dns_servers: | 450 | if subnet.dns_servers: |
20 | 443 | # Add DNS user defined DNS servers | 451 | # Add DNS user defined DNS servers |
21 | 444 | dns_servers += [IPAddress(server) for server in subnet.dns_servers] | 452 | dns_servers += [IPAddress(server) for server in subnet.dns_servers] |
22 | @@ -557,6 +565,10 @@ def get_default_dns_servers(rack_controller, subnet, use_rack_proxy=True): | |||
23 | 557 | :param use_rack_proxy: Whether to proxy DNS through the rack controller | 565 | :param use_rack_proxy: Whether to proxy DNS through the rack controller |
24 | 558 | or not. | 566 | or not. |
25 | 559 | """ | 567 | """ |
26 | 568 | if not subnet.allow_dns: | ||
27 | 569 | # This subnet isn't allowed to use region or rack addresses for dns | ||
28 | 570 | return [] | ||
29 | 571 | |||
30 | 560 | ip_version = subnet.get_ip_version() | 572 | ip_version = subnet.get_ip_version() |
31 | 561 | default_region_ip = get_source_address(subnet.get_ipnetwork()) | 573 | default_region_ip = get_source_address(subnet.get_ipnetwork()) |
32 | 562 | try: | 574 | try: |
33 | diff --git a/src/maasserver/models/node.py b/src/maasserver/models/node.py | |||
34 | index 7e867cd..1d371f4 100644 | |||
35 | --- a/src/maasserver/models/node.py | |||
36 | +++ b/src/maasserver/models/node.py | |||
37 | @@ -4905,6 +4905,8 @@ class Node(CleanSave, TimestampedModel): | |||
38 | 4905 | if ipv4 and gateways.ipv4 is not None: | 4905 | if ipv4 and gateways.ipv4 is not None: |
39 | 4906 | subnet = Subnet.objects.get(id=gateways.ipv4.subnet_id) | 4906 | subnet = Subnet.objects.get(id=gateways.ipv4.subnet_id) |
40 | 4907 | if subnet.dns_servers: | 4907 | if subnet.dns_servers: |
41 | 4908 | if not subnet.allow_dns: | ||
42 | 4909 | return subnet.dns_servers | ||
43 | 4908 | rack_dns = [] | 4910 | rack_dns = [] |
44 | 4909 | for rack in { | 4911 | for rack in { |
45 | 4910 | self.get_boot_primary_rack_controller(), | 4912 | self.get_boot_primary_rack_controller(), |
46 | @@ -4931,6 +4933,8 @@ class Node(CleanSave, TimestampedModel): | |||
47 | 4931 | if ipv6 and gateways.ipv6 is not None: | 4933 | if ipv6 and gateways.ipv6 is not None: |
48 | 4932 | subnet = Subnet.objects.get(id=gateways.ipv6.subnet_id) | 4934 | subnet = Subnet.objects.get(id=gateways.ipv6.subnet_id) |
49 | 4933 | if subnet.dns_servers: | 4935 | if subnet.dns_servers: |
50 | 4936 | if not subnet.allow_dns: | ||
51 | 4937 | return subnet.dns_servers | ||
52 | 4934 | rack_dns = [] | 4938 | rack_dns = [] |
53 | 4935 | for rack in { | 4939 | for rack in { |
54 | 4936 | self.get_boot_primary_rack_controller(), | 4940 | self.get_boot_primary_rack_controller(), |
55 | @@ -4977,18 +4981,9 @@ class Node(CleanSave, TimestampedModel): | |||
56 | 4977 | if filtered_addresses: | 4981 | if filtered_addresses: |
57 | 4978 | routable_addrs_map[node] = filtered_addresses | 4982 | routable_addrs_map[node] = filtered_addresses |
58 | 4979 | 4983 | ||
59 | 4980 | # No default gateway subnet has specific DNS servers defined, so | ||
60 | 4981 | # use MAAS for the default DNS server. | ||
61 | 4982 | if gateways.ipv4 is None and gateways.ipv6 is None: | 4984 | if gateways.ipv4 is None and gateways.ipv6 is None: |
71 | 4983 | # If there are no default gateways, the default is the MAAS | 4985 | # node with no gateway can only use routable addrs |
72 | 4984 | # region IP address. | 4986 | maas_dns_servers = [] |
64 | 4985 | maas_dns_servers = get_dns_server_addresses( | ||
65 | 4986 | rack_controller=self.get_boot_rack_controller(), | ||
66 | 4987 | ipv4=ipv4, | ||
67 | 4988 | ipv6=ipv6, | ||
68 | 4989 | include_alternates=True, | ||
69 | 4990 | default_region_ip=default_region_ip, | ||
70 | 4991 | ) | ||
73 | 4992 | routable_addrs_map = { | 4987 | routable_addrs_map = { |
74 | 4993 | node: [ | 4988 | node: [ |
75 | 4994 | address | 4989 | address |
76 | diff --git a/src/maasserver/models/tests/test_node.py b/src/maasserver/models/tests/test_node.py | |||
77 | index 3b9a6fb..6121686 100644 | |||
78 | --- a/src/maasserver/models/tests/test_node.py | |||
79 | +++ b/src/maasserver/models/tests/test_node.py | |||
80 | @@ -8132,6 +8132,26 @@ class TestGetDefaultDNSServers(MAASServerTestCase): | |||
81 | 8132 | node.get_default_dns_servers(), [ipv6_subnet_dns] | 8132 | node.get_default_dns_servers(), [ipv6_subnet_dns] |
82 | 8133 | ) | 8133 | ) |
83 | 8134 | 8134 | ||
84 | 8135 | def test_ignores_other_unroutable_rack_controllers_ipv4(self): | ||
85 | 8136 | # Regression test for LP:1896684 | ||
86 | 8137 | rack_v4, rack_v6, node = self.make_Node_with_RackController( | ||
87 | 8138 | ipv4=True, ipv4_gateway=False, ipv6=False, ipv6_gateway=False | ||
88 | 8139 | ) | ||
89 | 8140 | vlan = node.boot_interface.vlan | ||
90 | 8141 | rack = vlan.primary_rack | ||
91 | 8142 | rackif = rack.interface_set.first() | ||
92 | 8143 | rack_ips = [rack_v4] | ||
93 | 8144 | for _ in range(3): | ||
94 | 8145 | subnet = factory.make_Subnet(vlan=vlan, version=4) | ||
95 | 8146 | ip = factory.make_StaticIPAddress(subnet=subnet, interface=rackif) | ||
96 | 8147 | rack_ips.append(ip.ip) | ||
97 | 8148 | rack.save() | ||
98 | 8149 | resolve_hostname = self.patch(server_address, "resolve_hostname") | ||
99 | 8150 | resolve_hostname.side_effect = lambda hostname, version: set( | ||
100 | 8151 | map(IPAddress, rack_ips) | ||
101 | 8152 | ) | ||
102 | 8153 | self.assertItemsEqual(node.get_default_dns_servers(), [rack_v4]) | ||
103 | 8154 | |||
104 | 8135 | 8155 | ||
105 | 8136 | class TestNode_Start(MAASTransactionServerTestCase): | 8156 | class TestNode_Start(MAASTransactionServerTestCase): |
106 | 8137 | """Tests for Node.start().""" | 8157 | """Tests for Node.start().""" |
107 | diff --git a/src/maasserver/preseed_network.py b/src/maasserver/preseed_network.py | |||
108 | index 779d1a6..99a3ce3 100644 | |||
109 | --- a/src/maasserver/preseed_network.py | |||
110 | +++ b/src/maasserver/preseed_network.py | |||
111 | @@ -373,32 +373,37 @@ class InterfaceConfiguration: | |||
112 | 373 | if "addresses" not in v2_nameservers: | 373 | if "addresses" not in v2_nameservers: |
113 | 374 | v2_nameservers["addresses"] = [] | 374 | v2_nameservers["addresses"] = [] |
114 | 375 | 375 | ||
131 | 376 | for ip in StaticIPAddress.objects.filter( | 376 | if subnet.allow_dns: |
132 | 377 | interface__node__in=[ | 377 | for ip in StaticIPAddress.objects.filter( |
133 | 378 | subnet.vlan.primary_rack, | 378 | interface__node__in=[ |
134 | 379 | subnet.vlan.secondary_rack, | 379 | subnet.vlan.primary_rack, |
135 | 380 | ], | 380 | subnet.vlan.secondary_rack, |
136 | 381 | subnet__vlan=subnet.vlan, | 381 | ], |
137 | 382 | alloc_type__in=[ | 382 | subnet__vlan=subnet.vlan, |
138 | 383 | IPADDRESS_TYPE.AUTO, | 383 | alloc_type__in=[ |
139 | 384 | IPADDRESS_TYPE.STICKY, | 384 | IPADDRESS_TYPE.AUTO, |
140 | 385 | ], | 385 | IPADDRESS_TYPE.STICKY, |
141 | 386 | ).exclude(ip=None): | 386 | ], |
142 | 387 | if ( | 387 | ).exclude(ip=None): |
143 | 388 | IPAddress(ip.get_ip()).version | 388 | if ip.ip in v2_nameservers["addresses"]: |
144 | 389 | == subnet.get_ip_version() | 389 | continue |
145 | 390 | and ip.get_ip() not in v2_nameservers["addresses"] | 390 | ip_address = IPAddress(ip.ip) |
146 | 391 | ): | 391 | if ip_address.version != subnet.get_ip_version(): |
147 | 392 | continue | ||
148 | 393 | if not subnet.gateway_ip: | ||
149 | 394 | if ip_address not in subnet.get_ipnetwork(): | ||
150 | 395 | # without gateway, only use in-subnet addrs | ||
151 | 396 | continue | ||
152 | 392 | v1_subnet_operation["dns_nameservers"].append( | 397 | v1_subnet_operation["dns_nameservers"].append( |
153 | 393 | ip.ip | 398 | ip.ip |
154 | 394 | ) | 399 | ) |
155 | 395 | v2_nameservers["addresses"].append(ip.ip) | 400 | v2_nameservers["addresses"].append(ip.ip) |
156 | 396 | 401 | ||
162 | 397 | if subnet.dns_servers: | 402 | for ip in subnet.dns_servers: |
163 | 398 | v1_subnet_operation[ | 403 | if ip in v2_nameservers["addresses"]: |
164 | 399 | "dns_nameservers" | 404 | continue |
165 | 400 | ] += subnet.dns_servers | 405 | v1_subnet_operation["dns_nameservers"].append(ip) |
166 | 401 | v2_nameservers["addresses"] += subnet.dns_servers | 406 | v2_nameservers["addresses"].append(ip) |
167 | 402 | 407 | ||
168 | 403 | if len(matching_subnet_routes) > 0 and version == 1: | 408 | if len(matching_subnet_routes) > 0 and version == 1: |
169 | 404 | # For the v1 YAML, the list of routes is rendered | 409 | # For the v1 YAML, the list of routes is rendered |
170 | diff --git a/src/maasserver/tests/test_dhcp.py b/src/maasserver/tests/test_dhcp.py | |||
171 | index d53f8bb..f445146 100644 | |||
172 | --- a/src/maasserver/tests/test_dhcp.py | |||
173 | +++ b/src/maasserver/tests/test_dhcp.py | |||
174 | @@ -1158,7 +1158,7 @@ class TestMakeSubnetConfig(MAASServerTestCase): | |||
175 | 1158 | config = dhcp.make_subnet_config( | 1158 | config = dhcp.make_subnet_config( |
176 | 1159 | rack_controller, | 1159 | rack_controller, |
177 | 1160 | subnet, | 1160 | subnet, |
179 | 1161 | [factory.make_name("dns")], | 1161 | [factory.make_ipv4_address()], |
180 | 1162 | [factory.make_name("ntp")], | 1162 | [factory.make_name("ntp")], |
181 | 1163 | default_domain, | 1163 | default_domain, |
182 | 1164 | search_list=default_domain.name, | 1164 | search_list=default_domain.name, |
183 | @@ -1457,7 +1457,7 @@ class TestMakeSubnetConfig(MAASServerTestCase): | |||
184 | 1457 | config = dhcp.make_subnet_config( | 1457 | config = dhcp.make_subnet_config( |
185 | 1458 | rack_controller, | 1458 | rack_controller, |
186 | 1459 | subnet, | 1459 | subnet, |
188 | 1460 | [factory.make_name("dns")], | 1460 | [factory.make_ipv4_address()], |
189 | 1461 | [factory.make_name("ntp")], | 1461 | [factory.make_name("ntp")], |
190 | 1462 | default_domain, | 1462 | default_domain, |
191 | 1463 | ) | 1463 | ) |
192 | @@ -1474,7 +1474,7 @@ class TestMakeSubnetConfig(MAASServerTestCase): | |||
193 | 1474 | config = dhcp.make_subnet_config( | 1474 | config = dhcp.make_subnet_config( |
194 | 1475 | rack_controller, | 1475 | rack_controller, |
195 | 1476 | subnet, | 1476 | subnet, |
197 | 1477 | [factory.make_name("dns")], | 1477 | [factory.make_ipv4_address()], |
198 | 1478 | [factory.make_name("ntp")], | 1478 | [factory.make_name("ntp")], |
199 | 1479 | default_domain, | 1479 | default_domain, |
200 | 1480 | ) | 1480 | ) |
201 | @@ -1495,7 +1495,7 @@ class TestMakeSubnetConfig(MAASServerTestCase): | |||
202 | 1495 | config = dhcp.make_subnet_config( | 1495 | config = dhcp.make_subnet_config( |
203 | 1496 | rack_controller, | 1496 | rack_controller, |
204 | 1497 | subnet, | 1497 | subnet, |
206 | 1498 | [factory.make_name("dns")], | 1498 | [factory.make_ipv4_address()], |
207 | 1499 | [factory.make_name("ntp")], | 1499 | [factory.make_name("ntp")], |
208 | 1500 | default_domain, | 1500 | default_domain, |
209 | 1501 | ) | 1501 | ) |
210 | @@ -1518,7 +1518,7 @@ class TestMakeSubnetConfig(MAASServerTestCase): | |||
211 | 1518 | config = dhcp.make_subnet_config( | 1518 | config = dhcp.make_subnet_config( |
212 | 1519 | rack_controller, | 1519 | rack_controller, |
213 | 1520 | subnet, | 1520 | subnet, |
215 | 1521 | [factory.make_name("dns")], | 1521 | [factory.make_ipv4_address()], |
216 | 1522 | [factory.make_name("ntp")], | 1522 | [factory.make_name("ntp")], |
217 | 1523 | default_domain, | 1523 | default_domain, |
218 | 1524 | search_list=search_list, | 1524 | search_list=search_list, |
219 | @@ -1546,7 +1546,7 @@ class TestMakeSubnetConfig(MAASServerTestCase): | |||
220 | 1546 | config = dhcp.make_subnet_config( | 1546 | config = dhcp.make_subnet_config( |
221 | 1547 | rack_controller, | 1547 | rack_controller, |
222 | 1548 | subnet, | 1548 | subnet, |
224 | 1549 | [factory.make_name("dns")], | 1549 | [factory.make_ipv6_address()], |
225 | 1550 | [factory.make_name("ntp")], | 1550 | [factory.make_name("ntp")], |
226 | 1551 | default_domain, | 1551 | default_domain, |
227 | 1552 | search_list=search_list, | 1552 | search_list=search_list, |
228 | @@ -1581,7 +1581,7 @@ class TestMakeSubnetConfig(MAASServerTestCase): | |||
229 | 1581 | config = dhcp.make_subnet_config( | 1581 | config = dhcp.make_subnet_config( |
230 | 1582 | rack_controller, | 1582 | rack_controller, |
231 | 1583 | subnet, | 1583 | subnet, |
233 | 1584 | [factory.make_name("dns")], | 1584 | [factory.make_ipv4_address()], |
234 | 1585 | [factory.make_name("ntp")], | 1585 | [factory.make_name("ntp")], |
235 | 1586 | default_domain, | 1586 | default_domain, |
236 | 1587 | ) | 1587 | ) |
237 | @@ -1609,7 +1609,7 @@ class TestMakeSubnetConfig(MAASServerTestCase): | |||
238 | 1609 | config = dhcp.make_subnet_config( | 1609 | config = dhcp.make_subnet_config( |
239 | 1610 | rack_controller, | 1610 | rack_controller, |
240 | 1611 | subnet, | 1611 | subnet, |
242 | 1612 | [factory.make_name("dns")], | 1612 | [factory.make_ipv4_address()], |
243 | 1613 | [factory.make_name("ntp")], | 1613 | [factory.make_name("ntp")], |
244 | 1614 | default_domain, | 1614 | default_domain, |
245 | 1615 | failover_peer=failover_peer, | 1615 | failover_peer=failover_peer, |
246 | @@ -1643,7 +1643,7 @@ class TestMakeSubnetConfig(MAASServerTestCase): | |||
247 | 1643 | config = dhcp.make_subnet_config( | 1643 | config = dhcp.make_subnet_config( |
248 | 1644 | rack_controller, | 1644 | rack_controller, |
249 | 1645 | subnet, | 1645 | subnet, |
251 | 1646 | [factory.make_name("dns")], | 1646 | [factory.make_ipv4_address()], |
252 | 1647 | [factory.make_name("ntp")], | 1647 | [factory.make_name("ntp")], |
253 | 1648 | default_domain, | 1648 | default_domain, |
254 | 1649 | ) | 1649 | ) |
255 | @@ -1664,7 +1664,7 @@ class TestMakeSubnetConfig(MAASServerTestCase): | |||
256 | 1664 | config = dhcp.make_subnet_config( | 1664 | config = dhcp.make_subnet_config( |
257 | 1665 | rack_controller, | 1665 | rack_controller, |
258 | 1666 | subnet, | 1666 | subnet, |
260 | 1667 | [factory.make_name("dns")], | 1667 | [factory.make_ipv4_address()], |
261 | 1668 | [factory.make_name("ntp")], | 1668 | [factory.make_name("ntp")], |
262 | 1669 | default_domain, | 1669 | default_domain, |
263 | 1670 | subnets_dhcp_snippets=dhcp_snippets, | 1670 | subnets_dhcp_snippets=dhcp_snippets, |
264 | @@ -1681,6 +1681,40 @@ class TestMakeSubnetConfig(MAASServerTestCase): | |||
265 | 1681 | config["dhcp_snippets"], | 1681 | config["dhcp_snippets"], |
266 | 1682 | ) | 1682 | ) |
267 | 1683 | 1683 | ||
268 | 1684 | def test_subnet_without_gateway_restricts_nameservers(self): | ||
269 | 1685 | network1 = IPNetwork("10.9.8.0/24") | ||
270 | 1686 | network2 = IPNetwork("10.9.9.0/24") | ||
271 | 1687 | rackip1 = "10.9.8.1" | ||
272 | 1688 | rackip2 = "10.9.9.1" | ||
273 | 1689 | rack_controller = factory.make_RackController(interface=False) | ||
274 | 1690 | vlan = factory.make_VLAN() | ||
275 | 1691 | subnet1 = factory.make_Subnet(cidr=str(network1.cidr), vlan=vlan) | ||
276 | 1692 | subnet2 = factory.make_Subnet( | ||
277 | 1693 | cidr=str(network2.cidr), vlan=vlan, gateway_ip=None | ||
278 | 1694 | ) | ||
279 | 1695 | factory.make_Interface( | ||
280 | 1696 | INTERFACE_TYPE.PHYSICAL, vlan=vlan, node=rack_controller | ||
281 | 1697 | ) | ||
282 | 1698 | default_domain = Domain.objects.get_default_domain() | ||
283 | 1699 | config = dhcp.make_subnet_config( | ||
284 | 1700 | rack_controller, | ||
285 | 1701 | subnet1, | ||
286 | 1702 | [rackip1, rackip2], | ||
287 | 1703 | [factory.make_name("ntp")], | ||
288 | 1704 | default_domain, | ||
289 | 1705 | ) | ||
290 | 1706 | self.assertIn(rackip1, config["dns_servers"]) | ||
291 | 1707 | self.assertIn(rackip2, config["dns_servers"]) | ||
292 | 1708 | config = dhcp.make_subnet_config( | ||
293 | 1709 | rack_controller, | ||
294 | 1710 | subnet2, | ||
295 | 1711 | [rackip1, rackip2], | ||
296 | 1712 | [factory.make_name("ntp")], | ||
297 | 1713 | default_domain, | ||
298 | 1714 | ) | ||
299 | 1715 | self.assertNotIn(rackip1, config["dns_servers"]) | ||
300 | 1716 | self.assertIn(rackip2, config["dns_servers"]) | ||
301 | 1717 | |||
302 | 1684 | 1718 | ||
303 | 1685 | class TestMakeHostsForSubnet(MAASServerTestCase): | 1719 | class TestMakeHostsForSubnet(MAASServerTestCase): |
304 | 1686 | def tests__returns_defined_hosts(self): | 1720 | def tests__returns_defined_hosts(self): |
305 | diff --git a/src/maasserver/tests/test_preseed_network.py b/src/maasserver/tests/test_preseed_network.py | |||
306 | index 9c3a326..5fa1dd5 100644 | |||
307 | --- a/src/maasserver/tests/test_preseed_network.py | |||
308 | +++ b/src/maasserver/tests/test_preseed_network.py | |||
309 | @@ -1737,6 +1737,55 @@ class TestNetplan(MAASServerTestCase): | |||
310 | 1737 | v2["network"]["ethernets"][iface.name]["nameservers"], | 1737 | v2["network"]["ethernets"][iface.name]["nameservers"], |
311 | 1738 | ) | 1738 | ) |
312 | 1739 | 1739 | ||
313 | 1740 | def test_allow_dns_false_does_not_include_rack_controllers(self): | ||
314 | 1741 | # Regression test for LP:1896684 | ||
315 | 1742 | vlan = factory.make_VLAN() | ||
316 | 1743 | nameserver = "1.1.1.1" | ||
317 | 1744 | subnet = factory.make_Subnet( | ||
318 | 1745 | dns_servers=[nameserver], vlan=vlan, allow_dns=False | ||
319 | 1746 | ) | ||
320 | 1747 | rack = factory.make_RackController(subnet=subnet) | ||
321 | 1748 | rack_iface = rack.interface_set.first() | ||
322 | 1749 | factory.make_StaticIPAddress(subnet=subnet, interface=rack_iface) | ||
323 | 1750 | vlan.primary_rack = rack | ||
324 | 1751 | vlan.save() | ||
325 | 1752 | node = factory.make_Node_with_Interface_on_Subnet( | ||
326 | 1753 | status=NODE_STATUS.DEPLOYING, subnet=subnet | ||
327 | 1754 | ) | ||
328 | 1755 | iface = node.interface_set.first() | ||
329 | 1756 | factory.make_StaticIPAddress(subnet=subnet, interface=iface) | ||
330 | 1757 | v2 = self._render_netplan_dict(node) | ||
331 | 1758 | self.assertDictEqual( | ||
332 | 1759 | {"search": ["maas"], "addresses": [nameserver]}, | ||
333 | 1760 | v2["network"]["ethernets"][iface.name]["nameservers"], | ||
334 | 1761 | ) | ||
335 | 1762 | |||
336 | 1763 | def test_no_gateway_does_not_include_unroutable_controllers(self): | ||
337 | 1764 | # Regression test for LP:1896684 | ||
338 | 1765 | vlan = factory.make_VLAN() | ||
339 | 1766 | subnet1 = factory.make_Subnet( | ||
340 | 1767 | dns_servers=[], vlan=vlan, version=4, gateway_ip=None | ||
341 | 1768 | ) | ||
342 | 1769 | subnet2 = factory.make_Subnet(dns_servers=[], vlan=vlan, version=4) | ||
343 | 1770 | rack = factory.make_RackController(subnet=subnet1) | ||
344 | 1771 | rack_iface = rack.interface_set.first() | ||
345 | 1772 | rack_ip1 = factory.make_StaticIPAddress( | ||
346 | 1773 | subnet=subnet1, interface=rack_iface | ||
347 | 1774 | ) | ||
348 | 1775 | factory.make_StaticIPAddress(subnet=subnet2, interface=rack_iface) | ||
349 | 1776 | vlan.primary_rack = rack | ||
350 | 1777 | vlan.save() | ||
351 | 1778 | node = factory.make_Node_with_Interface_on_Subnet( | ||
352 | 1779 | status=NODE_STATUS.DEPLOYING, subnet=subnet1 | ||
353 | 1780 | ) | ||
354 | 1781 | iface = node.interface_set.first() | ||
355 | 1782 | factory.make_StaticIPAddress(subnet=subnet1, interface=iface) | ||
356 | 1783 | v2 = self._render_netplan_dict(node) | ||
357 | 1784 | self.assertDictEqual( | ||
358 | 1785 | {"search": ["maas"], "addresses": [rack_ip1.ip]}, | ||
359 | 1786 | v2["network"]["ethernets"][iface.name]["nameservers"], | ||
360 | 1787 | ) | ||
361 | 1788 | |||
362 | 1740 | def test_commissioning_dhcp_config(self): | 1789 | def test_commissioning_dhcp_config(self): |
363 | 1741 | # Verifies dhcp config is given when commissioning has run | 1790 | # Verifies dhcp config is given when commissioning has run |
364 | 1742 | # or just run and no AUTOIP has been acquired. | 1791 | # or just run and no AUTOIP has been acquired. |
UNIT TESTS
-b lp1896684-28 lp:~ddstreet/maas/+git/maas into -b 2.8 lp:~maas-committers/maas
STATUS: SUCCESS 3dbdf7ae37929c9 2483d410fd
COMMIT: 843b1c54a4c0185