pyghmi 1.5.65__tar.gz → 1.5.67__tar.gz
Sign up to get free protection for your applications and to get access to all the features.
- {pyghmi-1.5.65 → pyghmi-1.5.67}/ChangeLog +11 -0
- {pyghmi-1.5.65 → pyghmi-1.5.67}/MANIFEST.in +1 -0
- {pyghmi-1.5.65 → pyghmi-1.5.67}/PKG-INFO +1 -1
- {pyghmi-1.5.65 → pyghmi-1.5.67}/pyghmi/ipmi/oem/generic.py +3 -0
- {pyghmi-1.5.65 → pyghmi-1.5.67}/pyghmi/ipmi/oem/lenovo/imm.py +7 -2
- {pyghmi-1.5.65 → pyghmi-1.5.67}/pyghmi/redfish/command.py +12 -2
- {pyghmi-1.5.65 → pyghmi-1.5.67}/pyghmi/redfish/oem/generic.py +7 -2
- {pyghmi-1.5.65 → pyghmi-1.5.67}/pyghmi/redfish/oem/lenovo/main.py +1 -1
- {pyghmi-1.5.65 → pyghmi-1.5.67}/pyghmi/redfish/oem/lenovo/xcc.py +7 -2
- {pyghmi-1.5.65 → pyghmi-1.5.67}/pyghmi.egg-info/PKG-INFO +1 -1
- pyghmi-1.5.67/pyghmi.egg-info/pbr.json +1 -0
- pyghmi-1.5.65/pyghmi.egg-info/pbr.json +0 -1
- {pyghmi-1.5.65 → pyghmi-1.5.67}/.coveragerc +0 -0
- {pyghmi-1.5.65 → pyghmi-1.5.67}/.stestr.conf +0 -0
- {pyghmi-1.5.65 → pyghmi-1.5.67}/AUTHORS +0 -0
- {pyghmi-1.5.65 → pyghmi-1.5.67}/CONTRIBUTING.rst +0 -0
- {pyghmi-1.5.65 → pyghmi-1.5.67}/LICENSE +0 -0
- {pyghmi-1.5.65 → pyghmi-1.5.67}/README +0 -0
- {pyghmi-1.5.65 → pyghmi-1.5.67}/README.md +0 -0
- {pyghmi-1.5.65 → pyghmi-1.5.67}/builddeb +0 -0
- {pyghmi-1.5.65 → pyghmi-1.5.67}/buildrpm +0 -0
- {pyghmi-1.5.65 → pyghmi-1.5.67}/doc/requirements.txt +0 -0
- {pyghmi-1.5.65 → pyghmi-1.5.67}/doc/source/conf.py +0 -0
- {pyghmi-1.5.65 → pyghmi-1.5.67}/doc/source/contributor/index.rst +0 -0
- {pyghmi-1.5.65 → pyghmi-1.5.67}/doc/source/index.rst +0 -0
- {pyghmi-1.5.65 → pyghmi-1.5.67}/doc/source/install/index.rst +0 -0
- {pyghmi-1.5.65 → pyghmi-1.5.67}/doc/source/reference/index.rst +0 -0
- {pyghmi-1.5.65 → pyghmi-1.5.67}/makesetup +0 -0
- {pyghmi-1.5.65 → pyghmi-1.5.67}/playbooks/legacy/tempest-devstack-ironic-pxe_ipmitool-pyghmi-src/post.yaml +0 -0
- {pyghmi-1.5.65 → pyghmi-1.5.67}/playbooks/legacy/tempest-devstack-ironic-pxe_ipmitool-pyghmi-src/run.yaml +0 -0
- {pyghmi-1.5.65 → pyghmi-1.5.67}/py27-constraints.txt +0 -0
- {pyghmi-1.5.65 → pyghmi-1.5.67}/pyghmi/__init__.py +0 -0
- {pyghmi-1.5.65 → pyghmi-1.5.67}/pyghmi/cmd/__init__.py +0 -0
- {pyghmi-1.5.65 → pyghmi-1.5.67}/pyghmi/cmd/fakebmc.py +0 -0
- {pyghmi-1.5.65 → pyghmi-1.5.67}/pyghmi/cmd/pyghmicons.py +0 -0
- {pyghmi-1.5.65 → pyghmi-1.5.67}/pyghmi/cmd/pyghmiutil.py +0 -0
- {pyghmi-1.5.65 → pyghmi-1.5.67}/pyghmi/cmd/virshbmc.py +0 -0
- {pyghmi-1.5.65 → pyghmi-1.5.67}/pyghmi/constants.py +0 -0
- {pyghmi-1.5.65 → pyghmi-1.5.67}/pyghmi/exceptions.py +0 -0
- {pyghmi-1.5.65 → pyghmi-1.5.67}/pyghmi/ipmi/__init__.py +0 -0
- {pyghmi-1.5.65 → pyghmi-1.5.67}/pyghmi/ipmi/bmc.py +0 -0
- {pyghmi-1.5.65 → pyghmi-1.5.67}/pyghmi/ipmi/command.py +0 -0
- {pyghmi-1.5.65 → pyghmi-1.5.67}/pyghmi/ipmi/console.py +0 -0
- {pyghmi-1.5.65 → pyghmi-1.5.67}/pyghmi/ipmi/events.py +0 -0
- {pyghmi-1.5.65 → pyghmi-1.5.67}/pyghmi/ipmi/fru.py +0 -0
- {pyghmi-1.5.65 → pyghmi-1.5.67}/pyghmi/ipmi/oem/__init__.py +0 -0
- {pyghmi-1.5.65 → pyghmi-1.5.67}/pyghmi/ipmi/oem/lenovo/__init__.py +0 -0
- {pyghmi-1.5.65 → pyghmi-1.5.67}/pyghmi/ipmi/oem/lenovo/config.py +0 -0
- {pyghmi-1.5.65 → pyghmi-1.5.67}/pyghmi/ipmi/oem/lenovo/cpu.py +0 -0
- {pyghmi-1.5.65 → pyghmi-1.5.67}/pyghmi/ipmi/oem/lenovo/dimm.py +0 -0
- {pyghmi-1.5.65 → pyghmi-1.5.67}/pyghmi/ipmi/oem/lenovo/drive.py +0 -0
- {pyghmi-1.5.65 → pyghmi-1.5.67}/pyghmi/ipmi/oem/lenovo/energy.py +0 -0
- {pyghmi-1.5.65 → pyghmi-1.5.67}/pyghmi/ipmi/oem/lenovo/firmware.py +0 -0
- {pyghmi-1.5.65 → pyghmi-1.5.67}/pyghmi/ipmi/oem/lenovo/handler.py +0 -0
- {pyghmi-1.5.65 → pyghmi-1.5.67}/pyghmi/ipmi/oem/lenovo/inventory.py +0 -0
- {pyghmi-1.5.65 → pyghmi-1.5.67}/pyghmi/ipmi/oem/lenovo/nextscale.py +0 -0
- {pyghmi-1.5.65 → pyghmi-1.5.67}/pyghmi/ipmi/oem/lenovo/pci.py +0 -0
- {pyghmi-1.5.65 → pyghmi-1.5.67}/pyghmi/ipmi/oem/lenovo/psu.py +0 -0
- {pyghmi-1.5.65 → pyghmi-1.5.67}/pyghmi/ipmi/oem/lenovo/raid_controller.py +0 -0
- {pyghmi-1.5.65 → pyghmi-1.5.67}/pyghmi/ipmi/oem/lenovo/raid_drive.py +0 -0
- {pyghmi-1.5.65 → pyghmi-1.5.67}/pyghmi/ipmi/oem/lookup.py +0 -0
- {pyghmi-1.5.65 → pyghmi-1.5.67}/pyghmi/ipmi/private/__init__.py +0 -0
- {pyghmi-1.5.65 → pyghmi-1.5.67}/pyghmi/ipmi/private/constants.py +0 -0
- {pyghmi-1.5.65 → pyghmi-1.5.67}/pyghmi/ipmi/private/localsession.py +0 -0
- {pyghmi-1.5.65 → pyghmi-1.5.67}/pyghmi/ipmi/private/serversession.py +0 -0
- {pyghmi-1.5.65 → pyghmi-1.5.67}/pyghmi/ipmi/private/session.py +0 -0
- {pyghmi-1.5.65 → pyghmi-1.5.67}/pyghmi/ipmi/private/simplesession.py +0 -0
- {pyghmi-1.5.65 → pyghmi-1.5.67}/pyghmi/ipmi/private/spd.py +0 -0
- {pyghmi-1.5.65 → pyghmi-1.5.67}/pyghmi/ipmi/private/util.py +0 -0
- {pyghmi-1.5.65 → pyghmi-1.5.67}/pyghmi/ipmi/sdr.py +0 -0
- {pyghmi-1.5.65 → pyghmi-1.5.67}/pyghmi/media.py +0 -0
- {pyghmi-1.5.65 → pyghmi-1.5.67}/pyghmi/redfish/__init__.py +0 -0
- {pyghmi-1.5.65 → pyghmi-1.5.67}/pyghmi/redfish/oem/__init__.py +0 -0
- {pyghmi-1.5.65 → pyghmi-1.5.67}/pyghmi/redfish/oem/dell/__init__.py +0 -0
- {pyghmi-1.5.65 → pyghmi-1.5.67}/pyghmi/redfish/oem/dell/idrac.py +0 -0
- {pyghmi-1.5.65 → pyghmi-1.5.67}/pyghmi/redfish/oem/dell/main.py +0 -0
- {pyghmi-1.5.65 → pyghmi-1.5.67}/pyghmi/redfish/oem/lenovo/__init__.py +0 -0
- {pyghmi-1.5.65 → pyghmi-1.5.67}/pyghmi/redfish/oem/lenovo/tsma.py +0 -0
- {pyghmi-1.5.65 → pyghmi-1.5.67}/pyghmi/redfish/oem/lookup.py +0 -0
- {pyghmi-1.5.65 → pyghmi-1.5.67}/pyghmi/storage.py +0 -0
- {pyghmi-1.5.65 → pyghmi-1.5.67}/pyghmi/tests/__init__.py +0 -0
- {pyghmi-1.5.65 → pyghmi-1.5.67}/pyghmi/tests/unit/__init__.py +0 -0
- {pyghmi-1.5.65 → pyghmi-1.5.67}/pyghmi/tests/unit/base.py +0 -0
- {pyghmi-1.5.65 → pyghmi-1.5.67}/pyghmi/tests/unit/ipmi/__init__.py +0 -0
- {pyghmi-1.5.65 → pyghmi-1.5.67}/pyghmi/tests/unit/ipmi/test_sdr.py +0 -0
- {pyghmi-1.5.65 → pyghmi-1.5.67}/pyghmi/util/__init__.py +0 -0
- {pyghmi-1.5.65 → pyghmi-1.5.67}/pyghmi/util/parse.py +0 -0
- {pyghmi-1.5.65 → pyghmi-1.5.67}/pyghmi/util/webclient.py +0 -0
- {pyghmi-1.5.65 → pyghmi-1.5.67}/pyghmi/version.py +0 -0
- {pyghmi-1.5.65 → pyghmi-1.5.67}/pyghmi.egg-info/SOURCES.txt +0 -0
- {pyghmi-1.5.65 → pyghmi-1.5.67}/pyghmi.egg-info/dependency_links.txt +0 -0
- {pyghmi-1.5.65 → pyghmi-1.5.67}/pyghmi.egg-info/entry_points.txt +0 -0
- {pyghmi-1.5.65 → pyghmi-1.5.67}/pyghmi.egg-info/not-zip-safe +0 -0
- {pyghmi-1.5.65 → pyghmi-1.5.67}/pyghmi.egg-info/requires.txt +0 -0
- {pyghmi-1.5.65 → pyghmi-1.5.67}/pyghmi.egg-info/top_level.txt +0 -0
- {pyghmi-1.5.65 → pyghmi-1.5.67}/python-pyghmi.spec +0 -0
- {pyghmi-1.5.65 → pyghmi-1.5.67}/python-pyghmi.spec.tmpl +0 -0
- {pyghmi-1.5.65 → pyghmi-1.5.67}/requirements.txt +0 -0
- {pyghmi-1.5.65 → pyghmi-1.5.67}/setup.cfg +0 -0
- {pyghmi-1.5.65 → pyghmi-1.5.67}/setup.py +0 -0
- {pyghmi-1.5.65 → pyghmi-1.5.67}/setup.py.tmpl +0 -0
- {pyghmi-1.5.65 → pyghmi-1.5.67}/test-requirements.txt +0 -0
- {pyghmi-1.5.65 → pyghmi-1.5.67}/tox.ini +0 -0
- {pyghmi-1.5.65 → pyghmi-1.5.67}/wheezy.patch +0 -0
- {pyghmi-1.5.65 → pyghmi-1.5.67}/zuul.d/project.yaml +0 -0
@@ -115,6 +115,9 @@ class OEMHandler(object):
|
|
115
115
|
if len(extenv) > 1:
|
116
116
|
raise Exception('TODO: how to deal with multiple external environments')
|
117
117
|
self._inlet_name = extenv[0]
|
118
|
+
if not self._inlet_name:
|
119
|
+
raise exc.UnsupportedFunctionality(
|
120
|
+
'Unable to detect inlet sensor name for this platform')
|
118
121
|
return ipmicmd.get_sensor_reading(self._inlet_name)
|
119
122
|
|
120
123
|
def process_event(self, event, ipmicmd, seldata):
|
@@ -2062,13 +2062,18 @@ class XCCClient(IMMClient):
|
|
2062
2062
|
complete = False
|
2063
2063
|
phase = "apply"
|
2064
2064
|
statetype = 'TaskState'
|
2065
|
-
|
2065
|
+
# sometimes we get an empty pgress when transitioning from the apply phase to
|
2066
|
+
# the validating phase; add a retry here so we don't exit the loop in this case
|
2067
|
+
retry = 3
|
2068
|
+
while not complete and retry > 0:
|
2066
2069
|
pgress, status = self.grab_redfish_response_with_status(
|
2067
2070
|
monitorurl)
|
2068
2071
|
if status < 200 or status >= 300:
|
2069
2072
|
raise Exception(pgress)
|
2070
2073
|
if not pgress:
|
2071
|
-
|
2074
|
+
retry -= 1
|
2075
|
+
ipmisession.Session.pause(3)
|
2076
|
+
continue
|
2072
2077
|
for msg in pgress.get('Messages', []):
|
2073
2078
|
if 'Verify failed' in msg.get('Message', ''):
|
2074
2079
|
raise Exception(msg['Message'])
|
@@ -1153,6 +1153,8 @@ class Command(object):
|
|
1153
1153
|
chassisurl = chassis['@odata.id']
|
1154
1154
|
chassisinfo = self._do_web_request(chassisurl)
|
1155
1155
|
envurl = chassisinfo.get('EnvironmentMetrics', {}).get('@odata.id', '')
|
1156
|
+
if not envurl:
|
1157
|
+
return {}
|
1156
1158
|
envmetric = self._do_web_request(envurl, cache=1)
|
1157
1159
|
retval = {
|
1158
1160
|
'watts': envmetric.get('PowerWatts', {}).get('Reading', None),
|
@@ -1180,16 +1182,24 @@ class Command(object):
|
|
1180
1182
|
|
1181
1183
|
def get_system_power_watts(self):
|
1182
1184
|
totalwatts = 0
|
1185
|
+
gotpower = False
|
1183
1186
|
for chassis in self.sysinfo.get('Links', {}).get('Chassis', []):
|
1184
1187
|
envinfo = self._get_chassis_env(chassis)
|
1185
|
-
|
1188
|
+
currwatts = envinfo.get('watts', None)
|
1189
|
+
if currwatts is not None:
|
1190
|
+
gotpower = True
|
1191
|
+
totalwatts += envinfo['watts']
|
1192
|
+
if not gotpower:
|
1193
|
+
raise exc.UnsupportedFunctionality("System does not provide Power under redfish EnvironmentMetrics")
|
1186
1194
|
return totalwatts
|
1187
1195
|
|
1188
1196
|
def get_inlet_temperature(self):
|
1189
1197
|
inlets = []
|
1190
1198
|
for chassis in self.sysinfo.get('Links', {}).get('Chassis', []):
|
1191
1199
|
envinfo = self._get_chassis_env(chassis)
|
1192
|
-
|
1200
|
+
currinlet = envinfo.get('inlet', None)
|
1201
|
+
if currinlet:
|
1202
|
+
inlets.append(currinlet)
|
1193
1203
|
if inlets:
|
1194
1204
|
val = sum(inlets) / len(inlets)
|
1195
1205
|
unavail = False
|
@@ -820,10 +820,15 @@ class OEMHandler(object):
|
|
820
820
|
complete = False
|
821
821
|
phase = "apply"
|
822
822
|
statetype = 'TaskState'
|
823
|
-
|
823
|
+
# sometimes we get an empty pgress when transitioning from the apply phase to
|
824
|
+
# the validating phase; add a retry here so we don't exit the loop in this case
|
825
|
+
retry = 3
|
826
|
+
while not complete and retry > 0:
|
824
827
|
pgress = self._do_web_request(monitorurl, cache=False)
|
825
828
|
if not pgress:
|
826
|
-
|
829
|
+
retry -= 1
|
830
|
+
time.sleep(3)
|
831
|
+
continue
|
827
832
|
for msg in pgress.get('Messages', []):
|
828
833
|
if 'Verify failed' in msg.get('Message', ''):
|
829
834
|
raise Exception(msg['Message'])
|
@@ -23,7 +23,7 @@ def get_handler(sysinfo, sysurl, webclient, cache, cmd):
|
|
23
23
|
bmcinfo = cmd.bmcinfo
|
24
24
|
if 'Ami' in bmcinfo.get('Oem', {}):
|
25
25
|
return tsma.TsmHandler(sysinfo, sysurl, webclient, cache)
|
26
|
-
if 'FrontPanelUSB' in leninf or sysinfo.get('SKU', '').startswith('7X58'):
|
26
|
+
if 'FrontPanelUSB' in leninf or 'USBManagementPortAssignment' in leninf or sysinfo.get('SKU', '').startswith('7X58'):
|
27
27
|
return xcc.OEMHandler(sysinfo, sysurl, webclient, cache,
|
28
28
|
gpool=cmd._gpool)
|
29
29
|
else:
|
@@ -1278,10 +1278,15 @@ class OEMHandler(generic.OEMHandler):
|
|
1278
1278
|
complete = False
|
1279
1279
|
phase = "apply"
|
1280
1280
|
statetype = 'TaskState'
|
1281
|
-
|
1281
|
+
# sometimes we get an empty pgress when transitioning from the apply phase to
|
1282
|
+
# the validating phase; add a retry here so we don't exit the loop in this case
|
1283
|
+
retry = 3
|
1284
|
+
while not complete and retry > 0:
|
1282
1285
|
pgress = self._do_web_request(monitorurl, cache=False)
|
1283
1286
|
if not pgress:
|
1284
|
-
|
1287
|
+
retry -= 1
|
1288
|
+
time.sleep(3)
|
1289
|
+
continue
|
1285
1290
|
for msg in pgress.get('Messages', []):
|
1286
1291
|
if 'Verify failed' in msg.get('Message', ''):
|
1287
1292
|
raise Exception(msg['Message'])
|
@@ -0,0 +1 @@
|
|
1
|
+
{"git_version": "da7796b", "is_release": true}
|
@@ -1 +0,0 @@
|
|
1
|
-
{"git_version": "3f38530", "is_release": true}
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|