mirror of https://github.com/openspug/spug
更新唯一标识符规则
parent
1a1224cc87
commit
b5e83bdd63
|
@ -5,7 +5,7 @@ from django.views.generic import View
|
|||
from django.db.models import F
|
||||
from libs import JsonParser, Argument, json_response, auth
|
||||
from apps.app.models import App, Deploy, DeployExtend1, DeployExtend2
|
||||
from apps.config.models import Config, ConfigHistory
|
||||
from apps.config.models import Config, ConfigHistory, Service
|
||||
from apps.app.utils import fetch_versions, remove_repo
|
||||
from apps.setting.utils import AppSetting
|
||||
import json
|
||||
|
@ -14,12 +14,21 @@ import re
|
|||
|
||||
class AppView(View):
|
||||
def get(self, request):
|
||||
form, error = JsonParser(
|
||||
Argument('id', type=int, required=False)
|
||||
).parse(request.GET)
|
||||
if error is None:
|
||||
if request.user.is_supper:
|
||||
apps = App.objects.all()
|
||||
else:
|
||||
ids = request.user.deploy_perms['apps']
|
||||
apps = App.objects.filter(id__in=ids)
|
||||
|
||||
if form.id:
|
||||
app = apps.filter(pk=form.id).first()
|
||||
return json_response(app)
|
||||
return json_response(apps)
|
||||
return json_response(error=error)
|
||||
|
||||
@auth('deploy.app.add|deploy.app.edit|config.app.add|config.app.edit')
|
||||
def post(self, request):
|
||||
|
@ -30,12 +39,15 @@ class AppView(View):
|
|||
Argument('desc', required=False)
|
||||
).parse(request.body)
|
||||
if error is None:
|
||||
if not re.fullmatch(r'[-\w]+', form.key, re.ASCII):
|
||||
return json_response(error='标识符必须为字母、数字、-和下划线的组合')
|
||||
if not re.fullmatch(r'\w+', form.key, re.ASCII):
|
||||
return json_response(error='标识符必须为字母、数字和下划线的组合')
|
||||
|
||||
app = App.objects.filter(key=form.key).first()
|
||||
if app and app.id != form.id:
|
||||
return json_response(error=f'唯一标识符 {form.key} 已存在,请更改后重试')
|
||||
return json_response(error='该识符已存在,请更改后重试')
|
||||
service = Service.objects.filter(key=form.key).first()
|
||||
if service:
|
||||
return json_response(error=f'该标识符已被服务 {service.name} 使用,请更改后重试')
|
||||
if form.id:
|
||||
App.objects.filter(pk=form.id).update(**form)
|
||||
else:
|
||||
|
|
|
@ -28,8 +28,8 @@ class EnvironmentView(View):
|
|||
Argument('desc', required=False)
|
||||
).parse(request.body)
|
||||
if error is None:
|
||||
if not re.fullmatch(r'[-\w]+', form.key, re.ASCII):
|
||||
return json_response(error='标识符必须为字母、数字、-和下划线的组合')
|
||||
if not re.fullmatch(r'\w+', form.key, re.ASCII):
|
||||
return json_response(error='标识符必须为字母、数字和下划线的组合')
|
||||
|
||||
env = Environment.objects.filter(key=form.key).first()
|
||||
if env and env.id != form.id:
|
||||
|
@ -83,8 +83,16 @@ class EnvironmentView(View):
|
|||
class ServiceView(View):
|
||||
@auth('config.src.view')
|
||||
def get(self, request):
|
||||
form, error = JsonParser(
|
||||
Argument('id', type=int, required=False)
|
||||
).parse(request.GET)
|
||||
if error is None:
|
||||
if form.id:
|
||||
service = Service.objects.get(pk=form.id)
|
||||
return json_response(service)
|
||||
services = Service.objects.all()
|
||||
return json_response(services)
|
||||
return json_response(error=error)
|
||||
|
||||
@auth('config.src.add|config.src.edit')
|
||||
def post(self, request):
|
||||
|
@ -95,12 +103,15 @@ class ServiceView(View):
|
|||
Argument('desc', required=False)
|
||||
).parse(request.body)
|
||||
if error is None:
|
||||
if not re.fullmatch(r'[-\w]+', form.key, re.ASCII):
|
||||
return json_response(error='标识符必须为字母、数字、-和下划线的组合')
|
||||
if not re.fullmatch(r'\w+', form.key, re.ASCII):
|
||||
return json_response(error='标识符必须为字母、数字和下划线的组合')
|
||||
|
||||
service = Service.objects.filter(key=form.key).first()
|
||||
if service and service.id != form.id:
|
||||
return json_response(error=f'唯一标识符 {form.key} 已存在,请更改后重试')
|
||||
return json_response(error='该标识符已存在,请更改后重试')
|
||||
app = App.objects.filter(key=form.key).first()
|
||||
if app:
|
||||
return json_response(error=f'该标识符已被应用 {app.name} 使用,请更改后重试')
|
||||
if form.id:
|
||||
Service.objects.filter(pk=form.id).update(**form)
|
||||
else:
|
||||
|
@ -119,7 +130,8 @@ class ServiceView(View):
|
|||
if form.id in rel_services:
|
||||
rel_apps.append(app.name)
|
||||
if rel_apps:
|
||||
return json_response(error=f'该服务在配置中心已被 "{", ".join(rel_apps)}" 依赖,请解除依赖关系后再尝试删除。')
|
||||
return json_response(
|
||||
error=f'该服务在配置中心已被 "{", ".join(rel_apps)}" 依赖,请解除依赖关系后再尝试删除。')
|
||||
# auto delete configs
|
||||
Config.objects.filter(type='src', o_id=form.id).delete()
|
||||
ConfigHistory.objects.filter(type='src', o_id=form.id).delete()
|
||||
|
@ -151,7 +163,6 @@ class ConfigView(View):
|
|||
Argument('type', filter=lambda x: x in dict(Config.TYPES), help='缺少必要参数'),
|
||||
Argument('envs', type=list, filter=lambda x: len(x), help='请选择环境'),
|
||||
Argument('key', help='请输入Key'),
|
||||
Argument('is_public', type=bool, help='缺少必要参数'),
|
||||
Argument('value', type=str, default=''),
|
||||
Argument('desc', required=False)
|
||||
).parse(request.body)
|
||||
|
@ -173,7 +184,6 @@ class ConfigView(View):
|
|||
form, error = JsonParser(
|
||||
Argument('id', type=int, help='缺少必要参数'),
|
||||
Argument('value', type=str, default=''),
|
||||
Argument('is_public', type=bool, help='缺少必要参数'),
|
||||
Argument('desc', required=False)
|
||||
).parse(request.body)
|
||||
if error is None:
|
||||
|
@ -182,7 +192,6 @@ class ConfigView(View):
|
|||
if not config:
|
||||
return json_response(error='未找到指定对象')
|
||||
config.desc = form.desc
|
||||
config.is_public = form.is_public
|
||||
if config.value != form.value:
|
||||
old_value = config.value
|
||||
config.value = form.value
|
||||
|
@ -314,7 +323,6 @@ def _parse(request, query, data):
|
|||
item.delete()
|
||||
for key, value in data.items():
|
||||
query.key = key
|
||||
query.is_public = False
|
||||
query.value = _filter_value(value)
|
||||
query.updated_at = human_datetime()
|
||||
query.updated_by = request.user
|
||||
|
|
|
@ -42,7 +42,7 @@ export default observer(function () {
|
|||
name="key"
|
||||
label="唯一标识符"
|
||||
tooltip="应用的唯一标识符,会作为生成配置的前缀。"
|
||||
extra="可以由字母、数字、-和下划线组成。">
|
||||
extra="可以由字母、数字和下划线组成。">
|
||||
<Input placeholder="请输入唯一标识符,例如:api_order"/>
|
||||
</Form.Item>
|
||||
<Form.Item name="desc" label="备注信息">
|
||||
|
|
|
@ -51,26 +51,16 @@ class Rel extends React.Component {
|
|||
return (
|
||||
<Modal
|
||||
visible
|
||||
width={800}
|
||||
width={700}
|
||||
maskClosable={false}
|
||||
title="配置依赖关系"
|
||||
title="配置服务依赖"
|
||||
onCancel={() => store.relVisible = false}
|
||||
confirmLoading={this.state.loading}
|
||||
footer={hasPermission('config.app.edit_config') ? undefined : null}
|
||||
onOk={this.handleSubmit}>
|
||||
<Alert
|
||||
closable
|
||||
showIcon
|
||||
type="info"
|
||||
message="小提示"
|
||||
style={{margin: '0 80px 20px'}}
|
||||
description={[
|
||||
<p key={1}>设置依赖的应用仅会获取到其<span style={{color: 'red'}}>公共</span>配置,私有配置并不会被其他应用所获取。</p>,
|
||||
<p key={2}>服务不存在公共和私有配置的概念,所以会获取到依赖服务的所有配置信息。</p>
|
||||
]}/>
|
||||
<Tabs tabPosition="left">
|
||||
<Tabs.TabPane tab="应用依赖" key="app">
|
||||
<Form.Item label="设置依赖的应用">
|
||||
<Form.Item extra="设置依赖后,该应用将能够获取到所依赖应用的配置。">
|
||||
<Transfer
|
||||
listStyle={{width: 280, minHeight: 300}}
|
||||
titles={['所有应用', '已选应用']}
|
||||
|
@ -81,7 +71,7 @@ class Rel extends React.Component {
|
|||
</Form.Item>
|
||||
</Tabs.TabPane>
|
||||
<Tabs.TabPane tab="服务依赖" key="service">
|
||||
<Form.Item label="设置依赖的服务">
|
||||
<Form.Item extra="设置依赖后,该应用将能够获取到所依赖服务的配置。">
|
||||
<Transfer
|
||||
listStyle={{width: 280, minHeight: 300}}
|
||||
titles={['所有服务', '已选服务']}
|
||||
|
|
|
@ -42,7 +42,7 @@ export default observer(function () {
|
|||
name="key"
|
||||
label="唯一标识符"
|
||||
tooltip="环境的唯一标识符,会在配置中心API中使用,具体请参考官方文档。"
|
||||
extra="可以由字母、数字、-和下划线组成。">
|
||||
extra="可以由字母、数字和下划线组成。">
|
||||
<Input placeholder="请输入唯一标识符,例如:dev"/>
|
||||
</Form.Item>
|
||||
<Form.Item name="desc" label="备注信息">
|
||||
|
|
|
@ -34,16 +34,12 @@ export default observer(function () {
|
|||
confirmLoading={loading}
|
||||
onOk={handleSubmit}>
|
||||
<Form form={form} initialValues={store.record} labelCol={{span: 6}} wrapperCol={{span: 14}}>
|
||||
<Form.Item required name="name" label="服务名称">
|
||||
<Input placeholder="请输入服务名称,例如:订单数据库"/>
|
||||
<Form.Item required name="name" label="服务名称" tooltip="服务可以理解为一些配置的集合。">
|
||||
<Input placeholder="请输入服务名称"/>
|
||||
</Form.Item>
|
||||
<Form.Item
|
||||
required
|
||||
name="key"
|
||||
label="唯一标识符"
|
||||
tooltip="服务的唯一标识符,会作为生成配置的前缀。"
|
||||
extra="可以由字母、数字、-和下划线组成。">
|
||||
<Input placeholder="请输入唯一标识符,例如:mysql_order"/>
|
||||
<Form.Item required name="key" label="唯一标识符" tooltip="服务的唯一标识符,会作为生成配置的前缀。"
|
||||
extra="可以由字母、数字和下划线组成。">
|
||||
<Input placeholder="请输入唯一标识符"/>
|
||||
</Form.Item>
|
||||
<Form.Item name="desc" label="备注信息">
|
||||
<Input.TextArea placeholder="请输入备注信息"/>
|
||||
|
|
|
@ -17,7 +17,7 @@ export default observer(function () {
|
|||
<Breadcrumb>
|
||||
<Breadcrumb.Item>首页</Breadcrumb.Item>
|
||||
<Breadcrumb.Item>配置中心</Breadcrumb.Item>
|
||||
<Breadcrumb.Item>应用配置</Breadcrumb.Item>
|
||||
<Breadcrumb.Item>服务配置</Breadcrumb.Item>
|
||||
</Breadcrumb>
|
||||
<SearchForm>
|
||||
<SearchForm.Item span={8} title="服务名称">
|
||||
|
|
|
@ -42,7 +42,7 @@ export default observer(function () {
|
|||
name="key"
|
||||
label="唯一标识符"
|
||||
tooltip="给应用设置的唯一标识符,会用于配置中心的配置生成。"
|
||||
extra="可以由字母、数字、-和下划线组成。">
|
||||
extra="可以由字母、数字和下划线组成。">
|
||||
<Input placeholder="请输入唯一标识符,例如:api_order"/>
|
||||
</Form.Item>
|
||||
<Form.Item name="desc" label="备注信息">
|
||||
|
|
Loading…
Reference in New Issue