diff options
Diffstat (limited to 'newton')
-rw-r--r-- | newton/newton/proxy/urls.py | 2 | ||||
-rw-r--r-- | newton/newton/proxy/views/dnsaasdelegate.py | 8 | ||||
-rw-r--r-- | newton/newton/proxy/views/identityV3.py | 26 | ||||
-rw-r--r-- | newton/newton/proxy/views/proxy_utils.py | 19 | ||||
-rw-r--r-- | newton/newton/proxy/views/services.py | 31 | ||||
-rw-r--r-- | newton/newton/registration/views/registration.py | 2 | ||||
-rw-r--r-- | newton/newton/requests/views/util.py | 6 |
7 files changed, 78 insertions, 16 deletions
diff --git a/newton/newton/proxy/urls.py b/newton/newton/proxy/urls.py index 0e0ca52a..3a4be2f4 100644 --- a/newton/newton/proxy/urls.py +++ b/newton/newton/proxy/urls.py @@ -24,6 +24,8 @@ urlpatterns = [ # identityV2.Tokens.as_view()), url(r'^identity/v3/auth/tokens$', identityV3.Tokens.as_view()), + url(r'^identity/v3/?$', + identityV3.Tokens.as_view()), url(r'^identity/v2.0/?$', identityV3.TokensV2.as_view()), url(r'^identity/v2.0/tokens/?$', diff --git a/newton/newton/proxy/views/dnsaasdelegate.py b/newton/newton/proxy/views/dnsaasdelegate.py index bce24dff..0d2c97e1 100644 --- a/newton/newton/proxy/views/dnsaasdelegate.py +++ b/newton/newton/proxy/views/dnsaasdelegate.py @@ -62,6 +62,7 @@ class DnsaasDelegate(Services): status=status.HTTP_404_NOT_FOUND) tenant_name = auth_state['body']['token']['project']['name'] + #tenant_id = auth_state['body']['token']['project']['id'] #find out the delegated DNSaaS provider viminfo = VimDriverUtils.get_vim_info(vim_id) @@ -135,9 +136,12 @@ class DnsaasDelegate(Services): content = resp.json() if resp.content else None self._logger.debug("service " + action + " response: %s, %s" % (resp.status_code, content)) - if (action != "delete"): + if (action == "delete"): + return Response(headers={'X-Subject-Token': tmp_auth_token}, status=resp.status_code) + else: + #content = ProxyUtils.update_dnsaas_project_id(content, tenant_id) return Response(headers={'X-Subject-Token': tmp_auth_token}, data=content, status=resp.status_code) - return Response(headers={'X-Subject-Token': tmp_auth_token}, status=resp.status_code) + except VimDriverNewtonException as e: return Response(data={'error': e.content}, status=e.status_code) except HttpError as e: diff --git a/newton/newton/proxy/views/identityV3.py b/newton/newton/proxy/views/identityV3.py index 7395fac8..d12e24ce 100644 --- a/newton/newton/proxy/views/identityV3.py +++ b/newton/newton/proxy/views/identityV3.py @@ -33,6 +33,22 @@ logger = logging.getLogger(__name__) DEBUG=True +v3_version_detail = { + "version": { + "status": "stable", + "updated": "2014-04-17T00:00:00Z", + "media-types": [ + { + "base": "application/json", + "type": "application/vnd.openstack.identity-v3+json" + } + ], + "id": "v3", + "links": [ + ] + } +} + class Tokens(APIView): service = {'service_type': 'identity', 'interface': 'public'} @@ -41,6 +57,11 @@ class Tokens(APIView): self.proxy_prefix = config.MULTICLOUD_PREFIX self._logger = logger + def get(self, request, vimid=""): + self._logger.debug("identityV3--get::META> %s" % request.META) + + return Response(data=v3_version_detail, status=status.HTTP_200_OK) + def post(self, request, vimid=""): self._logger.debug("identityV3--post::META> %s" % request.META) self._logger.debug("identityV3--post::data> %s" % request.data) @@ -55,6 +76,7 @@ class Tokens(APIView): #backward support for keystone v2.0 API if not tenant_name and request.data.get("auth"): tenant_name = request.data["auth"].get("tenantName") + tenant_id = request.data["auth"].get("tenantId") #keystone v3 API if not tenant_name and request.data.get("auth") \ @@ -104,7 +126,7 @@ class Tokens(APIView): return Response(data={'error': str(e)}, status=status.HTTP_500_INTERNAL_SERVER_ERROR) -version_detail = { +v2_version_detail = { "version": { "status": "stable", "updated": "2014-04-17T00:00:00Z", @@ -132,7 +154,7 @@ class TokensV2(Tokens): def get(self, request, vimid=""): self._logger.debug("TokensV2--get::META> %s" % request.META) - return Response(data=version_detail, status=status.HTTP_200_OK) + return Response(data=v2_version_detail, status=status.HTTP_200_OK) def post(self, request, vimid=""): self._logger.debug("TokensV2--post::META> %s" % request.META) diff --git a/newton/newton/proxy/views/proxy_utils.py b/newton/newton/proxy/views/proxy_utils.py index 68182d4a..150cb217 100644 --- a/newton/newton/proxy/views/proxy_utils.py +++ b/newton/newton/proxy/views/proxy_utils.py @@ -174,3 +174,22 @@ class ProxyUtils(object): logger.error(traceback.format_exc()) return catalog + +# @staticmethod +# def update_dnsaas_project_id(content, new_project_id): +# ''' +# update project id in DNSaaS delegate content +# ''' +# try: +# if content: +# # filter the resp content and replace all endpoint prefix +# tmp_content = json.dumps(content) +# tmp_pattern = re.compile(r'(^.*)"project_id"\s*:\s*"' + r'[\w-]+'+r'"(.*$)') +# part1 = tmp_pattern.sub(r'\1', tmp_content) +# part2 = tmp_pattern.sub(r'"project_id":"'+new_project_id +r'"\2', tmp_content) +# #logger.debug("jsonstr:%s,part1:%s,part2:%s"%(tmp_content,part1,part2)) +# content = json.loads(part1+part2) +# return content +# except Exception as e: +# logger.error(traceback.format_exc()) +# return content diff --git a/newton/newton/proxy/views/services.py b/newton/newton/proxy/views/services.py index d86b0e8c..19fec9ca 100644 --- a/newton/newton/proxy/views/services.py +++ b/newton/newton/proxy/views/services.py @@ -35,6 +35,7 @@ DEBUG=True class HasValidToken(BasePermission): def has_permission(self, request, view): + logger.debug("HasValidToken--has_permission::META> %s" % request.META) token = request.META.get('HTTP_X_AUTH_TOKEN', None) if token: state, metadata = VimDriverUtils.get_token_cache(token) @@ -85,6 +86,12 @@ class Services(APIView): def _do_action(self, action, request, vim_id, servicetype, requri): tmp_auth_token = self._get_token(request) try: + #special handling of compute/v2 request from APPC, temp solution for A release + if servicetype == 'compute': + tmp_pattern = re.compile(r'^v2/(.+)') + requri = tmp_pattern.sub(r'v2.1/' + r'\1', requri) + + vim = VimDriverUtils.get_vim_info(vim_id) # fetch the auth_state out of cache auth_state, metadata_catalog = VimDriverUtils.get_token_cache(tmp_auth_token) @@ -130,10 +137,16 @@ class Services(APIView): content = resp.json() if resp.content else None self._logger.debug("service " + action + " response: %s, %s" % (resp.status_code, content)) - if (action != "delete"): + if (action == "delete"): + return Response(headers={'X-Subject-Token': tmp_auth_token}, status=resp.status_code) + else: content = ProxyUtils.update_prefix(metadata_catalog, content) + if (action == "get"): + if requri == '/v3/auth/catalog' and content and content.get("catalog"): + content['catalog'] = ProxyUtils.update_catalog_dnsaas( + vim_id, content['catalog'], self.proxy_prefix, vim) return Response(headers={'X-Subject-Token': tmp_auth_token}, data=content, status=resp.status_code) - return Response(headers={'X-Subject-Token': tmp_auth_token}, status=resp.status_code) + except VimDriverNewtonException as e: return Response(data={'error': e.content}, status=e.status_code) except HttpError as e: @@ -145,7 +158,7 @@ class Services(APIView): status=status.HTTP_500_INTERNAL_SERVER_ERROR) def head(self, request, vimid="", servicetype="", requri=""): - self._logger.debug("Services--head::META> %s" % request.META) + #self._logger.debug("Services--head::META> %s" % request.META) self._logger.debug("Services--head::data> %s" % request.data) self._logger.debug("Services--head::vimid, servicetype, requri> %s,%s,%s" % (vimid, servicetype, requri)) @@ -184,14 +197,14 @@ class Services(APIView): status=status.HTTP_500_INTERNAL_SERVER_ERROR) def get(self, request, vimid="", servicetype="", requri=""): - self._logger.debug("Services--get::META> %s" % request.META) + #self._logger.debug("Services--get::META> %s" % request.META) self._logger.debug("Services--get::data> %s" % request.data) self._logger.debug("Services--get::vimid, servicetype, requri> %s,%s,%s" % (vimid, servicetype, requri)) return self._do_action("get", request, vimid, servicetype, requri) def post(self, request, vimid="", servicetype="", requri=""): - self._logger.debug("Services--post::META> %s" % request.META) + #self._logger.debug("Services--post::META> %s" % request.META) self._logger.debug("Services--post::data> %s" % request.data) self._logger.debug("Services--post::vimid, servicetype, requri> %s,%s,%s" % (vimid, servicetype, requri)) @@ -199,21 +212,21 @@ class Services(APIView): return self._do_action("post", request, vimid, servicetype, requri) def put(self, request, vimid="", servicetype="", requri=""): - self._logger.debug("Services--put::META> %s" % request.META) + #self._logger.debug("Services--put::META> %s" % request.META) self._logger.debug("Services--put::data> %s" % request.data) self._logger.debug("Services--put::vimid, servicetype, requri> %s,%s,%s" % (vimid, servicetype, requri)) return self._do_action("put", request, vimid, servicetype, requri) def patch(self, request, vimid="", servicetype="", requri=""): - self._logger.debug("Services--patch::META> %s" % request.META) + #self._logger.debug("Services--patch::META> %s" % request.META) self._logger.debug("Services--patch::data> %s" % request.data) self._logger.debug("Services--patch::vimid, servicetype, requri> %s,%s,%s" % (vimid, servicetype, requri)) return self._do_action("patch", request, vimid, servicetype, requri) def delete(self, request, vimid="", servicetype="", requri=""): - self._logger.debug("Services--delete::META> %s" % request.META) + #self._logger.debug("Services--delete::META> %s" % request.META) self._logger.debug("Services--delete::data> %s" % request.data) self._logger.debug("Services--delete::vimid, servicetype, requri> %s,%s,%s" % (vimid, servicetype, requri)) @@ -229,7 +242,7 @@ class GetTenants(Services): self._logger = logger def get(self, request, vimid="", servicetype="identity", requri='projects'): - self._logger.debug("GetTenants--get::META> %s" % request.META) + #self._logger.debug("GetTenants--get::META> %s" % request.META) self._logger.debug("GetTenants--get::data> %s" % request.data) self._logger.debug("GetTenants--get::vimid, servicetype, requri> %s,%s,%s" % (vimid, servicetype, requri)) diff --git a/newton/newton/registration/views/registration.py b/newton/newton/registration/views/registration.py index 0a9f7f8e..5a1d2e9d 100644 --- a/newton/newton/registration/views/registration.py +++ b/newton/newton/registration/views/registration.py @@ -600,7 +600,7 @@ class Registry(APIView): if retcode == 0 and content: viminfo = json.JSONDecoder().decode(content) # cloud_epa_caps["resource-version"] = content["resource-version"] - viminfo['identity-url'] = self.proxy_prefix + "/%s/identity/v3" % vimid + viminfo['identity-url'] = self.proxy_prefix + "/%s/identity/v2.0" % vimid retcode, content, status_code = \ restcall.req_to_aai("/cloud-infrastructure/cloud-regions/cloud-region/%s/%s" diff --git a/newton/newton/requests/views/util.py b/newton/newton/requests/views/util.py index 59eed5ab..ba383475 100644 --- a/newton/newton/requests/views/util.py +++ b/newton/newton/requests/views/util.py @@ -68,7 +68,8 @@ class VimDriverUtils(object): password=vim["password"], user_domain_name=vim["domain"], project_id=tenantid) - elif '/identity' in vim["url"]: + #elif '/identity' in vim["url"]: + else: auth = keystone_v3.Password(auth_url=vim["url"]+"/v3", username=vim["userName"], password=vim["password"], @@ -87,7 +88,8 @@ class VimDriverUtils(object): project_name=tenant_name, user_domain_name=vim["domain"], project_domain_name=vim["domain"]) - elif '/identity' in vim["url"]: + #elif '/identity' in vim["url"]: + else: auth = keystone_v3.Password(auth_url=vim["url"]+"/v3", username=vim["userName"], password=vim["password"], |