mirror of https://github.com/openspug/spug
				
				
				
			更新唯一标识符规则
							parent
							
								
									0fe0b50da0
								
							
						
					
					
						commit
						c3e3e6419c
					
				| 
						 | 
				
			
			@ -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):
 | 
			
		||||
        if request.user.is_supper:
 | 
			
		||||
            apps = App.objects.all()
 | 
			
		||||
        else:
 | 
			
		||||
            ids = request.user.deploy_perms['apps']
 | 
			
		||||
            apps = App.objects.filter(id__in=ids)
 | 
			
		||||
        return json_response(apps)
 | 
			
		||||
        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):
 | 
			
		||||
        services = Service.objects.all()
 | 
			
		||||
        return json_response(services)
 | 
			
		||||
        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()
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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