Merge ~andreserl/maas:amt_wsmancli_version_check into maas:master

Proposed by Andres Rodriguez
Status: Merged
Approved by: Andres Rodriguez
Approved revision: ae761c5bb544260dbf725e1099f2cef56acac126
Merge reported by: MAAS Lander
Merged at revision: not available
Proposed branch: ~andreserl/maas:amt_wsmancli_version_check
Merge into: maas:master
Diff against target: 65 lines (+19/-4)
2 files modified
src/provisioningserver/drivers/power/amt.py (+4/-2)
src/provisioningserver/drivers/power/tests/test_amt.py (+15/-2)
Reviewer Review Type Date Requested Status
Mike Pontillo (community) Approve
MAAS Lander Approve
Review via email: mp+354725@code.launchpad.net

Commit message

Use wsman to identify the AMT version instead of amttool.

amttool is sometimes not reliable enough to identify the version of AMT. wsman, however, is more reliable. Use this instead.

To post a comment you must log in.
ae761c5... by Andres Rodriguez

Fix lint

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

UNIT TESTS
-b amt_wsmancli_version_check lp:~andreserl/maas/+git/maas into -b master lp:~maas-committers/maas

STATUS: SUCCESS
COMMIT: c6e8884f993effa2b3c425dd9d252b48b936c4c3

review: Approve
Revision history for this message
Mike Pontillo (mpontillo) wrote :

I tested this branch with my NUCs; it seems to be working!

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
diff --git a/src/provisioningserver/drivers/power/amt.py b/src/provisioningserver/drivers/power/amt.py
index 358d174..338b8cd 100644
--- a/src/provisioningserver/drivers/power/amt.py
+++ b/src/provisioningserver/drivers/power/amt.py
@@ -352,7 +352,9 @@ class AMTPowerDriver(PowerDriver):
352 # If so, we need wsman, not amttool352 # If so, we need wsman, not amttool
353 env = self._get_amt_environment(power_pass)353 env = self._get_amt_environment(power_pass)
354 process = Popen(354 process = Popen(
355 ('amttool', ip_address, 'info'), stdout=PIPE, stderr=PIPE, env=env)355 ('wsman', 'identify', '--port', '16992', '--hostname',
356 ip_address, '--username', 'admin', '--password', power_pass),
357 stdout=PIPE, stderr=PIPE, env=env)
356 stdout, stderr = process.communicate()358 stdout, stderr = process.communicate()
357 stdout = stdout.decode("utf-8")359 stdout = stdout.decode("utf-8")
358 stderr = stderr.decode("utf-8")360 stderr = stderr.decode("utf-8")
@@ -364,7 +366,7 @@ class AMTPowerDriver(PowerDriver):
364 raise PowerConnError(366 raise PowerConnError(
365 "Unable to retrieve AMT version: %s" % stderr)367 "Unable to retrieve AMT version: %s" % stderr)
366 else:368 else:
367 match = re.search("AMT version:\s*([0-9]+)", stdout)369 match = re.search("ProductVersion>AMT\s*([0-9]+)", stdout)
368 if match is None:370 if match is None:
369 raise PowerActionError(371 raise PowerActionError(
370 "Unable to extract AMT version from "372 "Unable to extract AMT version from "
diff --git a/src/provisioningserver/drivers/power/tests/test_amt.py b/src/provisioningserver/drivers/power/tests/test_amt.py
index b1c0104..5e6da0f 100644
--- a/src/provisioningserver/drivers/power/tests/test_amt.py
+++ b/src/provisioningserver/drivers/power/tests/test_amt.py
@@ -52,6 +52,19 @@ Remote Control Capabilities:
52""").encode('utf-8')52""").encode('utf-8')
5353
5454
55WSMAN_IDENTIFY_OUTPUT = dedent("""\
56 <a:Header/>
57 <a:Body>
58 <b:IdentifyResponse>
59 <b:ProtocolVersion>http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd</b:ProtocolVersion>
60 <b:ProductVendor>Intel(r)</b:ProductVendor>
61 <b:ProductVersion>AMT %s</b:ProductVersion>
62 <c:DASHVersion>1.0.0</c:DASHVersion>
63 <b:SecurityProfiles>
64 ...
65""").encode('utf-8')
66
67
55WSMAN_OUTPUT = dedent("""\68WSMAN_OUTPUT = dedent("""\
56...69...
57 <a:Body>70 <a:Body>
@@ -599,7 +612,7 @@ class TestAMTPowerDriver(MAASTestCase):
599 amt_power_driver, '_get_amt_environment')612 amt_power_driver, '_get_amt_environment')
600 amt_environment_mock.return_value = None613 amt_environment_mock.return_value = None
601 popen_mock = self.patch_popen(return_value=(614 popen_mock = self.patch_popen(return_value=(
602 AMTTOOL_OUTPUT % (b'8.1.57', b''), b'stderr'))615 WSMAN_IDENTIFY_OUTPUT % b'8.1.57', b'stderr'))
603616
604 result = amt_power_driver._get_amt_command(ip_address, power_pass)617 result = amt_power_driver._get_amt_command(ip_address, power_pass)
605618
@@ -616,7 +629,7 @@ class TestAMTPowerDriver(MAASTestCase):
616 amt_power_driver, '_get_amt_environment')629 amt_power_driver, '_get_amt_environment')
617 amt_environment_mock.return_value = None630 amt_environment_mock.return_value = None
618 popen_mock = self.patch_popen(return_value=(631 popen_mock = self.patch_popen(return_value=(
619 AMTTOOL_OUTPUT % (b'10.0.47', b''), b'stderr'))632 WSMAN_IDENTIFY_OUTPUT % b'10.0.47', b'stderr'))
620633
621 result = amt_power_driver._get_amt_command(ip_address, power_pass)634 result = amt_power_driver._get_amt_command(ip_address, power_pass)
622635

Subscribers

People subscribed via source and target branches