summaryrefslogtreecommitdiffstats
path: root/keystone/catalog
diff options
context:
space:
mode:
authorStef T <stelford@internap.com>2012-10-05 21:18:43 -0400
committerStef T <stelford@internap.com>2012-10-06 16:41:36 -0400
commita225624a67825e8be430350221073c43f90e97e4 (patch)
tree1e47408617441992315835f73f9cda88761dd8ef /keystone/catalog
parent1262a07277468dd48ba2167849fecf4c4766784b (diff)
downloadkeystone-a225624a67825e8be430350221073c43f90e97e4.tar.gz
keystone-a225624a67825e8be430350221073c43f90e97e4.tar.xz
keystone-a225624a67825e8be430350221073c43f90e97e4.zip
Unparseable endpoint URL's should raise friendly error
fixes bug #1058494 Change-Id: Id89c530e2f4e7dcf0db03515afb8b2a85fbf8077
Diffstat (limited to 'keystone/catalog')
-rw-r--r--keystone/catalog/backends/sql.py12
-rw-r--r--keystone/catalog/backends/templated.py3
-rw-r--r--keystone/catalog/core.py22
3 files changed, 31 insertions, 6 deletions
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):