Merge "Take region_name into account when calling url_for"

This commit is contained in:
Jenkins 2013-01-30 00:49:36 +00:00 committed by Gerrit Code Review
commit 3573672596
3 changed files with 31 additions and 3 deletions

@ -23,8 +23,9 @@ from keystoneclient import exceptions
class ServiceCatalog(object):
"""Helper methods for dealing with a Keystone Service Catalog."""
def __init__(self, resource_dict):
def __init__(self, resource_dict, region_name=None):
self.catalog = resource_dict
self.region_name = region_name
def get_token(self):
"""Fetch token details from service catalog.
@ -70,6 +71,9 @@ class ServiceCatalog(object):
endpoints = service['endpoints']
for endpoint in endpoints:
if self.region_name and \
endpoint.get('region') != self.region_name:
continue
if not filter_value or endpoint.get(attr) == filter_value:
return endpoint[endpoint_type]

@ -208,7 +208,8 @@ class Client(client.HTTPClient):
# associated methods
def _extract_service_catalog(self, url, body):
""" Set the client's service catalog from the response data. """
self.service_catalog = service_catalog.ServiceCatalog(body)
self.service_catalog = service_catalog.ServiceCatalog(
body, region_name=self.region_name)
try:
sc = self.service_catalog.get_token()
# Save these since we have them and they'll be useful later

@ -74,7 +74,20 @@ SERVICE_CATALOG = {
"href":"https://identity.north.host/v2.0/"
"endpoints?marker=2"
}]
}
},
{
"name": "Image Servers",
"type": "image",
"endpoints": [
{"publicURL": "https://image.north.host/v1/",
"internalURL": "https://image-internal.north.host/v1/",
"region": "North"},
{"publicURL": "https://image.south.host/v1/",
"internalURL": "https://image-internal.south.host/v1/",
"region": "South"}
],
"endpoints_links": []
},
],
"serviceCatalog_links": [{
"rel": "next",
@ -108,6 +121,16 @@ class ServiceCatalogTest(utils.TestCase):
self.assertEquals(public_ep['compute'][1]['internalURL'],
"https://compute.north.host/v1.1/3456")
def test_service_catalog_regions(self):
sc = service_catalog.ServiceCatalog(SERVICE_CATALOG['access'],
region_name="North")
url = sc.url_for(service_type='image', endpoint_type='publicURL')
self.assertEquals(url, "https://image.north.host/v1/")
sc = service_catalog.ServiceCatalog(SERVICE_CATALOG['access'],
region_name="South")
url = sc.url_for(service_type='image', endpoint_type='internalURL')
self.assertEquals(url, "https://image-internal.south.host/v1/")
def test_token(self):
sc = service_catalog.ServiceCatalog(SERVICE_CATALOG['access'])