Merge lp:~mpontillo/maas/fix-1517097-1.9 into lp:~maas-committers/maas/trunk

Proposed by Mike Pontillo
Status: Superseded
Proposed branch: lp:~mpontillo/maas/fix-1517097-1.9
Merge into: lp:~maas-committers/maas/trunk
Diff against target: 176 lines (+69/-6) (has conflicts)
4 files modified
src/provisioningserver/drivers/power/amt.py (+11/-0)
src/provisioningserver/drivers/power/ipmi.py (+18/-5)
src/provisioningserver/drivers/power/tests/test_amt.py (+17/-0)
src/provisioningserver/drivers/power/tests/test_ipmi.py (+23/-1)
Text conflict in src/provisioningserver/drivers/power/amt.py
Text conflict in src/provisioningserver/drivers/power/ipmi.py
Text conflict in src/provisioningserver/drivers/power/tests/test_amt.py
Text conflict in src/provisioningserver/drivers/power/tests/test_ipmi.py
To merge this branch: bzr merge lp:~mpontillo/maas/fix-1517097-1.9
Reviewer Review Type Date Requested Status
MAAS Maintainers Pending
Review via email: mp+278230@code.launchpad.net

This proposal has been superseded by a proposal from 2015-11-21.

Commit message

Merge fix for #1517097 from trunk revision 4512.

To post a comment you must log in.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'src/maasserver/models/node.py'
2=== modified file 'src/provisioningserver/drivers/power/__init__.py'
3=== modified file 'src/provisioningserver/drivers/power/amt.py'
4--- src/provisioningserver/drivers/power/amt.py 2015-11-17 02:05:20 +0000
5+++ src/provisioningserver/drivers/power/amt.py 2015-11-21 00:18:35 +0000
6@@ -53,6 +53,7 @@
7 missing_packages.append(package)
8 return missing_packages
9
10+<<<<<<< TREE
11 def _render_wsman_state_xml(self, power_change):
12 """Render wsman state XML."""
13 wsman_state_filename = join(dirname(__file__), "amt.wsman-state.xml")
14@@ -373,3 +374,13 @@
15 return self.amttool_query_state(ip_address, power_pass)
16 elif amt_command == 'wsman':
17 return self.wsman_query_state(ip_address, power_pass)
18+=======
19+ def power_on(self, system_id, context):
20+ raise NotImplementedError
21+
22+ def power_off(self, system_id, context):
23+ raise NotImplementedError
24+
25+ def power_query(self, system_id, context):
26+ raise NotImplementedError
27+>>>>>>> MERGE-SOURCE
28
29=== modified file 'src/provisioningserver/drivers/power/ipmi.py'
30--- src/provisioningserver/drivers/power/ipmi.py 2015-11-18 21:16:42 +0000
31+++ src/provisioningserver/drivers/power/ipmi.py 2015-11-21 00:18:35 +0000
32@@ -27,6 +27,7 @@
33 PowerDriver,
34 PowerFatalError,
35 )
36+from provisioningserver.logger import get_maas_logger
37 from provisioningserver.utils import shell
38 from provisioningserver.utils.network import find_ip_via_arp
39 from provisioningserver.utils.shell import (
40@@ -43,6 +44,16 @@
41 """
42
43
44+<<<<<<< TREE
45+=======
46+maaslog = get_maas_logger("drivers.power.ipmi")
47+
48+
49+def is_set(setting):
50+ return not (setting is None or setting == "" or setting.isspace())
51+
52+
53+>>>>>>> MERGE-SOURCE
54 class IPMIPowerDriver(PowerDriver):
55
56 name = 'ipmi'
57@@ -55,7 +66,8 @@
58 return []
59
60 @staticmethod
61- def _issue_ipmi_chassis_config_command(command, change, address, env):
62+ def _issue_ipmi_chassis_config_command(
63+ command, power_change, power_address, env):
64 with NamedTemporaryFile() as tmp_config:
65 # Write out the chassis configuration.
66 tmp_config.write(IPMI_CONFIG)
67@@ -70,18 +82,19 @@
68 if "password invalid" in stderr:
69 raise PowerAuthError("Invalid password.")
70 if process.returncode != 0:
71- raise PowerFatalError(
72- "Failed to power %s %s: %s" % (change, address, stderr))
73+ maaslog.warning(
74+ 'Failed to change the boot order to PXE %s: %s' % (
75+ power_address, stderr))
76
77 @staticmethod
78- def _issue_ipmi_power_command(command, change, address, env):
79+ def _issue_ipmi_power_command(command, power_change, power_address, env):
80 command = tuple(command) # For consistency when testing.
81 try:
82 output = call_and_check(command, env=env)
83 except ExternalProcessError as e:
84 raise PowerFatalError(
85 "Failed to power %s %s: %s" % (
86- change, address, e.output_as_unicode))
87+ power_change, power_address, e.output_as_unicode))
88 else:
89 if 'on' in output:
90 return 'on'
91
92=== modified file 'src/provisioningserver/drivers/power/tests/test_amt.py'
93--- src/provisioningserver/drivers/power/tests/test_amt.py 2015-11-17 02:05:20 +0000
94+++ src/provisioningserver/drivers/power/tests/test_amt.py 2015-11-21 00:18:35 +0000
95@@ -99,6 +99,7 @@
96 missing = driver.detect_missing_packages()
97 self.assertItemsEqual([], missing)
98
99+<<<<<<< TREE
100 def test__render_wsman_state_xml_renders_xml(self):
101 amt_power_driver = AMTPowerDriver()
102 power_change = choice(['on', 'off', 'restart'])
103@@ -780,3 +781,19 @@
104 wsman_query_state_mock, MockCalledOnceWith(
105 context['ip_address'], context['power_pass']))
106 self.expectThat(state, Equals('on'))
107+=======
108+ def test_power_on(self):
109+ driver = amt_module.AMTPowerDriver()
110+ self.assertRaises(
111+ NotImplementedError, driver.power_on, "fake_id", {})
112+
113+ def test_power_off(self):
114+ driver = amt_module.AMTPowerDriver()
115+ self.assertRaises(
116+ NotImplementedError, driver.power_off, "fake_id", {})
117+
118+ def test_power_query(self):
119+ driver = amt_module.AMTPowerDriver()
120+ self.assertRaises(
121+ NotImplementedError, driver.power_query, "fake_id", {})
122+>>>>>>> MERGE-SOURCE
123
124=== modified file 'src/provisioningserver/drivers/power/tests/test_ipmi.py'
125--- src/provisioningserver/drivers/power/tests/test_ipmi.py 2015-11-17 02:05:20 +0000
126+++ src/provisioningserver/drivers/power/tests/test_ipmi.py 2015-11-21 00:18:35 +0000
127@@ -269,8 +269,13 @@
128 ipmipower_command, env=env))
129 self.expectThat(result, Equals('other'))
130
131+<<<<<<< TREE
132 def test__issue_ipmi_command_issues_raises_power_auth_error(self):
133 _, _, _, _, _, _, _, context = make_parameters()
134+=======
135+ def test__issue_ipmi_command_raises_power_fatal_error(self):
136+ _, _, _, _, _, _, _, context = make_parameters()
137+>>>>>>> MERGE-SOURCE
138 ipmi_power_driver = IPMIPowerDriver()
139 popen_mock = self.patch(ipmi_module, 'Popen')
140 process = popen_mock.return_value
141@@ -281,17 +286,34 @@
142 PowerAuthError, ipmi_power_driver._issue_ipmi_command,
143 'on', **context)
144
145+<<<<<<< TREE
146 def test__issue_ipmi_command_issues_raises_power_fatal_error(self):
147 _, _, _, _, _, _, _, context = make_parameters()
148+=======
149+ def test__issue_ipmi_command_logs_maaslog_warning(self):
150+ _, _, _, _, _, _, _, context = make_parameters()
151+>>>>>>> MERGE-SOURCE
152 ipmi_power_driver = IPMIPowerDriver()
153 popen_mock = self.patch(ipmi_module, 'Popen')
154 process = popen_mock.return_value
155- process.communicate.return_value = (None, '')
156+ process.communicate.return_value = (None, 'maaslog error')
157 process.returncode = -1
158+<<<<<<< TREE
159
160 self.assertRaises(
161 PowerFatalError, ipmi_power_driver._issue_ipmi_command,
162 'on', **context)
163+=======
164+ maaslog = self.patch(ipmi_module, 'maaslog')
165+ self.patch(ipmi_power_driver, '_issue_ipmi_power_command')
166+
167+ ipmi_power_driver._issue_ipmi_command('on', **context)
168+
169+ self.assertThat(
170+ maaslog.warning, MockCalledOnceWith(
171+ 'Failed to change the boot order to PXE %s: %s' % (
172+ context['power_address'], 'maaslog error')))
173+>>>>>>> MERGE-SOURCE
174
175 def test__issue_ipmi_command_issues_catches_external_process_error(self):
176 _, _, _, _, _, _, _, context = make_parameters()