Merge lp:~newell-jensen/maas/fix-1611999 into lp:~maas-committers/maas/trunk

Proposed by Newell Jensen
Status: Merged
Approved by: Newell Jensen
Approved revision: no longer in the source branch.
Merged at revision: 5604
Proposed branch: lp:~newell-jensen/maas/fix-1611999
Merge into: lp:~maas-committers/maas/trunk
Diff against target: 121 lines (+13/-43)
2 files modified
src/provisioningserver/drivers/hardware/tests/test_ucsm.py (+7/-29)
src/provisioningserver/drivers/hardware/ucsm.py (+6/-14)
To merge this branch: bzr merge lp:~newell-jensen/maas/fix-1611999
Reviewer Review Type Date Requested Status
Blake Rouse (community) Approve
Review via email: mp+313020@code.launchpad.net

Commit message

Update how UCSM power driver is querying the power state of the blade.

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/hardware/tests/test_ucsm.py'
2--- src/provisioningserver/drivers/hardware/tests/test_ucsm.py 2016-05-12 19:07:37 +0000
3+++ src/provisioningserver/drivers/hardware/tests/test_ucsm.py 2016-12-12 14:04:24 +0000
4@@ -92,8 +92,10 @@
5 return factory.make_name('dn')
6
7
8-def make_server():
9- return factory.make_name('server')
10+def make_server(power_state=None):
11+ return {
12+ 'operPower': power_state,
13+ }
14
15
16 class TestUCSMXMLAPIError(MAASTestCase):
17@@ -547,19 +549,10 @@
18 api = Mock()
19 self.patch(ucsm, 'UCSM_XML_API').return_value = api
20 get_servers_mock = self.patch(ucsm, 'get_servers')
21- server = make_server()
22- current_state = 'down'
23- power_control = Element('lsPower', {'state': current_state})
24- get_servers_mock.return_value = [server]
25- get_server_power_control_mock = self.patch(
26- ucsm, 'get_server_power_control')
27- get_server_power_control_mock.return_value = power_control
28+ get_servers_mock.return_value = [make_server("off")]
29
30 power_state = power_state_ucsm(url, username, password, uuid)
31 self.expectThat(get_servers_mock, MockCalledOnceWith(api, uuid))
32- self.expectThat(
33- get_server_power_control_mock,
34- MockCalledOnceWith(api, server))
35 self.expectThat(power_state, Equals('off'))
36
37 def test_power_state_get_on(self):
38@@ -570,19 +563,10 @@
39 api = Mock()
40 self.patch(ucsm, 'UCSM_XML_API').return_value = api
41 get_servers_mock = self.patch(ucsm, 'get_servers')
42- server = make_server()
43- current_state = 'up'
44- power_control = Element('lsPower', {'state': current_state})
45- get_servers_mock.return_value = [server]
46- get_server_power_control_mock = self.patch(
47- ucsm, 'get_server_power_control')
48- get_server_power_control_mock.return_value = power_control
49+ get_servers_mock.return_value = [make_server("on")]
50
51 power_state = power_state_ucsm(url, username, password, uuid)
52 self.expectThat(get_servers_mock, MockCalledOnceWith(api, uuid))
53- self.expectThat(
54- get_server_power_control_mock,
55- MockCalledOnceWith(api, server))
56 self.expectThat(power_state, Equals('on'))
57
58 def test_power_state_error_on_unknown_state(self):
59@@ -593,13 +577,7 @@
60 api = Mock()
61 self.patch(ucsm, 'UCSM_XML_API').return_value = api
62 get_servers_mock = self.patch(ucsm, 'get_servers')
63- server = make_server()
64- current_state = factory.make_name('error')
65- power_control = Element('lsPower', {'state': current_state})
66- get_servers_mock.return_value = [server]
67- get_server_power_control_mock = self.patch(
68- ucsm, 'get_server_power_control')
69- get_server_power_control_mock.return_value = power_control
70+ get_servers_mock.return_value = [make_server()]
71
72 self.assertRaises(
73 UCSM_XML_API_Error, power_state_ucsm, url,
74
75=== modified file 'src/provisioningserver/drivers/hardware/ucsm.py'
76--- src/provisioningserver/drivers/hardware/ucsm.py 2016-05-12 19:07:37 +0000
77+++ src/provisioningserver/drivers/hardware/ucsm.py 2016-12-12 14:04:24 +0000
78@@ -85,15 +85,10 @@
79 from provisioningserver.utils.twisted import synchronous
80
81
82-class UCSMState:
83- DOWN = "down"
84- UP = "up"
85-
86-
87 class UCSM_XML_API_Error(Exception):
88 """Failure talking to a Cisco UCS Manager."""
89
90- def __init__(self, msg, code):
91+ def __init__(self, msg, code=None):
92 super(UCSM_XML_API_Error, self).__init__(msg)
93 self.code = code
94
95@@ -410,8 +405,8 @@
96 # servers for a given UUID.
97 [server] = get_servers(api, uuid)
98 power_control = get_server_power_control(api, server)
99- command = get_power_command(maas_power_mode,
100- power_control.get('state'))
101+ command = get_power_command(
102+ maas_power_mode, server.get('operPower'))
103 set_server_power_control(api, power_control, command)
104
105
106@@ -421,13 +416,10 @@
107 # UUIDs are unique per server, so we get either one or zero
108 # servers for a given UUID.
109 [server] = get_servers(api, uuid)
110- power_control = get_server_power_control(api, server)
111- power_state = power_control.get('state')
112+ power_state = server.get('operPower')
113
114- if power_state == UCSMState.DOWN:
115- return 'off'
116- elif power_state == UCSMState.UP:
117- return 'on'
118+ if power_state in ('on', 'off'):
119+ return power_state
120 raise UCSM_XML_API_Error(
121 'Unknown power state: %s' % power_state, None)
122