Merge lp:~jtv/maas/lint-2014-07-07 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: 2518
Proposed branch: lp:~jtv/maas/lint-2014-07-07
Merge into: lp:~maas-committers/maas/trunk
Diff against target: 79 lines (+48/-4)
2 files modified
src/maasserver/models/nodegroupinterface.py (+12/-4)
src/maasserver/models/tests/test_nodegroupinterface.py (+36/-0)
To merge this branch: bzr merge lp:~jtv/maas/lint-2014-07-07
Reviewer Review Type Date Requested Status
Raphaël Badin (community) Approve
Review via email: mp+225794@code.launchpad.net

Commit message

Nontrivial lint. Extract awkwardly formatted, repeated check "is cluster interface managed with a static IP range?" into a helper.

To post a comment you must log in.
Revision history for this message
Raphaël Badin (rvb) wrote :

Looks good. Weird that the static range can be partially defined; it doesn't look like it's checked by the form.

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

Yeah. I didn't want to drag yet more discussion into a lint branch, but it does seem strange.

Revision history for this message
Julian Edwards (julian-edwards) wrote :

On Monday 07 Jul 2014 09:50:22 you wrote:
> Yeah. I didn't want to drag yet more discussion into a lint branch, but it
> does seem strange.

It's an oversight.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'src/maasserver/models/nodegroupinterface.py'
2--- src/maasserver/models/nodegroupinterface.py 2014-07-07 07:00:06 +0000
3+++ src/maasserver/models/nodegroupinterface.py 2014-07-07 09:33:23 +0000
4@@ -223,10 +223,19 @@
5 # form; validation breaks if we pass an IPAddress.
6 self.broadcast_ip = unicode(network.broadcast)
7
8+ def manages_static_range(self):
9+ """Is this a managed interface with a static IP range configured?"""
10+ # Deliberately vague implicit conversion to bool: a blank IP address
11+ # can show up internally as either None or an empty string.
12+ return (
13+ self.is_managed and
14+ self.static_ip_range_low and
15+ self.static_ip_range_high
16+ )
17+
18 def clean_ip_range_bounds(self):
19 """Ensure that the static and dynamic ranges have sane bounds."""
20- if not (self.is_managed and (self.static_ip_range_low and
21- self.static_ip_range_high)):
22+ if not self.manages_static_range():
23 # Exit early with nothing to do.
24 return
25
26@@ -259,8 +268,7 @@
27
28 def clean_ip_ranges(self):
29 """Ensure that the static and dynamic ranges don't overlap."""
30- if not (self.is_managed and (self.static_ip_range_low and
31- self.static_ip_range_high)):
32+ if not self.manages_static_range():
33 # Nothing to do; bail out.
34 return
35
36
37=== modified file 'src/maasserver/models/tests/test_nodegroupinterface.py'
38--- src/maasserver/models/tests/test_nodegroupinterface.py 2014-07-03 16:06:59 +0000
39+++ src/maasserver/models/tests/test_nodegroupinterface.py 2014-07-07 09:33:23 +0000
40@@ -305,3 +305,39 @@
41 interface.static_ip_range_high)],
42 }
43 self.assertEqual(errors, exception.message_dict)
44+
45+ def test_manages_static_range_returns_False_if_not_managed(self):
46+ cluster = factory.make_node_group()
47+ network = IPNetwork("10.9.9.0/24")
48+ interface = factory.make_node_group_interface(
49+ cluster, network=network,
50+ ip_range_low='10.9.9.10', ip_range_high='10.9.9.50',
51+ static_ip_range_low='10.9.9.100',
52+ static_ip_range_high='10.9.9.200',
53+ management=NODEGROUPINTERFACE_MANAGEMENT.UNMANAGED)
54+ self.assertFalse(interface.manages_static_range())
55+
56+ def test_manages_static_range_returns_False_if_no_static_range(self):
57+ network = IPNetwork("10.9.9.0/24")
58+ interface = make_interface(network)
59+ interface.static_ip_range_low = None
60+ interface.static_ip_range_high = None
61+ self.assertFalse(interface.manages_static_range())
62+
63+ def test_manages_static_range_returns_False_if_partial_static_range(self):
64+ network = IPNetwork("10.9.9.0/24")
65+ interface = make_interface(network)
66+ interface.static_ip_range_low = '10.99.99.100'
67+ interface.static_ip_range_high = None
68+ self.assertFalse(interface.manages_static_range())
69+
70+ def test_manages_static_range_returns_True_if_manages_static_range(self):
71+ cluster = factory.make_node_group()
72+ network = IPNetwork("10.9.9.0/24")
73+ interface = factory.make_node_group_interface(
74+ cluster, network=network,
75+ ip_range_low='10.9.9.10', ip_range_high='10.9.9.50',
76+ static_ip_range_low='10.9.9.100',
77+ static_ip_range_high='10.9.9.200',
78+ management=NODEGROUPINTERFACE_MANAGEMENT.DHCP)
79+ self.assertTrue(interface.manages_static_range())