summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGeorge Kraft <george.kraft@calxeda.com>2013-12-09 14:41:15 -0600
committerGeorge Kraft <george.kraft@calxeda.com>2013-12-09 14:41:15 -0600
commitc0da16130c98f54aaf1c556420761e86be876c66 (patch)
tree6a30c97e410ee0b201729b3f7a91ed267e37a2d1
parent76084a9b7e3b7f09aecd404dbb803a3bb6a1d4c4 (diff)
downloadcxmanage-c0da16130c98f54aaf1c556420761e86be876c66.tar.gz
CXMAN-255: Retry config reset up to 3 times
We can't really guarantee that the CDB clear has occurred unless the IPMI command returns properly, so, we better try it a couple times. This could cause a few unnecessary SPI erases in some cases, but it's better than potentially reporting success when it hasn't actually been reset at all.
-rw-r--r--cxmanage_api/node.py20
1 files changed, 11 insertions, 9 deletions
diff --git a/cxmanage_api/node.py b/cxmanage_api/node.py
index b96e440..f71a380 100644
--- a/cxmanage_api/node.py
+++ b/cxmanage_api/node.py
@@ -939,25 +939,27 @@ updating the EEPROM
communication.
"""
- try:
- # Reset CDB
+ # Clear CDB. Retry it up to 3 times.
+ for _ in range(2):
+ try:
+ self.bmc.reset_firmware()
+ break
+ except IpmiError as error:
+ if str(error) != "Error resetting firmware to factory default":
+ raise
+ time.sleep(5) # pausing between retries seems to help a little
+ else:
self.bmc.reset_firmware()
- except IpmiError as err:
- if ('Error resetting firmware to factory default' != str(err)):
- raise
-
+ # Reset ubootenv
try:
-
- # Reset ubootenv
fwinfo = self.get_firmware_info()
running_part = self._get_partition(fwinfo, "UBOOTENV", "FIRST")
factory_part = self._get_partition(fwinfo, "UBOOTENV", "SECOND")
image = self._download_image(factory_part)
self._upload_image(image, running_part)
-
except NoPartitionError:
pass # Only one partition? Don't mess with it!