예제 #1
0
    def _get_resources(self, request, project_id, namespace_id):
        access_token = request.user.token.access_token
        # 查询namespace
        ns_info = get_namespace_by_id(access_token, project_id, namespace_id)
        client = MesosClient(access_token,
                             project_id,
                             ns_info["cluster_id"],
                             env=None)
        # 根据类型查询资源,如果有接口调用失败,先忽略
        res_names = {}
        ns_name = ns_info["name"]
        # 请求bcs api,获取数据
        deployment_resp = client.get_deployment(namespace=ns_name)
        application_resp = client.get_mesos_app_instances(namespace=ns_name)
        configmap_resp = client.get_configmaps(params={"namespace": ns_name})
        service_resp = client.get_services(params={"namespace": ns_name})
        secret_resp = client.get_secrets(params={"namespace": ns_name})

        res_data = {
            MesosResourceName.deployment.value: deployment_resp["data"],
            MesosResourceName.application.value: application_resp["data"],
            MesosResourceName.configmap.value: configmap_resp["data"],
            MesosResourceName.service.value: service_resp["data"],
            MesosResourceName.secret.value: secret_resp["data"],
        }
        res_names = self._compose_res_names(res_data)
        return res_names
예제 #2
0
    def update_release(self, release_data):
        project_id = release_data["project_id"]
        namespace_id = release_data["namespace_id"]
        namespace_info = get_namespace_by_id(self.access_token, project_id,
                                             namespace_id)

        release_id = release_data["release_id"]
        log_params = {
            "project_id":
            project_id,
            "user":
            self.username,
            "resource_type":
            "instance",
            "resource":
            release_data["name"],
            "resource_id":
            release_id,
            "extra":
            json.dumps({
                "namespace": namespace_info["name"],
                "variable_info": release_data["variable_info"]
            }),
        }
        try:
            update_resources(self.access_token, self.username, release_data,
                             namespace_info)
        except Exception as e:
            log_params["description"] = f"rollupdate failed: {e}"
            client.ContextActivityLogClient(**log_params).log_modify(
                activity_status="failed")
            update_inst_params = {"ins_state": InsState.UPDATE_FAILED.value}
        else:
            log_params["description"] = f"rollupdate success"
            client.ContextActivityLogClient(**log_params).log_modify(
                activity_status="succeed")
            update_inst_params = {"ins_state": InsState.UPDATE_SUCCESS.value}

        update_inst_params.update({
            "oper_type": ROLLING_UPDATE_INSTANCE,
            "variables": release_data["variable_info"].get(namespace_id) or {}
        })

        InstanceConfig.objects.filter(
            instance_id=release_id,
            category=release_data["resource_name"],
            name=release_data["name"],
            namespace=namespace_id,
        ).update(**update_inst_params)

        return release_id
예제 #3
0
    def update_release(self, release_data):
        project_id = release_data["project_id"]
        namespace_id = release_data["namespace_id"]
        namespace_info = get_namespace_by_id(self.access_token, project_id,
                                             namespace_id)

        release_id = release_data["release_id"]
        log_params = {
            "project_id": project_id,
            "user": self.username,
            "resource": release_data["name"],
            "resource_id": release_id,
            "extra": {
                "namespace": namespace_info["name"],
                "variable_info": release_data["variable_info"]
            },
            'activity_type': ActivityType.Modify,
        }
        try:
            update_resources(self.access_token, self.username, release_data,
                             namespace_info)
        except Exception as e:
            log_params["description"] = f"rollupdate failed: {e}"
            log_params['activity_status'] = ActivityStatus.Failed
            InstanceAuditor(AuditContext(**log_params)).log_raw()
            update_inst_params = {"ins_state": InsState.UPDATE_FAILED.value}
        else:
            log_params["description"] = f"rollupdate success"
            log_params['activity_status'] = ActivityStatus.Succeed
            InstanceAuditor(AuditContext(**log_params)).log_raw()
            update_inst_params = {"ins_state": InsState.UPDATE_SUCCESS.value}

        update_inst_params.update({
            "oper_type": ROLLING_UPDATE_INSTANCE,
            "variables": release_data["variable_info"].get(namespace_id) or {}
        })

        InstanceConfig.objects.filter(
            instance_id=release_id,
            category=release_data["resource_name"],
            name=release_data["name"],
            namespace=namespace_id,
        ).update(**update_inst_params)

        return release_id
예제 #4
0
 def get_ns(self, request, project_id, namespace_id):
     """获取单个命名空间的信息"""
     access_token = request.user.token.access_token
     ns_info = get_namespace_by_id(access_token, project_id, namespace_id)
     return response.Response(ns_info)