Merge lp:~mpontillo/maas/fix-relay-vlan-hostmap-creation--bug-1686755 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: 6041
Proposed branch: lp:~mpontillo/maas/fix-relay-vlan-hostmap-creation--bug-1686755
Merge into: lp:~maas-committers/maas/trunk
Diff against target: 669 lines (+276/-71)
3 files modified
src/maasserver/triggers/system.py (+39/-49)
src/maasserver/triggers/testing.py (+3/-1)
src/maasserver/triggers/tests/test_system_listener.py (+234/-21)
To merge this branch: bzr merge lp:~mpontillo/maas/fix-relay-vlan-hostmap-creation--bug-1686755
Reviewer Review Type Date Requested Status
Blake Rouse (community) Approve
Review via email: mp+323561@code.launchpad.net

Commit message

Fix hostmap creation when IP addresses are created on VLANs with DHCP relay enabled. Also fix DHCP snippet triggers to fire when they occur on a VLAN with DHCP relay enabled.

To post a comment you must log in.
Revision history for this message
Blake Rouse (blake-rouse) wrote :

Looks good mostly. But have some issues in the dhcp alert procedure that needs to be fixed.

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

Fixed. Thanks.

Revision history for this message
Blake Rouse (blake-rouse) :
review: Needs Fixing
Revision history for this message
Blake Rouse (blake-rouse) wrote :

Thanks for the fixes. Looks good.

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'src/maasserver/triggers/system.py'
--- src/maasserver/triggers/system.py 2017-01-28 00:51:47 +0000
+++ src/maasserver/triggers/system.py 2017-05-05 15:31:09 +0000
@@ -368,10 +368,27 @@
368DHCP_ALERT = dedent("""\368DHCP_ALERT = dedent("""\
369 CREATE OR REPLACE FUNCTION sys_dhcp_alert(vlan maasserver_vlan)369 CREATE OR REPLACE FUNCTION sys_dhcp_alert(vlan maasserver_vlan)
370 RETURNS void AS $$370 RETURNS void AS $$
371 DECLARE
372 relay_vlan maasserver_vlan;
371 BEGIN373 BEGIN
372 PERFORM pg_notify(CONCAT('sys_dhcp_', vlan.primary_rack_id), '');374 IF vlan.dhcp_on THEN
373 IF vlan.secondary_rack_id IS NOT NULL THEN375 PERFORM pg_notify(CONCAT('sys_dhcp_', vlan.primary_rack_id), '');
374 PERFORM pg_notify(CONCAT('sys_dhcp_', vlan.secondary_rack_id), '');376 IF vlan.secondary_rack_id IS NOT NULL THEN
377 PERFORM pg_notify(CONCAT('sys_dhcp_', vlan.secondary_rack_id), '');
378 END IF;
379 END IF;
380 IF vlan.relay_vlan_id IS NOT NULL THEN
381 SELECT maasserver_vlan.* INTO relay_vlan
382 FROM maasserver_vlan
383 WHERE maasserver_vlan.id = vlan.relay_vlan_id;
384 IF relay_vlan.dhcp_on THEN
385 PERFORM pg_notify(CONCAT(
386 'sys_dhcp_', relay_vlan.primary_rack_id), '');
387 IF relay_vlan.secondary_rack_id IS NOT NULL THEN
388 PERFORM pg_notify(CONCAT(
389 'sys_dhcp_', relay_vlan.secondary_rack_id), '');
390 END IF;
391 END IF;
375 END IF;392 END IF;
376 RETURN;393 RETURN;
377 END;394 END;
@@ -393,15 +410,11 @@
393 -- Update old VLAN if DHCP is enabled.410 -- Update old VLAN if DHCP is enabled.
394 SELECT * INTO vlan411 SELECT * INTO vlan
395 FROM maasserver_vlan WHERE id = OLD.vlan_id;412 FROM maasserver_vlan WHERE id = OLD.vlan_id;
396 IF vlan.dhcp_on THEN413 PERFORM sys_dhcp_alert(vlan);
397 PERFORM sys_dhcp_alert(vlan);
398 END IF;
399 -- Update the new VLAN if DHCP is enabled.414 -- Update the new VLAN if DHCP is enabled.
400 SELECT * INTO vlan415 SELECT * INTO vlan
401 FROM maasserver_vlan WHERE id = NEW.vlan_id;416 FROM maasserver_vlan WHERE id = NEW.vlan_id;
402 IF vlan.dhcp_on THEN417 PERFORM sys_dhcp_alert(vlan);
403 PERFORM sys_dhcp_alert(vlan);
404 END IF;
405 -- Related fields of subnet where changed.418 -- Related fields of subnet where changed.
406 ELSIF OLD.cidr != NEW.cidr OR419 ELSIF OLD.cidr != NEW.cidr OR
407 (OLD.gateway_ip IS NULL AND NEW.gateway_ip IS NOT NULL) OR420 (OLD.gateway_ip IS NULL AND NEW.gateway_ip IS NOT NULL) OR
@@ -411,9 +424,7 @@
411 -- Network has changed update alert DHCP if enabled.424 -- Network has changed update alert DHCP if enabled.
412 SELECT * INTO vlan425 SELECT * INTO vlan
413 FROM maasserver_vlan WHERE id = NEW.vlan_id;426 FROM maasserver_vlan WHERE id = NEW.vlan_id;
414 IF vlan.dhcp_on THEN427 PERFORM sys_dhcp_alert(vlan);
415 PERFORM sys_dhcp_alert(vlan);
416 END IF;
417 END IF;428 END IF;
418 RETURN NEW;429 RETURN NEW;
419 END;430 END;
@@ -431,9 +442,7 @@
431 -- Update VLAN if DHCP is enabled.442 -- Update VLAN if DHCP is enabled.
432 SELECT * INTO vlan443 SELECT * INTO vlan
433 FROM maasserver_vlan WHERE id = OLD.vlan_id;444 FROM maasserver_vlan WHERE id = OLD.vlan_id;
434 IF vlan.dhcp_on THEN445 PERFORM sys_dhcp_alert(vlan);
435 PERFORM sys_dhcp_alert(vlan);
436 END IF;
437 RETURN NEW;446 RETURN NEW;
438 END;447 END;
439 $$ LANGUAGE plpgsql;448 $$ LANGUAGE plpgsql;
@@ -453,9 +462,7 @@
453 FROM maasserver_vlan, maasserver_subnet462 FROM maasserver_vlan, maasserver_subnet
454 WHERE maasserver_subnet.id = NEW.subnet_id AND463 WHERE maasserver_subnet.id = NEW.subnet_id AND
455 maasserver_subnet.vlan_id = maasserver_vlan.id;464 maasserver_subnet.vlan_id = maasserver_vlan.id;
456 IF vlan.dhcp_on THEN465 PERFORM sys_dhcp_alert(vlan);
457 PERFORM sys_dhcp_alert(vlan);
458 END IF;
459 END IF;466 END IF;
460 RETURN NEW;467 RETURN NEW;
461 END;468 END;
@@ -476,9 +483,7 @@
476 FROM maasserver_vlan, maasserver_subnet483 FROM maasserver_vlan, maasserver_subnet
477 WHERE maasserver_subnet.id = NEW.subnet_id AND484 WHERE maasserver_subnet.id = NEW.subnet_id AND
478 maasserver_subnet.vlan_id = maasserver_vlan.id;485 maasserver_subnet.vlan_id = maasserver_vlan.id;
479 IF vlan.dhcp_on THEN486 PERFORM sys_dhcp_alert(vlan);
480 PERFORM sys_dhcp_alert(vlan);
481 END IF;
482 END IF;487 END IF;
483 RETURN NEW;488 RETURN NEW;
484 END;489 END;
@@ -499,9 +504,7 @@
499 FROM maasserver_vlan, maasserver_subnet504 FROM maasserver_vlan, maasserver_subnet
500 WHERE maasserver_subnet.id = OLD.subnet_id AND505 WHERE maasserver_subnet.id = OLD.subnet_id AND
501 maasserver_subnet.vlan_id = maasserver_vlan.id;506 maasserver_subnet.vlan_id = maasserver_vlan.id;
502 IF vlan.dhcp_on THEN507 PERFORM sys_dhcp_alert(vlan);
503 PERFORM sys_dhcp_alert(vlan);
504 END IF;
505 END IF;508 END IF;
506 RETURN NEW;509 RETURN NEW;
507 END;510 END;
@@ -523,9 +526,7 @@
523 FROM maasserver_vlan, maasserver_subnet526 FROM maasserver_vlan, maasserver_subnet
524 WHERE maasserver_subnet.id = NEW.subnet_id AND527 WHERE maasserver_subnet.id = NEW.subnet_id AND
525 maasserver_subnet.vlan_id = maasserver_vlan.id;528 maasserver_subnet.vlan_id = maasserver_vlan.id;
526 IF vlan.dhcp_on THEN529 PERFORM sys_dhcp_alert(vlan);
527 PERFORM sys_dhcp_alert(vlan);
528 END IF;
529 END IF;530 END IF;
530 RETURN NEW;531 RETURN NEW;
531 END;532 END;
@@ -556,17 +557,11 @@
556 maasserver_subnet.vlan_id = maasserver_vlan.id;557 maasserver_subnet.vlan_id = maasserver_vlan.id;
557 IF old_vlan.id != new_vlan.id THEN558 IF old_vlan.id != new_vlan.id THEN
558 -- Different VLAN's; update each if DHCP enabled.559 -- Different VLAN's; update each if DHCP enabled.
559 IF old_vlan.dhcp_on THEN560 PERFORM sys_dhcp_alert(old_vlan);
560 PERFORM sys_dhcp_alert(old_vlan);561 PERFORM sys_dhcp_alert(new_vlan);
561 END IF;
562 IF new_vlan.dhcp_on THEN
563 PERFORM sys_dhcp_alert(new_vlan);
564 END IF;
565 ELSE562 ELSE
566 -- Same VLAN so only need to update once.563 -- Same VLAN so only need to update once.
567 IF new_vlan.dhcp_on THEN564 PERFORM sys_dhcp_alert(new_vlan);
568 PERFORM sys_dhcp_alert(new_vlan);
569 END IF;
570 END IF;565 END IF;
571 ELSIF (OLD.ip IS NULL AND NEW.ip IS NOT NULL) OR566 ELSIF (OLD.ip IS NULL AND NEW.ip IS NOT NULL) OR
572 (OLD.ip IS NOT NULL and NEW.ip IS NULL) OR567 (OLD.ip IS NOT NULL and NEW.ip IS NULL) OR
@@ -576,9 +571,7 @@
576 FROM maasserver_vlan, maasserver_subnet571 FROM maasserver_vlan, maasserver_subnet
577 WHERE maasserver_subnet.id = NEW.subnet_id AND572 WHERE maasserver_subnet.id = NEW.subnet_id AND
578 maasserver_subnet.vlan_id = maasserver_vlan.id;573 maasserver_subnet.vlan_id = maasserver_vlan.id;
579 IF new_vlan.dhcp_on THEN574 PERFORM sys_dhcp_alert(new_vlan);
580 PERFORM sys_dhcp_alert(new_vlan);
581 END IF;
582 END IF;575 END IF;
583 END IF;576 END IF;
584 RETURN NEW;577 RETURN NEW;
@@ -600,9 +593,7 @@
600 FROM maasserver_vlan, maasserver_subnet593 FROM maasserver_vlan, maasserver_subnet
601 WHERE maasserver_subnet.id = OLD.subnet_id AND594 WHERE maasserver_subnet.id = OLD.subnet_id AND
602 maasserver_subnet.vlan_id = maasserver_vlan.id;595 maasserver_subnet.vlan_id = maasserver_vlan.id;
603 IF vlan.dhcp_on THEN596 PERFORM sys_dhcp_alert(vlan);
604 PERFORM sys_dhcp_alert(vlan);
605 END IF;
606 END IF;597 END IF;
607 RETURN NEW;598 RETURN NEW;
608 END;599 END;
@@ -635,8 +626,7 @@
635 AND maasserver_staticipaddress.alloc_type != 6626 AND maasserver_staticipaddress.alloc_type != 6
636 AND maasserver_staticipaddress.ip IS NOT NULL627 AND maasserver_staticipaddress.ip IS NOT NULL
637 AND host(maasserver_staticipaddress.ip) != ''628 AND host(maasserver_staticipaddress.ip) != ''
638 AND maasserver_vlan.id = maasserver_subnet.vlan_id629 AND maasserver_vlan.id = maasserver_subnet.vlan_id)
639 AND maasserver_vlan.dhcp_on)
640 LOOP630 LOOP
641 PERFORM sys_dhcp_alert(vlan);631 PERFORM sys_dhcp_alert(vlan);
642 END LOOP;632 END LOOP;
@@ -673,8 +663,7 @@
673 AND maasserver_staticipaddress.alloc_type != 6663 AND maasserver_staticipaddress.alloc_type != 6
674 AND maasserver_staticipaddress.ip IS NOT NULL664 AND maasserver_staticipaddress.ip IS NOT NULL
675 AND host(maasserver_staticipaddress.ip) != ''665 AND host(maasserver_staticipaddress.ip) != ''
676 AND maasserver_vlan.id = maasserver_subnet.vlan_id666 AND maasserver_vlan.id = maasserver_subnet.vlan_id)
677 AND maasserver_vlan.dhcp_on)
678 LOOP667 LOOP
679 PERFORM sys_dhcp_alert(vlan);668 PERFORM sys_dhcp_alert(vlan);
680 END LOOP;669 END LOOP;
@@ -723,7 +712,8 @@
723 maasserver_subnet712 maasserver_subnet
724 WHERE maasserver_subnet.id = _subnet_id713 WHERE maasserver_subnet.id = _subnet_id
725 AND maasserver_vlan.id = maasserver_subnet.vlan_id714 AND maasserver_vlan.id = maasserver_subnet.vlan_id
726 AND maasserver_vlan.dhcp_on = true)715 AND (maasserver_vlan.dhcp_on = true
716 OR maasserver_vlan.relay_vlan_id IS NOT NULL))
727 LOOP717 LOOP
728 PERFORM sys_dhcp_alert(vlan);718 PERFORM sys_dhcp_alert(vlan);
729 END LOOP;719 END LOOP;
@@ -744,8 +734,8 @@
744 FROM maasserver_vlan, maasserver_interface734 FROM maasserver_vlan, maasserver_interface
745 WHERE maasserver_interface.node_id = _node_id735 WHERE maasserver_interface.node_id = _node_id
746 AND maasserver_interface.vlan_id = maasserver_vlan.id736 AND maasserver_interface.vlan_id = maasserver_vlan.id
747 AND maasserver_vlan.dhcp_on = true737 AND (maasserver_vlan.dhcp_on = true
748 )738 OR maasserver_vlan.relay_vlan_id IS NOT NULL))
749 SELECT primary_rack_id FROM racks739 SELECT primary_rack_id FROM racks
750 WHERE primary_rack_id IS NOT NULL740 WHERE primary_rack_id IS NOT NULL
751 UNION741 UNION
752742
=== modified file 'src/maasserver/triggers/testing.py'
--- src/maasserver/triggers/testing.py 2017-04-11 01:29:40 +0000
+++ src/maasserver/triggers/testing.py 2017-05-05 15:31:09 +0000
@@ -372,9 +372,11 @@
372 event.delete()372 event.delete()
373373
374 @transactional374 @transactional
375 def create_staticipaddress(self, params=None):375 def create_staticipaddress(self, params=None, vlan=None):
376 if params is None:376 if params is None:
377 params = {}377 params = {}
378 if vlan is not None:
379 params['subnet'] = vlan.subnet_set.first()
378 return factory.make_StaticIPAddress(**params)380 return factory.make_StaticIPAddress(**params)
379381
380 @transactional382 @transactional
381383
=== modified file 'src/maasserver/triggers/tests/test_system_listener.py'
--- src/maasserver/triggers/tests/test_system_listener.py 2017-01-28 00:51:47 +0000
+++ src/maasserver/triggers/tests/test_system_listener.py 2017-05-05 15:31:09 +0000
@@ -842,6 +842,115 @@
842842
843 @wait_for_reactor843 @wait_for_reactor
844 @inlineCallbacks844 @inlineCallbacks
845 def test_sends_messages_when_ip_address_created(self):
846 primary_rack = yield deferToDatabase(self.create_rack_controller)
847 secondary_rack = yield deferToDatabase(self.create_rack_controller)
848 vlan = yield deferToDatabase(self.create_vlan, params={
849 "dhcp_on": True,
850 "primary_rack": primary_rack,
851 "secondary_rack": secondary_rack,
852 })
853 relay_vlan = yield deferToDatabase(self.create_vlan, params={
854 "relay_vlan": vlan
855 })
856 yield deferToDatabase(self.create_subnet, {
857 "vlan": relay_vlan,
858 })
859 yield deferToDatabase(register_system_triggers)
860 primary_rack_dv = DeferredValue()
861 secondary_rack_dv = DeferredValue()
862 listener = self.make_listener_without_delay()
863 listener.register(
864 "sys_dhcp_%s" % primary_rack.id,
865 lambda *args: primary_rack_dv.set(args))
866 listener.register(
867 "sys_dhcp_%s" % secondary_rack.id,
868 lambda *args: secondary_rack_dv.set(args))
869 yield listener.startService()
870 try:
871 yield deferToDatabase(self.create_staticipaddress, vlan=relay_vlan)
872 yield primary_rack_dv.get(timeout=2)
873 yield secondary_rack_dv.get(timeout=2)
874 finally:
875 yield listener.stopService()
876
877 @wait_for_reactor
878 @inlineCallbacks
879 def test_sends_messages_when_ip_address_updated(self):
880 primary_rack = yield deferToDatabase(self.create_rack_controller)
881 secondary_rack = yield deferToDatabase(self.create_rack_controller)
882 vlan = yield deferToDatabase(self.create_vlan, params={
883 "dhcp_on": True,
884 "primary_rack": primary_rack,
885 "secondary_rack": secondary_rack,
886 })
887 relay_vlan = yield deferToDatabase(self.create_vlan, params={
888 "relay_vlan": vlan
889 })
890 yield deferToDatabase(self.create_subnet, {
891 "vlan": relay_vlan,
892 })
893 yield deferToDatabase(register_system_triggers)
894 primary_rack_dv = DeferredValue()
895 secondary_rack_dv = DeferredValue()
896 listener = self.make_listener_without_delay()
897 listener.register(
898 "sys_dhcp_%s" % primary_rack.id,
899 lambda *args: primary_rack_dv.set(args))
900 listener.register(
901 "sys_dhcp_%s" % secondary_rack.id,
902 lambda *args: secondary_rack_dv.set(args))
903 sip = yield deferToDatabase(
904 self.create_staticipaddress, vlan=relay_vlan)
905 yield listener.startService()
906 try:
907 yield deferToDatabase(
908 self.update_staticipaddress, sip.id, params={
909 'ip': ''
910 })
911 yield primary_rack_dv.get(timeout=2)
912 yield secondary_rack_dv.get(timeout=2)
913 finally:
914 yield listener.stopService()
915
916 @wait_for_reactor
917 @inlineCallbacks
918 def test_sends_messages_when_ip_address_deleted(self):
919 primary_rack = yield deferToDatabase(self.create_rack_controller)
920 secondary_rack = yield deferToDatabase(self.create_rack_controller)
921 vlan = yield deferToDatabase(self.create_vlan, params={
922 "dhcp_on": True,
923 "primary_rack": primary_rack,
924 "secondary_rack": secondary_rack,
925 })
926 relay_vlan = yield deferToDatabase(self.create_vlan, params={
927 "relay_vlan": vlan
928 })
929 yield deferToDatabase(self.create_subnet, {
930 "vlan": relay_vlan,
931 })
932 yield deferToDatabase(register_system_triggers)
933 primary_rack_dv = DeferredValue()
934 secondary_rack_dv = DeferredValue()
935 listener = self.make_listener_without_delay()
936 listener.register(
937 "sys_dhcp_%s" % primary_rack.id,
938 lambda *args: primary_rack_dv.set(args))
939 listener.register(
940 "sys_dhcp_%s" % secondary_rack.id,
941 lambda *args: secondary_rack_dv.set(args))
942 sip = yield deferToDatabase(
943 self.create_staticipaddress, vlan=relay_vlan)
944 yield listener.startService()
945 try:
946 yield deferToDatabase(self.delete_staticipaddress, sip.id)
947 yield primary_rack_dv.get(timeout=2)
948 yield secondary_rack_dv.get(timeout=2)
949 finally:
950 yield listener.stopService()
951
952 @wait_for_reactor
953 @inlineCallbacks
845 def test_sends_messages_when_relay_vlan_unset(self):954 def test_sends_messages_when_relay_vlan_unset(self):
846 yield deferToDatabase(register_system_triggers)955 yield deferToDatabase(register_system_triggers)
847 primary_rack = yield deferToDatabase(self.create_rack_controller)956 primary_rack = yield deferToDatabase(self.create_rack_controller)
@@ -1283,6 +1392,11 @@
1283 MAASTransactionServerTestCase, TransactionalHelpersMixin):1392 MAASTransactionServerTestCase, TransactionalHelpersMixin):
1284 """End-to-end test for the DHCP triggers code."""1393 """End-to-end test for the DHCP triggers code."""
12851394
1395 scenarios = (
1396 ('with_dhcp_relay', {"dhcp_relay": True}),
1397 ('without_dhcp_relay', {"dhcp_relay": False}),
1398 )
1399
1286 @wait_for_reactor1400 @wait_for_reactor
1287 @inlineCallbacks1401 @inlineCallbacks
1288 def test_sends_message_for_new_managed_dhcp_range(self):1402 def test_sends_message_for_new_managed_dhcp_range(self):
@@ -1294,12 +1408,16 @@
1294 "primary_rack": primary_rack,1408 "primary_rack": primary_rack,
1295 "secondary_rack": secondary_rack,1409 "secondary_rack": secondary_rack,
1296 })1410 })
1411 relay_vlan = None
1412 if self.dhcp_relay:
1413 relay_vlan = yield deferToDatabase(self.create_vlan, {
1414 "relay_vlan": vlan,
1415 })
1297 network = factory.make_ipv4_network()1416 network = factory.make_ipv4_network()
1298 subnet = yield deferToDatabase(self.create_subnet, {1417 subnet = yield deferToDatabase(self.create_subnet, {
1299 "cidr": str(network.cidr),1418 "cidr": str(network.cidr),
1300 "vlan": vlan,1419 "vlan": relay_vlan if self.dhcp_relay else vlan,
1301 })1420 })
1302
1303 listener = self.make_listener_without_delay()1421 listener = self.make_listener_without_delay()
1304 primary_dv = DeferredValue()1422 primary_dv = DeferredValue()
1305 listener.register(1423 listener.register(
@@ -1336,10 +1454,15 @@
1336 "primary_rack": primary_rack,1454 "primary_rack": primary_rack,
1337 "secondary_rack": secondary_rack,1455 "secondary_rack": secondary_rack,
1338 })1456 })
1457 relay_vlan = None
1458 if self.dhcp_relay:
1459 relay_vlan = yield deferToDatabase(self.create_vlan, {
1460 "relay_vlan": vlan,
1461 })
1339 network = factory.make_ipv4_network()1462 network = factory.make_ipv4_network()
1340 subnet = yield deferToDatabase(self.create_subnet, {1463 subnet = yield deferToDatabase(self.create_subnet, {
1341 "cidr": str(network.cidr),1464 "cidr": str(network.cidr),
1342 "vlan": vlan,1465 "vlan": relay_vlan if self.dhcp_relay else vlan,
1343 })1466 })
1344 network = subnet.get_ipnetwork()1467 network = subnet.get_ipnetwork()
1345 start_ip = str(IPAddress(network.first + 2))1468 start_ip = str(IPAddress(network.first + 2))
@@ -1382,10 +1505,15 @@
1382 "primary_rack": primary_rack,1505 "primary_rack": primary_rack,
1383 "secondary_rack": secondary_rack,1506 "secondary_rack": secondary_rack,
1384 })1507 })
1508 relay_vlan = None
1509 if self.dhcp_relay:
1510 relay_vlan = yield deferToDatabase(self.create_vlan, {
1511 "relay_vlan": vlan,
1512 })
1385 network = factory.make_ipv4_network()1513 network = factory.make_ipv4_network()
1386 subnet = yield deferToDatabase(self.create_subnet, {1514 subnet = yield deferToDatabase(self.create_subnet, {
1387 "cidr": str(network.cidr),1515 "cidr": str(network.cidr),
1388 "vlan": vlan,1516 "vlan": relay_vlan if self.dhcp_relay else vlan,
1389 })1517 })
1390 network = subnet.get_ipnetwork()1518 network = subnet.get_ipnetwork()
1391 start_ip = str(IPAddress(network.first + 2))1519 start_ip = str(IPAddress(network.first + 2))
@@ -1427,10 +1555,15 @@
1427 "primary_rack": primary_rack,1555 "primary_rack": primary_rack,
1428 "secondary_rack": secondary_rack,1556 "secondary_rack": secondary_rack,
1429 })1557 })
1558 relay_vlan = None
1559 if self.dhcp_relay:
1560 relay_vlan = yield deferToDatabase(self.create_vlan, {
1561 "relay_vlan": vlan,
1562 })
1430 network = factory.make_ipv4_network()1563 network = factory.make_ipv4_network()
1431 subnet = yield deferToDatabase(self.create_subnet, {1564 subnet = yield deferToDatabase(self.create_subnet, {
1432 "cidr": str(network.cidr),1565 "cidr": str(network.cidr),
1433 "vlan": vlan,1566 "vlan": relay_vlan if self.dhcp_relay else vlan,
1434 })1567 })
1435 network = subnet.get_ipnetwork()1568 network = subnet.get_ipnetwork()
1436 start_ip = str(IPAddress(network.first + 2))1569 start_ip = str(IPAddress(network.first + 2))
@@ -1472,10 +1605,15 @@
1472 "primary_rack": primary_rack,1605 "primary_rack": primary_rack,
1473 "secondary_rack": secondary_rack,1606 "secondary_rack": secondary_rack,
1474 })1607 })
1608 relay_vlan = None
1609 if self.dhcp_relay:
1610 relay_vlan = yield deferToDatabase(self.create_vlan, {
1611 "relay_vlan": vlan,
1612 })
1475 network = factory.make_ipv4_network()1613 network = factory.make_ipv4_network()
1476 subnet = yield deferToDatabase(self.create_subnet, {1614 subnet = yield deferToDatabase(self.create_subnet, {
1477 "cidr": str(network.cidr),1615 "cidr": str(network.cidr),
1478 "vlan": vlan,1616 "vlan": relay_vlan if self.dhcp_relay else vlan,
1479 })1617 })
1480 network = subnet.get_ipnetwork()1618 network = subnet.get_ipnetwork()
1481 start_ip = str(IPAddress(network.first + 2))1619 start_ip = str(IPAddress(network.first + 2))
@@ -1536,7 +1674,7 @@
1536 lambda *args: secondary_dv.set(args))1674 lambda *args: secondary_dv.set(args))
1537 yield listener.startService()1675 yield listener.startService()
1538 try:1676 try:
1539 yield deferToDatabase(self.create_staticipaddress, {1677 yield deferToDatabase(self.create_staticipaddress, params={
1540 "subnet": subnet,1678 "subnet": subnet,
1541 "alloc_type": IPADDRESS_TYPE.USER_RESERVED,1679 "alloc_type": IPADDRESS_TYPE.USER_RESERVED,
1542 "user": user,1680 "user": user,
@@ -1987,6 +2125,11 @@
1987 MAASTransactionServerTestCase, TransactionalHelpersMixin):2125 MAASTransactionServerTestCase, TransactionalHelpersMixin):
1988 """End-to-end test for the DHCP triggers code."""2126 """End-to-end test for the DHCP triggers code."""
19892127
2128 scenarios = (
2129 ('with_dhcp_relay', {"dhcp_relay": True}),
2130 ('without_dhcp_relay', {"dhcp_relay": False}),
2131 )
2132
1990 @wait_for_reactor2133 @wait_for_reactor
1991 @inlineCallbacks2134 @inlineCallbacks
1992 def test_sends_message_for_global_dhcp_snippet_inserted(self):2135 def test_sends_message_for_global_dhcp_snippet_inserted(self):
@@ -1996,8 +2139,13 @@
1996 "dhcp_on": True,2139 "dhcp_on": True,
1997 "primary_rack": primary_rack,2140 "primary_rack": primary_rack,
1998 })2141 })
2142 relay_vlan = None
2143 if self.dhcp_relay:
2144 relay_vlan = yield deferToDatabase(self.create_vlan, {
2145 "relay_vlan": vlan,
2146 })
1999 yield deferToDatabase(self.create_subnet, {2147 yield deferToDatabase(self.create_subnet, {
2000 "vlan": vlan,2148 "vlan": relay_vlan if self.dhcp_relay else vlan,
2001 })2149 })
2002 dv = DeferredValue()2150 dv = DeferredValue()
2003 listener = self.make_listener_without_delay()2151 listener = self.make_listener_without_delay()
@@ -2022,8 +2170,13 @@
2022 "dhcp_on": True,2170 "dhcp_on": True,
2023 "primary_rack": primary_rack,2171 "primary_rack": primary_rack,
2024 })2172 })
2173 relay_vlan = None
2174 if self.dhcp_relay:
2175 relay_vlan = yield deferToDatabase(self.create_vlan, {
2176 "relay_vlan": vlan,
2177 })
2025 yield deferToDatabase(self.create_subnet, {2178 yield deferToDatabase(self.create_subnet, {
2026 "vlan": vlan,2179 "vlan": relay_vlan if self.dhcp_relay else vlan,
2027 })2180 })
2028 dv = DeferredValue()2181 dv = DeferredValue()
2029 listener = self.make_listener_without_delay()2182 listener = self.make_listener_without_delay()
@@ -2051,8 +2204,13 @@
2051 "dhcp_on": True,2204 "dhcp_on": True,
2052 "primary_rack": primary_rack,2205 "primary_rack": primary_rack,
2053 })2206 })
2207 relay_vlan = None
2208 if self.dhcp_relay:
2209 relay_vlan = yield deferToDatabase(self.create_vlan, {
2210 "relay_vlan": vlan,
2211 })
2054 subnet = yield deferToDatabase(self.create_subnet, {2212 subnet = yield deferToDatabase(self.create_subnet, {
2055 "vlan": vlan,2213 "vlan": relay_vlan if self.dhcp_relay else vlan,
2056 })2214 })
2057 dv = DeferredValue()2215 dv = DeferredValue()
2058 listener = self.make_listener_without_delay()2216 listener = self.make_listener_without_delay()
@@ -2078,8 +2236,13 @@
2078 "dhcp_on": True,2236 "dhcp_on": True,
2079 "primary_rack": primary_rack,2237 "primary_rack": primary_rack,
2080 })2238 })
2239 relay_vlan = None
2240 if self.dhcp_relay:
2241 relay_vlan = yield deferToDatabase(self.create_vlan, {
2242 "relay_vlan": vlan,
2243 })
2081 yield deferToDatabase(self.create_subnet, {2244 yield deferToDatabase(self.create_subnet, {
2082 "vlan": vlan,2245 "vlan": relay_vlan if self.dhcp_relay else vlan,
2083 })2246 })
2084 node = yield deferToDatabase(self.create_node)2247 node = yield deferToDatabase(self.create_node)
2085 yield deferToDatabase(self.create_interface, {2248 yield deferToDatabase(self.create_interface, {
@@ -2110,8 +2273,13 @@
2110 "dhcp_on": True,2273 "dhcp_on": True,
2111 "primary_rack": primary_rack,2274 "primary_rack": primary_rack,
2112 })2275 })
2276 relay_vlan = None
2277 if self.dhcp_relay:
2278 relay_vlan = yield deferToDatabase(self.create_vlan, {
2279 "relay_vlan": vlan,
2280 })
2113 yield deferToDatabase(self.create_subnet, {2281 yield deferToDatabase(self.create_subnet, {
2114 "vlan": vlan,2282 "vlan": relay_vlan if self.dhcp_relay else vlan,
2115 })2283 })
2116 dhcp_snippet = yield deferToDatabase(self.create_dhcp_snippet, {2284 dhcp_snippet = yield deferToDatabase(self.create_dhcp_snippet, {
2117 "enabled": True,2285 "enabled": True,
@@ -2140,8 +2308,13 @@
2140 "dhcp_on": True,2308 "dhcp_on": True,
2141 "primary_rack": primary_rack,2309 "primary_rack": primary_rack,
2142 })2310 })
2311 relay_vlan = None
2312 if self.dhcp_relay:
2313 relay_vlan = yield deferToDatabase(self.create_vlan, {
2314 "relay_vlan": vlan,
2315 })
2143 yield deferToDatabase(self.create_subnet, {2316 yield deferToDatabase(self.create_subnet, {
2144 "vlan": vlan,2317 "vlan": relay_vlan if self.dhcp_relay else vlan,
2145 })2318 })
2146 dhcp_snippet = yield deferToDatabase(self.create_dhcp_snippet, {2319 dhcp_snippet = yield deferToDatabase(self.create_dhcp_snippet, {
2147 "enabled": False,2320 "enabled": False,
@@ -2173,8 +2346,13 @@
2173 "dhcp_on": True,2346 "dhcp_on": True,
2174 "primary_rack": primary_rack,2347 "primary_rack": primary_rack,
2175 })2348 })
2349 relay_vlan = None
2350 if self.dhcp_relay:
2351 relay_vlan = yield deferToDatabase(self.create_vlan, {
2352 "relay_vlan": vlan,
2353 })
2176 yield deferToDatabase(self.create_subnet, {2354 yield deferToDatabase(self.create_subnet, {
2177 "vlan": vlan,2355 "vlan": relay_vlan if self.dhcp_relay else vlan,
2178 })2356 })
2179 dhcp_snippet = yield deferToDatabase(self.create_dhcp_snippet, {2357 dhcp_snippet = yield deferToDatabase(self.create_dhcp_snippet, {
2180 "enabled": False,2358 "enabled": False,
@@ -2202,8 +2380,13 @@
2202 "dhcp_on": True,2380 "dhcp_on": True,
2203 "primary_rack": primary_rack,2381 "primary_rack": primary_rack,
2204 })2382 })
2383 relay_vlan = None
2384 if self.dhcp_relay:
2385 relay_vlan = yield deferToDatabase(self.create_vlan, {
2386 "relay_vlan": vlan,
2387 })
2205 yield deferToDatabase(self.create_subnet, {2388 yield deferToDatabase(self.create_subnet, {
2206 "vlan": vlan,2389 "vlan": relay_vlan if self.dhcp_relay else vlan,
2207 })2390 })
2208 dhcp_snippet = yield deferToDatabase(self.create_dhcp_snippet, {2391 dhcp_snippet = yield deferToDatabase(self.create_dhcp_snippet, {
2209 "enabled": True,2392 "enabled": True,
@@ -2231,8 +2414,13 @@
2231 "dhcp_on": True,2414 "dhcp_on": True,
2232 "primary_rack": primary_rack,2415 "primary_rack": primary_rack,
2233 })2416 })
2417 relay_vlan = None
2418 if self.dhcp_relay:
2419 relay_vlan = yield deferToDatabase(self.create_vlan, {
2420 "relay_vlan": vlan,
2421 })
2234 subnet = yield deferToDatabase(self.create_subnet, {2422 subnet = yield deferToDatabase(self.create_subnet, {
2235 "vlan": vlan,2423 "vlan": relay_vlan if self.dhcp_relay else vlan,
2236 })2424 })
2237 dhcp_snippet = yield deferToDatabase(self.create_dhcp_snippet, {2425 dhcp_snippet = yield deferToDatabase(self.create_dhcp_snippet, {
2238 "enabled": True,2426 "enabled": True,
@@ -2260,8 +2448,13 @@
2260 "dhcp_on": True,2448 "dhcp_on": True,
2261 "primary_rack": primary_rack,2449 "primary_rack": primary_rack,
2262 })2450 })
2451 relay_vlan = None
2452 if self.dhcp_relay:
2453 relay_vlan = yield deferToDatabase(self.create_vlan, {
2454 "relay_vlan": vlan,
2455 })
2263 yield deferToDatabase(self.create_subnet, {2456 yield deferToDatabase(self.create_subnet, {
2264 "vlan": vlan,2457 "vlan": relay_vlan if self.dhcp_relay else vlan,
2265 })2458 })
2266 node = yield deferToDatabase(self.create_node)2459 node = yield deferToDatabase(self.create_node)
2267 yield deferToDatabase(self.create_interface, {2460 yield deferToDatabase(self.create_interface, {
@@ -2294,8 +2487,13 @@
2294 "dhcp_on": True,2487 "dhcp_on": True,
2295 "primary_rack": primary_rack,2488 "primary_rack": primary_rack,
2296 })2489 })
2490 relay_vlan = None
2491 if self.dhcp_relay:
2492 relay_vlan = yield deferToDatabase(self.create_vlan, {
2493 "relay_vlan": vlan,
2494 })
2297 yield deferToDatabase(self.create_subnet, {2495 yield deferToDatabase(self.create_subnet, {
2298 "vlan": vlan,2496 "vlan": relay_vlan if self.dhcp_relay else vlan,
2299 })2497 })
2300 dhcp_snippet = yield deferToDatabase(self.create_dhcp_snippet, {2498 dhcp_snippet = yield deferToDatabase(self.create_dhcp_snippet, {
2301 "enabled": True,2499 "enabled": True,
@@ -2321,8 +2519,13 @@
2321 "dhcp_on": True,2519 "dhcp_on": True,
2322 "primary_rack": primary_rack,2520 "primary_rack": primary_rack,
2323 })2521 })
2522 relay_vlan = None
2523 if self.dhcp_relay:
2524 relay_vlan = yield deferToDatabase(self.create_vlan, {
2525 "relay_vlan": vlan,
2526 })
2324 yield deferToDatabase(self.create_subnet, {2527 yield deferToDatabase(self.create_subnet, {
2325 "vlan": vlan,2528 "vlan": relay_vlan if self.dhcp_relay else vlan,
2326 })2529 })
2327 dhcp_snippet = yield deferToDatabase(self.create_dhcp_snippet, {2530 dhcp_snippet = yield deferToDatabase(self.create_dhcp_snippet, {
2328 "enabled": False,2531 "enabled": False,
@@ -2351,8 +2554,13 @@
2351 "dhcp_on": True,2554 "dhcp_on": True,
2352 "primary_rack": primary_rack,2555 "primary_rack": primary_rack,
2353 })2556 })
2557 relay_vlan = None
2558 if self.dhcp_relay:
2559 relay_vlan = yield deferToDatabase(self.create_vlan, {
2560 "relay_vlan": vlan,
2561 })
2354 subnet = yield deferToDatabase(self.create_subnet, {2562 subnet = yield deferToDatabase(self.create_subnet, {
2355 "vlan": vlan,2563 "vlan": relay_vlan if self.dhcp_relay else vlan,
2356 })2564 })
2357 dhcp_snippet = yield deferToDatabase(self.create_dhcp_snippet, {2565 dhcp_snippet = yield deferToDatabase(self.create_dhcp_snippet, {
2358 "enabled": True,2566 "enabled": True,
@@ -2379,8 +2587,13 @@
2379 "dhcp_on": True,2587 "dhcp_on": True,
2380 "primary_rack": primary_rack,2588 "primary_rack": primary_rack,
2381 })2589 })
2590 relay_vlan = None
2591 if self.dhcp_relay:
2592 relay_vlan = yield deferToDatabase(self.create_vlan, {
2593 "relay_vlan": vlan,
2594 })
2382 yield deferToDatabase(self.create_subnet, {2595 yield deferToDatabase(self.create_subnet, {
2383 "vlan": vlan,2596 "vlan": relay_vlan if self.dhcp_relay else vlan,
2384 })2597 })
2385 node = yield deferToDatabase(self.create_node)2598 node = yield deferToDatabase(self.create_node)
2386 yield deferToDatabase(self.create_interface, {2599 yield deferToDatabase(self.create_interface, {