async def update_status(automation_result, stack_instance, action, to_be_deleted=None): """Updates the status of a functional requirement in a stack instance""" document_manager = get_document_manager() stack_instance = document_manager.get_stack_instance(stack_instance.name) status_to_be_deleted = None for status in stack_instance.status: if status.functional_requirement == automation_result[ "functional_requirement"] and automation_result[ "infrastructure_target"] in status.infrastructure_target \ and status.service == automation_result["service"]: status.service = automation_result["service"] status.functional_requirement = automation_result[ "functional_requirement"] if 'error_message' in automation_result: error_message = automation_result["error_message"] else: error_message = "" if action == "delete" and automation_result["status"] == "READY": status_to_be_deleted = status status.status = automation_result["status"] status.error_message = error_message break if action == "delete": if status_to_be_deleted: stack_instance.status.remove(status_to_be_deleted) if to_be_deleted: delete_services(to_be_deleted, stack_instance) document_manager.write_stack_instance(stack_instance)
async def put_stack_instance( background_tasks: BackgroundTasks, stack_instance_update: StackInstanceUpdate, document_manager: DocumentManager = Depends(get_document_manager), stack_manager: StackManager = Depends(get_stack_manager), redis=Depends(get_redis)): """ Updates a stack instance by using a StackInstanceUpdate object """ logger.info("[StackInstances PUT] Received PUT request") to_be_deleted = stack_manager.check_delete_services(stack_instance_update) (stack_instance, return_result) = stack_manager.process_stack_request( stack_instance_update, "update") if stack_instance is None: return HTTPException(422, return_result) # Perform invocations if not stack_instance_update.disable_invocation: for service in to_be_deleted: background_tasks.add_task(create_job_per_service, service, document_manager, "delete", redis, stack_instance, to_be_deleted) copy_stack_instance = stack_instance.copy(deep=True) delete_services(to_be_deleted, copy_stack_instance) background_tasks.add_task(create_job_for_agent, copy_stack_instance, "update", redis) document_manager.write_stack_instance(stack_instance) return return_result