diff options
| author | Julien Danjou <julien@danjou.info> | 2012-10-04 19:24:10 +0200 |
|---|---|---|
| committer | Julien Danjou <julien@danjou.info> | 2012-10-08 19:41:55 +0200 |
| commit | ba1df90656f9bcff4d769b18042f731a6d295faa (patch) | |
| tree | 24533490c41473f7156088ec6526cbcffeb1bf1a | |
| parent | e7fdf934f5a082dc58a542b54e1eb24b9054af2d (diff) | |
Fix catalog when services have no URL
This fixes bug #1061736
Change-Id: Ic8f7a45dfabb2e3fb40f6aa6cd4c0f29c13f2c77
Signed-off-by: Julien Danjou <julien@danjou.info>
| -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 5427dddf..593a6d20 100644 --- a/tests/test_backend_sql.py +++ b/tests/test_backend_sql.py @@ -177,3 +177,41 @@ class SqlCatalog(test.TestCase, 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) |
