Merge ~ltrager/maas:disable_boot_architectures_postgres_triggers into maas:master

Proposed by Lee Trager
Status: Merged
Approved by: Lee Trager
Approved revision: 2392827dbae305a3008e820837a440956510789c
Merge reported by: MAAS Lander
Merged at revision: not available
Proposed branch: ~ltrager/maas:disable_boot_architectures_postgres_triggers
Merge into: maas:master
Prerequisite: ~ltrager/maas:disable_boot_architectures_api
Diff against target: 190 lines (+150/-3)
2 files modified
src/maasserver/triggers/system.py (+3/-2)
src/maasserver/triggers/tests/test_system_listener.py (+147/-1)
Reviewer Review Type Date Requested Status
MAAS Lander Needs Fixing
Alberto Donato (community) Approve
Review via email: mp+402046@code.launchpad.net

Commit message

Add disabled_boot_architectures Postgres trigger

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

UNIT TESTS
-b disable_boot_architectures_postgres_triggers lp:~ltrager/maas/+git/maas into -b master lp:~maas-committers/maas

STATUS: FAILED
LOG: http://maas-ci.internal:8080/job/maas/job/branch-tester/9903/console
COMMIT: c42f3b035f9b6c101dc43a6fce9494bd0b02b3b2

review: Needs Fixing
Revision history for this message
Alberto Donato (ack) wrote :

+1

small nit inline.

Also, could you switch to f-strings instead of %-formatting for added tests?

review: Approve
320341c... by Lee Trager

Merge branch 'master' into disable_boot_architectures_api

4c98984... by Lee Trager

Fix tests

0239dae... by Lee Trager

Fix merge mistake

f16c26b... by Lee Trager

Merge branch 'disable_boot_architectures_api' into disable_boot_architectures_postgres_triggers

1de2f6c... by Lee Trager

ack comment

2392827... by Lee Trager

Use f-strings

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

UNIT TESTS
-b disable_boot_architectures_postgres_triggers lp:~ltrager/maas/+git/maas into -b master lp:~maas-committers/maas

STATUS: SUCCESS
COMMIT: 1de2f6cd2938945e51acd3e9cf98fb3f2f6c2b1c

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

UNIT TESTS
-b disable_boot_architectures_postgres_triggers lp:~ltrager/maas/+git/maas into -b master lp:~maas-committers/maas

STATUS: FAILED
LOG: http://maas-ci.internal:8080/job/maas/job/branch-tester/9930/console
COMMIT: 2392827dbae305a3008e820837a440956510789c

review: Needs Fixing

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1diff --git a/src/maasserver/triggers/system.py b/src/maasserver/triggers/system.py
2index ea1a074..eda198a 100644
3--- a/src/maasserver/triggers/system.py
4+++ b/src/maasserver/triggers/system.py
5@@ -1,4 +1,4 @@
6-# Copyright 2016-2019 Canonical Ltd. This software is licensed under the
7+# Copyright 2016-2021 Canonical Ltd. This software is licensed under the
8 # GNU Affero General Public License version 3 (see the file LICENSE).
9
10 """
11@@ -456,7 +456,8 @@ DHCP_SUBNET_UPDATE = dedent(
12 (OLD.gateway_ip IS NOT NULL AND NEW.gateway_ip IS NULL) OR
13 host(OLD.gateway_ip) != host(NEW.gateway_ip) OR
14 OLD.dns_servers != NEW.dns_servers OR
15- OLD.allow_dns != NEW.allow_dns THEN
16+ OLD.allow_dns != NEW.allow_dns OR
17+ OLD.disabled_boot_architectures != NEW.disabled_boot_architectures THEN
18 -- Network has changed update alert DHCP if enabled.
19 SELECT * INTO vlan
20 FROM maasserver_vlan WHERE id = NEW.vlan_id;
21diff --git a/src/maasserver/triggers/tests/test_system_listener.py b/src/maasserver/triggers/tests/test_system_listener.py
22index 6189c4c..a74d339 100644
23--- a/src/maasserver/triggers/tests/test_system_listener.py
24+++ b/src/maasserver/triggers/tests/test_system_listener.py
25@@ -1,4 +1,4 @@
26-# Copyright 2016-2019 Canonical Ltd. This software is licensed under the
27+# Copyright 2016-2021 Canonical Ltd. This software is licensed under the
28 # GNU Affero General Public License version 3 (see the file LICENSE).
29
30 """Use the `PostgresListenerService` to test all of the triggers from for
31@@ -47,6 +47,7 @@ from maasserver.triggers.testing import (
32 )
33 from maasserver.utils.orm import transactional
34 from maasserver.utils.threads import deferToDatabase
35+from provisioningserver.boot import BootMethodRegistry
36 from provisioningserver.utils.twisted import DeferredValue
37
38 wait_for_reactor = wait_for(30) # 30 seconds.
39@@ -1852,6 +1853,151 @@ class TestDHCPSubnetListener(
40
41 @wait_for_reactor
42 @inlineCallbacks
43+ def test_sends_message_for_vlan_when_disabled_boot_arches_changes(self):
44+ yield deferToDatabase(register_system_triggers)
45+ primary_rack = yield deferToDatabase(self.create_rack_controller)
46+ secondary_rack = yield deferToDatabase(self.create_rack_controller)
47+ vlan = yield deferToDatabase(
48+ self.create_vlan,
49+ {
50+ "dhcp_on": True,
51+ "primary_rack": primary_rack,
52+ "secondary_rack": secondary_rack,
53+ },
54+ )
55+ subnet = yield deferToDatabase(self.create_subnet, {"vlan": vlan})
56+
57+ primary_dv = DeferredValue()
58+ secondary_dv = DeferredValue()
59+ listener = self.make_listener_without_delay()
60+ listener.register(
61+ f"sys_dhcp_{primary_rack.id}", lambda *args: primary_dv.set(args)
62+ )
63+ listener.register(
64+ f"sys_dhcp_{secondary_rack.id}",
65+ lambda *args: secondary_dv.set(args),
66+ )
67+ yield listener.startService()
68+ disabled_arches = random.sample(
69+ [
70+ boot_method.name
71+ for _, boot_method in BootMethodRegistry
72+ if boot_method.arch_octet or boot_method.path_prefix_http
73+ ],
74+ 3,
75+ )
76+ try:
77+ yield deferToDatabase(
78+ self.update_subnet,
79+ subnet.id,
80+ {"disabled_boot_architectures": disabled_arches},
81+ )
82+ yield primary_dv.get(timeout=2)
83+ yield secondary_dv.get(timeout=2)
84+ finally:
85+ yield listener.stopService()
86+
87+ @wait_for_reactor
88+ @inlineCallbacks
89+ def test_sends_message_for_vlan_when_disabled_boot_arches_is_set(self):
90+ yield deferToDatabase(register_system_triggers)
91+ primary_rack = yield deferToDatabase(self.create_rack_controller)
92+ secondary_rack = yield deferToDatabase(self.create_rack_controller)
93+ vlan = yield deferToDatabase(
94+ self.create_vlan,
95+ {
96+ "dhcp_on": True,
97+ "primary_rack": primary_rack,
98+ "secondary_rack": secondary_rack,
99+ },
100+ )
101+ subnet = yield deferToDatabase(self.create_subnet, {"vlan": vlan})
102+ # Make sure its empty. This test that it handles being set.
103+ yield deferToDatabase(
104+ self.update_subnet, subnet.id, {"disabled_boot_architectures": []}
105+ )
106+
107+ primary_dv = DeferredValue()
108+ secondary_dv = DeferredValue()
109+ listener = self.make_listener_without_delay()
110+ listener.register(
111+ f"sys_dhcp_{primary_rack.id}", lambda *args: primary_dv.set(args)
112+ )
113+ listener.register(
114+ "sys_dhcp_%s" % secondary_rack.id,
115+ lambda *args: secondary_dv.set(args),
116+ )
117+ yield listener.startService()
118+ disabled_arches = random.sample(
119+ [
120+ boot_method.name
121+ for _, boot_method in BootMethodRegistry
122+ if boot_method.arch_octet or boot_method.path_prefix_http
123+ ],
124+ 3,
125+ )
126+ try:
127+ yield deferToDatabase(
128+ self.update_subnet,
129+ subnet.id,
130+ {"disabled_boot_architectures": disabled_arches},
131+ )
132+ yield primary_dv.get(timeout=2)
133+ yield secondary_dv.get(timeout=2)
134+ finally:
135+ yield listener.stopService()
136+
137+ @wait_for_reactor
138+ @inlineCallbacks
139+ def test_sends_message_for_vlan_when_disabled_boot_arches_is_cleared(self):
140+ yield deferToDatabase(register_system_triggers)
141+ primary_rack = yield deferToDatabase(self.create_rack_controller)
142+ secondary_rack = yield deferToDatabase(self.create_rack_controller)
143+ vlan = yield deferToDatabase(
144+ self.create_vlan,
145+ {
146+ "dhcp_on": True,
147+ "primary_rack": primary_rack,
148+ "secondary_rack": secondary_rack,
149+ },
150+ )
151+ disabled_arches = random.sample(
152+ [
153+ boot_method.name
154+ for _, boot_method in BootMethodRegistry
155+ if boot_method.arch_octet or boot_method.path_prefix_http
156+ ],
157+ 3,
158+ )
159+ subnet = yield deferToDatabase(
160+ self.create_subnet,
161+ {"vlan": vlan, "disabled_boot_architectures": disabled_arches},
162+ )
163+
164+ primary_dv = DeferredValue()
165+ secondary_dv = DeferredValue()
166+ listener = self.make_listener_without_delay()
167+ listener.register(
168+ f"sys_dhcp_{primary_rack.id}", lambda *args: primary_dv.set(args)
169+ )
170+ listener.register(
171+ f"sys_dhcp_{secondary_rack.id}",
172+ lambda *args: secondary_dv.set(args),
173+ )
174+ yield listener.startService()
175+ try:
176+ yield deferToDatabase(
177+ self.update_subnet,
178+ subnet.id,
179+ {"disabled_boot_architectures": []},
180+ )
181+ yield primary_dv.get(timeout=2)
182+ yield secondary_dv.get(timeout=2)
183+ finally:
184+ yield listener.stopService()
185+
186+ @wait_for_reactor
187+ @inlineCallbacks
188 def test_sends_message_for_vlan_when_subnet_deleted(self):
189 yield deferToDatabase(register_system_triggers)
190 primary_rack = yield deferToDatabase(self.create_rack_controller)

Subscribers

People subscribed via source and target branches