diff options
Diffstat (limited to 'share/starlingx_base/resource/infra_workload.py')
-rw-r--r-- | share/starlingx_base/resource/infra_workload.py | 118 |
1 files changed, 60 insertions, 58 deletions
diff --git a/share/starlingx_base/resource/infra_workload.py b/share/starlingx_base/resource/infra_workload.py index 6b064856..fc6d7ef2 100644 --- a/share/starlingx_base/resource/infra_workload.py +++ b/share/starlingx_base/resource/infra_workload.py @@ -85,19 +85,21 @@ class InfraWorkload(newton_infra_workload.InfraWorkload): backlog_item = { "id": workloadid, "worker": worker_self.workload_update, - "payload": (worker_self, vimid, workloadid, + "payload": (vimid, workloadid, request.data, specified_project_idorname), "repeat": 0, # one time job # format of status: retcode:0 is ok, otherwise error code from http status, Status ENUM, Message "status": ( 0, "UPDATE_IN_PROGRESS", - "backlog to update workload %s pends to schedule" % workloadid + "backlog to update workload %s is on progress" % workloadid ) } gInfraWorkloadThread.add(backlog_item) if 0 == gInfraWorkloadThread.state(): gInfraWorkloadThread.start() - + # progress = worker_self.workload_update( + # vimid, workloadid, + # request.data, specified_project_idorname) # now query the progress backlog_item = gInfraWorkloadThread.get(workloadid) if not backlog_item: @@ -156,10 +158,10 @@ class InfraWorkload(newton_infra_workload.InfraWorkload): # now check the query params in case of query existing of workload querystr = request.META.get("QUERY_STRING", None) qd = QueryDict(querystr).dict() if querystr else None - workload_name = qd.get("name", None) if qd else None - workload_id = qd.get("id", None) if qd else None + workload_query_name = qd.get("name", None) if qd else None + workload_query_id = qd.get("id", None) if qd else None - if not workload_name and not workload_id: + if not workload_query_name and not workload_query_id: resp_template["workload_status_reason"] =\ "workload id is not found in API url" return Response( @@ -175,64 +177,65 @@ class InfraWorkload(newton_infra_workload.InfraWorkload): # now query the status of workload by name or id, id as 1st priority progress_code, progress_status, progress_msg =\ 0, "GET_FAILED", "" - if not workload_id: - # by name + if workload_query_id: + # by id progress_code, progress_status, progress_msg =\ worker_self.workload_status( - vimid, stack_name=workload_name, + vimid, stack_id=workload_query_id, project_idorname=specified_project_idorname ) else: - # by id + # by name or get all stacks progress_code, progress_status, progress_msg =\ worker_self.workload_status( - vimid, stack_id=workloadid, + vimid, stack_name=workload_query_name, project_idorname=specified_project_idorname ) resp_template["workload_status"] = progress_status resp_template["workload_status_reason"] = progress_msg status_code = status.HTTP_200_OK \ - if progress_code == 0 else progress_code + if progress_code == 0 else status.HTTP_500_INTERNAL_SERVER_ERROR # progress_code pass - # now query the progress - backlog_item = gInfraWorkloadThread.get(workloadid) - if not backlog_item: - # backlog item not found, so check the stack status - worker_self = InfraWorkloadHelper( - settings.MULTICLOUD_API_V1_PREFIX, - settings.AAI_BASE_URL - ) - progress_code, progress_status, progress_msg =\ - worker_self.workload_status( - vimid, stack_id=workloadid, - project_idorname=specified_project_idorname) - - resp_template["workload_status"] = progress_status - resp_template["workload_status_reason"] = progress_msg - status_code = status.HTTP_200_OK\ - if progress_code == 0 else progress_code - else: - progress = backlog_item.get( - "status", - (13, "GET_FAILED", - "Unexpected:status not found in backlog item") - ) - try: - progress_code = progress[0] - progress_status = progress[1] - progress_msg = progress[2] - # if gInfraWorkloadThread.expired(workloadid): - # gInfraWorkloadThread.remove(workloadid) + # now query the progress + backlog_item = gInfraWorkloadThread.get(workloadid) + if not backlog_item: + # backlog item not found, so check the stack status + worker_self = InfraWorkloadHelper( + settings.MULTICLOUD_API_V1_PREFIX, + settings.AAI_BASE_URL + ) + progress_code, progress_status, progress_msg =\ + worker_self.workload_detail( + vimid, stack_id=workloadid, + project_idorname=specified_project_idorname) + resp_template["workload_status"] = progress_status resp_template["workload_status_reason"] = progress_msg status_code = status.HTTP_200_OK\ if progress_code == 0 else progress_code - except Exception as e: - resp_template["workload_status_reason"] = progress + + else: + progress = backlog_item.get( + "status", + (13, "GET_FAILED", + "Unexpected:status not found in backlog item") + ) + try: + progress_code = progress[0] + progress_status = progress[1] + progress_msg = progress[2] + # if gInfraWorkloadThread.expired(workloadid): + # gInfraWorkloadThread.remove(workloadid) + resp_template["workload_status"] = progress_status + resp_template["workload_status_reason"] = progress_msg + status_code = status.HTTP_200_OK\ + if progress_code == 0 else progress_code + except Exception as e: + resp_template["workload_status_reason"] = progress return Response(data=resp_template, status=status_code) @@ -277,14 +280,14 @@ class InfraWorkload(newton_infra_workload.InfraWorkload): backlog_item = { "id": workloadid, "worker": worker_self.workload_delete, - "payload": (worker_self, vimid, workloadid, request.data, + "payload": (vimid, workloadid, request.data, specified_project_idorname), "repeat": 0, # one time job # format of status: retcode:0 is ok, otherwise error code from http status, Status ENUM, Message "status": ( 0, "DELETE_IN_PROGRESS", "backlog for delete the workload %s " - "pends to schedule" % workloadid + "is on progress" % workloadid ) } gInfraWorkloadThread.add(backlog_item) @@ -335,29 +338,29 @@ class APIv1InfraWorkload(InfraWorkload): super(APIv1InfraWorkload, self).__init__() # self._logger = logger - def post(self, request, cloud_owner="", cloud_region_id=""): + def post(self, request, cloud_owner="", cloud_region_id="", workloadid=""): # self._logger.info("cloud owner, cloud region id, data: %s,%s, %s" % # (cloud_owner, cloud_region_id, request.data)) # self._logger.debug("META: %s" % request.META) vimid = extsys.encode_vim_id(cloud_owner, cloud_region_id) - return super(APIv1InfraWorkload, self).post(request, vimid) + return super(APIv1InfraWorkload, self).post(request, vimid, workloadid) - def get(self, request, cloud_owner="", cloud_region_id="", requri=""): + def get(self, request, cloud_owner="", cloud_region_id="", workloadid=""): # self._logger.info("cloud owner, cloud region id, data: %s,%s, %s" % # (cloud_owner, cloud_region_id, request.data)) # self._logger.debug("META: %s" % request.META) vimid = extsys.encode_vim_id(cloud_owner, cloud_region_id) - return super(APIv1InfraWorkload, self).get(request, vimid, requri) + return super(APIv1InfraWorkload, self).get(request, vimid, workloadid) - def delete(self, request, cloud_owner="", cloud_region_id="", requri=""): + def delete(self, request, cloud_owner="", cloud_region_id="", workloadid=""): # self._logger.info("cloud owner, cloud region id, data: %s,%s, %s" % # (cloud_owner, cloud_region_id, request.data)) # self._logger.debug("META: %s" % request.META) vimid = extsys.encode_vim_id(cloud_owner, cloud_region_id) - return super(APIv1InfraWorkload, self).delete(request, vimid, requri) + return super(APIv1InfraWorkload, self).delete(request, vimid, workloadid) class InfraWorkloadHelper(infra_workload_helper.InfraWorkloadHelper): @@ -486,7 +489,7 @@ class InfraWorkloadHelper(infra_workload_helper.InfraWorkloadHelper): template_data = data.get("template_data", {}) # resp_template = None if not template_type or "heat" != template_type.lower(): - return 14, "CREATE_FAILED", \ + return status.HTTP_400_BAD_REQUEST, "CREATE_FAILED", \ "Bad parameters: template type %s is not heat" %\ template_type or "" @@ -503,9 +506,8 @@ class InfraWorkloadHelper(infra_workload_helper.InfraWorkloadHelper): # reset to make sure "files" are empty template_data["files"] = {} - template_data["stack_name"] = vf_module_id \ - if not hasattr(template_data, "stack_name")\ - else template_data["stack_name"] + template_data["stack_name"] =\ + template_data.get("stack_name", vf_module_id) # authenticate cloud_owner, regionid = extsys.decode_vim_id(vimid) @@ -522,7 +524,7 @@ class InfraWorkloadHelper(infra_workload_helper.InfraWorkloadHelper): (cloud_owner, regionid, v2_token_resp_json) logger.error(errmsg) return ( - retcode, "CREATE_FAILED", errmsg + os_status, "CREATE_FAILED", errmsg ) # tenant_id = v2_token_resp_json["access"]["token"]["tenant"]["id"] @@ -540,5 +542,5 @@ class InfraWorkloadHelper(infra_workload_helper.InfraWorkloadHelper): # stackid = stack1["id"] if stack1 else "" return 0, "CREATE_IN_PROGRESS", stack1 else: - self._logger.info("RESP with data> result:%s" % content) - return retcode, "CREATE_FAILED", content + self._logger.info("workload_create fails: %s" % content) + return os_status, "CREATE_FAILED", content |