pyghmi 1.5.71__tar.gz → 1.5.75__tar.gz

Sign up to get free protection for your applications and to get access to all the features.
Files changed (108) hide show
  1. {pyghmi-1.5.71 → pyghmi-1.5.75}/ChangeLog +41 -0
  2. {pyghmi-1.5.71 → pyghmi-1.5.75}/PKG-INFO +12 -9
  3. {pyghmi-1.5.71 → pyghmi-1.5.75}/builddeb +5 -2
  4. pyghmi-1.5.75/makesetup +14 -0
  5. {pyghmi-1.5.71 → pyghmi-1.5.75}/pyghmi/ipmi/command.py +6 -2
  6. {pyghmi-1.5.71 → pyghmi-1.5.75}/pyghmi/ipmi/oem/generic.py +3 -1
  7. {pyghmi-1.5.71 → pyghmi-1.5.75}/pyghmi/ipmi/oem/lenovo/handler.py +3 -1
  8. {pyghmi-1.5.71 → pyghmi-1.5.75}/pyghmi/ipmi/oem/lenovo/imm.py +9 -0
  9. {pyghmi-1.5.71 → pyghmi-1.5.75}/pyghmi/redfish/command.py +212 -163
  10. {pyghmi-1.5.71 → pyghmi-1.5.75}/pyghmi/redfish/oem/generic.py +325 -117
  11. {pyghmi-1.5.71 → pyghmi-1.5.75}/pyghmi/redfish/oem/lenovo/main.py +24 -4
  12. pyghmi-1.5.75/pyghmi/redfish/oem/lenovo/smm3.py +85 -0
  13. {pyghmi-1.5.71 → pyghmi-1.5.75}/pyghmi/redfish/oem/lenovo/xcc.py +2 -2
  14. pyghmi-1.5.75/pyghmi/redfish/oem/lenovo/xcc3.py +395 -0
  15. {pyghmi-1.5.71 → pyghmi-1.5.75}/pyghmi/util/webclient.py +32 -8
  16. {pyghmi-1.5.71 → pyghmi-1.5.75}/pyghmi.egg-info/PKG-INFO +12 -9
  17. {pyghmi-1.5.71 → pyghmi-1.5.75}/pyghmi.egg-info/SOURCES.txt +2 -0
  18. {pyghmi-1.5.71 → pyghmi-1.5.75}/pyghmi.egg-info/entry_points.txt +0 -1
  19. pyghmi-1.5.75/pyghmi.egg-info/pbr.json +1 -0
  20. pyghmi-1.5.71/makesetup +0 -10
  21. pyghmi-1.5.71/pyghmi.egg-info/pbr.json +0 -1
  22. {pyghmi-1.5.71 → pyghmi-1.5.75}/.coveragerc +0 -0
  23. {pyghmi-1.5.71 → pyghmi-1.5.75}/.stestr.conf +0 -0
  24. {pyghmi-1.5.71 → pyghmi-1.5.75}/AUTHORS +0 -0
  25. {pyghmi-1.5.71 → pyghmi-1.5.75}/CONTRIBUTING.rst +0 -0
  26. {pyghmi-1.5.71 → pyghmi-1.5.75}/LICENSE +0 -0
  27. {pyghmi-1.5.71 → pyghmi-1.5.75}/MANIFEST.in +0 -0
  28. {pyghmi-1.5.71 → pyghmi-1.5.75}/README +0 -0
  29. {pyghmi-1.5.71 → pyghmi-1.5.75}/README.md +0 -0
  30. {pyghmi-1.5.71 → pyghmi-1.5.75}/buildrpm +0 -0
  31. {pyghmi-1.5.71 → pyghmi-1.5.75}/doc/requirements.txt +0 -0
  32. {pyghmi-1.5.71 → pyghmi-1.5.75}/doc/source/conf.py +0 -0
  33. {pyghmi-1.5.71 → pyghmi-1.5.75}/doc/source/contributor/index.rst +0 -0
  34. {pyghmi-1.5.71 → pyghmi-1.5.75}/doc/source/index.rst +0 -0
  35. {pyghmi-1.5.71 → pyghmi-1.5.75}/doc/source/install/index.rst +0 -0
  36. {pyghmi-1.5.71 → pyghmi-1.5.75}/doc/source/reference/index.rst +0 -0
  37. {pyghmi-1.5.71 → pyghmi-1.5.75}/playbooks/legacy/tempest-devstack-ironic-pxe_ipmitool-pyghmi-src/post.yaml +0 -0
  38. {pyghmi-1.5.71 → pyghmi-1.5.75}/playbooks/legacy/tempest-devstack-ironic-pxe_ipmitool-pyghmi-src/run.yaml +0 -0
  39. {pyghmi-1.5.71 → pyghmi-1.5.75}/py27-constraints.txt +0 -0
  40. {pyghmi-1.5.71 → pyghmi-1.5.75}/pyghmi/__init__.py +0 -0
  41. {pyghmi-1.5.71 → pyghmi-1.5.75}/pyghmi/cmd/__init__.py +0 -0
  42. {pyghmi-1.5.71 → pyghmi-1.5.75}/pyghmi/cmd/fakebmc.py +0 -0
  43. {pyghmi-1.5.71 → pyghmi-1.5.75}/pyghmi/cmd/pyghmicons.py +0 -0
  44. {pyghmi-1.5.71 → pyghmi-1.5.75}/pyghmi/cmd/pyghmiutil.py +0 -0
  45. {pyghmi-1.5.71 → pyghmi-1.5.75}/pyghmi/cmd/virshbmc.py +0 -0
  46. {pyghmi-1.5.71 → pyghmi-1.5.75}/pyghmi/constants.py +0 -0
  47. {pyghmi-1.5.71 → pyghmi-1.5.75}/pyghmi/exceptions.py +0 -0
  48. {pyghmi-1.5.71 → pyghmi-1.5.75}/pyghmi/ipmi/__init__.py +0 -0
  49. {pyghmi-1.5.71 → pyghmi-1.5.75}/pyghmi/ipmi/bmc.py +0 -0
  50. {pyghmi-1.5.71 → pyghmi-1.5.75}/pyghmi/ipmi/console.py +0 -0
  51. {pyghmi-1.5.71 → pyghmi-1.5.75}/pyghmi/ipmi/events.py +0 -0
  52. {pyghmi-1.5.71 → pyghmi-1.5.75}/pyghmi/ipmi/fru.py +0 -0
  53. {pyghmi-1.5.71 → pyghmi-1.5.75}/pyghmi/ipmi/oem/__init__.py +0 -0
  54. {pyghmi-1.5.71 → pyghmi-1.5.75}/pyghmi/ipmi/oem/lenovo/__init__.py +0 -0
  55. {pyghmi-1.5.71 → pyghmi-1.5.75}/pyghmi/ipmi/oem/lenovo/config.py +0 -0
  56. {pyghmi-1.5.71 → pyghmi-1.5.75}/pyghmi/ipmi/oem/lenovo/cpu.py +0 -0
  57. {pyghmi-1.5.71 → pyghmi-1.5.75}/pyghmi/ipmi/oem/lenovo/dimm.py +0 -0
  58. {pyghmi-1.5.71 → pyghmi-1.5.75}/pyghmi/ipmi/oem/lenovo/drive.py +0 -0
  59. {pyghmi-1.5.71 → pyghmi-1.5.75}/pyghmi/ipmi/oem/lenovo/energy.py +0 -0
  60. {pyghmi-1.5.71 → pyghmi-1.5.75}/pyghmi/ipmi/oem/lenovo/firmware.py +0 -0
  61. {pyghmi-1.5.71 → pyghmi-1.5.75}/pyghmi/ipmi/oem/lenovo/inventory.py +0 -0
  62. {pyghmi-1.5.71 → pyghmi-1.5.75}/pyghmi/ipmi/oem/lenovo/nextscale.py +0 -0
  63. {pyghmi-1.5.71 → pyghmi-1.5.75}/pyghmi/ipmi/oem/lenovo/pci.py +0 -0
  64. {pyghmi-1.5.71 → pyghmi-1.5.75}/pyghmi/ipmi/oem/lenovo/psu.py +0 -0
  65. {pyghmi-1.5.71 → pyghmi-1.5.75}/pyghmi/ipmi/oem/lenovo/raid_controller.py +0 -0
  66. {pyghmi-1.5.71 → pyghmi-1.5.75}/pyghmi/ipmi/oem/lenovo/raid_drive.py +0 -0
  67. {pyghmi-1.5.71 → pyghmi-1.5.75}/pyghmi/ipmi/oem/lookup.py +0 -0
  68. {pyghmi-1.5.71 → pyghmi-1.5.75}/pyghmi/ipmi/private/__init__.py +0 -0
  69. {pyghmi-1.5.71 → pyghmi-1.5.75}/pyghmi/ipmi/private/constants.py +0 -0
  70. {pyghmi-1.5.71 → pyghmi-1.5.75}/pyghmi/ipmi/private/localsession.py +0 -0
  71. {pyghmi-1.5.71 → pyghmi-1.5.75}/pyghmi/ipmi/private/serversession.py +0 -0
  72. {pyghmi-1.5.71 → pyghmi-1.5.75}/pyghmi/ipmi/private/session.py +0 -0
  73. {pyghmi-1.5.71 → pyghmi-1.5.75}/pyghmi/ipmi/private/simplesession.py +0 -0
  74. {pyghmi-1.5.71 → pyghmi-1.5.75}/pyghmi/ipmi/private/spd.py +0 -0
  75. {pyghmi-1.5.71 → pyghmi-1.5.75}/pyghmi/ipmi/private/util.py +0 -0
  76. {pyghmi-1.5.71 → pyghmi-1.5.75}/pyghmi/ipmi/sdr.py +0 -0
  77. {pyghmi-1.5.71 → pyghmi-1.5.75}/pyghmi/media.py +0 -0
  78. {pyghmi-1.5.71 → pyghmi-1.5.75}/pyghmi/redfish/__init__.py +0 -0
  79. {pyghmi-1.5.71 → pyghmi-1.5.75}/pyghmi/redfish/oem/__init__.py +0 -0
  80. {pyghmi-1.5.71 → pyghmi-1.5.75}/pyghmi/redfish/oem/dell/__init__.py +0 -0
  81. {pyghmi-1.5.71 → pyghmi-1.5.75}/pyghmi/redfish/oem/dell/idrac.py +0 -0
  82. {pyghmi-1.5.71 → pyghmi-1.5.75}/pyghmi/redfish/oem/dell/main.py +0 -0
  83. {pyghmi-1.5.71 → pyghmi-1.5.75}/pyghmi/redfish/oem/lenovo/__init__.py +0 -0
  84. {pyghmi-1.5.71 → pyghmi-1.5.75}/pyghmi/redfish/oem/lenovo/tsma.py +0 -0
  85. {pyghmi-1.5.71 → pyghmi-1.5.75}/pyghmi/redfish/oem/lookup.py +0 -0
  86. {pyghmi-1.5.71 → pyghmi-1.5.75}/pyghmi/storage.py +0 -0
  87. {pyghmi-1.5.71 → pyghmi-1.5.75}/pyghmi/tests/__init__.py +0 -0
  88. {pyghmi-1.5.71 → pyghmi-1.5.75}/pyghmi/tests/unit/__init__.py +0 -0
  89. {pyghmi-1.5.71 → pyghmi-1.5.75}/pyghmi/tests/unit/base.py +0 -0
  90. {pyghmi-1.5.71 → pyghmi-1.5.75}/pyghmi/tests/unit/ipmi/__init__.py +0 -0
  91. {pyghmi-1.5.71 → pyghmi-1.5.75}/pyghmi/tests/unit/ipmi/test_sdr.py +0 -0
  92. {pyghmi-1.5.71 → pyghmi-1.5.75}/pyghmi/util/__init__.py +0 -0
  93. {pyghmi-1.5.71 → pyghmi-1.5.75}/pyghmi/util/parse.py +0 -0
  94. {pyghmi-1.5.71 → pyghmi-1.5.75}/pyghmi/version.py +0 -0
  95. {pyghmi-1.5.71 → pyghmi-1.5.75}/pyghmi.egg-info/dependency_links.txt +0 -0
  96. {pyghmi-1.5.71 → pyghmi-1.5.75}/pyghmi.egg-info/not-zip-safe +0 -0
  97. {pyghmi-1.5.71 → pyghmi-1.5.75}/pyghmi.egg-info/requires.txt +0 -0
  98. {pyghmi-1.5.71 → pyghmi-1.5.75}/pyghmi.egg-info/top_level.txt +0 -0
  99. {pyghmi-1.5.71 → pyghmi-1.5.75}/python-pyghmi.spec +0 -0
  100. {pyghmi-1.5.71 → pyghmi-1.5.75}/python-pyghmi.spec.tmpl +0 -0
  101. {pyghmi-1.5.71 → pyghmi-1.5.75}/requirements.txt +0 -0
  102. {pyghmi-1.5.71 → pyghmi-1.5.75}/setup.cfg +0 -0
  103. {pyghmi-1.5.71 → pyghmi-1.5.75}/setup.py +0 -0
  104. {pyghmi-1.5.71 → pyghmi-1.5.75}/setup.py.tmpl +0 -0
  105. {pyghmi-1.5.71 → pyghmi-1.5.75}/test-requirements.txt +0 -0
  106. {pyghmi-1.5.71 → pyghmi-1.5.75}/tox.ini +0 -0
  107. {pyghmi-1.5.71 → pyghmi-1.5.75}/wheezy.patch +0 -0
  108. {pyghmi-1.5.71 → pyghmi-1.5.75}/zuul.d/project.yaml +0 -0
@@ -1,6 +1,47 @@
1
1
  CHANGES
2
2
  =======
3
3
 
4
+ 1.5.75
5
+ ------
6
+
7
+ * Add standard NTP handling to redfish
8
+ * Attempt to get half-working sysurl if broken
9
+ * Handle inventory for systemless redfish endpoint
10
+ * Prefer generic sensors and handle system-less
11
+ * Relocate event log to oem, override for SMMv3
12
+ * Add reseat for SMMv3
13
+ * Fix coordinate calculation for XCC3 in new DWC chassis
14
+ * Implement next gen SMM3 support
15
+ * Fix redfish reset BMC to defaults
16
+ * Handle new variants of USB ethernet configuration in XCC3
17
+ * Add FFDC support for XCC3
18
+ * Provide update for backup XCC3 bank
19
+ * Implement normalized bmc settings for XCC3
20
+ * Ignore exhaust when looking for inlet
21
+ * Fix omitted comma in replace call
22
+ * Move normalized CPU and power to OEM
23
+ * Fix returning too much data when asked only for names
24
+ * Repair session token implicitly on expiration in OEM
25
+ * Fix IPMI identify on/off for IMM/XCC systems
26
+ * Add RDOC support for XCC3
27
+ * Fix issues with OEM retrieval
28
+ * Attempt generic height information extraction
29
+ * Add expanded/emulated expanded redfish support
30
+ * Negotiate a redfish session, if possible
31
+ * Add blink support to Lenovo "IPMI" support
32
+
33
+ 1.5.72
34
+ ------
35
+
36
+ * Rework get description to enable it to work fer XCC3
37
+ * Modify build for snap versions
38
+ * Amend deb package build to avoid extranoeus content
39
+ * Use approved method to determine XCC vintage
40
+ * Implement fixup of firmware inventory
41
+ * Prefer XCC3 detection over XCC2
42
+ * Fix str concatenation on redfish spec violations
43
+ * Refactor redfish settings and leverage in XCC3
44
+
4
45
  1.5.71
5
46
  ------
6
47
 
@@ -1,18 +1,11 @@
1
- Metadata-Version: 1.1
1
+ Metadata-Version: 2.1
2
2
  Name: pyghmi
3
- Version: 1.5.71
3
+ Version: 1.5.75
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
7
7
  Author-email: jjohnson2@lenovo.com
8
8
  License: Apache License, Version 2.0
9
- Description: This is a pure python implementation of IPMI protocol.
10
-
11
- pyghmicons and pyghmiutil are example scripts to show how one may incorporate
12
- this library into python code
13
-
14
-
15
- Platform: UNKNOWN
16
9
  Classifier: Intended Audience :: Information Technology
17
10
  Classifier: Intended Audience :: System Administrators
18
11
  Classifier: License :: OSI Approved :: Apache Software License
@@ -24,3 +17,13 @@ Classifier: Programming Language :: Python :: 3
24
17
  Classifier: Programming Language :: Python :: 3.6
25
18
  Classifier: Programming Language :: Python :: 3.7
26
19
  Classifier: Programming Language :: Python :: 3.8
20
+ License-File: LICENSE
21
+ Requires-Dist: cryptography>=2.1
22
+ Requires-Dist: python-dateutil>=2.8.1
23
+ Requires-Dist: six>=1.10.0
24
+
25
+ This is a pure python implementation of IPMI protocol.
26
+
27
+ pyghmicons and pyghmiutil are example scripts to show how one may incorporate
28
+ this library into python code
29
+
@@ -11,7 +11,10 @@ if grep wheezy /etc/os-release; then
11
11
  export DSCARGS=""
12
12
  fi
13
13
  # If not PBR, use the setup.py.tmpl
14
- $PYEXEC -c 'import pbr' || ./makesetup
14
+ sed -e 's/~/./' ./makesetup > ./makesetup.deb
15
+ chmod +x ./makesetup.deb
16
+ ./makesetup.deb
17
+ #$PYEXEC -c 'import pbr' || ./makesetup
15
18
  VERSION=`$PYEXEC setup.py --version`
16
19
  $PYEXEC setup.py sdist
17
20
  py2dsc $DSCARGS dist/pyghmi-$VERSION.tar.gz
@@ -21,4 +24,4 @@ dpkg-buildpackage -rfakeroot -uc -us -i
21
24
  cd -
22
25
  rm -rf $(find deb_dist -mindepth 1 -maxdepth 1 -type d)
23
26
  rm $1/*pyghmi*
24
- cp deb_dist/* $1/
27
+ cp deb_dist/*.deb $1/
@@ -0,0 +1,14 @@
1
+ #!/bin/sh
2
+ cd `dirname $0`
3
+ VERSION=`git describe|cut -d- -f 1`
4
+ NUMCOMMITS=`git describe|cut -d- -f 2`
5
+ if [ "$NUMCOMMITS" != "$VERSION" ]; then
6
+ LASTNUM=$(echo $VERSION|rev|cut -d . -f 1|rev)
7
+ LASTNUM=$((LASTNUM+1))
8
+ FIRSTPART=$(echo $VERSION|rev|cut -d . -f 2- |rev)
9
+ VERSION=${FIRSTPART}.${LASTNUM}
10
+ VERSION=$VERSION~dev$NUMCOMMITS+`git describe|cut -d- -f 3`
11
+ fi
12
+ echo $VERSION > VERSION
13
+ sed -e "s/#VERSION#/$VERSION/" setup.py.tmpl > setup.py
14
+
@@ -551,7 +551,7 @@ class Command(object):
551
551
  return {'powerstate': self._get_power_state(
552
552
  bridge_request=bridge_request)}
553
553
 
554
- def set_identify(self, on=True, duration=None):
554
+ def set_identify(self, on=True, duration=None, blink=False):
555
555
  """Request identify light
556
556
 
557
557
  Request the identify light to turn off, on for a duration,
@@ -563,10 +563,14 @@ class Command(object):
563
563
  """
564
564
  self.oem_init()
565
565
  try:
566
- self._oem.set_identify(on, duration)
566
+ self._oem.set_identify(on, duration, blink)
567
+ return
568
+ except exc.BypassGenericBehavior:
567
569
  return
568
570
  except exc.UnsupportedFunctionality:
569
571
  pass
572
+ if blink:
573
+ raise exc.IpmiException('Blink not supported with generic IPMI')
570
574
  if duration is not None:
571
575
  duration = int(duration)
572
576
  if duration > 255:
@@ -104,6 +104,8 @@ class OEMHandler(object):
104
104
  if sensor.sensor_type != 'Temperature':
105
105
  continue
106
106
  if sensor.entity == 'External environment':
107
+ if 'exhaust' in sensor.sensor_name.lower():
108
+ continue
107
109
  extenv.append(sensor.sensor_name)
108
110
  if sensor.entity == 'Air inlet':
109
111
  airinlets.append(sensor.sensor_name)
@@ -377,7 +379,7 @@ class OEMHandler(object):
377
379
  def list_media(self):
378
380
  raise exc.UnsupportedFunctionality()
379
381
 
380
- def set_identify(self, on, duration):
382
+ def set_identify(self, on, duration, blink):
381
383
  """Provide an OEM override for set_identify
382
384
 
383
385
  Some systems may require an override for set identify.
@@ -671,9 +671,11 @@ class OEMHandler(generic.OEMHandler):
671
671
  led_status_default)
672
672
  yield (name, {'status': status})
673
673
 
674
- def set_identify(self, on, duration):
674
+ def set_identify(self, on, duration, blink):
675
675
  if on and not duration and self.is_sd350:
676
676
  self.ipmicmd.xraw_command(netfn=0x3a, command=6, data=(1, 1))
677
+ elif self.has_xcc:
678
+ self.immhandler.set_identify(on, duration, blink)
677
679
  else:
678
680
  raise pygexc.UnsupportedFunctionality()
679
681
 
@@ -968,6 +968,15 @@ class XCCClient(IMMClient):
968
968
  fru['manufacturer'] = memi['memory_manufacturer']
969
969
  break
970
970
 
971
+ def set_identify(self, on, duration, blink):
972
+ if blink:
973
+ self.grab_redfish_response_with_status(
974
+ '/redfish/v1/Systems/1',
975
+ {'IndicatorLED': 'Blinking'},
976
+ method='PATCH')
977
+ raise pygexc.BypassGenericBehavior()
978
+ raise pygexc.UnsupportedFunctionality()
979
+
971
980
  def get_description(self):
972
981
  dsc = self.wc.grab_json_response('/DeviceDescription.json')
973
982
  dsc = dsc[0]