summaryrefslogtreecommitdiffstats
path: root/vio/vio/swagger/views/server/views.py
diff options
context:
space:
mode:
Diffstat (limited to 'vio/vio/swagger/views/server/views.py')
-rw-r--r--vio/vio/swagger/views/server/views.py46
1 files changed, 46 insertions, 0 deletions
diff --git a/vio/vio/swagger/views/server/views.py b/vio/vio/swagger/views/server/views.py
index fca9cb9..be720c8 100644
--- a/vio/vio/swagger/views/server/views.py
+++ b/vio/vio/swagger/views/server/views.py
@@ -183,3 +183,49 @@ class GetServerViewV1(GetServerView):
def delete(self, request, cloud_owner, cloud_region, tenantid, serverid):
return super(GetServerViewV1, self).delete(
request, cloud_owner + "_" + cloud_region, tenantid, serverid)
+
+
+class ServerActionView(APIView):
+
+ def post(self, request, vimid, tenantid, serverid):
+ try:
+ action_req = json.loads(request.body)
+ except Exception as e:
+ return Response(data={'error': 'Fail to decode request body.'},
+ status=status.HTTP_500_INTERNAL_SERVER_ERROR)
+
+ try:
+ vim_info = extsys.get_vim_by_id(vimid)
+ except VimDriverVioException as e:
+ return Response(data={'error': str(e)}, status=e.status_code)
+ data = {'vimid': vim_info['vimId'],
+ 'vimName': vim_info['name'],
+ 'username': vim_info['userName'],
+ 'password': vim_info['password'],
+ 'url': vim_info['url']}
+
+ server_op = OperateServers.OperateServers()
+ try:
+ if 'os-start' in action_req:
+ server_op.start_server(data, tenantid, serverid)
+ elif 'os-stop' in action_req:
+ server_op.stop_server(data, tenantid, serverid)
+ elif 'reboot' in action_req:
+ reboot_type = action_req.get('reboot').get('type')
+ server_op.reboot_server(data, tenantid, serverid, reboot_type)
+ else:
+ return Response(data={'error': 'invalid request body.'},
+ status=status.HTTP_500_INTERNAL_SERVER_ERROR)
+ except Exception as e:
+ if hasattr(e, "http_status"):
+ return Response(data={'error': str(e)}, status=e.http_status)
+ else:
+ return Response(data={'error': str(e)},
+ status=status.HTTP_500_INTERNAL_SERVER_ERROR)
+ return Response(status=status.HTTP_202_ACCEPTED)
+
+
+class ServerActionViewV1(ServerActionView):
+ def post(self, request, cloud_owner, cloud_region, tenantid, serverid):
+ return super(ServerActionViewV1, self).post(
+ request, cloud_owner + "_" + cloud_region, tenantid, serverid)