Make cloud provider plugin configurable
[multicloud/framework.git] / multivimbroker / multivimbroker / forwarder / views.py
1 # Copyright 2017 Wind River Systems, Inc.
2 #
3 # Licensed under the Apache License, Version 2.0 (the "License");
4 # you may not use this file except in compliance with the License.
5 # You may obtain a copy of the License at
6 #
7 #         http://www.apache.org/licenses/LICENSE-2.0
8 #
9 # Unless required by applicable law or agreed to in writing, software
10 # distributed under the License is distributed on an "AS IS" BASIS,
11 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 # See the License for the specific language governing permissions and
13 # limitations under the License.
14
15 import os
16 import json
17
18 from rest_framework.views import APIView
19 from rest_framework.views import Response
20 from rest_framework.views import status
21 from multivimbroker.forwarder.base import BaseHandler
22
23 #
24
25
26 class BaseServer(BaseHandler, APIView):
27
28     def get(self, request, vimid):
29         raise NotImplementedError()
30
31     def post(self, request, vimid):
32         raise NotImplementedError()
33
34     def put(self, request, vimid):
35         raise NotImplementedError()
36
37     def delete(self, request, vimid):
38         raise NotImplementedError()
39
40     def head(self, request, vimid):
41         raise NotImplementedError()
42
43     def patch(self, request, vimid):
44         raise NotImplementedError()
45
46
47 # proxy handler
48 class Identity(BaseServer):
49
50     def get(self, request, vimid):
51
52         return self.send(vimid, request.get_full_path(), request.body, "GET")
53
54     def post(self, request, vimid):
55
56         return self.send(vimid, request.get_full_path(), request.body, "POST")
57
58
59 class Registry(BaseServer):
60
61     def post(self, request, vimid):
62
63         return self.send(vimid, request.get_full_path(), request.body, "POST")
64
65
66 class UnRegistry(BaseServer):
67
68     def delete(self, request, vimid):
69
70         return self.send(vimid, request.get_full_path(), request.body,
71                          "DELETE")
72
73
74 class Extension(BaseServer):
75
76     def get(self, request, vimid):
77
78         return self.send(vimid, request.get_full_path(), request.body, "GET")
79
80
81 class VIMTypes(BaseServer):
82
83     def get(self, request):
84         # Fix here unless we have plugin registry
85         json_file = os.path.join(os.path.dirname(__file__),
86                                  '../pub/config/provider-plugin.json')
87         with open(json_file, "r") as f:
88             plugins = json.load(f)
89         data = {"vim_types": plugins}
90         return Response(data=data, status=status.HTTP_200_OK)
91
92
93 # forward  handler
94 class Forward(BaseServer):
95
96     def get(self, request, vimid):
97
98         return self.send(vimid, request.get_full_path(), request.body, "GET")
99
100     def post(self, request, vimid):
101
102         return self.send(vimid, request.get_full_path(), request.body, "POST",
103                          headers=None)
104
105     def patch(self, request, vimid):
106
107         return self.send(vimid, request.get_full_path(), request.body, "PATCH",
108                          headers=None)
109
110     def delete(self, request, vimid):
111
112         return self.send(vimid, request.get_full_path(), request.body,
113                          "DELETE", headers=None)
114
115     def head(self, request, vimid):
116
117         return self.send(vimid, request.get_full_path(), request.body, "HEAD")
118
119     def put(self, request, vimid):
120
121         return self.send(vimid, request.get_full_path(), request.body, "PUT",
122                          headers=None)