Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: support search volume #1422

Merged
merged 1 commit into from
Dec 29, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 4 additions & 3 deletions console/services/app.py
Original file line number Diff line number Diff line change
Expand Up @@ -650,10 +650,11 @@ def _rollback_third_components(tenant_name, region_name, region_app_id, componen
}
region_api.sync_components(tenant_name, region_name, region_app_id, body)

def get_app_list(self, tenant_id, region, query=""):
def get_app_list(self, tenant_id, region, dep_app_name):
q = Q(tenant_id=tenant_id, service_region=region)
if query:
q &= Q(service_cname__contains=query)
if dep_app_name:
q &= Q(service_cname__contains=dep_app_name)

return TenantServiceInfo.objects.filter(q)

def get_service_status(self, tenant, service):
Expand Down
34 changes: 18 additions & 16 deletions console/services/app_config/mnt_service.py
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ def get_service_mnt_details(self, tenant, service, volume_types, page=1, page_si
})
return mounted_dependencies, total

def get_service_unmount_volume_list(self, tenant, service, service_ids, page, page_size, is_config=False):
def get_service_unmount_volume_list(self, tenant, service, service_ids, page, page_size, is_config, dep_app_group):
"""
1. 获取租户下其他所有组件列表,方便后续进行名称的冗余
2. 获取其他组件的所有可共享的存储
Expand All @@ -81,10 +81,12 @@ def get_service_unmount_volume_list(self, tenant, service, service_ids, page, pa
service_volumes = []
# 配置文件无论组件是否是共享存储都可以共享,只需过滤掉已经挂载的存储;其他存储类型则需要考虑排除有状态组件的存储
if is_config:
service_volumes = volume_repo.get_services_volumes(current_tenant_services_id).filter(volume_type=self.CONFIG) \
service_volumes = volume_repo.get_services_volumes(current_tenant_services_id).filter(
volume_type=self.CONFIG) \
.exclude(ID__in=mounted_ids)
else:
service_volumes = volume_repo.get_services_volumes(current_tenant_services_id).filter(volume_type=self.SHARE) \
service_volumes = volume_repo.get_services_volumes(current_tenant_services_id).filter(
volume_type=self.SHARE) \
.exclude(ID__in=mounted_ids).exclude(service_id__in=state_service_ids)
# TODO 使用函数进行存储的排查,确定哪些存储不可以进行共享,哪些存储可以共享,而不是现在这样简单的提供一个self.SHARE

Expand All @@ -94,19 +96,19 @@ def get_service_unmount_volume_list(self, tenant, service, service_ids, page, pa
un_mount_dependencies = []
for volume in page_volumes:
gs_rel = group_service_relation_repo.get_group_by_service_id(volume.service_id)
group = None
if gs_rel:
group = group_repo.get_group_by_pk(tenant.tenant_id, service.service_region, gs_rel.group_id)
un_mount_dependencies.append({
"dep_app_name": services.get(service_id=volume.service_id).service_cname,
"dep_app_group": group.group_name if group else '未分组',
"dep_vol_name": volume.volume_name,
"dep_vol_path": volume.volume_path,
"dep_vol_type": volume.volume_type,
"dep_vol_id": volume.ID,
"dep_group_id": group.ID if group else -1,
"dep_app_alias": services.get(service_id=volume.service_id).service_alias
})
group = group_repo.get_group_by_pk(tenant.tenant_id, service.service_region, gs_rel.group_id)
group_name = group.group_name if group else '未分组'
if group_name == "" or dep_app_group == group_name:
un_mount_dependencies.append({
"dep_app_name": services.get(service_id=volume.service_id).service_cname,
"dep_app_group": group_name,
"dep_vol_name": volume.volume_name,
"dep_vol_path": volume.volume_path,
"dep_vol_type": volume.volume_type,
"dep_vol_id": volume.ID,
"dep_group_id": group.ID if group else -1,
"dep_app_alias": services.get(service_id=volume.service_id).service_alias
})
return un_mount_dependencies, total

def get_service_unmnt_details(self, tenant, service, service_ids, page, page_size, q):
Expand Down
14 changes: 11 additions & 3 deletions console/services/app_config/volume_service.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
from console.constants import AppConstants, ServiceLanguageConstants
from console.enum.component_enum import ComponentType, is_state
from console.exception.main import ErrVolumePath, ServiceHandleException
from console.repositories.app import service_repo
from console.repositories.app_config import mnt_repo, volume_repo
from console.services.app_config.label_service import LabelService
from console.services.exception import (ErrVolumeTypeDoNotAllowMultiNode, ErrVolumeTypeNotFound)
Expand Down Expand Up @@ -366,15 +367,22 @@ def add_service_volume(self,
volume_repo.add_service_config_file(**file_data)
return volume

def delete_service_volume_by_id(self, tenant, service, volume_id, user_name=''):
def delete_service_volume_by_id(self, tenant, service, volume_id, user_name='', force=False):
volume = volume_repo.get_service_volume_by_pk(volume_id)
if not volume:
return 404, "需要删除的路径不存在", None
# if volume.volume_type == volume.SHARE:
# 判断当前共享目录是否被使用
mnt = mnt_repo.get_mnt_by_dep_id_and_mntname(service.service_id, volume.volume_name)
if mnt:
return 403, "当前路径被共享,无法删除", None
if mnt and not force:
list = []
for item in mnt:
s = service_repo.get_service_by_service_id(item.service_id)
list.append({
"service_cname": s.service_cname,
"service_alias": s.service_alias,
})
return 202, "当前路径被以下组件共享,无法删除,是否要强制删除呢", list
if service.create_status == "complete":
data = dict()
data["operator"] = user_name
Expand Down
15 changes: 8 additions & 7 deletions console/views/app_config/app_mnt.py
Original file line number Diff line number Diff line change
Expand Up @@ -51,27 +51,28 @@ def get(self, request, *args, **kwargs):
paramType: query

"""
query = request.GET.get("query", "")
if query == "undefined":
query = ""
dep_app_name = request.GET.get("dep_app_name", "")
if dep_app_name == "undefined":
dep_app_name = ""
dep_app_group = request.GET.get("dep_app_group", "")
if dep_app_group == "undefined":
dep_app_group = ""
query_type = request.GET.get("type", "mnt")
page = request.GET.get("page", 1)
page_size = request.GET.get("page_size", 10)
volume_types = parse_argument(request, 'volume_types', value_type=list)
is_config = parse_argument(request, 'is_config', value_type=bool, default=False)

if query == "undefined":
query = ""
if volume_types is not None and ('config-file' in volume_types):
is_config = True

if query_type == "mnt":
mnt_list, total = mnt_service.get_service_mnt_details(self.tenant, self.service, volume_types)
elif query_type == "unmnt":
services = app_service.get_app_list(self.tenant.tenant_id, self.service.service_region, query)
services = app_service.get_app_list(self.tenant.tenant_id, self.service.service_region, dep_app_name)
services_ids = [s.service_id for s in services]
mnt_list, total = mnt_service.get_service_unmount_volume_list(self.tenant, self.service, services_ids, page,
page_size, is_config)
page_size, is_config, dep_app_group)
else:
return Response(general_message(400, "param error", "参数错误"), status=400)
result = general_message(200, "success", "查询成功", list=mnt_list, total=total)
Expand Down
5 changes: 3 additions & 2 deletions console/views/app_config/app_volume.py
Original file line number Diff line number Diff line change
Expand Up @@ -187,14 +187,15 @@ def delete(self, request, *args, **kwargs):
paramType: path

"""
force = request.GET.get("force") == "1"
volume_id = kwargs.get("volume_id", None)
if not volume_id:
return Response(general_message(400, "attr_name not specify", "未指定需要删除的持久化路径"), status=400)
code, msg, volume = volume_service.delete_service_volume_by_id(self.tenant, self.service, int(volume_id),
self.user.nick_name)
self.user.nick_name, force)
result = general_message(200, "success", "删除成功")
if code != 200:
result = general_message(code=code, msg="delete volume error", msg_show=msg)
result = general_message(code=code, msg="delete volume error", msg_show=msg, list=volume)
return Response(result, status=result["code"])

@never_cache
Expand Down
Loading