From 0491327f8dcd808402669c3d8f32a5a0f879db45 Mon Sep 17 00:00:00 2001 From: fujinhua Date: Thu, 4 Apr 2019 08:32:13 +0800 Subject: Add os-interface api for server Change-Id: Ia9f98d3ba841dd70d0969334d86dbbd3a0f6ac0e Issue-ID: MULTICLOUD-565 Signed-off-by: fujinhua --- share/newton_base/openoapi/server.py | 83 +++++++++++++++++++++++++++++++++++- 1 file changed, 82 insertions(+), 1 deletion(-) (limited to 'share/newton_base') diff --git a/share/newton_base/openoapi/server.py b/share/newton_base/openoapi/server.py index 0c2382ae..7dc229f0 100644 --- a/share/newton_base/openoapi/server.py +++ b/share/newton_base/openoapi/server.py @@ -555,7 +555,7 @@ class ServerAction(APIView): endpoint_filter=self.service, headers={"Content-Type": "application/json", "Accept": "application/json"}) - resp_body = {} + resp_body = resp.json() return Response(data=resp_body, status=resp.status_code) except VimDriverKiloException as e: @@ -568,9 +568,90 @@ class ServerAction(APIView): return Response(data={'error': str(e)}, status=status.HTTP_500_INTERNAL_SERVER_ERROR) + class APIv1ServerAction(ServerAction): def post(self, request, cloud_owner="", cloud_region_id="", tenantid="", serverid=""): self._logger.info("%s, %s" % (cloud_owner, cloud_region_id)) vimid = extsys.encode_vim_id(cloud_owner, cloud_region_id) return super(APIv1ServerAction, self).post(request, vimid, tenantid, serverid) + + +class ServerOsInterface(APIView): + service = {'service_type': 'compute', + 'interface': 'public'} + def post(self, request, vimid="", tenantid="", serverid=""): + logger.debug("ServerOsInterface--post::> %s" % request.data) + logger.debug("vimid=%s, tenantid=%s, serverid=%s", vimid, tenantid, serverid) + try: + # prepare request resource to vim instance + vim = VimDriverUtils.get_vim_info(vimid) + sess = VimDriverUtils.get_session(vim, tenantid) + + # operate server now + req_resouce = "servers/{server_id}/os-interface".format(server_id=serverid) + req_body = json.JSONEncoder().encode(request.data) + resp = sess.post(req_resouce, data=req_body, + endpoint_filter=self.service, + headers={"Content-Type": "application/json", + "Accept": "application/json"}) + resp_body = resp.json() + + return Response(data=resp_body, status=resp.status_code) + except VimDriverKiloException as e: + return Response(data={'error': e.content}, status=e.status_code) + except HttpError as e: + logger.error("HttpError: status:%s, response:%s" % (e.http_status, e.response.json())) + return Response(data=e.response.json(), status=e.http_status) + except Exception as e: + logger.error(traceback.format_exc()) + return Response(data={'error': str(e)}, + status=status.HTTP_500_INTERNAL_SERVER_ERROR) + + +class APIv1ServerOsInterface(ServerOsInterface): + def post(self, request, cloud_owner="", cloud_region_id="", tenantid="", serverid=""): + self._logger.info("%s, %s" % (cloud_owner, cloud_region_id)) + + vimid = extsys.encode_vim_id(cloud_owner, cloud_region_id) + return super(APIv1ServerOsInterface, self).post(request, vimid, tenantid, serverid) + + +class ServerOsInterfacePort(APIView): + service = {'service_type': 'compute', + 'interface': 'public'} + def delete(self, request, vimid="", tenantid="", serverid="", portid=""): + logger.debug("ServerOsInterfacePort--delete::portid=%s", portid) + logger.debug("vimid=%s, tenantid=%s, serverid=%s", vimid, tenantid, serverid) + try: + # prepare request resource to vim instance + vim = VimDriverUtils.get_vim_info(vimid) + sess = VimDriverUtils.get_session(vim, tenantid) + + # operate server now + req_resfmt = "servers/{server_id}/os-interface/{port_id}" + req_resouce = req_resfmt.format(server_id=serverid, port_id=portid) + resp = sess.delete(req_resouce, + endpoint_filter=self.service, + headers={"Content-Type": "application/json", + "Accept": "application/json"}) + resp_body = {} + + return Response(data=resp_body, status=resp.status_code) + except VimDriverKiloException as e: + return Response(data={'error': e.content}, status=e.status_code) + except HttpError as e: + logger.error("HttpError: status:%s, response:%s" % (e.http_status, e.response.json())) + return Response(data=e.response.json(), status=e.http_status) + except Exception as e: + logger.error(traceback.format_exc()) + return Response(data={'error': str(e)}, + status=status.HTTP_500_INTERNAL_SERVER_ERROR) + + +class APIv1ServerOsInterfacePort(ServerOsInterfacePort): + def delete(self, request, cloud_owner="", cloud_region_id="", tenantid="", serverid="", portid=""): + self._logger.info("%s, %s" % (cloud_owner, cloud_region_id)) + + vimid = extsys.encode_vim_id(cloud_owner, cloud_region_id) + return super(APIv1ServerOsInterfacePort, self).post(request, vimid, tenantid, serverid, portid) -- cgit 1.2.3-korg