Skip to content

Commit

Permalink
feat: add volume、docker image openapi (#1437)
Browse files Browse the repository at this point in the history
* feat: openapi add docker image change

Signed-off-by: 逆流而上 <[email protected]>

* feat: openapi add volume mount

Signed-off-by: 逆流而上 <[email protected]>

* feat: openapi add volume mount

Signed-off-by: 逆流而上 <[email protected]>

* feat: openapi add volume mount

Signed-off-by: 逆流而上 <[email protected]>

---------

Signed-off-by: 逆流而上 <[email protected]>
  • Loading branch information
DokiDoki1103 authored Jan 31, 2024
1 parent b474a04 commit 0ef34b7
Show file tree
Hide file tree
Showing 4 changed files with 102 additions and 4 deletions.
2 changes: 1 addition & 1 deletion console/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -971,7 +971,7 @@
# 修改镜像源
url(r'^teams/(?P<tenantName>[\w\-]+)/apps/(?P<serviceAlias>[\w\-]+)/image', ImageAppView.as_view(), perms.ImageAppView),
# 查询构建源
url(r'^teams/(?P<tenantName>[\w\-]+)/apps/(?P<serviceAlias>[\w\-]+)/buildsource', BuildSourceinfo.as_view(),
url(r'^teams/(?P<tenantName>[\w\-]+)/apps/(?P<serviceAlias>[\w\-]+)/buildsource$', BuildSourceinfo.as_view(),
perms.BuildSourceinfo),
# job、cronjob策略配置
url(r'^teams/(?P<tenantName>[\w\-]+)/apps/(?P<serviceAlias>[\w\-]+)/job_strategy$', JobStrategy.as_view()),
Expand Down
11 changes: 11 additions & 0 deletions openapi/serializer/app_serializer.py
Original file line number Diff line number Diff line change
Expand Up @@ -296,3 +296,14 @@ class DeployAppSerializer(serializers.Serializer):
action = serializers.CharField(max_length=255, required=True, help_text="操作类型,如:deploy, update")
group_key = serializers.CharField(max_length=128, required=False, help_text="生成模型的key")
group_version = serializers.CharField(max_length=128, required=False, help_text="生成模型的version")


class ChangeDeploySourceSerializer(serializers.Serializer):
image = serializers.CharField(max_length=512, required=True, help_text="镜像地址")


class ServiceVolumeSerializer(serializers.Serializer):
volume_name = serializers.CharField(max_length=512, required=True, help_text="名称")
volume_path = serializers.CharField(max_length=512, required=True, help_text="挂载路径")
volume_capacity = serializers.IntegerField(required=True, help_text="存储配额(GB)")
volume_type = serializers.CharField(max_length=512, required=True, help_text="储存类型")
6 changes: 4 additions & 2 deletions openapi/sub_urls/app_url.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
AppServiceTelescopicHorizontalView, AppServiceTelescopicVerticalView, ComponentBuildView,
ComponentEnvsUView, CreateThirdComponentView, ListAppServicesView, TeamAppsCloseView,
TeamAppsMonitorQueryRangeView, TeamAppsMonitorQueryView, ComponentPortsShowView,
ComponentPortsChangeView)
ComponentPortsChangeView, ChangeDeploySourceView, ServiceVolumeView)
from openapi.views.apps.market import AppInstallView, AppUpgradeView
from openapi.views.gateway.gateway import (ListAppGatewayHTTPRuleView, ListAppGatewayRuleView, UpdateAppGatewayHTTPRuleView,
UpdateAppGatewayRuleView)
Expand Down Expand Up @@ -36,8 +36,10 @@
url(r'^(?P<app_id>[\d\-]+)/services/(?P<service_id>[\w\-]+)/telescopic/horizontal$',
AppServiceTelescopicHorizontalView.as_view(), perms.AppServiceTelescopicHorizontalView),
url(r'^(?P<app_id>[\d\-]+)/services/(?P<service_id>[\w\-]+)/envs$', ComponentEnvsUView.as_view()),
url(r'^(?P<app_id>[\d\-]+)/services/(?P<service_id>[\w\-]+)/ports/(?P<port>[\w\-]+)$$', ComponentPortsChangeView.as_view()),
url(r'^(?P<app_id>[\d\-]+)/services/(?P<service_id>[\w\-]+)/ports/(?P<port>[\w\-]+)$', ComponentPortsChangeView.as_view()),
url(r'^(?P<app_id>[\d\-]+)/services/(?P<service_id>[\w\-]+)/ports$', ComponentPortsShowView.as_view()),
url(r'^(?P<app_id>[\d\-]+)/services/(?P<service_id>[\w\-]+)/build$', ComponentBuildView.as_view()),
url(r'^(?P<app_id>[\d\-]+)/services/(?P<service_id>[\w\-]+)/docker-image-change$', ChangeDeploySourceView.as_view()),
url(r'^(?P<app_id>[\d\-]+)/services/(?P<service_id>[\w\-]+)/volumes$', ServiceVolumeView.as_view()),
url(r'^(?P<app_id>[\d\-]+)/third-components$', CreateThirdComponentView.as_view()),
]
87 changes: 86 additions & 1 deletion openapi/views/apps/apps.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import logging
import os
import pickle
import re
import time

from django.db import transaction
Expand Down Expand Up @@ -39,13 +40,15 @@
from django.forms.models import model_to_dict
from drf_yasg import openapi
from drf_yasg.utils import swagger_auto_schema

from console.views.app_config.app_volume import ensure_volume_mode
from openapi.serializer.app_serializer import (
AppBaseInfoSerializer, AppInfoSerializer, AppPostInfoSerializer, AppServiceEventsSerializer,
AppServiceTelescopicHorizontalSerializer, AppServiceTelescopicVerticalSerializer, ComponentBuildReqSerializers,
ComponentEnvsSerializers, ComponentEventSerializers, ComponentMonitorSerializers, CreateThirdComponentResponseSerializer,
CreateThirdComponentSerializer, ListServiceEventsResponse, ServiceBaseInfoSerializer, ServiceGroupOperationsSerializer,
TeamAppsCloseSerializers, DeployAppSerializer, ServicePortSerializer, ComponentPortReqSerializers,
ComponentUpdatePortReqSerializers)
ComponentUpdatePortReqSerializers, ChangeDeploySourceSerializer, ServiceVolumeSerializer)
from openapi.serializer.base_serializer import (FailSerializer, SuccessSerializer)
from openapi.services.app_service import app_service
from openapi.services.component_action import component_action_service
Expand Down Expand Up @@ -791,6 +794,88 @@ def post(self, request, *args, **kwargs):
return Response(result, status=status.HTTP_200_OK)


class ServiceVolumeView(TeamAppServiceAPIView):
@swagger_auto_schema(
operation_description="挂载组件的储存",
manual_parameters=[
openapi.Parameter("team_id", openapi.IN_PATH, description="团队ID、名称", type=openapi.TYPE_STRING),
openapi.Parameter("region_name", openapi.IN_PATH, description="数据中心名称", type=openapi.TYPE_STRING),
openapi.Parameter("app_id", openapi.IN_PATH, description="应用组id", type=openapi.TYPE_INTEGER),
openapi.Parameter("service_id", openapi.IN_PATH, description="组件ID", type=openapi.TYPE_STRING)
],
request_body=ServiceVolumeSerializer,
tags=['openapi-apps'],
)
def post(self, request, *args, **kwargs):

ServiceVolumeSerializerRequest = ServiceVolumeSerializer(data=request.data)
ServiceVolumeSerializerRequest.is_valid(raise_exception=True)

req = ServiceVolumeSerializerRequest.data
r = re.compile('(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$')
if not r.match(req.get("volume_name")):
raise AbortRequest(msg="volume name illegal", msg_show="持久化名称只支持数字字母下划线")

file_content = request.data.get("file_content", None)
provider_name = request.data.get("volume_provider_name", '')
access_mode = request.data.get("access_mode", '')
share_policy = request.data.get('share_policy', '')
backup_policy = request.data.get('back_policy', '')
reclaim_policy = request.data.get('reclaim_policy', '')
allow_expansion = request.data.get('allow_expansion', False)
mode = request.data.get("mode")
if mode is not None:
mode = ensure_volume_mode(mode)

settings = {}
settings['volume_capacity'] = req.get("volume_capacity")
settings['provider_name'] = provider_name
settings['access_mode'] = access_mode
settings['share_policy'] = share_policy
settings['backup_policy'] = backup_policy
settings['reclaim_policy'] = reclaim_policy
settings['allow_expansion'] = allow_expansion

data = volume_service.add_service_volume(
self.team,
self.service,
req.get("volume_path"),
req.get("volume_type"),
req.get("volume_name"),
file_content,
settings,
self.user.nick_name,
mode=mode)
result = general_message(200, "success", "持久化路径添加成功", bean=data.to_dict())

return Response(result, status=result["code"])


class ChangeDeploySourceView(TeamAppServiceAPIView):
@swagger_auto_schema(
operation_description="更改docker构建方式的镜像地址",
manual_parameters=[
openapi.Parameter("team_id", openapi.IN_PATH, description="团队ID、名称", type=openapi.TYPE_STRING),
openapi.Parameter("region_name", openapi.IN_PATH, description="数据中心名称", type=openapi.TYPE_STRING),
openapi.Parameter("app_id", openapi.IN_PATH, description="应用组id", type=openapi.TYPE_INTEGER),
openapi.Parameter("service_id", openapi.IN_PATH, description="组件ID", type=openapi.TYPE_STRING)
],
request_body=ChangeDeploySourceSerializer,
tags=['openapi-apps'],
)
def put(self, request, *args, **kwargs):
image = request.data.get("image", None)
if image:
version = image.split(':')[-1]
if not version:
version = "latest"
image = image + ":" + version
self.service.image = image
self.service.version = version
self.service.save()
return Response(general_message(200, "success", "更改镜像地址成功"), status=200)


class ComponentBuildView(TeamAppServiceAPIView):
@swagger_auto_schema(
operation_description="构建组件,用于CI/CD工作流调用",
Expand Down

0 comments on commit 0ef34b7

Please sign in to comment.