Skip to content

Commit

Permalink
feature: 提供 Agent 包管理后台接口 (closed TencentBlueKing#1683)
Browse files Browse the repository at this point in the history
  • Loading branch information
wyyalt committed Oct 9, 2023
1 parent 791a8a2 commit 9d9a807
Show file tree
Hide file tree
Showing 6 changed files with 359 additions and 1 deletion.
28 changes: 28 additions & 0 deletions apps/node_man/handlers/meta.py
Original file line number Diff line number Diff line change
Expand Up @@ -469,6 +469,32 @@ def fetch_os_type_children(os_types: Tuple = constants.OsType):
os_type_children.append({"id": os_type, "name": constants.OS_CHN.get(os_type, os_type)})
return os_type_children

@staticmethod
def fetch_agent_pkg_manager_children():
mock_version = [
{"name": "2.1.8", "id": "2.1.8"},
{"name": "2.1.7", "id": "2.1.7"},
]
mock_tags = [
{"name": "稳定版本", "id": "stable"},
{"name": "最新版本", "id": "latest"},
]
mock_creator = [
{"name": "user1", "id": "user1"},
{"name": "user2", "id": "user2"},
]
mock_is_ready = [
{"name": "启用", "id": True},
{"name": "停用", "id": False},
]

return [
{"name": _("版本号"), "id": "version", "children": mock_version},
{"name": _("标签信息"), "id": "tags", "children": mock_tags},
{"name": _("上传用户"), "id": "creator", "children": mock_creator},
{"name": _("状态"), "id": "is_ready", "children": mock_is_ready},
]

def filter_condition(self, category):
"""
获取过滤条件
Expand All @@ -495,6 +521,8 @@ def filter_condition(self, category):
elif category == "os_type":
ret = self.fetch_os_type_children()
return ret
elif category == "agent_pkg_manage":
return self.fetch_agent_pkg_manager_children()

@staticmethod
def install_default_values_formatter(install_default_values: Dict[str, Dict[str, Any]]):
Expand Down
4 changes: 4 additions & 0 deletions apps/node_man/serializers/meta.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,3 +25,7 @@ class JobSettingSerializer(serializers.Serializer):
install_download_limit_speed = serializers.IntegerField(label=_("安装下载限速"), max_value=JOB_MAX_VALUE, min_value=0)
parallel_install_number = serializers.IntegerField(label=_("并行安装数"), max_value=JOB_MAX_VALUE, min_value=0)
node_man_log_level = serializers.ChoiceField(label=_("节点管理日志级别"), choices=list(NODE_MAN_LOG_LEVEL))


class FilterConditionSerializer(serializers.Serializer):
category = serializers.ChoiceField(label=_("分类"), choices=["agent_pkg_manage", "agent_pkg_quick_search"])
113 changes: 113 additions & 0 deletions apps/node_man/serializers/packager_manage.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
# -*- coding: utf-8 -*-
"""
TencentBlueKing is pleased to support the open source community by making 蓝鲸智云-节点管理(BlueKing-BK-NODEMAN) available.
Copyright (C) 2017-2022 THL A29 Limited, a Tencent company. All rights reserved.
Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License.
You may obtain a copy of the License at https://opensource.org/licenses/MIT
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
specific language governing permissions and limitations under the License.
"""
from django.utils.translation import ugettext_lazy as _
from rest_framework import serializers

from apps.exceptions import ValidationError


class TagsSerializer(serializers.Serializer):
id = serializers.CharField()
label = serializers.CharField()


class ConditionsSerializer(serializers.Serializer):
key = serializers.ChoiceField(choices=["version", "os_cpu_arch", "tags", "is_ready"])
values = serializers.ListField()


class PKGSortSerializer(serializers.Serializer):
head = serializers.ChoiceField(choices=["version", "host_count"])
sort_type = serializers.ChoiceField(choices=["ASC", "DEC"])


class SearchSerializer(serializers.Serializer):
page = serializers.IntegerField()
pagesize = serializers.IntegerField()
module = serializers.ChoiceField(choices=["agent", "proxy"])
conditions = ConditionsSerializer(many=True)
sort = PKGSortSerializer(many=True)


class SearchResponseSerializer(serializers.Serializer):
id = serializers.IntegerField()
pkg_name = serializers.CharField()
version = serializers.CharField()
os_cpu_arch = serializers.CharField()
tags = TagsSerializer(many=True)
creator = serializers.CharField()
pkg_ctime = serializers.DateTimeField()
host_count = serializers.IntegerField()
is_ready = serializers.BooleanField()


class OperateSerializer(serializers.Serializer):
id = serializers.IntegerField()
action = serializers.ChoiceField(choices=["enable", "disable", "delete"])


# TODO 与plugin相同可抽取公共Serializer
class UploadSerializer(serializers.Serializer):
class PkgFileField(serializers.FileField):
def to_internal_value(self, data):
data = super().to_internal_value(data)
file_name = data.name
if not (file_name.endswith(".tgz") or file_name.endswith(".tar.gz")):
raise ValidationError(_("仅支持'tgz', 'tar.gz'拓展名的文件"))
return data

module = serializers.ChoiceField(choices=["gse_agent", "gse_proxy"], required=False, default="gse_agent")
package_file = PkgFileField()


class UploadResponseSerializer(serializers.Serializer):
id = serializers.IntegerField()
name = serializers.CharField()
pkg_size = serializers.IntegerField()


class ParseSerializer(serializers.Serializer):
file_name = serializers.CharField()


class PackageSerializer(serializers.Serializer):
module = serializers.ChoiceField(choices=["agent", "proxy"])
pkg_name = serializers.CharField()
pkg_abs_path = serializers.CharField()
version = serializers.CharField()
os = serializers.CharField()
cpu_arch = serializers.CharField()
config_templates = serializers.ListField()


class ParseResponseSerializer(serializers.Serializer):
description = serializers.CharField()
packages = PackageSerializer(many=True)


class RegisterPackageSerializer(serializers.Serializer):
pkg_abs_path = serializers.CharField()
tags = serializers.ListField()


class AgentRegisterSerializer(serializers.Serializer):
is_release = serializers.BooleanField()
packages = RegisterPackageSerializer(many=True)


class AgentRegisterTaskSerializer(serializers.Serializer):
job_id = serializers.IntegerField()


class AgentRegisterTaskResponseSerializer(serializers.Serializer):
is_finish = serializers.BooleanField()
status = serializers.ChoiceField(choices=["SUCCESS", "FAILED", "RUNNING"])
message = serializers.CharField()
2 changes: 2 additions & 0 deletions apps/node_man/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@
)
from apps.node_man.views.healthz import HealthzViewSet
from apps.node_man.views.host_v2 import HostV2ViewSet
from apps.node_man.views.package_manage import PackageManageViewSet
from apps.node_man.views.plugin import GsePluginViewSet
from apps.node_man.views.plugin_v2 import PluginV2ViewSet
from apps.node_man.views.sync_task import SyncTaskViewSet
Expand Down Expand Up @@ -67,6 +68,7 @@
router.register(r"v2/plugin", PluginV2ViewSet, basename="plugin_v2")
router.register(r"healthz", HealthzViewSet, basename="healthz")
router.register(r"sync_task", SyncTaskViewSet, basename="sync_task")
router.register(r"agent/package", PackageManageViewSet, basename="package_manage")

biz_dispatcher = DjangoBasicResourceApiDispatcher(iam, settings.BK_IAM_SYSTEM_ID)
biz_dispatcher.register("biz", BusinessResourceProvider())
Expand Down
6 changes: 5 additions & 1 deletion apps/node_man/views/meta.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,10 @@
from apps.node_man.exceptions import NotSuperUserError
from apps.node_man.handlers.iam import IamHandler
from apps.node_man.handlers.meta import MetaHandler
from apps.node_man.serializers.meta import JobSettingSerializer
from apps.node_man.serializers.meta import (
FilterConditionSerializer,
JobSettingSerializer,
)
from apps.utils.local import get_request_username

META_VIEW_TAGS = ["meta"]
Expand All @@ -26,6 +29,7 @@
class MetaViews(APIViewSet):
@swagger_auto_schema(
operation_summary="获取过滤条件",
query_serializer=FilterConditionSerializer,
tags=META_VIEW_TAGS,
)
@action(detail=False)
Expand Down
Loading

0 comments on commit 9d9a807

Please sign in to comment.