X-Git-Url: https://gerrit.onap.org/r/gitweb?a=blobdiff_plain;f=multivimbroker%2Fmultivimbroker%2Fforwarder%2Fviews.py;h=c2ea50587697e12855dfc3b0e0f9fb58d6b17041;hb=refs%2Fchanges%2F31%2F28131%2F1;hp=ca93b8e9ecdafbfa14b14d76b0592c7b4d47f0d9;hpb=0806baa8146a76eb72dba55bb5340cb20924657f;p=multicloud%2Fframework.git diff --git a/multivimbroker/multivimbroker/forwarder/views.py b/multivimbroker/multivimbroker/forwarder/views.py index ca93b8e..c2ea505 100644 --- a/multivimbroker/multivimbroker/forwarder/views.py +++ b/multivimbroker/multivimbroker/forwarder/views.py @@ -1,4 +1,5 @@ # Copyright 2017 Wind River Systems, Inc. +# Copyright (c) 2017-2018 VMware, Inc. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -11,62 +12,112 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. -import logging -import re - -from django.http import HttpResponse -from django.views.decorators.csrf import csrf_exempt - -from rest_framework import status - -from multivimbroker.pub.utils.restcall import req_by_msb -from multivimbroker.pub.msapi.extsys import get_vim_by_id - -logger = logging.getLogger(__name__) - - -@csrf_exempt -def route(request, vimid=''): - """ get vim info from vimid from local cache first - and then to ESR if cache miss - """ - content = "" - status_code = status.HTTP_200_OK - try: - vim = get_vim_by_id(vimid) - if vim["type"] and vim["version"]: - pass - - except Exception as e: - logger.error("get_vim_by_id, exception: %s" % e) - return HttpResponse("Not a valid VIM instance", status=status.HTTP_404_NOT_FOUND) - - try: - if vim and vim["type"] == "openstack": - if vim["version"] == "kilo": - multivimdriver = "multivim-kilo" - elif vim["version"] == "newton": - multivimdriver = "multivim-newton" - else: - # if vim type is openstack, use latest "newton" version as default - multivimdriver = "multivim-newton" - elif vim and vim["type"] == "vmware": - multivimdriver = "multivim-vio" - else: - logger.error("wrong vim id: %s, return from extsys:%s" % - vimid, vim) - return HttpResponse("Not support VIM type", status=status.HTTP_404_NOT_FOUND) - - route_uri = re.sub('multivim', multivimdriver, request.get_full_path()) - - retcode, content, status_code = \ - req_by_msb(route_uri, request.method, request.body) - if retcode != 0: - # Execptions are handled within req_by_msb - logger.error("Status code is %s, detail is %s.", - status_code, content) - except Exception as e: - content = e - status_code = status.HTTP_500_INTERNAL_SERVER_ERROR - logger.error("exception: %s" % e) - return HttpResponse(content, status=status_code) + +import os +import json + +from rest_framework.views import APIView +from rest_framework.views import Response +from rest_framework.views import status +from multivimbroker.forwarder.base import BaseHandler + +# + + +class BaseServer(BaseHandler, APIView): + + def get(self, request, vimid): + raise NotImplementedError() + + def post(self, request, vimid): + raise NotImplementedError() + + def put(self, request, vimid): + raise NotImplementedError() + + def delete(self, request, vimid): + raise NotImplementedError() + + def head(self, request, vimid): + raise NotImplementedError() + + def patch(self, request, vimid): + raise NotImplementedError() + + +# proxy handler +class Identity(BaseServer): + + def get(self, request, vimid): + + return self.send(vimid, request.get_full_path(), request.body, "GET") + + def post(self, request, vimid): + + return self.send(vimid, request.get_full_path(), request.body, "POST") + + +class Registry(BaseServer): + + def post(self, request, vimid): + + return self.send(vimid, request.get_full_path(), request.body, "POST") + + +class UnRegistry(BaseServer): + + def delete(self, request, vimid): + + return self.send(vimid, request.get_full_path(), request.body, + "DELETE") + + +class Extension(BaseServer): + + def get(self, request, vimid): + + return self.send(vimid, request.get_full_path(), request.body, "GET") + + +class VIMTypes(BaseServer): + + def get(self, request): + # Fix here unless we have plugin registry + json_file = os.path.join(os.path.dirname(__file__), + '../pub/config/provider-plugin.json') + with open(json_file, "r") as f: + plugins = json.load(f) + data = {"vim_types": plugins} + return Response(data=data, status=status.HTTP_200_OK) + + +# forward handler +class Forward(BaseServer): + + def get(self, request, vimid): + + return self.send(vimid, request.get_full_path(), request.body, "GET") + + def post(self, request, vimid): + + return self.send(vimid, request.get_full_path(), request.body, "POST", + headers=None) + + def patch(self, request, vimid): + + return self.send(vimid, request.get_full_path(), request.body, "PATCH", + headers=None) + + def delete(self, request, vimid): + + return self.send(vimid, request.get_full_path(), request.body, + "DELETE", headers=None) + + def head(self, request, vimid): + + return self.send(vimid, request.get_full_path(), request.body, "HEAD") + + def put(self, request, vimid): + + return self.send(vimid, request.get_full_path(), request.body, "PUT", + headers=None)