From a225624a67825e8be430350221073c43f90e97e4 Mon Sep 17 00:00:00 2001 From: Stef T Date: Fri, 5 Oct 2012 21:18:43 -0400 Subject: Unparseable endpoint URL's should raise friendly error fixes bug #1058494 Change-Id: Id89c530e2f4e7dcf0db03515afb8b2a85fbf8077 --- keystone/catalog/backends/sql.py | 12 +++++++----- keystone/catalog/backends/templated.py | 3 ++- keystone/catalog/core.py | 22 ++++++++++++++++++++++ 3 files changed, 31 insertions(+), 6 deletions(-) (limited to 'keystone/catalog') diff --git a/keystone/catalog/backends/sql.py b/keystone/catalog/backends/sql.py index bd0f687c..6d4552f2 100644 --- a/keystone/catalog/backends/sql.py +++ b/keystone/catalog/backends/sql.py @@ -16,6 +16,7 @@ # under the License. from keystone import catalog +from keystone.catalog import core from keystone.common import sql from keystone.common.sql import migration from keystone import config @@ -158,10 +159,11 @@ class Catalog(sql.Base, catalog.Driver): internal_url = ep['internalurl'].replace('$(', '%(') public_url = ep['publicurl'].replace('$(', '%(') admin_url = ep['adminurl'].replace('$(', '%(') - catalog[region][srv_type]['id'] = ep['id'] - catalog[region][srv_type]['name'] = srv_name - catalog[region][srv_type]['publicURL'] = public_url % d - catalog[region][srv_type]['adminURL'] = admin_url % d - catalog[region][srv_type]['internalURL'] = internal_url % d + 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) return catalog diff --git a/keystone/catalog/backends/templated.py b/keystone/catalog/backends/templated.py index b9625cfa..da1319e6 100644 --- a/keystone/catalog/backends/templated.py +++ b/keystone/catalog/backends/templated.py @@ -17,6 +17,7 @@ import os.path from keystone.catalog.backends import kvs +from keystone.catalog import core from keystone.common import logging from keystone import config @@ -120,6 +121,6 @@ class TemplatedCatalog(kvs.Catalog): o[region][service] = {} for k, v in service_ref.iteritems(): v = v.replace('$(', '%(') - o[region][service][k] = v % d + o[region][service][k] = core.format_url(v, d) return o diff --git a/keystone/catalog/core.py b/keystone/catalog/core.py index b2b6c24e..26df75f2 100644 --- a/keystone/catalog/core.py +++ b/keystone/catalog/core.py @@ -19,6 +19,7 @@ import uuid +from keystone.common import logging from keystone.common import manager from keystone.common import wsgi from keystone import config @@ -29,6 +30,27 @@ from keystone import token CONF = config.CONF +LOG = logging.getLogger(__name__) + + +def format_url(url, data): + """Helper Method for all Backend Catalog's to Deal with URLS""" + try: + result = url % data + except KeyError as e: + LOG.error("Malformed endpoint %s - unknown key %s" % + (url, str(e))) + raise exception.MalformedEndpoint(endpoint=url) + except TypeError as e: + LOG.error("Malformed endpoint %s - type mismatch %s \ + (are you missing brackets ?)" % + (url, str(e))) + raise exception.MalformedEndpoint(endpoint=url) + except ValueError as e: + LOG.error("Malformed endpoint %s - incomplete format \ + (are you missing a type notifier ?)" % url) + raise exception.MalformedEndpoint(endpoint=url) + return result class Manager(manager.Manager): -- cgit