pyghmi 1.5.58__tar.gz → 1.5.60__tar.gz
Sign up to get free protection for your applications and to get access to all the features.
- {pyghmi-1.5.58 → pyghmi-1.5.60}/ChangeLog +12 -0
- {pyghmi-1.5.58 → pyghmi-1.5.60}/PKG-INFO +1 -1
- {pyghmi-1.5.58 → pyghmi-1.5.60}/pyghmi/ipmi/oem/lenovo/handler.py +1 -1
- {pyghmi-1.5.58 → pyghmi-1.5.60}/pyghmi/ipmi/oem/lenovo/imm.py +13 -2
- {pyghmi-1.5.58 → pyghmi-1.5.60}/pyghmi/ipmi/oem/lenovo/nextscale.py +7 -2
- {pyghmi-1.5.58 → pyghmi-1.5.60}/pyghmi/redfish/oem/generic.py +2 -2
- {pyghmi-1.5.58 → pyghmi-1.5.60}/pyghmi/redfish/oem/lenovo/xcc.py +14 -3
- {pyghmi-1.5.58 → pyghmi-1.5.60}/pyghmi.egg-info/PKG-INFO +1 -1
- pyghmi-1.5.60/pyghmi.egg-info/pbr.json +1 -0
- pyghmi-1.5.58/pyghmi.egg-info/pbr.json +0 -1
- {pyghmi-1.5.58 → pyghmi-1.5.60}/.coveragerc +0 -0
- {pyghmi-1.5.58 → pyghmi-1.5.60}/.stestr.conf +0 -0
- {pyghmi-1.5.58 → pyghmi-1.5.60}/AUTHORS +0 -0
- {pyghmi-1.5.58 → pyghmi-1.5.60}/CONTRIBUTING.rst +0 -0
- {pyghmi-1.5.58 → pyghmi-1.5.60}/LICENSE +0 -0
- {pyghmi-1.5.58 → pyghmi-1.5.60}/MANIFEST.in +0 -0
- {pyghmi-1.5.58 → pyghmi-1.5.60}/README +0 -0
- {pyghmi-1.5.58 → pyghmi-1.5.60}/README.md +0 -0
- {pyghmi-1.5.58 → pyghmi-1.5.60}/builddeb +0 -0
- {pyghmi-1.5.58 → pyghmi-1.5.60}/buildrpm +0 -0
- {pyghmi-1.5.58 → pyghmi-1.5.60}/doc/requirements.txt +0 -0
- {pyghmi-1.5.58 → pyghmi-1.5.60}/doc/source/conf.py +0 -0
- {pyghmi-1.5.58 → pyghmi-1.5.60}/doc/source/contributor/index.rst +0 -0
- {pyghmi-1.5.58 → pyghmi-1.5.60}/doc/source/index.rst +0 -0
- {pyghmi-1.5.58 → pyghmi-1.5.60}/doc/source/install/index.rst +0 -0
- {pyghmi-1.5.58 → pyghmi-1.5.60}/doc/source/reference/index.rst +0 -0
- {pyghmi-1.5.58 → pyghmi-1.5.60}/makesetup +0 -0
- {pyghmi-1.5.58 → pyghmi-1.5.60}/playbooks/legacy/tempest-devstack-ironic-pxe_ipmitool-pyghmi-src/post.yaml +0 -0
- {pyghmi-1.5.58 → pyghmi-1.5.60}/playbooks/legacy/tempest-devstack-ironic-pxe_ipmitool-pyghmi-src/run.yaml +0 -0
- {pyghmi-1.5.58 → pyghmi-1.5.60}/py27-constraints.txt +0 -0
- {pyghmi-1.5.58 → pyghmi-1.5.60}/pyghmi/__init__.py +0 -0
- {pyghmi-1.5.58 → pyghmi-1.5.60}/pyghmi/cmd/__init__.py +0 -0
- {pyghmi-1.5.58 → pyghmi-1.5.60}/pyghmi/cmd/fakebmc.py +0 -0
- {pyghmi-1.5.58 → pyghmi-1.5.60}/pyghmi/cmd/pyghmicons.py +0 -0
- {pyghmi-1.5.58 → pyghmi-1.5.60}/pyghmi/cmd/pyghmiutil.py +0 -0
- {pyghmi-1.5.58 → pyghmi-1.5.60}/pyghmi/cmd/virshbmc.py +0 -0
- {pyghmi-1.5.58 → pyghmi-1.5.60}/pyghmi/constants.py +0 -0
- {pyghmi-1.5.58 → pyghmi-1.5.60}/pyghmi/exceptions.py +0 -0
- {pyghmi-1.5.58 → pyghmi-1.5.60}/pyghmi/ipmi/__init__.py +0 -0
- {pyghmi-1.5.58 → pyghmi-1.5.60}/pyghmi/ipmi/bmc.py +0 -0
- {pyghmi-1.5.58 → pyghmi-1.5.60}/pyghmi/ipmi/command.py +0 -0
- {pyghmi-1.5.58 → pyghmi-1.5.60}/pyghmi/ipmi/console.py +0 -0
- {pyghmi-1.5.58 → pyghmi-1.5.60}/pyghmi/ipmi/events.py +0 -0
- {pyghmi-1.5.58 → pyghmi-1.5.60}/pyghmi/ipmi/fru.py +0 -0
- {pyghmi-1.5.58 → pyghmi-1.5.60}/pyghmi/ipmi/oem/__init__.py +0 -0
- {pyghmi-1.5.58 → pyghmi-1.5.60}/pyghmi/ipmi/oem/generic.py +0 -0
- {pyghmi-1.5.58 → pyghmi-1.5.60}/pyghmi/ipmi/oem/lenovo/__init__.py +0 -0
- {pyghmi-1.5.58 → pyghmi-1.5.60}/pyghmi/ipmi/oem/lenovo/config.py +0 -0
- {pyghmi-1.5.58 → pyghmi-1.5.60}/pyghmi/ipmi/oem/lenovo/cpu.py +0 -0
- {pyghmi-1.5.58 → pyghmi-1.5.60}/pyghmi/ipmi/oem/lenovo/dimm.py +0 -0
- {pyghmi-1.5.58 → pyghmi-1.5.60}/pyghmi/ipmi/oem/lenovo/drive.py +0 -0
- {pyghmi-1.5.58 → pyghmi-1.5.60}/pyghmi/ipmi/oem/lenovo/energy.py +0 -0
- {pyghmi-1.5.58 → pyghmi-1.5.60}/pyghmi/ipmi/oem/lenovo/firmware.py +0 -0
- {pyghmi-1.5.58 → pyghmi-1.5.60}/pyghmi/ipmi/oem/lenovo/inventory.py +0 -0
- {pyghmi-1.5.58 → pyghmi-1.5.60}/pyghmi/ipmi/oem/lenovo/pci.py +0 -0
- {pyghmi-1.5.58 → pyghmi-1.5.60}/pyghmi/ipmi/oem/lenovo/psu.py +0 -0
- {pyghmi-1.5.58 → pyghmi-1.5.60}/pyghmi/ipmi/oem/lenovo/raid_controller.py +0 -0
- {pyghmi-1.5.58 → pyghmi-1.5.60}/pyghmi/ipmi/oem/lenovo/raid_drive.py +0 -0
- {pyghmi-1.5.58 → pyghmi-1.5.60}/pyghmi/ipmi/oem/lookup.py +0 -0
- {pyghmi-1.5.58 → pyghmi-1.5.60}/pyghmi/ipmi/private/__init__.py +0 -0
- {pyghmi-1.5.58 → pyghmi-1.5.60}/pyghmi/ipmi/private/constants.py +0 -0
- {pyghmi-1.5.58 → pyghmi-1.5.60}/pyghmi/ipmi/private/localsession.py +0 -0
- {pyghmi-1.5.58 → pyghmi-1.5.60}/pyghmi/ipmi/private/serversession.py +0 -0
- {pyghmi-1.5.58 → pyghmi-1.5.60}/pyghmi/ipmi/private/session.py +0 -0
- {pyghmi-1.5.58 → pyghmi-1.5.60}/pyghmi/ipmi/private/simplesession.py +0 -0
- {pyghmi-1.5.58 → pyghmi-1.5.60}/pyghmi/ipmi/private/spd.py +0 -0
- {pyghmi-1.5.58 → pyghmi-1.5.60}/pyghmi/ipmi/private/util.py +0 -0
- {pyghmi-1.5.58 → pyghmi-1.5.60}/pyghmi/ipmi/sdr.py +0 -0
- {pyghmi-1.5.58 → pyghmi-1.5.60}/pyghmi/media.py +0 -0
- {pyghmi-1.5.58 → pyghmi-1.5.60}/pyghmi/redfish/__init__.py +0 -0
- {pyghmi-1.5.58 → pyghmi-1.5.60}/pyghmi/redfish/command.py +0 -0
- {pyghmi-1.5.58 → pyghmi-1.5.60}/pyghmi/redfish/oem/__init__.py +0 -0
- {pyghmi-1.5.58 → pyghmi-1.5.60}/pyghmi/redfish/oem/dell/__init__.py +0 -0
- {pyghmi-1.5.58 → pyghmi-1.5.60}/pyghmi/redfish/oem/dell/idrac.py +0 -0
- {pyghmi-1.5.58 → pyghmi-1.5.60}/pyghmi/redfish/oem/dell/main.py +0 -0
- {pyghmi-1.5.58 → pyghmi-1.5.60}/pyghmi/redfish/oem/lenovo/__init__.py +0 -0
- {pyghmi-1.5.58 → pyghmi-1.5.60}/pyghmi/redfish/oem/lenovo/main.py +0 -0
- {pyghmi-1.5.58 → pyghmi-1.5.60}/pyghmi/redfish/oem/lenovo/tsma.py +0 -0
- {pyghmi-1.5.58 → pyghmi-1.5.60}/pyghmi/redfish/oem/lookup.py +0 -0
- {pyghmi-1.5.58 → pyghmi-1.5.60}/pyghmi/storage.py +0 -0
- {pyghmi-1.5.58 → pyghmi-1.5.60}/pyghmi/tests/__init__.py +0 -0
- {pyghmi-1.5.58 → pyghmi-1.5.60}/pyghmi/tests/unit/__init__.py +0 -0
- {pyghmi-1.5.58 → pyghmi-1.5.60}/pyghmi/tests/unit/base.py +0 -0
- {pyghmi-1.5.58 → pyghmi-1.5.60}/pyghmi/tests/unit/ipmi/__init__.py +0 -0
- {pyghmi-1.5.58 → pyghmi-1.5.60}/pyghmi/tests/unit/ipmi/test_sdr.py +0 -0
- {pyghmi-1.5.58 → pyghmi-1.5.60}/pyghmi/util/__init__.py +0 -0
- {pyghmi-1.5.58 → pyghmi-1.5.60}/pyghmi/util/parse.py +0 -0
- {pyghmi-1.5.58 → pyghmi-1.5.60}/pyghmi/util/webclient.py +0 -0
- {pyghmi-1.5.58 → pyghmi-1.5.60}/pyghmi/version.py +0 -0
- {pyghmi-1.5.58 → pyghmi-1.5.60}/pyghmi.egg-info/SOURCES.txt +0 -0
- {pyghmi-1.5.58 → pyghmi-1.5.60}/pyghmi.egg-info/dependency_links.txt +0 -0
- {pyghmi-1.5.58 → pyghmi-1.5.60}/pyghmi.egg-info/entry_points.txt +0 -0
- {pyghmi-1.5.58 → pyghmi-1.5.60}/pyghmi.egg-info/not-zip-safe +0 -0
- {pyghmi-1.5.58 → pyghmi-1.5.60}/pyghmi.egg-info/requires.txt +0 -0
- {pyghmi-1.5.58 → pyghmi-1.5.60}/pyghmi.egg-info/top_level.txt +0 -0
- {pyghmi-1.5.58 → pyghmi-1.5.60}/python-pyghmi.spec +0 -0
- {pyghmi-1.5.58 → pyghmi-1.5.60}/python-pyghmi.spec.tmpl +0 -0
- {pyghmi-1.5.58 → pyghmi-1.5.60}/requirements.txt +0 -0
- {pyghmi-1.5.58 → pyghmi-1.5.60}/setup.cfg +0 -0
- {pyghmi-1.5.58 → pyghmi-1.5.60}/setup.py +0 -0
- {pyghmi-1.5.58 → pyghmi-1.5.60}/setup.py.tmpl +0 -0
- {pyghmi-1.5.58 → pyghmi-1.5.60}/test-requirements.txt +0 -0
- {pyghmi-1.5.58 → pyghmi-1.5.60}/tox.ini +0 -0
- {pyghmi-1.5.58 → pyghmi-1.5.60}/wheezy.patch +0 -0
- {pyghmi-1.5.58 → pyghmi-1.5.60}/zuul.d/project.yaml +0 -0
@@ -1,6 +1,18 @@
|
|
1
1
|
CHANGES
|
2
2
|
=======
|
3
3
|
|
4
|
+
1.5.60
|
5
|
+
------
|
6
|
+
|
7
|
+
* Avoid doing extra AddNewVolWithNaAsync calls
|
8
|
+
* Update storage code to handle 2023 XCC FW
|
9
|
+
* Fix for newer SMMv2 firmware
|
10
|
+
|
11
|
+
1.5.59
|
12
|
+
------
|
13
|
+
|
14
|
+
* Specify wildcard etag during set\_bootdevice
|
15
|
+
|
4
16
|
1.5.58
|
5
17
|
------
|
6
18
|
|
@@ -1202,7 +1202,7 @@ class OEMHandler(generic.OEMHandler):
|
|
1202
1202
|
if self.has_xcc:
|
1203
1203
|
return self.immhandler.get_bmc_configuration()
|
1204
1204
|
if self.is_fpc:
|
1205
|
-
return self.smmhandler.get_bmc_configuration()
|
1205
|
+
return self.smmhandler.get_bmc_configuration(self._fpc_variant)
|
1206
1206
|
if self.has_tsma:
|
1207
1207
|
return self.tsmahandler.get_bmc_configuration()
|
1208
1208
|
return super(OEMHandler, self).get_bmc_configuration()
|
@@ -1489,12 +1489,23 @@ class XCCClient(IMMClient):
|
|
1489
1489
|
def _create_array(self, pool):
|
1490
1490
|
params = self._parse_array_spec(pool)
|
1491
1491
|
cid = params['controller'].split(',')[0]
|
1492
|
+
cslotno = params['controller'].split(',')[1]
|
1492
1493
|
url = '/api/function/raid_conf?params=raidlink_GetDefaultVolProp'
|
1493
1494
|
args = (url, cid, 0, params['drives'])
|
1494
1495
|
props = self.wc.grab_json_response(','.join([str(x) for x in args]))
|
1496
|
+
usesctrlslot = False
|
1495
1497
|
if not props: # newer firmware requires raidlevel too
|
1496
1498
|
args = (url, cid, params['raidlevel'], 0, params['drives'])
|
1497
1499
|
props = self.wc.grab_json_response(','.join([str(x) for x in args]))
|
1500
|
+
elif 'return' in props and props['return'] == 22:
|
1501
|
+
# Jan 2023 XCC FW - without controller slot number
|
1502
|
+
args = (url, cid, params['raidlevel'], 0, params['drives'])
|
1503
|
+
props = self.wc.grab_json_response(','.join([str(x) for x in args]))
|
1504
|
+
if 'return' in props and props['return'] == 22:
|
1505
|
+
usesctrlslot = True
|
1506
|
+
# Jan 2023 XCC FW - with controller slot number
|
1507
|
+
args = (url, cid, params['raidlevel'], 0, params['drives'], cslotno)
|
1508
|
+
props = self.wc.grab_json_response(','.join([str(x) for x in args]))
|
1498
1509
|
props = props['items'][0]
|
1499
1510
|
volumes = pool.volumes
|
1500
1511
|
remainingcap = params['capacity']
|
@@ -1565,14 +1576,14 @@ class XCCClient(IMMClient):
|
|
1565
1576
|
parms = {'raidlink_AddNewVolWithNaAsync': arglist}
|
1566
1577
|
rsp = self.wc.grab_json_response(url, parms)
|
1567
1578
|
if rsp['return'] == 14: # newer firmware
|
1568
|
-
if 'supported_cpwb' in props: #
|
1579
|
+
if 'supported_cpwb' in props and not usesctrlslot: # no ctrl_type
|
1569
1580
|
arglist = '{0},{1},{2},{3},{4},{5},{6},'.format(
|
1570
1581
|
cnum, params['raidlevel'], params['spans'],
|
1571
1582
|
params['perspan'], 0, params['drives'], params['hotspares'])
|
1572
1583
|
arglist += ''.join(vols)
|
1573
1584
|
parms = {'raidlink_AddNewVolWithNaAsync': arglist}
|
1574
1585
|
rsp = self.wc.grab_json_response(url, parms)
|
1575
|
-
else: #
|
1586
|
+
else: # with ctrl_type
|
1576
1587
|
if cid[2] == 2:
|
1577
1588
|
cnum = cid[1]
|
1578
1589
|
arglist = '{0},{1},{2},{3},{4},{5},'.format(
|
@@ -415,7 +415,7 @@ class SMMClient(object):
|
|
415
415
|
5: 'Boosted',
|
416
416
|
}
|
417
417
|
|
418
|
-
def get_bmc_configuration(self):
|
418
|
+
def get_bmc_configuration(self, variant):
|
419
419
|
settings = {}
|
420
420
|
wc = self.wc
|
421
421
|
wc.request(
|
@@ -453,7 +453,10 @@ class SMMClient(object):
|
|
453
453
|
powercfg = self.ipmicmd.xraw_command(0x32, 0xa2)
|
454
454
|
powercfg = bytearray(powercfg['data'])
|
455
455
|
if len(powercfg) == 5:
|
456
|
-
|
456
|
+
if variant and variant >> 5:
|
457
|
+
powercfg = powercfg[-2:]
|
458
|
+
else:
|
459
|
+
powercfg = powercfg[1:]
|
457
460
|
val = powercfg[0]
|
458
461
|
if val == 2:
|
459
462
|
val = 'N+N'
|
@@ -700,6 +703,8 @@ class SMMClient(object):
|
|
700
703
|
if None in powercfg:
|
701
704
|
currcfg = self.ipmicmd.xraw_command(0x32, 0xa2)
|
702
705
|
currcfg = bytearray(currcfg['data'])
|
706
|
+
if variant and variant >> 5 and len(currcfg) == 5:
|
707
|
+
currcfg = currcfg[-2:]
|
703
708
|
if powercfg[0] is None:
|
704
709
|
powercfg[0] = currcfg[0]
|
705
710
|
if powercfg[1] is None:
|
@@ -185,9 +185,9 @@ class OEMHandler(object):
|
|
185
185
|
return {'bootdev': reqbootdev}
|
186
186
|
except Exception:
|
187
187
|
del payload['BootSourceOverrideMode']
|
188
|
-
thetag = fishclient.sysinfo.get('@odata.etag', None)
|
188
|
+
#thetag = fishclient.sysinfo.get('@odata.etag', None)
|
189
189
|
fishclient._do_web_request(fishclient.sysurl, payload, method='PATCH',
|
190
|
-
etag=thetag)
|
190
|
+
etag='*') # thetag)
|
191
191
|
return {'bootdev': reqbootdev}
|
192
192
|
|
193
193
|
def _get_cache(self, url):
|
@@ -811,12 +811,23 @@ class OEMHandler(generic.OEMHandler):
|
|
811
811
|
def _create_array(self, pool):
|
812
812
|
params = self._parse_array_spec(pool)
|
813
813
|
cid = params['controller'].split(',')[0]
|
814
|
+
cslotno = params['controller'].split(',')[1]
|
814
815
|
url = '/api/function/raid_conf?params=raidlink_GetDefaultVolProp'
|
815
816
|
args = (url, cid, 0, params['drives'])
|
816
817
|
props = self.wc.grab_json_response(','.join([str(x) for x in args]))
|
817
|
-
|
818
|
+
usesctrlslot = False
|
819
|
+
if not props: # newer firmware requires raidlevel too
|
818
820
|
args = (url, cid, params['raidlevel'], 0, params['drives'])
|
819
821
|
props = self.wc.grab_json_response(','.join([str(x) for x in args]))
|
822
|
+
elif 'return' in props and props['return'] == 22:
|
823
|
+
# Jan 2023 XCC FW - without controller slot number
|
824
|
+
args = (url, cid, params['raidlevel'], 0, params['drives'])
|
825
|
+
props = self.wc.grab_json_response(','.join([str(x) for x in args]))
|
826
|
+
if 'return' in props and props['return'] == 22:
|
827
|
+
usesctrlslot = True
|
828
|
+
# Jan 2023 XCC FW - with controller slot number
|
829
|
+
args = (url, cid, params['raidlevel'], 0, params['drives'], cslotno)
|
830
|
+
props = self.wc.grab_json_response(','.join([str(x) for x in args]))
|
820
831
|
props = props['items'][0]
|
821
832
|
volumes = pool.volumes
|
822
833
|
remainingcap = params['capacity']
|
@@ -888,14 +899,14 @@ class OEMHandler(generic.OEMHandler):
|
|
888
899
|
parms = {'raidlink_AddNewVolWithNaAsync': arglist}
|
889
900
|
rsp = self.wc.grab_json_response(url, parms)
|
890
901
|
if rsp['return'] == 14: # newer firmware
|
891
|
-
if 'supported_cpwb' in props: #
|
902
|
+
if 'supported_cpwb' in props and not usesctrlslot: # no ctrl_type
|
892
903
|
arglist = '{0},{1},{2},{3},{4},{5},{6},'.format(
|
893
904
|
cnum, params['raidlevel'], params['spans'],
|
894
905
|
params['perspan'], 0, params['drives'], params['hotspares'])
|
895
906
|
arglist += ''.join(vols)
|
896
907
|
parms = {'raidlink_AddNewVolWithNaAsync': arglist}
|
897
908
|
rsp = self.wc.grab_json_response(url, parms)
|
898
|
-
else: #
|
909
|
+
else: # with ctrl_type
|
899
910
|
if cid[2] == 2:
|
900
911
|
cnum = cid[1]
|
901
912
|
arglist = '{0},{1},{2},{3},{4},{5},'.format(
|
@@ -0,0 +1 @@
|
|
1
|
+
{"git_version": "bcfbd8f", "is_release": true}
|
@@ -1 +0,0 @@
|
|
1
|
-
{"git_version": "14652e8", "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
|
File without changes
|
File without changes
|