def apply_host(self, request, project_id): # NOTE: 项目下如果有在申请的任务,必须等任务结束后,才能再次申请 self.verify_task_exist(project_id) username = request.user.username self.can_apply_host(int(request.project.cc_app_id), username) slz = ApplyHostDataSLZ(data=request.data) slz.is_valid(raise_exception=True) data = slz.validated_data # 添加业务ID和申请人信息 data.update({"cc_app_id": request.project.cc_app_id, "username": username}) with ContextActivityLogClient( project_id=project_id, user=request.user.username, resource_type="instance", resource="apply host", extra=data, description=_("申请主机"), ).log_add(): task_id, task_url = create_and_start_host_application(**data) # 存储数据,用于后续的查询 log_record = HostApplyTaskLog.objects.create( project_id=project_id, task_id=task_id, task_url=task_url, status=TaskStatus.RUNNING.value, operator=username, params=data, logs={"申请主机": {"state": "RUNNING"}}, ) # 启动轮询任务 ApplyHostStatusPoller.start({"log_id": log_record.id, "task_id": task_id}, ApplyHostStatusResultHandler) return Response()
def test_create_and_start_host_application(self): username = "******" cc_app_id = "1" host_data = HostData( region="ap-nanjing", vpc_name="vpc_test", cvm_type="test", disk_type='test', disk_size=100, replicas=1, zone_id='ap-nanjing-1', ) task_id, task_url = sops.create_and_start_host_application(username, cc_app_id, host_data) assert task_id == sops_json.fake_task_id assert task_url == sops_json.fake_task_url
def test_create_and_start_host_application(self): task_id, task_url = sops.create_and_start_host_application( **self.fake_params) assert task_id == sops_json.fake_task_id assert task_url == sops_json.fake_task_url