Add config option to override url for versions

The versions url returns the wrong data when glance api is behind
a proxy. This adds a new config option so it can be set properly.

DocImpact

Change-Id: I5ab53d608a6667435a4b03b0c832870716baaeb8
Closes-Bug: #1384379
This commit is contained in:
Vishvananda Ishaya 2014-10-22 11:59:32 -07:00
parent 633bec8fd4
commit fa3b691011
2 changed files with 55 additions and 1 deletions

View File

@ -22,7 +22,17 @@ import webob.dec
from glance.common import wsgi
versions_opts = [
cfg.StrOpt('public_endpoint', default=None,
help=_('Public url to use for versions endpoint. The default '
'is None, which will use the request\'s host_url '
'attribute to populate the URL base. If Glance is '
'operating behind a proxy, you will want to change '
'this to represent the proxy\'s URL.')),
]
CONF = cfg.CONF
CONF.register_opts(versions_opts)
class Controller(object):
@ -32,13 +42,14 @@ class Controller(object):
def index(self, req):
"""Respond to a request for all OpenStack API versions."""
def build_version_object(version, path, status):
url = CONF.public_endpoint or req.host_url
return {
'id': 'v%s' % version,
'status': status,
'links': [
{
'rel': 'self',
'href': '%s/%s/' % (req.host_url, path),
'href': '%s/%s/' % (url, path),
},
],
}

View File

@ -67,6 +67,49 @@ class VersionsTest(base.IsolatedUnitTest):
]
self.assertEqual(expected, results)
def test_get_version_list_public_endpoint(self):
req = webob.Request.blank('/', base_url='http://127.0.0.1:9292/')
req.accept = 'application/json'
self.config(bind_host='127.0.0.1', bind_port=9292,
public_endpoint='https://example.com:9292')
res = versions.Controller().index(req)
self.assertEqual(300, res.status_int)
self.assertEqual('application/json', res.content_type)
results = jsonutils.loads(res.body)['versions']
expected = [
{
'id': 'v2.2',
'status': 'CURRENT',
'links': [{'rel': 'self',
'href': 'https://example.com:9292/v2/'}],
},
{
'id': 'v2.1',
'status': 'SUPPORTED',
'links': [{'rel': 'self',
'href': 'https://example.com:9292/v2/'}],
},
{
'id': 'v2.0',
'status': 'SUPPORTED',
'links': [{'rel': 'self',
'href': 'https://example.com:9292/v2/'}],
},
{
'id': 'v1.1',
'status': 'CURRENT',
'links': [{'rel': 'self',
'href': 'https://example.com:9292/v1/'}],
},
{
'id': 'v1.0',
'status': 'SUPPORTED',
'links': [{'rel': 'self',
'href': 'https://example.com:9292/v1/'}],
},
]
self.assertEqual(expected, results)
class VersionNegotiationTest(base.IsolatedUnitTest):