summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2012-10-24 19:17:33 +0000
committerGerrit Code Review <review@openstack.org>2012-10-24 19:17:33 +0000
commit7db2f6aa595e2d1261bc59750519b59daab7ab07 (patch)
tree23cd2bc85270aaf2b1f8275fbdaaeea92af0509c
parent715f87d39b454626a9220a528488c3eeab1d172c (diff)
parentba1df90656f9bcff4d769b18042f731a6d295faa (diff)
Merge "Fix catalog when services have no URL"
-rw-r--r--keystone/catalog/backends/sql.py9
-rw-r--r--keystone/catalog/backends/templated.py1
-rw-r--r--keystone/catalog/core.py4
-rw-r--r--tests/test_backend_sql.py38
4 files changed, 44 insertions, 8 deletions
diff --git a/keystone/catalog/backends/sql.py b/keystone/catalog/backends/sql.py
index 6d4552f2..e6172db5 100644
--- a/keystone/catalog/backends/sql.py
+++ b/keystone/catalog/backends/sql.py
@@ -156,14 +156,11 @@ class Catalog(sql.Base, catalog.Driver):
catalog[region][srv_type] = {}
- internal_url = ep['internalurl'].replace('$(', '%(')
- public_url = ep['publicurl'].replace('$(', '%(')
- admin_url = ep['adminurl'].replace('$(', '%(')
srv_type = catalog[region][srv_type]
srv_type['id'] = ep['id']
srv_type['name'] = srv_name
- srv_type['publicURL'] = core.format_url(public_url, d)
- srv_type['adminURL'] = core.format_url(admin_url, d)
- srv_type['internalURL'] = core.format_url(internal_url, d)
+ srv_type['publicURL'] = core.format_url(ep.get('publicurl', ''), d)
+ srv_type['internalURL'] = core.format_url(ep.get('internalurl'), d)
+ srv_type['adminURL'] = core.format_url(ep.get('adminurl'), d)
return catalog
diff --git a/keystone/catalog/backends/templated.py b/keystone/catalog/backends/templated.py
index da1319e6..acd20ae3 100644
--- a/keystone/catalog/backends/templated.py
+++ b/keystone/catalog/backends/templated.py
@@ -120,7 +120,6 @@ class TemplatedCatalog(kvs.Catalog):
for service, service_ref in region_ref.iteritems():
o[region][service] = {}
for k, v in service_ref.iteritems():
- v = v.replace('$(', '%(')
o[region][service][k] = core.format_url(v, d)
return o
diff --git a/keystone/catalog/core.py b/keystone/catalog/core.py
index 26df75f2..430cc47e 100644
--- a/keystone/catalog/core.py
+++ b/keystone/catalog/core.py
@@ -36,7 +36,9 @@ LOG = logging.getLogger(__name__)
def format_url(url, data):
"""Helper Method for all Backend Catalog's to Deal with URLS"""
try:
- result = url % data
+ result = url.replace('$(', '%(') % data
+ except AttributeError:
+ return None
except KeyError as e:
LOG.error("Malformed endpoint %s - unknown key %s" %
(url, str(e)))
diff --git a/tests/test_backend_sql.py b/tests/test_backend_sql.py
index bd3bfa81..13c1d3df 100644
--- a/tests/test_backend_sql.py
+++ b/tests/test_backend_sql.py
@@ -171,3 +171,41 @@ class SqlCatalog(SqlTests, test_backend.CatalogTests):
"publicurl": badurl})
with self.assertRaises(exception.MalformedEndpoint):
self.catalog_api.get_catalog('fake-user', 'fake-tenant')
+
+ def test_get_catalog_without_endpoint(self):
+ new_service = {
+ 'id': uuid.uuid4().hex,
+ 'type': uuid.uuid4().hex,
+ 'name': uuid.uuid4().hex,
+ 'description': uuid.uuid4().hex,
+ }
+ self.catalog_api.create_service(
+ new_service['id'],
+ new_service.copy())
+ service_id = new_service['id']
+
+ new_endpoint = {
+ 'id': uuid.uuid4().hex,
+ 'region': uuid.uuid4().hex,
+ 'service_id': service_id,
+ }
+
+ self.catalog_api.create_endpoint(
+ new_endpoint['id'],
+ new_endpoint.copy())
+
+ catalog = self.catalog_api.get_catalog('user', 'tenant')
+
+ service_type = new_service['type']
+ region = new_endpoint['region']
+
+ self.assertEqual(catalog[region][service_type]['name'],
+ new_service['name'])
+ self.assertEqual(catalog[region][service_type]['id'],
+ new_endpoint['id'])
+ self.assertEqual(catalog[region][service_type]['publicURL'],
+ "")
+ self.assertEqual(catalog[region][service_type]['adminURL'],
+ None)
+ self.assertEqual(catalog[region][service_type]['internalURL'],
+ None)