1 # Copyright 2017 Wind River Systems, Inc.
2 # Copyright (c) 2017-2018 VMware, Inc.
4 # Licensed under the Apache License, Version 2.0 (the "License");
5 # you may not use this file except in compliance with the License.
6 # You may obtain a copy of the License at
8 # http://www.apache.org/licenses/LICENSE-2.0
10 # Unless required by applicable law or agreed to in writing, software
11 # distributed under the License is distributed on an "AS IS" BASIS,
12 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 # See the License for the specific language governing permissions and
14 # limitations under the License.
19 from rest_framework.views import APIView
20 from rest_framework.views import Response
21 from rest_framework.views import status
22 from multivimbroker.forwarder.base import BaseHandler
25 class BaseServer(BaseHandler, APIView):
27 def get(self, request, vimid):
28 raise NotImplementedError()
30 def post(self, request, vimid):
31 raise NotImplementedError()
33 def put(self, request, vimid):
34 raise NotImplementedError()
36 def delete(self, request, vimid):
37 raise NotImplementedError()
39 def head(self, request, vimid):
40 raise NotImplementedError()
42 def patch(self, request, vimid):
43 raise NotImplementedError()
47 class Identity(BaseServer):
49 def get(self, request, vimid):
51 return self.send(vimid, request.get_full_path(), request.body, "GET")
53 def post(self, request, vimid):
55 return self.send(vimid, request.get_full_path(), request.body, "POST")
58 class Registry(BaseServer):
60 def post(self, request, vimid):
62 return self.send(vimid, request.get_full_path(), request.body, "POST")
65 class UnRegistry(BaseServer):
67 def delete(self, request, vimid):
69 return self.send(vimid, request.get_full_path(), request.body,
73 class Extension(BaseServer):
75 def get(self, request, vimid):
77 return self.send(vimid, request.get_full_path(), request.body, "GET")
80 class VIMTypes(BaseServer):
82 def get(self, request):
83 # Fix here unless we have plugin registry
84 json_file = os.path.join(os.path.dirname(__file__),
85 '../pub/config/provider-plugin.json')
86 with open(json_file, "r") as f:
87 plugins = json.load(f)
89 for k, v in plugins.items():
91 item["vim_type"] = v.get("vim_type")
92 item["versions"] = [k for k in v.get('versions', {})]
94 return Response(data=ret, status=status.HTTP_200_OK)
97 class CheckCapacity(BaseServer):
99 def post(self, request):
101 body = json.loads(request.body)
102 except json.JSONDecodeError as e:
104 data={'error': 'Invalidate request body %s.' % e},
105 status=status.HTTP_400_BAD_REQUEST)
109 "vCPU": body.get("vCPU", 0),
110 "Memory": body.get("Memory", 0),
111 "Storage": body.get("Storage", 0)
113 for vim in body.get("VIMs", []):
114 url = request.get_full_path().replace(
115 "check_vim_capacity", "%s/capacity_check" % vim)
116 resp = self.send(vim, url, newbody, "POST")
117 if resp.status_code != status.HTTP_200_OK:
120 resp_body = json.loads(resp.body)
121 except json.JSONDecodeError:
123 if not resp_body.get("result", False):
125 ret['VIMs'].append(vim)
126 return Response(data=ret, status=status.HTTP_200_OK)
130 class Forward(BaseServer):
132 def get(self, request, vimid):
134 return self.send(vimid, request.get_full_path(), request.body, "GET")
136 def post(self, request, vimid):
138 return self.send(vimid, request.get_full_path(), request.body, "POST",
141 def patch(self, request, vimid):
143 return self.send(vimid, request.get_full_path(), request.body, "PATCH",
146 def delete(self, request, vimid):
148 return self.send(vimid, request.get_full_path(), request.body,
149 "DELETE", headers=None)
151 def head(self, request, vimid):
153 return self.send(vimid, request.get_full_path(), request.body, "HEAD")
155 def put(self, request, vimid):
157 return self.send(vimid, request.get_full_path(), request.body, "PUT",