summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBin Yang <bin.yang@windriver.com>2017-09-23 01:20:11 +0800
committerBin Yang <bin.yang@windriver.com>2017-09-23 01:21:52 +0800
commitd48dc5d5af174535d5d96c2bbaee3d03715ed2b9 (patch)
treec5a1cfc07fc8d5df4cfe52aeb5d0ea4e4896333f
parent2de8e160c31f3ecf951fb4e85a96aa1e814b0a33 (diff)
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 <bin.yang@windriver.com>
-rw-r--r--newton/newton/extensions/urls.py6
-rw-r--r--newton/newton/proxy/urls.py4
-rw-r--r--newton/newton/proxy/views/identityV3.py76
-rw-r--r--ocata/ocata/extensions/urls.py6
-rw-r--r--ocata/ocata/proxy/urls.py4
-rw-r--r--ocata/ocata/proxy/views/identityV3.py6
-rw-r--r--windriver/titanium_cloud/extensions/views/extensions.py18
-rw-r--r--windriver/titanium_cloud/proxy/urls.py4
-rw-r--r--windriver/titanium_cloud/proxy/views/identityV3.py6
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<servicetype>[0-9a-zA-Z_-]{,18})/(?P<requri>[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<servicetype>[0-9a-zA-Z_-]{,18})/(?P<requri>[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<servicetype>[0-9a-zA-Z_-]{,18})/(?P<requri>[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