Merge ~adam-collard/maas:flaky-dns-ipv4-no-gateways into maas:master

Proposed by Adam Collard
Status: Merged
Approved by: Anton Troyanov
Approved revision: 7a6684957ea30591f895ab5599e74b7fd4753815
Merge reported by: MAAS Lander
Merged at revision: not available
Proposed branch: ~adam-collard/maas:flaky-dns-ipv4-no-gateways
Merge into: maas:master
Diff against target: 117 lines (+8/-47)
2 files modified
src/maasserver/models/node.py (+2/-2)
src/maasserver/models/tests/test_node.py (+6/-45)
Reviewer Review Type Date Requested Status
Anton Troyanov Approve
MAAS Lander Approve
Review via email: mp+443567@code.launchpad.net

Commit message

fix: get_default_dns_servers relied on ordering of routable ips

The flaky test was dependent on ordering of ips which were never
explicitly ordered.

We now sort the addresses, relying on IPAddresses sorting v4 lower
than v6, and have a reliable IP to pick for the DNS server (one that
is routable from the node).

To post a comment you must log in.
Revision history for this message
MAAS Lander (maas-lander) wrote :

UNIT TESTS
-b flaky-dns-ipv4-no-gateways lp:~adam-collard/maas/+git/maas into -b master lp:~maas-committers/maas

STATUS: FAILED
LOG: http://maas-ci.internal:8080/job/maas-tester/2594/console
COMMIT: 9c56cc5211e052745d69f5d01d60fb1d88d7ab29

review: Needs Fixing
Revision history for this message
MAAS Lander (maas-lander) wrote :

UNIT TESTS
-b flaky-dns-ipv4-no-gateways lp:~adam-collard/maas/+git/maas into -b master lp:~maas-committers/maas

STATUS: SUCCESS
COMMIT: 7a6684957ea30591f895ab5599e74b7fd4753815

review: Approve
Revision history for this message
Anton Troyanov (troyanov) :
review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1diff --git a/src/maasserver/models/node.py b/src/maasserver/models/node.py
2index 4fdaf59..d1f3165 100644
3--- a/src/maasserver/models/node.py
4+++ b/src/maasserver/models/node.py
5@@ -5251,14 +5251,14 @@ class Node(CleanSave, TimestampedModel):
6 # node with no gateway can only use routable addrs
7 maas_dns_servers = []
8 routable_addrs_map = {
9- node: [
10+ node: sorted(
11 address
12 for address in addresses
13 if (
14 (ipv4 and address.version == 4)
15 or (ipv6 and address.version == 6)
16 )
17- ]
18+ )
19 for node, addresses in routable_addrs_map.items()
20 }
21 else:
22diff --git a/src/maasserver/models/tests/test_node.py b/src/maasserver/models/tests/test_node.py
23index 601fb32..52ee395 100644
24--- a/src/maasserver/models/tests/test_node.py
25+++ b/src/maasserver/models/tests/test_node.py
26@@ -22,7 +22,6 @@ from fixtures import LoggerFixture
27 from netaddr import IPAddress, IPNetwork
28 from testscenarios import multiply_scenarios
29 from testtools import ExpectedException
30-from testtools.content import text_content
31 from testtools.matchers import (
32 AfterPreprocessing,
33 Contains,
34@@ -140,7 +139,6 @@ from maasserver.preseed import CURTIN_INSTALL_LOG
35 from maasserver.preseed_network import compose_curtin_network_config
36 from maasserver.preseed_storage import compose_curtin_storage_config
37 from maasserver.rbac import FakeRBACClient, rbac
38-from maasserver.routablepairs import get_routable_address_map
39 from maasserver.rpc.testing.fixtures import MockLiveRegionToClusterRPCFixture
40 from maasserver.secrets import SecretManager
41 from maasserver.storage_layouts import (
42@@ -8804,29 +8802,6 @@ class TestGetDefaultDNSServers(MAASServerTestCase):
43 rack_v4, rack_v6, node = self.make_Node_with_RackController(
44 ipv4=True, ipv4_gateway=False, ipv6=True, ipv6_gateway=False
45 )
46- # XXX this test fails randomly, this is to get more info if it does
47- self.addDetail(
48- "node.get_default_gateways",
49- text_content(repr(node.get_default_gateways())),
50- )
51- self.addDetail(
52- "node.get_boot_rack_controller",
53- text_content(repr(node.get_boot_rack_controller())),
54- )
55- self.addDetail(
56- "use_rack_proxy",
57- text_content(repr(Config.objects.get_config("use_rack_proxy"))),
58- )
59- self.addDetail(
60- "routable_address_map",
61- text_content(
62- repr(
63- get_routable_address_map(
64- RackController.objects.all(), node
65- )
66- )
67- ),
68- )
69 self.assertEqual([rack_v4], node.get_default_dns_servers())
70
71 def test_uses_rack_ipv4_if_dual_stack_with_ipv4_gateway(self):
72@@ -8966,9 +8941,7 @@ class TestGetDefaultDNSServers(MAASServerTestCase):
73 ipv6=False, ipv4_subnet_dns=[ipv4_subnet_dns]
74 )
75 Subnet.objects.update(allow_dns=False)
76- self.assertCountEqual(
77- node.get_default_dns_servers(), [ipv4_subnet_dns]
78- )
79+ self.assertEqual(node.get_default_dns_servers(), [ipv4_subnet_dns])
80
81 def test_uses_subnet_ipv6_dns_only(self):
82 # Regression test for LP:1847537
83@@ -8977,29 +8950,17 @@ class TestGetDefaultDNSServers(MAASServerTestCase):
84 ipv4=False, ipv6_subnet_dns=[ipv6_subnet_dns]
85 )
86 Subnet.objects.update(allow_dns=False)
87- self.assertCountEqual(
88- node.get_default_dns_servers(), [ipv6_subnet_dns]
89- )
90+ self.assertEqual(node.get_default_dns_servers(), [ipv6_subnet_dns])
91
92 def test_ignores_other_unroutable_rack_controllers_ipv4(self):
93 # Regression test for LP:1896684
94 rack_v4, rack_v6, node = self.make_Node_with_RackController(
95 ipv4=True, ipv4_gateway=False, ipv6=False, ipv6_gateway=False
96 )
97- vlan = node.boot_interface.vlan
98- rack = vlan.primary_rack
99- rackif = rack.current_config.interface_set.first()
100- rack_ips = [rack_v4]
101- for _ in range(3):
102- subnet = factory.make_Subnet(vlan=vlan, version=4)
103- ip = factory.make_StaticIPAddress(subnet=subnet, interface=rackif)
104- rack_ips.append(ip.ip)
105- rack.save()
106- resolve_hostname = self.patch(server_address, "resolve_hostname")
107- resolve_hostname.side_effect = lambda hostname, version: set(
108- map(IPAddress, rack_ips)
109- )
110- self.assertCountEqual(node.get_default_dns_servers(), [rack_v4])
111+ rack = node.boot_interface.vlan.primary_rack
112+ mock_address_map = self.patch(node_module, "get_routable_address_map")
113+ mock_address_map.return_value = {rack: [IPAddress(rack_v4)]}
114+ self.assertEqual(node.get_default_dns_servers(), [rack_v4])
115
116
117 class TestNode_Start(MAASTransactionServerTestCase):

Subscribers

People subscribed via source and target branches