'Create a route.
:param  name: Name of route to be created
:type   name: ``str``
:param  dest_range: Address range of route in CIDR format.
:type   dest_range: ``str``
:param  priority: Priority value, lower values take precedence
:type   priority: ``int``
:param  network: The network the route belongs to. Can be either the
full URL of the network, the name of the network  or
a libcloud object.
:type   network: ``str`` or ``GCENetwork``
:param  tags: List of instance-tags for routing, empty for all nodes
:type   tags: ``list`` of ``str`` or ``None``
:param  next_hop: Next traffic hop. Use ``None`` for the default
Internet gateway, or specify an instance or IP
address.
:type   next_hop: ``str``, ``Node``, or ``None``
:param  description: Custom description for the route.
:type   description: ``str`` or ``None``
:return:  Route object
:rtype:   :class:`GCERoute`'

def ex_create_route(self, name, dest_range, priority=500, network='default', tags=None, next_hop=None, description=None):

    route_data = {}
    route_data['name'] = name
    route_data['destRange'] = dest_range
    route_data['priority'] = priority
    route_data['description'] = description
    if (isinstance(network, str) and network.startswith('https://')):
        network_uri = network
    elif isinstance(network, str):
        network = self.ex_get_network(network)
        network_uri = network.extra['selfLink']
    else:
        network_uri = network.extra['selfLink']
    route_data['network'] = network_uri
    route_data['tags'] = tags
    if (next_hop is None):
        url = ('https://www.googleapis.com/compute/%s/projects/%s/%s' % (API_VERSION, self.project, 'global/gateways/default-internet-gateway'))
        route_data['nextHopGateway'] = url
    elif isinstance(next_hop, str):
        route_data['nextHopIp'] = next_hop
    else:
        route_data['nextHopInstance'] = next_hop.extra['selfLink']
    request = '/global/routes'
    self.connection.async_request(request, method='POST', data=route_data)
    return self.ex_get_route(name)
