pyghmi 1.5.59__tar.gz → 1.5.60__tar.gz

Sign up to get free protection for your applications and to get access to all the features.
Files changed (105) hide show
  1. {pyghmi-1.5.59 → pyghmi-1.5.60}/ChangeLog +7 -0
  2. {pyghmi-1.5.59 → pyghmi-1.5.60}/PKG-INFO +1 -1
  3. {pyghmi-1.5.59 → pyghmi-1.5.60}/pyghmi/ipmi/oem/lenovo/handler.py +1 -1
  4. {pyghmi-1.5.59 → pyghmi-1.5.60}/pyghmi/ipmi/oem/lenovo/imm.py +13 -2
  5. {pyghmi-1.5.59 → pyghmi-1.5.60}/pyghmi/ipmi/oem/lenovo/nextscale.py +7 -2
  6. {pyghmi-1.5.59 → pyghmi-1.5.60}/pyghmi/redfish/oem/lenovo/xcc.py +14 -3
  7. {pyghmi-1.5.59 → pyghmi-1.5.60}/pyghmi.egg-info/PKG-INFO +1 -1
  8. pyghmi-1.5.60/pyghmi.egg-info/pbr.json +1 -0
  9. pyghmi-1.5.59/pyghmi.egg-info/pbr.json +0 -1
  10. {pyghmi-1.5.59 → pyghmi-1.5.60}/.coveragerc +0 -0
  11. {pyghmi-1.5.59 → pyghmi-1.5.60}/.stestr.conf +0 -0
  12. {pyghmi-1.5.59 → pyghmi-1.5.60}/AUTHORS +0 -0
  13. {pyghmi-1.5.59 → pyghmi-1.5.60}/CONTRIBUTING.rst +0 -0
  14. {pyghmi-1.5.59 → pyghmi-1.5.60}/LICENSE +0 -0
  15. {pyghmi-1.5.59 → pyghmi-1.5.60}/MANIFEST.in +0 -0
  16. {pyghmi-1.5.59 → pyghmi-1.5.60}/README +0 -0
  17. {pyghmi-1.5.59 → pyghmi-1.5.60}/README.md +0 -0
  18. {pyghmi-1.5.59 → pyghmi-1.5.60}/builddeb +0 -0
  19. {pyghmi-1.5.59 → pyghmi-1.5.60}/buildrpm +0 -0
  20. {pyghmi-1.5.59 → pyghmi-1.5.60}/doc/requirements.txt +0 -0
  21. {pyghmi-1.5.59 → pyghmi-1.5.60}/doc/source/conf.py +0 -0
  22. {pyghmi-1.5.59 → pyghmi-1.5.60}/doc/source/contributor/index.rst +0 -0
  23. {pyghmi-1.5.59 → pyghmi-1.5.60}/doc/source/index.rst +0 -0
  24. {pyghmi-1.5.59 → pyghmi-1.5.60}/doc/source/install/index.rst +0 -0
  25. {pyghmi-1.5.59 → pyghmi-1.5.60}/doc/source/reference/index.rst +0 -0
  26. {pyghmi-1.5.59 → pyghmi-1.5.60}/makesetup +0 -0
  27. {pyghmi-1.5.59 → pyghmi-1.5.60}/playbooks/legacy/tempest-devstack-ironic-pxe_ipmitool-pyghmi-src/post.yaml +0 -0
  28. {pyghmi-1.5.59 → pyghmi-1.5.60}/playbooks/legacy/tempest-devstack-ironic-pxe_ipmitool-pyghmi-src/run.yaml +0 -0
  29. {pyghmi-1.5.59 → pyghmi-1.5.60}/py27-constraints.txt +0 -0
  30. {pyghmi-1.5.59 → pyghmi-1.5.60}/pyghmi/__init__.py +0 -0
  31. {pyghmi-1.5.59 → pyghmi-1.5.60}/pyghmi/cmd/__init__.py +0 -0
  32. {pyghmi-1.5.59 → pyghmi-1.5.60}/pyghmi/cmd/fakebmc.py +0 -0
  33. {pyghmi-1.5.59 → pyghmi-1.5.60}/pyghmi/cmd/pyghmicons.py +0 -0
  34. {pyghmi-1.5.59 → pyghmi-1.5.60}/pyghmi/cmd/pyghmiutil.py +0 -0
  35. {pyghmi-1.5.59 → pyghmi-1.5.60}/pyghmi/cmd/virshbmc.py +0 -0
  36. {pyghmi-1.5.59 → pyghmi-1.5.60}/pyghmi/constants.py +0 -0
  37. {pyghmi-1.5.59 → pyghmi-1.5.60}/pyghmi/exceptions.py +0 -0
  38. {pyghmi-1.5.59 → pyghmi-1.5.60}/pyghmi/ipmi/__init__.py +0 -0
  39. {pyghmi-1.5.59 → pyghmi-1.5.60}/pyghmi/ipmi/bmc.py +0 -0
  40. {pyghmi-1.5.59 → pyghmi-1.5.60}/pyghmi/ipmi/command.py +0 -0
  41. {pyghmi-1.5.59 → pyghmi-1.5.60}/pyghmi/ipmi/console.py +0 -0
  42. {pyghmi-1.5.59 → pyghmi-1.5.60}/pyghmi/ipmi/events.py +0 -0
  43. {pyghmi-1.5.59 → pyghmi-1.5.60}/pyghmi/ipmi/fru.py +0 -0
  44. {pyghmi-1.5.59 → pyghmi-1.5.60}/pyghmi/ipmi/oem/__init__.py +0 -0
  45. {pyghmi-1.5.59 → pyghmi-1.5.60}/pyghmi/ipmi/oem/generic.py +0 -0
  46. {pyghmi-1.5.59 → pyghmi-1.5.60}/pyghmi/ipmi/oem/lenovo/__init__.py +0 -0
  47. {pyghmi-1.5.59 → pyghmi-1.5.60}/pyghmi/ipmi/oem/lenovo/config.py +0 -0
  48. {pyghmi-1.5.59 → pyghmi-1.5.60}/pyghmi/ipmi/oem/lenovo/cpu.py +0 -0
  49. {pyghmi-1.5.59 → pyghmi-1.5.60}/pyghmi/ipmi/oem/lenovo/dimm.py +0 -0
  50. {pyghmi-1.5.59 → pyghmi-1.5.60}/pyghmi/ipmi/oem/lenovo/drive.py +0 -0
  51. {pyghmi-1.5.59 → pyghmi-1.5.60}/pyghmi/ipmi/oem/lenovo/energy.py +0 -0
  52. {pyghmi-1.5.59 → pyghmi-1.5.60}/pyghmi/ipmi/oem/lenovo/firmware.py +0 -0
  53. {pyghmi-1.5.59 → pyghmi-1.5.60}/pyghmi/ipmi/oem/lenovo/inventory.py +0 -0
  54. {pyghmi-1.5.59 → pyghmi-1.5.60}/pyghmi/ipmi/oem/lenovo/pci.py +0 -0
  55. {pyghmi-1.5.59 → pyghmi-1.5.60}/pyghmi/ipmi/oem/lenovo/psu.py +0 -0
  56. {pyghmi-1.5.59 → pyghmi-1.5.60}/pyghmi/ipmi/oem/lenovo/raid_controller.py +0 -0
  57. {pyghmi-1.5.59 → pyghmi-1.5.60}/pyghmi/ipmi/oem/lenovo/raid_drive.py +0 -0
  58. {pyghmi-1.5.59 → pyghmi-1.5.60}/pyghmi/ipmi/oem/lookup.py +0 -0
  59. {pyghmi-1.5.59 → pyghmi-1.5.60}/pyghmi/ipmi/private/__init__.py +0 -0
  60. {pyghmi-1.5.59 → pyghmi-1.5.60}/pyghmi/ipmi/private/constants.py +0 -0
  61. {pyghmi-1.5.59 → pyghmi-1.5.60}/pyghmi/ipmi/private/localsession.py +0 -0
  62. {pyghmi-1.5.59 → pyghmi-1.5.60}/pyghmi/ipmi/private/serversession.py +0 -0
  63. {pyghmi-1.5.59 → pyghmi-1.5.60}/pyghmi/ipmi/private/session.py +0 -0
  64. {pyghmi-1.5.59 → pyghmi-1.5.60}/pyghmi/ipmi/private/simplesession.py +0 -0
  65. {pyghmi-1.5.59 → pyghmi-1.5.60}/pyghmi/ipmi/private/spd.py +0 -0
  66. {pyghmi-1.5.59 → pyghmi-1.5.60}/pyghmi/ipmi/private/util.py +0 -0
  67. {pyghmi-1.5.59 → pyghmi-1.5.60}/pyghmi/ipmi/sdr.py +0 -0
  68. {pyghmi-1.5.59 → pyghmi-1.5.60}/pyghmi/media.py +0 -0
  69. {pyghmi-1.5.59 → pyghmi-1.5.60}/pyghmi/redfish/__init__.py +0 -0
  70. {pyghmi-1.5.59 → pyghmi-1.5.60}/pyghmi/redfish/command.py +0 -0
  71. {pyghmi-1.5.59 → pyghmi-1.5.60}/pyghmi/redfish/oem/__init__.py +0 -0
  72. {pyghmi-1.5.59 → pyghmi-1.5.60}/pyghmi/redfish/oem/dell/__init__.py +0 -0
  73. {pyghmi-1.5.59 → pyghmi-1.5.60}/pyghmi/redfish/oem/dell/idrac.py +0 -0
  74. {pyghmi-1.5.59 → pyghmi-1.5.60}/pyghmi/redfish/oem/dell/main.py +0 -0
  75. {pyghmi-1.5.59 → pyghmi-1.5.60}/pyghmi/redfish/oem/generic.py +0 -0
  76. {pyghmi-1.5.59 → pyghmi-1.5.60}/pyghmi/redfish/oem/lenovo/__init__.py +0 -0
  77. {pyghmi-1.5.59 → pyghmi-1.5.60}/pyghmi/redfish/oem/lenovo/main.py +0 -0
  78. {pyghmi-1.5.59 → pyghmi-1.5.60}/pyghmi/redfish/oem/lenovo/tsma.py +0 -0
  79. {pyghmi-1.5.59 → pyghmi-1.5.60}/pyghmi/redfish/oem/lookup.py +0 -0
  80. {pyghmi-1.5.59 → pyghmi-1.5.60}/pyghmi/storage.py +0 -0
  81. {pyghmi-1.5.59 → pyghmi-1.5.60}/pyghmi/tests/__init__.py +0 -0
  82. {pyghmi-1.5.59 → pyghmi-1.5.60}/pyghmi/tests/unit/__init__.py +0 -0
  83. {pyghmi-1.5.59 → pyghmi-1.5.60}/pyghmi/tests/unit/base.py +0 -0
  84. {pyghmi-1.5.59 → pyghmi-1.5.60}/pyghmi/tests/unit/ipmi/__init__.py +0 -0
  85. {pyghmi-1.5.59 → pyghmi-1.5.60}/pyghmi/tests/unit/ipmi/test_sdr.py +0 -0
  86. {pyghmi-1.5.59 → pyghmi-1.5.60}/pyghmi/util/__init__.py +0 -0
  87. {pyghmi-1.5.59 → pyghmi-1.5.60}/pyghmi/util/parse.py +0 -0
  88. {pyghmi-1.5.59 → pyghmi-1.5.60}/pyghmi/util/webclient.py +0 -0
  89. {pyghmi-1.5.59 → pyghmi-1.5.60}/pyghmi/version.py +0 -0
  90. {pyghmi-1.5.59 → pyghmi-1.5.60}/pyghmi.egg-info/SOURCES.txt +0 -0
  91. {pyghmi-1.5.59 → pyghmi-1.5.60}/pyghmi.egg-info/dependency_links.txt +0 -0
  92. {pyghmi-1.5.59 → pyghmi-1.5.60}/pyghmi.egg-info/entry_points.txt +0 -0
  93. {pyghmi-1.5.59 → pyghmi-1.5.60}/pyghmi.egg-info/not-zip-safe +0 -0
  94. {pyghmi-1.5.59 → pyghmi-1.5.60}/pyghmi.egg-info/requires.txt +0 -0
  95. {pyghmi-1.5.59 → pyghmi-1.5.60}/pyghmi.egg-info/top_level.txt +0 -0
  96. {pyghmi-1.5.59 → pyghmi-1.5.60}/python-pyghmi.spec +0 -0
  97. {pyghmi-1.5.59 → pyghmi-1.5.60}/python-pyghmi.spec.tmpl +0 -0
  98. {pyghmi-1.5.59 → pyghmi-1.5.60}/requirements.txt +0 -0
  99. {pyghmi-1.5.59 → pyghmi-1.5.60}/setup.cfg +0 -0
  100. {pyghmi-1.5.59 → pyghmi-1.5.60}/setup.py +0 -0
  101. {pyghmi-1.5.59 → pyghmi-1.5.60}/setup.py.tmpl +0 -0
  102. {pyghmi-1.5.59 → pyghmi-1.5.60}/test-requirements.txt +0 -0
  103. {pyghmi-1.5.59 → pyghmi-1.5.60}/tox.ini +0 -0
  104. {pyghmi-1.5.59 → pyghmi-1.5.60}/wheezy.patch +0 -0
  105. {pyghmi-1.5.59 → pyghmi-1.5.60}/zuul.d/project.yaml +0 -0
@@ -1,6 +1,13 @@
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
+
4
11
  1.5.59
5
12
  ------
6
13
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 1.1
2
2
  Name: pyghmi
3
- Version: 1.5.59
3
+ Version: 1.5.60
4
4
  Summary: Python General Hardware Management Initiative (IPMI and others)
5
5
  Home-page: http://github.com/openstack/pyghmi/
6
6
  Author: Jarrod Johnson
@@ -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: # Whitley
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: # Purley
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
- powercfg = powercfg[1:]
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:
@@ -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
- if not props: # newer firmwarerequires raidlevel too
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: # Whitley
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: # Purley
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(
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 1.1
2
2
  Name: pyghmi
3
- Version: 1.5.59
3
+ Version: 1.5.60
4
4
  Summary: Python General Hardware Management Initiative (IPMI and others)
5
5
  Home-page: http://github.com/openstack/pyghmi/
6
6
  Author: Jarrod Johnson
@@ -0,0 +1 @@
1
+ {"git_version": "bcfbd8f", "is_release": true}
@@ -1 +0,0 @@
1
- {"git_version": "bb46b94", "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