From f0775787e6ca6e09a13dbee8d642636e0757b43e Mon Sep 17 00:00:00 2001 From: Ethan Lynn Date: Wed, 10 Apr 2019 16:36:44 +0800 Subject: Add API for workload AAI update This patch adds the workload AAI update support. Change-Id: I0c6156d359bb004d5c0cc9a387bef0f9b0e78133 Issue-ID: MULTICLOUD-507 Signed-off-by: Ethan Lynn --- vio/vio/swagger/views/workload/views.py | 41 +++++++++++++++++++++++++++++++-- 1 file changed, 39 insertions(+), 2 deletions(-) diff --git a/vio/vio/swagger/views/workload/views.py b/vio/vio/swagger/views/workload/views.py index efcc2f7..a1669c2 100644 --- a/vio/vio/swagger/views/workload/views.py +++ b/vio/vio/swagger/views/workload/views.py @@ -18,7 +18,9 @@ from rest_framework import status from rest_framework.response import Response from rest_framework.views import APIView +from vio import heatbridge from vio.pub.msapi import extsys +from vio.pub.utils.restcall import AAIClient from vio.pub.vim.vimapi.heat import OperateStack from vio.pub.exceptions import VimDriverVioException @@ -56,7 +58,7 @@ class CreateStackViewV1(APIView): body = json.loads(request.body) logger.debug("infra_workload post body: %s" % body) template_type = body['template_type'] - if template_type != "heat": + if template_type.lower() != "heat": return Response( data={ "error": "invalid template type %s" % template_type @@ -74,7 +76,9 @@ class CreateStackViewV1(APIView): stack = stack_op.create_vim_stack(**stack_body) rsp = { "template_type": "heat", - "workload_id": stack.id + "workload_id": stack.id, + "workload_status": stack.status, + "workload_status_reason": stack.status_reason, } return Response(data=rsp, status=status.HTTP_201_CREATED) except Exception as e: @@ -87,6 +91,7 @@ class CreateStackViewV1(APIView): class GetDelStackViewV1(APIView): def get(self, request, cloud_owner, cloud_region, workload_id): + # import ipdb; ipdb.set_trace() try: vim_info = extsys.get_vim_by_id(cloud_owner + "_" + cloud_region) # vim_info['tenant'] = tenantid @@ -95,10 +100,12 @@ class GetDelStackViewV1(APIView): try: stack_op = OperateStack.OperateStack(vim_info) stack = stack_op.get_vim_stack(workload_id) + # import ipdb; ipdb.set_trace() rsp = { "template_type": "heat", "workload_id": stack.id, "workload_status": stack.status, + "workload_status_reason": stack.status_reason, } return Response(data=rsp, status=status.HTTP_200_OK) except Exception as e: @@ -108,6 +115,36 @@ class GetDelStackViewV1(APIView): return Response(data={'error': str(e)}, status=status.HTTP_500_INTERNAL_SERVER_ERROR) + def post(self, request, cloud_owner, cloud_region, workload_id): + # import ipdb; ipdb.set_trace() + try: + vim_info = extsys.get_vim_by_id(cloud_owner + "_" + cloud_region) + # vim_info['tenant'] = tenantid + except VimDriverVioException as e: + return Response(data={'error': str(e)}, status=e.status_code) + try: + body = json.loads(request.body) + vf_module_id = body.get("vf-module-id") + generic_vnf_id = body.get("generic-vnf-id") + contents = heatbridge.heat_bridge(vim_info, workload_id) + contents['vf-module-id'] = vf_module_id + contents['generic-vnf-id'] = generic_vnf_id + aai_adapter = AAIClient(cloud_owner, cloud_region) + aai_adapter.add_vservers(contents) + rsp = { + "template_type": "heat", + "workload_id": workload_id, + "workload_status": "AAI_IN_PROGRESS", + "workload_status_reason": "Updating AAI relationship", + } + return Response(data=rsp, status=status.HTTP_202_ACCEPTED) + 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) + def delete(self, request, cloud_owner, cloud_region, workload_id): try: vim_info = extsys.get_vim_by_id(cloud_owner + "_" + cloud_region) -- cgit 1.2.3-korg