Merge lp:~mpontillo/maas/external-dhcp--bug-1627363 into lp:~maas-committers/maas/trunk

Proposed by Mike Pontillo
Status: Merged
Approved by: Mike Pontillo
Approved revision: no longer in the source branch.
Merged at revision: 5410
Proposed branch: lp:~mpontillo/maas/external-dhcp--bug-1627363
Merge into: lp:~maas-committers/maas/trunk
Diff against target: 59 lines (+27/-4)
2 files modified
src/maasserver/rpc/rackcontrollers.py (+10/-3)
src/maasserver/rpc/tests/test_rackcontrollers.py (+17/-1)
To merge this branch: bzr merge lp:~mpontillo/maas/external-dhcp--bug-1627363
Reviewer Review Type Date Requested Status
Gavin Panella (community) Approve
Review via email: mp+307073@code.launchpad.net

Commit message

Log warning (instead of crashing) if a DHCP server is found on a disconnected interface.

To post a comment you must log in.
Revision history for this message
Gavin Panella (allenap) wrote :

Looks good.

review: Approve
Revision history for this message
Mike Pontillo (mpontillo) wrote :

Thanks.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'src/maasserver/rpc/rackcontrollers.py'
2--- src/maasserver/rpc/rackcontrollers.py 2016-09-14 01:50:41 +0000
3+++ src/maasserver/rpc/rackcontrollers.py 2016-09-28 19:10:10 +0000
4@@ -179,9 +179,16 @@
5 if rack_interfaces_serving_dhcp.exists():
6 # Not external. It's a MAAS DHCP server.
7 dhcp_ip = None
8- if interface.vlan.external_dhcp != dhcp_ip:
9- interface.vlan.external_dhcp = dhcp_ip
10- interface.vlan.save()
11+ if interface.vlan is None:
12+ maaslog.warning(
13+ "%s: Detected an external DHCP server on an interface with no "
14+ "VLAN defined: '%s': %s" % (
15+ rack_controller.hostname, interface.get_log_string(),
16+ dhcp_ip))
17+ else:
18+ if interface.vlan.external_dhcp != dhcp_ip:
19+ interface.vlan.external_dhcp = dhcp_ip
20+ interface.vlan.save()
21
22
23 @synchronous
24
25=== modified file 'src/maasserver/rpc/tests/test_rackcontrollers.py'
26--- src/maasserver/rpc/tests/test_rackcontrollers.py 2016-08-18 14:47:07 +0000
27+++ src/maasserver/rpc/tests/test_rackcontrollers.py 2016-09-28 19:10:10 +0000
28@@ -38,7 +38,10 @@
29 from maasserver.testing.factory import factory
30 from maasserver.testing.testcase import MAASServerTestCase
31 from maasserver.utils.orm import reload_object
32-from maastesting.matchers import MockCalledOnceWith
33+from maastesting.matchers import (
34+ DocTestMatches,
35+ MockCalledOnceWith,
36+)
37 from testtools.matchers import (
38 IsInstance,
39 MatchesAll,
40@@ -328,6 +331,19 @@
41 self.assertEquals(
42 dhcp_ip, reload_object(interface.vlan).external_dhcp)
43
44+ def test__logs_warning_for_external_dhcp_on_interface_no_vlan(self):
45+ rack_controller = factory.make_RackController(interface=False)
46+ interface = factory.make_Interface(
47+ INTERFACE_TYPE.PHYSICAL, node=rack_controller)
48+ dhcp_ip = factory.make_ip_address()
49+ interface.vlan = None
50+ interface.save()
51+ logger = self.useFixture(FakeLogger())
52+ update_foreign_dhcp(
53+ rack_controller.system_id, interface.name, dhcp_ip)
54+ self.assertThat(logger.output, DocTestMatches(
55+ "...DHCP server on an interface with no VLAN defined..."))
56+
57 def test__clears_external_dhcp_when_managed_vlan(self):
58 rack_controller = factory.make_RackController(interface=False)
59 fabric = factory.make_Fabric()