Iterate over route spec and add all the routes we haven't set yet.

    This relies on being told what routes we HAVE already. This is passed
    in via the routes_in_rts dict.

    Furthermore, some routes may be set in some RTs, but not in others. In that
    case, we may already have seen which router was chosen for a certain route.
    This information is passed in via the chosen_routers dict. We should choose
    routers that were used before.

def _add_missing_routes(route_spec, failed_ips, questionable_ips,
                        chosen_routers, vpc_info, con, routes_in_rts):
    """
    Iterate over route spec and add all the routes we haven't set yet.

    This relies on being told what routes we HAVE already. This is passed
    in via the routes_in_rts dict.

    Furthermore, some routes may be set in some RTs, but not in others. In that
    case, we may already have seen which router was chosen for a certain route.
    This information is passed in via the chosen_routers dict. We should choose
    routers that were used before.

    """
    for dcidr, hosts in route_spec.items():
        new_router_ip = chosen_routers.get(dcidr)
        # Look at the routes we have seen in each of the route tables.
        for rt_id, dcidr_list in routes_in_rts.items():
            if dcidr not in dcidr_list:
                if not new_router_ip:
                    # We haven't chosen a target host for this CIDR.
                    new_router_ip = _choose_different_host(None, hosts,
                                                           failed_ips,
                                                           questionable_ips)
                    if not new_router_ip:
                        logging.warning("--- cannot find available target "
                                        "for route addition %s! "
                                        "Nothing I can do..." % (dcidr))
                        # Skipping the check on any further RT, breaking out to
                        # outer most loop over route spec
                        break
                _add_new_route(dcidr, new_router_ip, vpc_info, con, rt_id)