def wait_for_ribcl_firmware_update_to_complete(ribcl_object):
    """Continuously checks for iLO firmware update to complete."""

    def is_ilo_reset_initiated():
        """Checks for initiation of iLO reset

        Invokes the ``get_product_name`` api and returns
            i) True, if exception gets raised as that marks the iLO reset
               initiation.
            ii) False, if the call gets through without any failure, marking
                that iLO is yet to be reset.
        """
        try:
            LOG.debug(ribcl_object._('Checking for iLO reset...'))
            ribcl_object.get_product_name()
            return False
        except exception.IloError:
            LOG.debug(ribcl_object._('iLO is being reset...'))
            return True

    # Note(deray): wait for 5 secs, before checking if iLO reset got triggered
    # at every interval of 6 secs. This looping call happens for 10 times.
    # Once it comes out of the wait of iLO reset trigger, then it starts
    # waiting for iLO to be up again after reset.
    wait_for_operation_to_complete(
        is_ilo_reset_initiated,
        delay_bw_retries=6,
        delay_before_attempts=5,
        is_silent_loop_exit=True
    )
    wait_for_ilo_after_reset(ribcl_object)
Continuously checks for iLO firmware update to complete.