Update an existing route entry in the route table.

def _update_route(dcidr, router_ip, old_router_ip,
                  vpc_info, con, route_table_id, update_reason):
    """
    Update an existing route entry in the route table.

    """
    instance = eni = None
    try:
        instance, eni = find_instance_and_eni_by_ip(vpc_info, router_ip)

        logging.info("--- updating existing route in RT '%s' "
                     "%s -> %s (%s, %s) (old IP: %s, reason: %s)" %
                     (route_table_id, dcidr, router_ip,
                      instance.id, eni.id, old_router_ip, update_reason))
        try:
            con.replace_route(
                        route_table_id         = route_table_id,
                        destination_cidr_block = dcidr,
                        instance_id            = instance.id,
                        interface_id           = eni.id)
        except Exception as e:
            raise Exception("replace_route failed: %s" % str(e))

        CURRENT_STATE.routes[dcidr] = \
                                    (router_ip, str(instance.id), str(eni.id))
    except Exception as e:
        msg = "*** failed to update route in RT '%s' %s -> %s (%s)" % \
              (route_table_id, dcidr, old_router_ip, e.message)
        update_reason += " [ERROR update route: %s]" % e.message
        logging.error(msg)

    _rt_state_update(route_table_id, dcidr, router_ip,
                     instance.id if instance else "(none)",
                     eni.id if eni else "(none)",
                     old_router_ip, update_reason)