Merge lp:~jtv/maas/fix-ipv6-gateway into lp:~maas-committers/maas/trunk

Proposed by Jeroen T. Vermeulen
Status: Merged
Approved by: Jeroen T. Vermeulen
Approved revision: no longer in the source branch.
Merged at revision: 3001
Proposed branch: lp:~jtv/maas/fix-ipv6-gateway
Merge into: lp:~maas-committers/maas/trunk
Diff against target: 83 lines (+35/-9)
2 files modified
src/maasserver/preseed.py (+7/-6)
src/maasserver/tests/test_preseed.py (+28/-3)
To merge this branch: bzr merge lp:~jtv/maas/fix-ipv6-gateway
Reviewer Review Type Date Requested Status
Graham Binns (community) Approve
Review via email: mp+234805@code.launchpad.net

Commit message

Fix a subtle bug that was stopping IPv6 gateways from being configured on the nodes.

To post a comment you must log in.
Revision history for this message
Graham Binns (gmb) wrote :

One suggested (and maybe unnecessary) tweak, but looks good. Thanks!

review: Approve
Revision history for this message
Jeroen T. Vermeulen (jtv) :

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'src/maasserver/preseed.py'
2--- src/maasserver/preseed.py 2014-09-16 10:00:23 +0000
3+++ src/maasserver/preseed.py 2014-09-17 01:59:49 +0000
4@@ -94,16 +94,17 @@
5
6
7 def list_gateways_and_macs(node):
8- """Return a node's router addresses, as IP/MAC pairs.
9+ """Return a node's router addresses, as a set of IP/MAC pairs.
10
11 In each returned pair, the MAC address is that of a network interface
12 on the node. The IP address is a router address for that interface.
13 """
14- return [
15- (mac.cluster_interface.router_ip, mac.mac_address)
16- for mac in node.macaddress_set.filter(cluster_interface__isnull=False)
17- if mac.cluster_interface.router_ip not in (None, '')
18- ]
19+ result = set()
20+ for mac in node.macaddress_set.filter(cluster_interface__isnull=False):
21+ for cluster_interface in mac.get_cluster_interfaces():
22+ if cluster_interface.router_ip not in (None, ''):
23+ result.add((cluster_interface.router_ip, mac.mac_address))
24+ return result
25
26
27 def compose_curtin_network_preseed(node):
28
29=== modified file 'src/maasserver/tests/test_preseed.py'
30--- src/maasserver/tests/test_preseed.py 2014-09-16 10:00:23 +0000
31+++ src/maasserver/tests/test_preseed.py 2014-09-17 01:59:49 +0000
32@@ -681,7 +681,32 @@
33 mac.cluster_interface.router_ip = gateway
34 mac.cluster_interface.save()
35 self.assertEqual(
36- [(gateway, mac.mac_address)],
37+ {(gateway, mac.mac_address)},
38+ list_gateways_and_macs(node))
39+
40+ def test__lists_gateways_from_all_associated_cluster_interfaces(self):
41+ # XXX jtv 2014-09-16 bug=1358130: There's a quick-and-dirty solution
42+ # where all cluster interfaces on the same cluster network interface
43+ # are all considered connected to the same node MACs. And so,
44+ # list_gateways_and_macs must respect that association, rather than
45+ # just query MACAddress.cluster_interface.
46+ ipv4_network = factory.make_ipv4_network()
47+ ipv6_network = factory.make_ipv6_network()
48+ node = factory.make_node_with_mac_attached_to_nodegroupinterface(
49+ network=ipv4_network)
50+ ipv4_gateway = factory.pick_ip_in_network(ipv4_network)
51+ mac = node.get_primary_mac()
52+ mac.cluster_interface.router_ip = ipv4_gateway
53+ mac.cluster_interface.save()
54+ ipv6_gateway = factory.pick_ip_in_network(ipv6_network)
55+ factory.make_NodeGroupInterface(
56+ node.nodegroup, interface=mac.cluster_interface.interface,
57+ network=ipv6_network, router_ip=ipv6_gateway)
58+ self.assertEqual(
59+ {
60+ (ipv4_gateway, mac.mac_address),
61+ (ipv6_gateway, mac.mac_address),
62+ },
63 list_gateways_and_macs(node))
64
65 def test__skips_unknown_cluster_interfaces(self):
66@@ -689,7 +714,7 @@
67 mac = node.get_primary_mac()
68 mac.cluster_interface = None
69 mac.save()
70- self.assertEqual([], list_gateways_and_macs(node))
71+ self.assertEqual(set(), list_gateways_and_macs(node))
72
73 def test__skips_unknown_routers(self):
74 node = factory.make_node_with_mac_attached_to_nodegroupinterface()
75@@ -698,7 +723,7 @@
76 mac.cluster_interface.management = (
77 NODEGROUPINTERFACE_MANAGEMENT.UNMANAGED)
78 mac.cluster_interface.save()
79- self.assertEqual([], list_gateways_and_macs(node))
80+ self.assertEqual(set(), list_gateways_and_macs(node))
81
82
83 class TestComposeCurtinNetworkPreseed(MAASServerTestCase):