Merge lp:~newell-jensen/maas/fix-1506053-1.9 into lp:maas/1.9

Proposed by Newell Jensen
Status: Merged
Approved by: Blake Rouse
Approved revision: no longer in the source branch.
Merged at revision: 4522
Proposed branch: lp:~newell-jensen/maas/fix-1506053-1.9
Merge into: lp:maas/1.9
Diff against target: 104 lines (+46/-5)
3 files modified
src/provisioningserver/drivers/power/dli.py (+10/-0)
src/provisioningserver/drivers/power/tests/test_dli.py (+36/-4)
src/provisioningserver/power/__init__.py (+0/-1)
To merge this branch: bzr merge lp:~newell-jensen/maas/fix-1506053-1.9
Reviewer Review Type Date Requested Status
Blake Rouse (community) Approve
Review via email: mp+279658@code.launchpad.net

Commit message

Make DLI PDU power off first, if it is already powered on, before powering on.

Remove DLI from query power types.

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

Looks good.

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'src/provisioningserver/drivers/power/dli.py'
2--- src/provisioningserver/drivers/power/dli.py 2015-11-17 19:49:40 +0000
3+++ src/provisioningserver/drivers/power/dli.py 2015-12-04 20:58:41 +0000
4@@ -14,8 +14,11 @@
5 __metaclass__ = type
6 __all__ = []
7
8+from time import sleep
9+
10 from provisioningserver.drivers.power import (
11 PowerDriver,
12+ PowerError,
13 PowerFatalError,
14 )
15 from provisioningserver.utils import shell
16@@ -93,6 +96,13 @@
17
18 def power_on(self, system_id, context):
19 """Power on DLI outlet."""
20+ if self._query_outlet_state(**context) == 'on':
21+ self._set_outlet_state('OFF', **context)
22+ sleep(1)
23+ if self._query_outlet_state(**context) != 'off':
24+ raise PowerError(
25+ "Unable to power off outlet %s that is already on."
26+ % context['outlet_id'])
27 self._set_outlet_state('ON', **context)
28
29 def power_off(self, system_id, context):
30
31=== modified file 'src/provisioningserver/drivers/power/tests/test_dli.py'
32--- src/provisioningserver/drivers/power/tests/test_dli.py 2015-11-17 19:49:40 +0000
33+++ src/provisioningserver/drivers/power/tests/test_dli.py 2015-12-04 20:58:41 +0000
34@@ -17,11 +17,18 @@
35 from random import choice
36
37 from maastesting.factory import factory
38-from maastesting.matchers import MockCalledOnceWith
39+from maastesting.matchers import (
40+ MockCalledOnceWith,
41+ MockCallsMatch,
42+)
43 from maastesting.testcase import MAASTestCase
44-from mock import sentinel
45+from mock import (
46+ call,
47+ sentinel,
48+)
49 from provisioningserver.drivers.power import (
50 dli as dli_module,
51+ PowerError,
52 PowerFatalError,
53 )
54 from provisioningserver.utils.shell import (
55@@ -143,10 +150,35 @@
56 driver = dli_module.DLIPowerDriver()
57 system_id = factory.make_name('system_id')
58 context = {'context': factory.make_name('context')}
59+ _query_outlet_state_mock = self.patch(driver, '_query_outlet_state')
60+ _query_outlet_state_mock.side_effect = ('on', 'off')
61 _set_outlet_state_mock = self.patch(driver, '_set_outlet_state')
62+ self.patch(dli_module, 'sleep')
63+
64 driver.power_on(system_id, context)
65- self.assertThat(
66- _set_outlet_state_mock, MockCalledOnceWith('ON', **context))
67+
68+ self.expectThat(
69+ _query_outlet_state_mock, MockCallsMatch(
70+ call(**context), call(**context)))
71+ self.expectThat(
72+ _set_outlet_state_mock, MockCallsMatch(
73+ call('OFF', **context), call('ON', **context)))
74+
75+ def test_power_on_raises_power_error(self):
76+ driver = dli_module.DLIPowerDriver()
77+ system_id = factory.make_name('system_id')
78+ context = {'outlet_id': factory.make_name('outlet_id')}
79+ _query_outlet_state_mock = self.patch(driver, '_query_outlet_state')
80+ _query_outlet_state_mock.side_effect = ('on', 'not-off')
81+ _set_outlet_state_mock = self.patch(driver, '_set_outlet_state')
82+ self.patch(dli_module, 'sleep')
83+
84+ self.assertRaises(PowerError, driver.power_on, system_id, context)
85+ self.expectThat(
86+ _query_outlet_state_mock, MockCallsMatch(
87+ call(**context), call(**context)))
88+ self.expectThat(
89+ _set_outlet_state_mock, MockCalledOnceWith('OFF', **context))
90
91 def test_power_off(self):
92 driver = dli_module.DLIPowerDriver()
93
94=== modified file 'src/provisioningserver/power/__init__.py'
95--- src/provisioningserver/power/__init__.py 2015-09-24 16:22:12 +0000
96+++ src/provisioningserver/power/__init__.py 2015-12-04 20:58:41 +0000
97@@ -30,7 +30,6 @@
98 # querying the power state of a node.
99 QUERY_POWER_TYPES = [
100 'amt',
101- 'dli',
102 'hmc',
103 'ipmi',
104 'mscm',

Subscribers

People subscribed via source and target branches