docs: 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)