Merge ~ltrager/maas:add_set_boot_driver_to_power_drivers into maas:master

Proposed by Lee Trager
Status: Merged
Approved by: Lee Trager
Approved revision: 8def09f091167d0838415e15204f24de3fcfb979
Merge reported by: MAAS Lander
Merged at revision: not available
Proposed branch: ~ltrager/maas:add_set_boot_driver_to_power_drivers
Merge into: maas:master
Prerequisite: ~ltrager/maas:hmcz_chassis
Diff against target: 519 lines (+82/-21)
27 files modified
src/provisioningserver/drivers/pod/lxd.py (+2/-1)
src/provisioningserver/drivers/pod/tests/test_base.py (+11/-0)
src/provisioningserver/drivers/pod/virsh.py (+2/-1)
src/provisioningserver/drivers/power/__init__.py (+15/-1)
src/provisioningserver/drivers/power/amt.py (+2/-1)
src/provisioningserver/drivers/power/apc.py (+2/-1)
src/provisioningserver/drivers/power/dli.py (+2/-1)
src/provisioningserver/drivers/power/eaton.py (+1/-0)
src/provisioningserver/drivers/power/hmc.py (+1/-0)
src/provisioningserver/drivers/power/hmcz.py (+1/-0)
src/provisioningserver/drivers/power/ipmi.py (+2/-1)
src/provisioningserver/drivers/power/manual.py (+2/-1)
src/provisioningserver/drivers/power/moonshot.py (+2/-1)
src/provisioningserver/drivers/power/mscm.py (+2/-1)
src/provisioningserver/drivers/power/msftocs.py (+2/-1)
src/provisioningserver/drivers/power/nova.py (+2/-1)
src/provisioningserver/drivers/power/openbmc.py (+2/-1)
src/provisioningserver/drivers/power/proxmox.py (+1/-0)
src/provisioningserver/drivers/power/recs.py (+2/-1)
src/provisioningserver/drivers/power/redfish.py (+2/-1)
src/provisioningserver/drivers/power/seamicro.py (+2/-1)
src/provisioningserver/drivers/power/tests/test_base.py (+13/-1)
src/provisioningserver/drivers/power/ucsm.py (+2/-1)
src/provisioningserver/drivers/power/vmware.py (+2/-1)
src/provisioningserver/drivers/power/webhook.py (+1/-0)
src/provisioningserver/drivers/power/wedge.py (+2/-1)
src/provisioningserver/tests/test_power_driver_command.py (+2/-1)
Reviewer Review Type Date Requested Status
Björn Tillenius Approve
MAAS Lander Approve
Review via email: mp+399401@code.launchpad.net

Commit message

Add set_boot_order as a base ability to power and pod drivers.

Power and Pod drivers may optionally implement the ability to change boot
order. If supported, as indicated by the can_set_boot_order variable, the
region will send an ordered list of network and storage devices
representing the expected boot order when booting or when a machine hits
the netboot_off endpoint. The list is the serialized object containing the
id and name storage devices also provide the id_path, model, and serial
while network devices contain the mac_address, vendor, and product.

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

UNIT TESTS
-b add_set_boot_driver_to_power_drivers 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/9448/console
COMMIT: f92dee071c105909c65ad8975f57a6c421e51a17

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

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

STATUS: SUCCESS
COMMIT: 63855ad3b6013a9eef3ec274083bcbd45bcaa588

review: Approve
Revision history for this message
Björn Tillenius (bjornt) wrote :

Added some questions inline, but I'm approving anyway, since it's not blocking.

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

LANDING
-b add_set_boot_driver_to_power_drivers lp:~ltrager/maas/+git/maas into -b master lp:~maas-committers/maas

STATUS: FAILED BUILD
LOG: http://maas-ci.internal:8080/job/maas/job/branch-tester/9504/consoleText

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

LANDING
-b add_set_boot_driver_to_power_drivers lp:~ltrager/maas/+git/maas into -b master lp:~maas-committers/maas

STATUS: FAILED BUILD
LOG: http://maas-ci.internal:8080/job/maas/job/branch-tester/9505/consoleText

8def09f... by Lee Trager

Merge branch 'master' into add_set_boot_driver_to_power_drivers

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1diff --git a/src/provisioningserver/drivers/pod/lxd.py b/src/provisioningserver/drivers/pod/lxd.py
2index 4a00874..978c9ea 100644
3--- a/src/provisioningserver/drivers/pod/lxd.py
4+++ b/src/provisioningserver/drivers/pod/lxd.py
5@@ -1,4 +1,4 @@
6-# Copyright 2020 Canonical Ltd. This software is licensed under the
7+# Copyright 2020-2021 Canonical Ltd. This software is licensed under the
8 # GNU Affero General Public License version 3 (see the file LICENSE).
9
10 """LXD Pod Driver."""
11@@ -143,6 +143,7 @@ class LXDPodDriver(PodDriver):
12 name = "lxd"
13 chassis = True
14 can_probe = False
15+ can_set_boot_order = False
16 description = "LXD (virtual systems)"
17 settings = [
18 make_setting_field("power_address", "LXD address", required=True),
19diff --git a/src/provisioningserver/drivers/pod/tests/test_base.py b/src/provisioningserver/drivers/pod/tests/test_base.py
20index 4475ed0..922e34a 100644
21--- a/src/provisioningserver/drivers/pod/tests/test_base.py
22+++ b/src/provisioningserver/drivers/pod/tests/test_base.py
23@@ -296,6 +296,7 @@ class FakePodDriverBase(PodDriverBase):
24 name = ""
25 chassis = True
26 can_probe = True
27+ can_set_boot_order = True
28 description = ""
29 settings = []
30 ip_extractor = None
31@@ -412,6 +413,16 @@ class TestFakePodDriverBase(MAASTestCase):
32 sentinel.context,
33 )
34
35+ def test_set_boot_order(self):
36+ fake_driver = make_pod_driver_base()
37+ self.assertRaises(
38+ NotImplementedError,
39+ fake_driver.set_boot_order,
40+ sentinel.system_id,
41+ sentinel.context,
42+ sentinel.order,
43+ )
44+
45
46 class TestPodDriverBase(MAASTestCase):
47 def test_get_commissioning_data(self):
48diff --git a/src/provisioningserver/drivers/pod/virsh.py b/src/provisioningserver/drivers/pod/virsh.py
49index c2524b0..09dbba3 100644
50--- a/src/provisioningserver/drivers/pod/virsh.py
51+++ b/src/provisioningserver/drivers/pod/virsh.py
52@@ -1,4 +1,4 @@
53-# Copyright 2017-2020 Canonical Ltd. This software is licensed under the
54+# Copyright 2017-2021 Canonical Ltd. This software is licensed under the
55 # GNU Affero General Public License version 3 (see the file LICENSE).
56
57 """Virsh pod driver."""
58@@ -1298,6 +1298,7 @@ class VirshPodDriver(PodDriver):
59 name = "virsh"
60 description = "Virsh (virtual systems)"
61 can_probe = True
62+ can_set_boot_order = False
63 settings = [
64 make_setting_field("power_address", "Address", required=True),
65 make_setting_field(
66diff --git a/src/provisioningserver/drivers/power/__init__.py b/src/provisioningserver/drivers/power/__init__.py
67index 789b73b..fa0bc35 100644
68--- a/src/provisioningserver/drivers/power/__init__.py
69+++ b/src/provisioningserver/drivers/power/__init__.py
70@@ -1,4 +1,4 @@
71-# Copyright 2020 Canonical Ltd. This software is licensed under the
72+# Copyright 2014-2021 Canonical Ltd. This software is licensed under the
73 # GNU Affero General Public License version 3 (see the file LICENSE).
74
75 """Base power driver."""
76@@ -36,6 +36,7 @@ JSON_POWER_DRIVER_SCHEMA = {
77 "name": {"type": "string"},
78 "chassis": {"type": "boolean"},
79 "can_probe": {"type": "boolean"},
80+ "can_set_boot_order": {"type": "boolean"},
81 "description": {"type": "string"},
82 "fields": {"type": "array", "items": SETTING_PARAMETER_FIELD_SCHEMA},
83 "ip_extractor": IP_EXTRACTOR_SCHEMA,
84@@ -159,6 +160,10 @@ class PowerDriverBase(metaclass=ABCMeta):
85 def can_probe(self):
86 """Return True if the power driver can be used with add_chassis."""
87
88+ @abstractproperty
89+ def can_set_boot_order(self):
90+ """Returns True if the boot order can be remotely set."""
91+
92 @abstractmethod
93 def detect_missing_packages(self):
94 """Implement this method for the actual implementation
95@@ -201,6 +206,15 @@ class PowerDriverBase(metaclass=ABCMeta):
96 calling function should ignore this error, and continue on.
97 """
98
99+ def set_boot_order(self, system_id, context, order):
100+ """Set the specified boot order.
101+
102+ :param system_id: `Node.system_id`
103+ :param context: Power settings for the node.
104+ :param order: An ordered list of network or storage devices.
105+ """
106+ raise NotImplementedError()
107+
108 def get_schema(self, detect_missing_packages=True):
109 """Returns the JSON schema for the driver.
110
111diff --git a/src/provisioningserver/drivers/power/amt.py b/src/provisioningserver/drivers/power/amt.py
112index 833f68b..84ffa26 100644
113--- a/src/provisioningserver/drivers/power/amt.py
114+++ b/src/provisioningserver/drivers/power/amt.py
115@@ -1,4 +1,4 @@
116-# Copyright 2015-2016 Canonical Ltd. This software is licensed under the
117+# Copyright 2015-2021 Canonical Ltd. This software is licensed under the
118 # GNU Affero General Public License version 3 (see the file LICENSE).
119
120 """AMT Power Driver."""
121@@ -47,6 +47,7 @@ class AMTPowerDriver(PowerDriver):
122 name = "amt"
123 chassis = False
124 can_probe = False
125+ can_set_boot_order = False
126 description = "Intel AMT"
127 settings = [
128 make_setting_field(
129diff --git a/src/provisioningserver/drivers/power/apc.py b/src/provisioningserver/drivers/power/apc.py
130index a19efb4..1c46c4a 100644
131--- a/src/provisioningserver/drivers/power/apc.py
132+++ b/src/provisioningserver/drivers/power/apc.py
133@@ -1,4 +1,4 @@
134-# Copyright 2015-2016 Canonical Ltd. This software is licensed under the
135+# Copyright 2015-2021 Canonical Ltd. This software is licensed under the
136 # GNU Affero General Public License version 3 (see the file LICENSE).
137
138 """American Power Conversion (APC) Power Driver.
139@@ -29,6 +29,7 @@ class APCPowerDriver(PowerDriver):
140 name = "apc"
141 chassis = True
142 can_probe = False
143+ can_set_boot_order = False
144 description = "American Power Conversion (APC) PDU"
145 settings = [
146 make_setting_field("power_address", "IP for APC PDU", required=True),
147diff --git a/src/provisioningserver/drivers/power/dli.py b/src/provisioningserver/drivers/power/dli.py
148index d2e8dfe..18480d4 100644
149--- a/src/provisioningserver/drivers/power/dli.py
150+++ b/src/provisioningserver/drivers/power/dli.py
151@@ -1,4 +1,4 @@
152-# Copyright 2015-2016 Canonical Ltd. This software is licensed under the
153+# Copyright 2015-2021 Canonical Ltd. This software is licensed under the
154 # GNU Affero General Public License version 3 (see the file LICENSE).
155
156 """DLI Power Driver."""
157@@ -29,6 +29,7 @@ class DLIPowerDriver(PowerDriver):
158 name = "dli"
159 chassis = True
160 can_probe = False
161+ can_set_boot_order = False
162 description = "Digital Loggers, Inc. PDU"
163 settings = [
164 make_setting_field(
165diff --git a/src/provisioningserver/drivers/power/eaton.py b/src/provisioningserver/drivers/power/eaton.py
166index d30e5a9..92b3879 100644
167--- a/src/provisioningserver/drivers/power/eaton.py
168+++ b/src/provisioningserver/drivers/power/eaton.py
169@@ -32,6 +32,7 @@ class EatonPowerDriver(PowerDriver):
170 name = "eaton"
171 chassis = True
172 can_probe = False
173+ can_set_boot_order = False
174 description = "Eaton PDU"
175 settings = [
176 make_setting_field("power_address", "IP for Eaton PDU", required=True),
177diff --git a/src/provisioningserver/drivers/power/hmc.py b/src/provisioningserver/drivers/power/hmc.py
178index 0358a69..4c773ef 100644
179--- a/src/provisioningserver/drivers/power/hmc.py
180+++ b/src/provisioningserver/drivers/power/hmc.py
181@@ -35,6 +35,7 @@ class HMCPowerDriver(PowerDriver):
182 name = "hmc"
183 chassis = True
184 can_probe = False
185+ can_set_boot_order = False
186 description = "IBM Hardware Management Console (HMC) for PowerPC"
187 settings = [
188 make_setting_field("power_address", "IP for HMC", required=True),
189diff --git a/src/provisioningserver/drivers/power/hmcz.py b/src/provisioningserver/drivers/power/hmcz.py
190index 028649e..38e974e 100644
191--- a/src/provisioningserver/drivers/power/hmcz.py
192+++ b/src/provisioningserver/drivers/power/hmcz.py
193@@ -39,6 +39,7 @@ class HMCZPowerDriver(PowerDriver):
194 name = "hmcz"
195 chassis = True
196 can_probe = True
197+ can_set_boot_order = False
198 description = "IBM Hardware Management Console (HMC) for Z"
199 settings = [
200 make_setting_field("power_address", "HMC Address", required=True),
201diff --git a/src/provisioningserver/drivers/power/ipmi.py b/src/provisioningserver/drivers/power/ipmi.py
202index cd66c71..acf284e 100644
203--- a/src/provisioningserver/drivers/power/ipmi.py
204+++ b/src/provisioningserver/drivers/power/ipmi.py
205@@ -1,4 +1,4 @@
206-# Copyright 2015-2020 Canonical Ltd. This software is licensed under the
207+# Copyright 2015-2021 Canonical Ltd. This software is licensed under the
208 # GNU Affero General Public License version 3 (see the file LICENSE).
209
210 """IPMI Power Driver."""
211@@ -237,6 +237,7 @@ class IPMIPowerDriver(PowerDriver):
212 name = "ipmi"
213 chassis = False
214 can_probe = False
215+ can_set_boot_order = False
216 description = "IPMI"
217 settings = [
218 make_setting_field(
219diff --git a/src/provisioningserver/drivers/power/manual.py b/src/provisioningserver/drivers/power/manual.py
220index 5a2aa19..49547d3 100644
221--- a/src/provisioningserver/drivers/power/manual.py
222+++ b/src/provisioningserver/drivers/power/manual.py
223@@ -1,4 +1,4 @@
224-# Copyright 2016 Canonical Ltd. This software is licensed under the
225+# Copyright 2016-2021 Canonical Ltd. This software is licensed under the
226 # GNU Affero General Public License version 3 (see the file LICENSE).
227
228 """Manual Power Driver."""
229@@ -17,6 +17,7 @@ class ManualPowerDriver(PowerDriver):
230 name = "manual"
231 chassis = False
232 can_probe = False
233+ can_set_boot_order = False
234 description = "Manual"
235 settings = []
236 ip_extractor = None
237diff --git a/src/provisioningserver/drivers/power/moonshot.py b/src/provisioningserver/drivers/power/moonshot.py
238index 0eb203b..c5f21c5 100644
239--- a/src/provisioningserver/drivers/power/moonshot.py
240+++ b/src/provisioningserver/drivers/power/moonshot.py
241@@ -1,4 +1,4 @@
242-# Copyright 2015-2020 Canonical Ltd. This software is licensed under the
243+# Copyright 2015-2021 Canonical Ltd. This software is licensed under the
244 # GNU Affero General Public License version 3 (see the file LICENSE).
245
246 """Moonshot IPMI Power Driver."""
247@@ -25,6 +25,7 @@ class MoonshotIPMIPowerDriver(PowerDriver):
248 name = "moonshot"
249 chassis = True
250 can_probe = False
251+ can_set_boot_order = False
252 description = "HP Moonshot - iLO4 (IPMI)"
253 settings = [
254 make_setting_field("power_address", "Power address", required=True),
255diff --git a/src/provisioningserver/drivers/power/mscm.py b/src/provisioningserver/drivers/power/mscm.py
256index 69782c6..e99f3bb 100644
257--- a/src/provisioningserver/drivers/power/mscm.py
258+++ b/src/provisioningserver/drivers/power/mscm.py
259@@ -1,4 +1,4 @@
260-# Copyright 2015-2016 Canonical Ltd. This software is licensed under the
261+# Copyright 2015-2021 Canonical Ltd. This software is licensed under the
262 # GNU Affero General Public License version 3 (see the file LICENSE).
263
264 """Moonshot HP iLO Chassis Power Driver.
265@@ -56,6 +56,7 @@ class MSCMPowerDriver(PowerDriver):
266 name = "mscm"
267 chassis = True
268 can_probe = True
269+ can_set_boot_order = False
270 description = "HP Moonshot - iLO Chassis Manager"
271 settings = [
272 make_setting_field(
273diff --git a/src/provisioningserver/drivers/power/msftocs.py b/src/provisioningserver/drivers/power/msftocs.py
274index 734bbcc..8363c3c 100644
275--- a/src/provisioningserver/drivers/power/msftocs.py
276+++ b/src/provisioningserver/drivers/power/msftocs.py
277@@ -1,4 +1,4 @@
278-# Copyright 2015-2016 Canonical Ltd. This software is licensed under the
279+# Copyright 2015-2021 Canonical Ltd. This software is licensed under the
280 # GNU Affero General Public License version 3 (see the file LICENSE).
281
282 """MicrosoftOCS Power Driver."""
283@@ -37,6 +37,7 @@ class MicrosoftOCSPowerDriver(PowerDriver):
284 name = "msftocs"
285 chassis = True
286 can_probe = True
287+ can_set_boot_order = False
288 description = "Microsoft OCS - Chassis Manager"
289 settings = [
290 make_setting_field("power_address", "Power address", required=True),
291diff --git a/src/provisioningserver/drivers/power/nova.py b/src/provisioningserver/drivers/power/nova.py
292index 2efc906..0eb26b4 100644
293--- a/src/provisioningserver/drivers/power/nova.py
294+++ b/src/provisioningserver/drivers/power/nova.py
295@@ -1,4 +1,4 @@
296-# Copyright 2016 Canonical Ltd. This software is licensed under the
297+# Copyright 2016-2021 Canonical Ltd. This software is licensed under the
298 # GNU Affero General Public License version 3 (see the file LICENSE).
299
300 """Nova Power Driver."""
301@@ -39,6 +39,7 @@ class NovaPowerDriver(PowerDriver):
302 name = "nova"
303 chassis = True
304 can_probe = False
305+ can_set_boot_order = False
306 description = "OpenStack Nova"
307 settings = [
308 make_setting_field(
309diff --git a/src/provisioningserver/drivers/power/openbmc.py b/src/provisioningserver/drivers/power/openbmc.py
310index 520ca2b..de45468 100644
311--- a/src/provisioningserver/drivers/power/openbmc.py
312+++ b/src/provisioningserver/drivers/power/openbmc.py
313@@ -1,4 +1,4 @@
314-# Copyright 2019 Canonical Ltd. This software is licensed under the
315+# Copyright 2019-2021 Canonical Ltd. This software is licensed under the
316 # GNU Affero General Public License version 3 (see the file LICENSE).
317
318 """OpenBMC Power Driver."""
319@@ -39,6 +39,7 @@ class OpenBMCPowerDriver(PowerDriver):
320
321 chassis = False
322 can_probe = False
323+ can_set_boot_order = False
324
325 name = "openbmc"
326 description = "OpenBMC Power Driver"
327diff --git a/src/provisioningserver/drivers/power/proxmox.py b/src/provisioningserver/drivers/power/proxmox.py
328index cc0b720..9c427d4 100644
329--- a/src/provisioningserver/drivers/power/proxmox.py
330+++ b/src/provisioningserver/drivers/power/proxmox.py
331@@ -33,6 +33,7 @@ class ProxmoxPowerDriver(WebhookPowerDriver):
332 name = "proxmox"
333 chassis = True
334 can_probe = True
335+ can_set_boot_order = False
336 description = "Proxmox"
337 settings = [
338 make_setting_field(
339diff --git a/src/provisioningserver/drivers/power/recs.py b/src/provisioningserver/drivers/power/recs.py
340index 70c1aa1..c165bda 100644
341--- a/src/provisioningserver/drivers/power/recs.py
342+++ b/src/provisioningserver/drivers/power/recs.py
343@@ -1,4 +1,4 @@
344-# Copyright 2017 christmann informationstechnik + medien GmbH & Co. KG. This
345+# Copyright 2017-2021 christmann informationstechnik + medien GmbH & Co. KG. This
346 # software is licensed under the GNU Affero General Public License version 3
347 # (see the file LICENSE).
348
349@@ -206,6 +206,7 @@ class RECSPowerDriver(PowerDriver):
350 name = "recs_box"
351 chassis = True
352 can_probe = True
353+ can_set_boot_order = False
354 description = "Christmann RECS|Box Power Driver"
355 settings = [
356 make_setting_field(
357diff --git a/src/provisioningserver/drivers/power/redfish.py b/src/provisioningserver/drivers/power/redfish.py
358index e1bc831..334ea2c 100644
359--- a/src/provisioningserver/drivers/power/redfish.py
360+++ b/src/provisioningserver/drivers/power/redfish.py
361@@ -1,4 +1,4 @@
362-# Copyright 2018-2019 Canonical Ltd. This software is licensed under the
363+# Copyright 2018-2021 Canonical Ltd. This software is licensed under the
364 # GNU Affero General Public License version 3 (see the file LICENSE).
365
366 """Redfish Power Driver."""
367@@ -135,6 +135,7 @@ class RedfishPowerDriver(RedfishPowerDriverBase):
368
369 chassis = True # Redfish API endpoints can be probed and enlisted.
370 can_probe = False
371+ can_set_boot_order = False
372
373 name = "redfish"
374 description = "Redfish"
375diff --git a/src/provisioningserver/drivers/power/seamicro.py b/src/provisioningserver/drivers/power/seamicro.py
376index 563f929..83ec5c6 100644
377--- a/src/provisioningserver/drivers/power/seamicro.py
378+++ b/src/provisioningserver/drivers/power/seamicro.py
379@@ -1,4 +1,4 @@
380-# Copyright 2015-2020 Canonical Ltd. This software is licensed under the
381+# Copyright 2015-2021 Canonical Ltd. This software is licensed under the
382 # GNU Affero General Public License version 3 (see the file LICENSE).
383
384 """SeaMicro Power Driver."""
385@@ -40,6 +40,7 @@ class SeaMicroPowerDriver(PowerDriver):
386 name = "sm15k"
387 chassis = True
388 can_probe = True
389+ can_set_boot_order = False
390 description = "SeaMicro 15000"
391 settings = [
392 make_setting_field(
393diff --git a/src/provisioningserver/drivers/power/tests/test_base.py b/src/provisioningserver/drivers/power/tests/test_base.py
394index 0edef98..bb28506 100644
395--- a/src/provisioningserver/drivers/power/tests/test_base.py
396+++ b/src/provisioningserver/drivers/power/tests/test_base.py
397@@ -1,4 +1,4 @@
398-# Copyright 2014-2018 Canonical Ltd. This software is licensed under the
399+# Copyright 2014-2021 Canonical Ltd. This software is licensed under the
400 # GNU Affero General Public License version 3 (see the file LICENSE).
401
402 """Tests for `provisioningserver.drivers.power`."""
403@@ -43,6 +43,7 @@ class FakePowerDriverBase(PowerDriverBase):
404 name = ""
405 chassis = False
406 can_probe = False
407+ can_set_boot_order = False
408 description = ""
409 settings = []
410 ip_extractor = None
411@@ -161,6 +162,16 @@ class TestFakePowerDriverBase(MAASTestCase):
412 sentinel.context,
413 )
414
415+ def test_set_boot_order_raises_not_implemented(self):
416+ fake_driver = make_power_driver_base()
417+ self.assertRaises(
418+ NotImplementedError,
419+ fake_driver.set_boot_order,
420+ sentinel.system_id,
421+ sentinel.context,
422+ sentinel.order,
423+ )
424+
425
426 class TestPowerDriverBase(MAASTestCase):
427 def test_get_schema(self):
428@@ -253,6 +264,7 @@ class FakePowerDriver(PowerDriver):
429 name = ""
430 chassis = False
431 can_probe = False
432+ can_set_boot_order = False
433 description = ""
434 settings = []
435 ip_extractor = None
436diff --git a/src/provisioningserver/drivers/power/ucsm.py b/src/provisioningserver/drivers/power/ucsm.py
437index 832e35e..948ec3c 100644
438--- a/src/provisioningserver/drivers/power/ucsm.py
439+++ b/src/provisioningserver/drivers/power/ucsm.py
440@@ -1,4 +1,4 @@
441-# Copyright 2015 Canonical Ltd. This software is licensed under the
442+# Copyright 2015-2021 Canonical Ltd. This software is licensed under the
443 # GNU Affero General Public License version 3 (see the file LICENSE).
444
445 """Cisco UCS Power Driver."""
446@@ -30,6 +30,7 @@ class UCSMPowerDriver(PowerDriver):
447 name = "ucsm"
448 chassis = True
449 can_probe = True
450+ can_set_boot_order = False
451 description = "Cisco UCS Manager"
452 settings = [
453 make_setting_field(
454diff --git a/src/provisioningserver/drivers/power/vmware.py b/src/provisioningserver/drivers/power/vmware.py
455index a3e638f..63799e7 100644
456--- a/src/provisioningserver/drivers/power/vmware.py
457+++ b/src/provisioningserver/drivers/power/vmware.py
458@@ -1,4 +1,4 @@
459-# Copyright 2015-2016 Canonical Ltd. This software is licensed under the
460+# Copyright 2015-2021 Canonical Ltd. This software is licensed under the
461 # GNU Affero General Public License version 3 (see the file LICENSE).
462
463 """VMware Power Driver."""
464@@ -38,6 +38,7 @@ class VMwarePowerDriver(PowerDriver):
465 name = "vmware"
466 chassis = True
467 can_probe = True
468+ can_set_boot_order = False
469 description = "VMware"
470 settings = [
471 make_setting_field(
472diff --git a/src/provisioningserver/drivers/power/webhook.py b/src/provisioningserver/drivers/power/webhook.py
473index 589a04d..11a92a9 100644
474--- a/src/provisioningserver/drivers/power/webhook.py
475+++ b/src/provisioningserver/drivers/power/webhook.py
476@@ -38,6 +38,7 @@ class WebhookPowerDriver(PowerDriver):
477 name = "webhook"
478 chassis = False
479 can_probe = False
480+ can_set_boot_order = False
481 description = "Webhook"
482 settings = [
483 make_setting_field(
484diff --git a/src/provisioningserver/drivers/power/wedge.py b/src/provisioningserver/drivers/power/wedge.py
485index 436030d..f214032 100644
486--- a/src/provisioningserver/drivers/power/wedge.py
487+++ b/src/provisioningserver/drivers/power/wedge.py
488@@ -1,4 +1,4 @@
489-# Copyright 2016 Canonical Ltd. This software is licensed under the
490+# Copyright 2016-2021 Canonical Ltd. This software is licensed under the
491 # GNU Affero General Public License version 3 (see the file LICENSE).
492
493 """Facebook's Wedge Power Driver."""
494@@ -27,6 +27,7 @@ class WedgePowerDriver(PowerDriver):
495 name = "wedge"
496 chassis = False
497 can_probe = False
498+ can_set_boot_order = False
499 description = "Facebook's Wedge"
500 settings = [
501 make_setting_field("power_address", "IP address", required=True),
502diff --git a/src/provisioningserver/tests/test_power_driver_command.py b/src/provisioningserver/tests/test_power_driver_command.py
503index 36c55f4..6041765 100644
504--- a/src/provisioningserver/tests/test_power_driver_command.py
505+++ b/src/provisioningserver/tests/test_power_driver_command.py
506@@ -1,4 +1,4 @@
507-# Copyright 2020 Canonical Ltd. This software is licensed under the
508+# Copyright 2020-2021 Canonical Ltd. This software is licensed under the
509 # GNU Affero General Public License version 3 (see the file LICENSE).
510
511 """Tests for register command code."""
512@@ -18,6 +18,7 @@ class FakeDriver(PowerDriver):
513 # These are required by the base class, but unused in this test.
514 chassis = False
515 can_probe = False
516+ can_set_boot_order = False
517 description = None
518 detect_missing_packages = None
519 ip_extractor = None

Subscribers

People subscribed via source and target branches