Skip to content

Commit

Permalink
feat: supports some offline deployment methods
Browse files Browse the repository at this point in the history
  • Loading branch information
ZhangSetSail committed Dec 12, 2023
1 parent 0267809 commit 357c2be
Show file tree
Hide file tree
Showing 11 changed files with 237 additions and 5 deletions.
10 changes: 10 additions & 0 deletions console/services/app_actions/app_manage.py
Original file line number Diff line number Diff line change
Expand Up @@ -1397,3 +1397,13 @@ def change_lang_and_package_tool(self, tenant, service, lang, package_tool, dist
logger.exception(e)
return 507, "failed"
return 200, "success"

def change_image_tool(self, tenant, service, image_name):
tag = image_name.split(":")[-1]
service_params = {"version": tag, "image": image_name, "docker_cmd": image_name}
try:
service_repo.update(tenant.tenant_id, service.service_id, **service_params)
except Exception as e:
logger.exception(e)
return 507, "failed"
return 200, "success"
6 changes: 5 additions & 1 deletion console/services/app_check_service.py
Original file line number Diff line number Diff line change
Expand Up @@ -108,6 +108,7 @@ def check_service(self, tenant, service, is_again, event_id, user=None):
body["username"] = user_name
body["password"] = password
body["source_body"] = source_body
body["namespace"] = tenant.namespace
res, body = region_api.service_source_check(service.service_region, tenant.tenant_name, body)
bean = body["bean"]
service.check_uuid = bean["check_uuid"]
Expand Down Expand Up @@ -420,6 +421,9 @@ def wrap_check_info(self, service, service_info):
"value": [volume["volume_path"] + "(" + volume["volume_type"] + ")" for volume in service_info["volumes"]]
}
service_attr_list.append(service_volume_bean)
if service_info.get("tar_images"):
tar_images_bean = {"type": "tar_images", "key": "tar包镜像", "value": service_info.get("tar_images")}
service_attr_list.append(tar_images_bean)
service_code_from = {}
service_language = {}
if service.service_source == AppConstants.SOURCE_CODE:
Expand All @@ -438,7 +442,7 @@ def wrap_check_info(self, service, service_info):
service_language = {"type": "language", "key": "代码语言", "value": service_info["language"]}
if service_language:
service_attr_list.append(service_language)
if service_code_from:
if service_code_from and service_code_from.get("value") != ":":
service_attr_list.append(service_code_from)
return service_attr_list

Expand Down
1 change: 1 addition & 0 deletions console/services/compose_service.py
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,7 @@ def check_compose(self, region, tenant, compose_id):
body["source_body"] = group_compose.compose_content
body["username"] = group_compose.hub_user
body["password"] = group_compose.hub_pass
body["namespace"] = tenant.namespace
res, body = region_api.service_source_check(region, tenant.tenant_name, body)
bean = body["bean"]
group_compose.check_uuid = bean["check_uuid"]
Expand Down
50 changes: 50 additions & 0 deletions console/services/helm_app_yaml.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,11 @@
from console.models.main import RainbondCenterApp, RainbondCenterAppVersion, AppHelmOverrides
from console.repositories.helm import helm_repo
from console.repositories.market_app_repo import app_import_record_repo, rainbond_app_repo
from console.repositories.region_app import region_app_repo
from console.services.app_actions import app_manage_service
from console.services.region_resource_processing import region_resource
from www.apiclient.regionapi import RegionInvokeApi
from www.models.main import RegionApp
from www.utils.crypt import make_uuid3, make_uuid

region_api = RegionInvokeApi()
Expand Down Expand Up @@ -390,5 +394,51 @@ def create_center_app_by_chart(self, enterprise_id, chart_name):
helm_center_app = rainbond_app_repo.get_rainbond_app_qs_by_key(enterprise_id, app_model_id)
return helm_center_app

def get_upload_chart_information(self, region, tenant_name, event_id):
_, body = region_api.get_upload_chart_information(region, tenant_name, event_id)
ret = {"chart_information": body["list"]}
return ret

def check_upload_chart(self, region, tenant, event_id, name, version):
data = {
"event_id": event_id,
"name": name,
"version": version,
"namespace": tenant.namespace,
"overrides": [],
}
_, body = region_api.check_upload_chart(region, tenant.tenant_name, data)
return body["bean"]

def get_upload_chart_value(self, region, tenant_name, event_id):
_, body = region_api.get_upload_chart_value(region, tenant_name, event_id)
return body["bean"]

def get_upload_chart_resource(self, region, tenant, event_id, name, version, overrides):
data = {
"event_id": event_id,
"name": name,
"version": version,
"namespace": tenant.namespace,
"overrides": overrides,
}
_, body = region_api.get_upload_chart_resource(region, tenant.tenant_name, data)
return body["bean"]

def import_upload_chart_resource(self, region_name, tenant, app_id, data, user):
import_data = dict()
import_data["tenant_id"] = tenant.tenant_id
import_data["namespace"] = tenant.namespace
region_app_id = region_app_repo.get_region_app_id(region_name, app_id)
app = RegionApp.objects.filter(app_id=app_id)
import_data["app_id"] = region_app_id
import_data["ar"] = data
_, body = region_api.import_upload_chart_resource(region_name, tenant.tenant_name, import_data)
ac = body["bean"]
region_resource.create_k8s_resources(ac["k8s_resources"], app_id)
service_ids = region_resource.create_components(app[0], ac["component"], tenant, region_name, user.user_id)
app_manage_service.batch_action(region_name, tenant, user, "deploy", service_ids, None, None)
return body["bean"]


helm_app_service = HelmAppService()
15 changes: 12 additions & 3 deletions console/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
ComposeDeleteView, ComposeServicesView, DockerComposeCreateView,
GetComposeCheckUUID)
from console.views.app_create.docker_run import DockerRunCreateView
from console.views.app_create.image_repositories import TenantImageRepositories, TenantImageTags
from console.views.app_create.multi_app import (MultiAppCheckView, MultiAppCreateView)
from console.views.app_create.source_code import (AppCompileEnvView, SourceCodeCreateView, UploadRecordLastView,
PackageUploadRecordView, PackageCreateView)
Expand All @@ -43,7 +44,7 @@
ChangeServiceUpgradeView, DeleteAppView, DeployAppView, HorizontalExtendAppView,
MarketServiceUpgradeView, ReStartAppView, RollBackAppView, StartAppView, StopAppView,
TeamAppsCloseView, UpgradeAppView, VerticalExtendAppView, PackageToolView, PauseAppView,
UNPauseAppView)
UNPauseAppView, TarImageView)
from console.views.app_market import BindableMarketsView
from console.views.app_monitor import (AppMonitorQueryRangeView, AppMonitorQueryView, AppResourceQueryView, AppTraceView,
BatchAppMonitorQueryView)
Expand Down Expand Up @@ -83,7 +84,7 @@
ApplicationParseServicesView, ApplicationReleasesView, ApplicationIngressesView, TenantAppUpgradableNumView,
AppGovernanceModeCheckView, ApplicationVolumesView, AppGovernanceModeCRView, TenantGroupHandleView, AppComponentNameView)
from console.views.helm_app import HelmAppView, HelmRepo, HelmCenterApp, HelmChart, CommandInstallHelm, HelmList, \
HelmRepoAdd
HelmRepoAdd, UploadHelmChart, UploadHelmChartValueResource, UploadHelmChartValue
from console.views.jwt_token_view import JWTTokenView
from console.views.k8s_attribute import ComponentK8sAttributeView, ComponentK8sAttributeListView
from console.views.k8s_resource import AppK8sResourceListView, AppK8ResourceView
Expand Down Expand Up @@ -261,6 +262,11 @@
url(r'^teams/(?P<team_name>[\w\-]+)/helm_list$', HelmList.as_view()),
url(r'^teams/(?P<team_name>[\w\-]+)/helm_cmd_add$', HelmRepoAdd.as_view()),
url(r'^teams/(?P<team_name>[\w\-]+)/helm_center_app$', HelmCenterApp.as_view()),
url(r'^teams/(?P<team_name>[\w\-]+)/get_upload_chart_information$', UploadHelmChart.as_view()),
url(r'^teams/(?P<team_name>[\w\-]+)/check_upload_chart$', UploadHelmChart.as_view()),
url(r'^teams/(?P<team_name>[\w\-]+)/get_upload_chart_value$', UploadHelmChartValue.as_view()),
url(r'^teams/(?P<team_name>[\w\-]+)/get_upload_chart_resource$', UploadHelmChartValueResource.as_view()),
url(r'^teams/(?P<team_name>[\w\-]+)/import_upload_chart_resource$', UploadHelmChartValueResource.as_view()),

# 获取生成令牌
url(r'^teams/(?P<team_name>[\w\-]+)/access-token/(?P<token_note>[\w\-]+)$', AccessTokenView.as_view()),
Expand Down Expand Up @@ -383,6 +389,8 @@
# 第三方组件健康检测
url(r"^teams/(?P<tenantName>[\w\-]+)/apps/(?P<serviceAlias>[\w\-]+)/3rd-party/health$", ThirdPartyHealthzView.as_view(),
perms.ThirdPartyHealthzView),
url(r'^teams/(?P<tenantName>[\w\-]+)/apps/image_repositories$', TenantImageRepositories.as_view(), perms.AppCheck),
url(r'^teams/(?P<tenantName>[\w\-]+)/apps/image_tags$', TenantImageTags.as_view(), perms.AppCheck),
# docker镜像创建
url(r'^teams/(?P<tenantName>[\w\-]+)/apps/docker_run$', DockerRunCreateView.as_view(), perms.DockerRunCreateView),
# docker-compose文件创建
Expand Down Expand Up @@ -564,7 +572,8 @@
MarketServiceUpgradeView.as_view(), perms.MarketServiceUpgradeView),
# 组件设置语言和安装依赖
url(r'^teams/(?P<tenantName>[\w\-]+)/apps/(?P<serviceAlias>[\w\-]+)/package_tool$', PackageToolView.as_view()),

# tar包设置镜像
url(r'^teams/(?P<tenantName>[\w\-]+)/apps/(?P<serviceAlias>[\w\-]+)/tar_image$', TarImageView.as_view()),
# 批量操作
url(r'^teams/(?P<tenantName>[\w\-]+)/batch_actions$', BatchActionView.as_view(), perms.BatchActionView),
# 批量删除应用
Expand Down
28 changes: 28 additions & 0 deletions console/views/app_create/image_repositories.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
import logging

from django.views.decorators.cache import never_cache

from console.views.base import RegionTenantHeaderView
from www.apiclient.regionapi import RegionInvokeApi
from www.utils.return_message import general_message
from rest_framework.response import Response

logger = logging.getLogger("default")
region_api = RegionInvokeApi()


class TenantImageRepositories(RegionTenantHeaderView):
@never_cache
def get(self, request, *args, **kwargs):
res, body = region_api.get_tenant_image_repositories(self.region_name, self.tenant_name, self.tenant.namespace)
result = general_message(200, "success", "请求成功", list=body.get("list", []))
return Response(result, status=result["code"])


class TenantImageTags(RegionTenantHeaderView):
@never_cache
def get(self, request, *args, **kwargs):
repository = request.GET.get("repository", None)
res, body = region_api.get_tenant_image_tags(self.region_name, self.tenant_name, repository)
result = general_message(200, "success", "请求成功", list=body.get("list", []))
return Response(result, status=result["code"])
28 changes: 28 additions & 0 deletions console/views/app_manage.py
Original file line number Diff line number Diff line change
Expand Up @@ -659,3 +659,31 @@ def post(self, request, *args, **kwargs):
if code != 200:
return Response(status=code, data=general_message(code, "failed", "操作失败"))
return Response(status=200, data=general_message(200, "succeed", "操作成功"))


class TarImageView(AppBaseCloudEnterpriseCenterView):
@never_cache
def post(self, request, *args, **kwargs):
"""
设置语言和依赖包
---
parameters:
- name: tenantName
description: 租户名
required: true
type: string
paramType: path
- name: serviceAlias
description: 组件别名
required: true
type: string
paramType: path
"""
image_name = request.data.get("image_name", "")
# 修改语言和包依赖
if image_name:
code, msg = app_manage_service.change_image_tool(self.tenant, self.service, image_name)
if code != 200:
return Response(status=code, data=general_message(code, "failed", "操作失败"))
return Response(status=200, data=general_message(200, "succeed", "操作成功"))
46 changes: 46 additions & 0 deletions console/views/helm_app.py
Original file line number Diff line number Diff line change
Expand Up @@ -194,3 +194,49 @@ def delete(self, request, *args, **kwargs):
helm_repo.delete_helm_repo(repo_name)
result = general_message(200, "success", "删除成功", "")
return Response(result, status=status.HTTP_200_OK)


class UploadHelmChart(RegionTenantHeaderView):
def get(self, request, *args, **kwargs):
event_id = request.GET.get("event_id")
data = helm_app_service.get_upload_chart_information(self.region_name, self.tenant_name, event_id)
result = general_message(200, "success", "获取成功", data)
return Response(result, status=status.HTTP_200_OK)

def post(self, request, *args, **kwargs):
event_id = request.data.get("event_id")
name = request.data.get("name")
version = request.data.get("version")
data = helm_app_service.check_upload_chart(self.region_name, self.tenant, event_id, name, version)
result = general_message(200, "success", "检测完成", data)
return Response(result, status=status.HTTP_200_OK)


class UploadHelmChartValue(RegionTenantHeaderView):
def get(self, request, *args, **kwargs):
event_id = request.GET.get("event_id")
data = helm_app_service.get_upload_chart_value(self.region_name, self.tenant_name, event_id)
result = general_message(200, "success", "获取成功", data)
return Response(result, status=status.HTTP_200_OK)


class UploadHelmChartValueResource(RegionTenantHeaderView):
def get(self, request, *args, **kwargs):
event_id = request.GET.get("event_id")
name = request.GET.get("name")
version = request.GET.get("version")
overrides = request.GET.get("overrides", {})
overrides_list = list()
for key, value in overrides.items():
overrides_list.append(key + "=" + value)
data = helm_app_service.get_upload_chart_resource(self.region_name, self.tenant, event_id, name, version,
overrides_list)
result = general_message(200, "success", "获取成功", bean=data)
return Response(result, status=status.HTTP_200_OK)

def post(self, request, *args, **kwargs):
resource = request.data.get("resource")
app_id = request.data.get("app_id")
helm_app_service.import_upload_chart_resource(self.region_name, self.tenant, app_id, resource, self.user)
result = general_message(200, "success", "安装成功", "")
return Response(result, status=status.HTTP_200_OK)
1 change: 1 addition & 0 deletions console/views/oauth.py
Original file line number Diff line number Diff line change
Expand Up @@ -560,6 +560,7 @@ def post(self, request, service_id, *args, **kwargs):
body = dict()
body["tenant_id"] = tenant.tenant_id
body["source_type"] = "sourcecode"
body["namespace"] = tenant.namespace
body["username"] = None
body["password"] = None
body["source_body"] = source_body
Expand Down
2 changes: 1 addition & 1 deletion console/views/yaml_resource.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ def get(self, request, *args, **kwargs):
region_id = self.region.region_id
enterprise_id = self.enterprise.enterprise_id
res = yaml_k8s_resource.yaml_k8s_resource_detailed(event_id, app_id, tenant_id, namespace, region_id, enterprise_id)
return Response(general_message(200, "success", "查询成功", list=res), status=200)
return Response(general_message(200, "success", "查询成功", bean=res), status=200)

def post(self, request, *args, **kwargs):
event_id = request.data.get("event_id")
Expand Down
55 changes: 55 additions & 0 deletions www/apiclient/regionapi.py
Original file line number Diff line number Diff line change
Expand Up @@ -608,6 +608,41 @@ def get_yaml_by_chart(self, region, tenant_name, data):
res, body = self._get(url, self.default_headers, region=region, body=json.dumps(data), timeout=20)
return res, body

def get_upload_chart_information(self, region, tenant_name, event_id):
uri_prefix, token = self.__get_region_access_info(tenant_name, region)
url = uri_prefix + "/v2/helm/get_upload_chart_information?event_id={}".format(event_id)
self._set_headers(token)
res, body = self._get(url, self.default_headers, region=region)
return res, body

def check_upload_chart(self, region, tenant_name, data):
uri_prefix, token = self.__get_region_access_info(tenant_name, region)
url = uri_prefix + "/v2/helm/check_upload_chart"
self._set_headers(token)
res, body = self._post(url, self.default_headers, region=region, body=json.dumps(data))
return res, body

def get_upload_chart_resource(self, region, tenant_name, data):
uri_prefix, token = self.__get_region_access_info(tenant_name, region)
url = uri_prefix + "/v2/helm/get_upload_chart_resource"
self._set_headers(token)
res, body = self._get(url, self.default_headers, region=region, body=json.dumps(data))
return res, body

def import_upload_chart_resource(self, region, tenant_name, data):
uri_prefix, token = self.__get_region_access_info(tenant_name, region)
url = uri_prefix + "/v2/helm/import_upload_chart_resource"
self._set_headers(token)
res, body = self._post(url, self.default_headers, region=region, body=json.dumps(data))
return res, body

def get_upload_chart_value(self, region, tenant_name, event_id):
uri_prefix, token = self.__get_region_access_info(tenant_name, region)
url = uri_prefix + "/v2/helm/get_upload_chart_value?event_id={}".format(event_id)
self._set_headers(token)
res, body = self._get(url, self.default_headers, region=region)
return res, body

def get_service_volumes_status(self, region, tenant_name, service_alias):
uri_prefix, token = self.__get_region_access_info(tenant_name, region)
tenant_region = self.__get_tenant_region_info(tenant_name, region)
Expand Down Expand Up @@ -1294,6 +1329,26 @@ def get_enterprise_region_info(self, eid, region):
return configs[0]
return None

def get_tenant_image_repositories(self, region, tenant_name, namespace):
"""组件源检测"""
url, token = self.__get_region_access_info(tenant_name, region)
tenant_region = self.__get_tenant_region_info(tenant_name, region)
url = url + "/v2/tenants/" + tenant_region.region_tenant_name + "/image-repositories?namespace={}".format(namespace)

self._set_headers(token)
res, body = self._get(url, self.default_headers, region=region, timeout=20)
return res, body

def get_tenant_image_tags(self, region, tenant_name, repository):
"""组件源检测"""
url, token = self.__get_region_access_info(tenant_name, region)
tenant_region = self.__get_tenant_region_info(tenant_name, region)
url = url + "/v2/tenants/" + tenant_region.region_tenant_name + "/image-tags?repository={}".format(repository)

self._set_headers(token)
res, body = self._get(url, self.default_headers, region=region, timeout=20)
return res, body

def service_source_check(self, region, tenant_name, body):
"""组件源检测"""
url, token = self.__get_region_access_info(tenant_name, region)
Expand Down

0 comments on commit 357c2be

Please sign in to comment.