diff --git a/ucsmsdk_samples/firmware/ucsfirmware.py b/ucsmsdk_samples/firmware/ucsfirmware.py index e7fa0d0..02e9bb2 100755 --- a/ucsmsdk_samples/firmware/ucsfirmware.py +++ b/ucsmsdk_samples/firmware/ucsfirmware.py @@ -24,8 +24,11 @@ from ucsmsdk.mometa.firmware.FirmwareCatalogue import FirmwareCatalogue from ucsmsdk.mometa.firmware.FirmwareDownloader import FirmwareDownloader from ucsmsdk.mometa.firmware.FirmwareDownloader import FirmwareDownloaderConsts +from ucsmsdk.mometa.firmware.FirmwareDistributable import FirmwareDistributableConsts from ucsmsdk.mometa.firmware.FirmwareAck import FirmwareAckConsts +from ucsmsdk.ucsexception import UcsOperationError + log = logging.getLogger('ucs') @@ -350,21 +353,35 @@ def firmware_add_remote(handle, file_name, remote_path, protocol, server, FirmwareDownloader: Managed Object Raises: - ValueError if image not available or incorrect credential + ValueError if incorrect credential + IOError if file fails to download Example: firmware_add_remote(handle, file_name="ucs-k9-bundle-c-series.2.2.5b.C.bin", remote_path="/home/imagedir", protocol="nfs", - server="10.65.1.2, + server="10.65.1.2", user="user", pwd="pwd") """ - file_path = os.path.join(remote_path, file_name) + def return_download_state(handle, file_name): + ''' + Returns Transfer State of FirmwareDownloader object for a single download. - if not os.path.exists(file_path): - raise IOError("Image does not exist") + Args: + handle (UcsHandle) + file_name (string): firmware image name + + Example: + return_download_state(handle, 'ucs-k9-bundle-infra.2.2.5b.A.bin') + ''' + download = handle.query_dn(dn='sys/fw-catalogue/dnld-%s' % file_name) + if download is None: + raise UcsOperationError("Query FirmwareDownloader", "None returned") + + download_state = download.transfer_state + return download_state if protocol is not FirmwareDownloaderConsts.PROTOCOL_TFTP: if not user: @@ -388,6 +405,12 @@ def firmware_add_remote(handle, file_name, remote_path, protocol, server, handle.add_mo(firmware_downloader) # handle.set_dump_xml() handle.commit() + + time.sleep(10) + if return_download_state(handle, file_name) == \ + FirmwareDistributableConsts.TRANSFER_STATE_FAILED: + raise IOError("File failed to download") + return firmware_downloader