Exemplo n.º 1
0
    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()
Exemplo n.º 2
0
 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
Exemplo n.º 3
0
 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