def test_public_endpoint_url(self): """ public_endpoint_url returns the first publicURL for the named service in a specific region. """ self.assertEqual( public_endpoint_url(fake_service_catalog, 'cloudServersOpenStack', 'DFW'), 'http://dfw.openstack/')
def get_service_endpoint(service_catalog, region): """ Get the service endpoint used to connect cloud services """ cloudServersOpenStack = config_value('cloudServersOpenStack') server_endpoint = public_endpoint_url(service_catalog, cloudServersOpenStack, region) return server_endpoint
def get_all_server_details(tenant_id, authenticator, service_name, region, limit=100, clock=None, _treq=None): """ Return all servers of a tenant TODO: service_name is possibly internal to this function but I don't want to pass config here? NOTE: This really screams to be a independent txcloud-type API """ token, catalog = yield authenticator.authenticate_tenant(tenant_id, log=default_log) endpoint = public_endpoint_url(catalog, service_name, region) url = append_segments(endpoint, 'servers', 'detail') query = {'limit': limit} all_servers = [] if clock is None: # pragma: no cover from twisted.internet import reactor as clock if _treq is None: # pragma: no cover _treq = treq def fetch(url, headers): d = _treq.get(url, headers=headers) d.addCallback(check_success, [200], _treq=_treq) d.addCallback(_treq.json_content) return d while True: # sort based on query name to make the tests predictable urlparams = sorted(query.items(), key=lambda e: e[0]) d = retry(partial(fetch, '{}?{}'.format(url, urlencode(urlparams)), headers(token)), can_retry=retry_times(5), next_interval=exponential_backoff_interval(2), clock=clock) servers = (yield d)['servers'] all_servers.extend(servers) if len(servers) < limit: break query.update({'marker': servers[-1]['id']}) defer.returnValue(all_servers)