From d48dc5d5af174535d5d96c2bbaee3d03715ed2b9 Mon Sep 17 00:00:00 2001 From: Bin Yang Date: Sat, 23 Sep 2017 01:20:11 +0800 Subject: Add backward support for identity v2.0 API Add NBI v2.0/tokens and convert to SBI v3/auth/tokens Change-Id: I5734e18f78844f15847b3a0a2d906b70e75fd260 Issue-Id: INT-225 Signed-off-by: Bin Yang --- newton/newton/extensions/urls.py | 6 +- newton/newton/proxy/urls.py | 4 +- newton/newton/proxy/views/identityV3.py | 76 ++++++++++++++++++++++ ocata/ocata/extensions/urls.py | 6 +- ocata/ocata/proxy/urls.py | 4 +- ocata/ocata/proxy/views/identityV3.py | 6 ++ .../titanium_cloud/extensions/views/extensions.py | 18 +++-- windriver/titanium_cloud/proxy/urls.py | 4 +- windriver/titanium_cloud/proxy/views/identityV3.py | 6 ++ 9 files changed, 113 insertions(+), 17 deletions(-) diff --git a/newton/newton/extensions/urls.py b/newton/newton/extensions/urls.py index e87a02eb..1a0eb4b7 100644 --- a/newton/newton/extensions/urls.py +++ b/newton/newton/extensions/urls.py @@ -19,10 +19,8 @@ from newton.extensions.views import extensions from newton.extensions.views import epacaps urlpatterns = [ - url(r'^sions$', extensions.Extensions.as_view()), - url(r'^sions/$', extensions.Extensions.as_view()), - url(r'^sions/epa-caps$', epacaps.EpaCaps.as_view()), - url(r'^sions/epa-caps/$', epacaps.EpaCaps.as_view()), + url(r'^sions/?$', extensions.Extensions.as_view()), + url(r'^sions/epa-caps/?$', epacaps.EpaCaps.as_view()), ] urlpatterns = format_suffix_patterns(urlpatterns) diff --git a/newton/newton/proxy/urls.py b/newton/newton/proxy/urls.py index f9584635..ee2da591 100644 --- a/newton/newton/proxy/urls.py +++ b/newton/newton/proxy/urls.py @@ -23,7 +23,9 @@ urlpatterns = [ # identityV2.Tokens.as_view()), url(r'^identity/v3/auth/tokens$', identityV3.Tokens.as_view()), - url(r'^identity/(?:v2.0/|)tenants$', + url(r'^identity/v2.0/tokens$', + identityV3.TokensV2.as_view()), + url(r'^identity/v2.0/tenants$', services.GetTenants.as_view()), url(r'^(?P[0-9a-zA-Z_-]{,18})/(?P[0-9a-zA-Z./_-]*)$', services.Services.as_view()), diff --git a/newton/newton/proxy/views/identityV3.py b/newton/newton/proxy/views/identityV3.py index 1afe14cf..36f488a2 100644 --- a/newton/newton/proxy/views/identityV3.py +++ b/newton/newton/proxy/views/identityV3.py @@ -81,3 +81,79 @@ class Tokens(APIView): return Response(data={'error': str(e)}, status=status.HTTP_500_INTERNAL_SERVER_ERROR) + +class TokensV2(Tokens): + ''' + Backward compatible API for /v2.0/tokens + ''' + + def __init__(self): + self.proxy_prefix = config.MULTICLOUD_PREFIX + self._logger = logger + + def post(self, request, vimid=""): + self._logger.debug("TokensV2--post::META> %s" % request.META) + self._logger.debug("TokensV2--post::data> %s" % request.data) + self._logger.debug("TokensV2--post::vimid > %s" % (vimid)) + + try: + resp = super(TokensV2,self).post(request, vimid) + self._logger.debug("TokensV2--resp:: headers:%s, data:%s" % (resp._headers, resp.data)) + if resp.status_code == status.HTTP_201_CREATED: + v3_content = resp.data + v3_token = v3_content['token'] + + #convert catalog + v2_catalog = [] + for v3_catalog in v3_token['catalog']: + v2_catalog1 = { + "type": v3_catalog["type"], + "name": v3_catalog["name"], + "endpoints": [] + } + + #convert endpoints + v2_catalog1_endpoints = {"id": v3_catalog['id']} + for v3_endpoint in v3_catalog['endpoints']: + if v3_endpoint['interface'] == 'public': + v2_catalog1_endpoints['publicURL'] = v3_endpoint['url'] + elif v3_endpoint['interface'] == 'admin': + v2_catalog1_endpoints['adminURL'] = v3_endpoint['url'] + elif v3_endpoint['interface'] == 'internal': + v2_catalog1_endpoints['internalURL'] = v3_endpoint['url'] + + v2_catalog1['endpoints'].append(v2_catalog1_endpoints) + + v2_catalog.append(v2_catalog1) + + + #conversion between v3 tokens response and v2.0 tokens response + v3_token["project"]['enabled'] = 'true' + v2_content = { + "access": { + "token": { + "id" : resp.get('X-Subject-Token', None), + "issued_at": v3_token["issued_at"], + "expires" : v3_token["expires_at"], + "tenant" : v3_token["project"], + }, + "serviceCatalog": v2_catalog, + # "user": v3_token["user"], + } + } + + return Response(data=v2_content, status=resp.status_code) + + else: + return resp + except VimDriverNewtonException as e: + + return Response(data={'error': e.content}, status=e.status_code) + except HttpError as e: + self._logger.error("HttpError: status:%s, response:%s" % (e.http_status, e.response.json())) + return Response(data=e.response.json(), status=e.http_status) + except Exception as e: + self._logger.error(traceback.format_exc()) + + return Response(data={'error': str(e)}, + status=status.HTTP_500_INTERNAL_SERVER_ERROR) diff --git a/ocata/ocata/extensions/urls.py b/ocata/ocata/extensions/urls.py index 4dc46983..9aaf1331 100644 --- a/ocata/ocata/extensions/urls.py +++ b/ocata/ocata/extensions/urls.py @@ -19,10 +19,8 @@ from ocata.extensions.views import extensions from ocata.extensions.views import epacaps urlpatterns = [ - url(r'^sions$', extensions.Extensions.as_view()), - url(r'^sions/$', extensions.Extensions.as_view()), - url(r'^sions/epa-caps$', epacaps.EpaCaps.as_view()), - url(r'^sions/epa-caps/$', epacaps.EpaCaps.as_view()), + url(r'^sions/?$', extensions.Extensions.as_view()), + url(r'^sions/epa-caps/?$', epacaps.EpaCaps.as_view()), ] urlpatterns = format_suffix_patterns(urlpatterns) diff --git a/ocata/ocata/proxy/urls.py b/ocata/ocata/proxy/urls.py index 6f41d080..12777bf6 100644 --- a/ocata/ocata/proxy/urls.py +++ b/ocata/ocata/proxy/urls.py @@ -23,7 +23,9 @@ urlpatterns = [ # identityV2.Tokens.as_view()), url(r'^identity/v3/auth/tokens$', identityV3.Tokens.as_view()), - url(r'^identity/(?:v2.0/|)tenants$', + url(r'^identity/v2.0/tokens$', + identityV3.TokensV2.as_view()), + url(r'^identity/v2.0/tenants$', services.GetTenants.as_view()), url(r'^(?P[0-9a-zA-Z_-]{,18})/(?P[0-9a-zA-Z./_-]*)$', services.Services.as_view()), diff --git a/ocata/ocata/proxy/views/identityV3.py b/ocata/ocata/proxy/views/identityV3.py index 534ebe8f..ca9a2111 100644 --- a/ocata/ocata/proxy/views/identityV3.py +++ b/ocata/ocata/proxy/views/identityV3.py @@ -25,3 +25,9 @@ class Tokens(newton_identityV3.Tokens): def __init__(self): self.proxy_prefix = config.MULTICLOUD_PREFIX self._logger = logger + +class TokensV2(newton_identityV3.TokensV2): + + def __init__(self): + self.proxy_prefix = config.MULTICLOUD_PREFIX + self._logger = logger diff --git a/windriver/titanium_cloud/extensions/views/extensions.py b/windriver/titanium_cloud/extensions/views/extensions.py index 2dd61fe9..3b231c02 100644 --- a/windriver/titanium_cloud/extensions/views/extensions.py +++ b/windriver/titanium_cloud/extensions/views/extensions.py @@ -12,9 +12,18 @@ # See the License for the specific language governing permissions and # limitations under the License. import logging +import traceback + +from keystoneauth1.exceptions import HttpError +from rest_framework import status +from rest_framework.response import Response +from rest_framework.views import APIView from titanium_cloud.pub.config import config +from newton.pub.exceptions import VimDriverNewtonException +from newton.requests.views.util import VimDriverUtils from newton.extensions.views import extensions as newton_extensions +from newton.pub.msapi import extsys logger = logging.getLogger(__name__) @@ -39,17 +48,14 @@ class Extensions(newton_extensions.Extensions): "alias": "epa-caps", "description": "Multiple network support", "name": "EPACapsQuery", - "url": self.proxy_prefix + "/%s/extensions/epa-caps" \ - % (vimid), + "url": self.proxy_prefix + "/%s/extensions/epa-caps" % (vimid), "spec": "" }, { "alias": "guest-monitor", "description": "Multiple network support", - "name": "EPACapsQuery", - "url": self.proxy_prefix +\ - "/%s/extensions/guest-monitor/{server_id}" \ - % (vimid), + "name": "Guest Monitor", + "url": self.proxy_prefix + "/%s/extensions/guest-monitor/{server_id}" % (vimid), "spec": "" } ] diff --git a/windriver/titanium_cloud/proxy/urls.py b/windriver/titanium_cloud/proxy/urls.py index dbad26fa..31a3c8f7 100644 --- a/windriver/titanium_cloud/proxy/urls.py +++ b/windriver/titanium_cloud/proxy/urls.py @@ -23,7 +23,9 @@ urlpatterns = [ # identityV2.Tokens.as_view()), url(r'^identity/v3/auth/tokens/?$', identityV3.Tokens.as_view()), - url(r'^identity/(?:v2.0/|)tenants/?$', + url(r'^identity/v2.0/tokens/?$', + identityV3.TokensV2.as_view()), + url(r'^identity/v2.0/tenants/?$', services.GetTenants.as_view()), url(r'^(?P[0-9a-zA-Z_-]{,18})/(?P[0-9a-zA-Z./_-]*)$', services.Services.as_view()), diff --git a/windriver/titanium_cloud/proxy/views/identityV3.py b/windriver/titanium_cloud/proxy/views/identityV3.py index a6efa6ac..2938caec 100644 --- a/windriver/titanium_cloud/proxy/views/identityV3.py +++ b/windriver/titanium_cloud/proxy/views/identityV3.py @@ -25,3 +25,9 @@ class Tokens(newton_identityV3.Tokens): def __init__(self): self.proxy_prefix = config.MULTICLOUD_PREFIX self._logger = logger + +class TokensV2(newton_identityV3.TokensV2): + + def __init__(self): + self.proxy_prefix = config.MULTICLOUD_PREFIX + self._logger = logger -- cgit 1.2.3-korg