diff options
| author | Jenkins <jenkins@review.openstack.org> | 2012-10-24 19:17:33 +0000 |
|---|---|---|
| committer | Gerrit Code Review <review@openstack.org> | 2012-10-24 19:17:33 +0000 |
| commit | 7db2f6aa595e2d1261bc59750519b59daab7ab07 (patch) | |
| tree | 23cd2bc85270aaf2b1f8275fbdaaeea92af0509c | |
| parent | 715f87d39b454626a9220a528488c3eeab1d172c (diff) | |
| parent | ba1df90656f9bcff4d769b18042f731a6d295faa (diff) | |
Merge "Fix catalog when services have no URL"
| -rw-r--r-- | keystone/catalog/backends/sql.py | 9 | ||||
| -rw-r--r-- | keystone/catalog/backends/templated.py | 1 | ||||
| -rw-r--r-- | keystone/catalog/core.py | 4 | ||||
| -rw-r--r-- | tests/test_backend_sql.py | 38 |
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) |
