mirror of https://github.com/openspug/spug
A api update
parent
550c74ae89
commit
c5e68f7f13
|
@ -5,12 +5,20 @@ from apps.app.models import App
|
||||||
|
|
||||||
|
|
||||||
class DeployRequest(models.Model, ModelMixin):
|
class DeployRequest(models.Model, ModelMixin):
|
||||||
|
STATUS = (
|
||||||
|
('-2', '发布失败'),
|
||||||
|
('-1', '已驳回'),
|
||||||
|
('1', '待审核'),
|
||||||
|
('2', '待发布'),
|
||||||
|
('3', '已完成'),
|
||||||
|
)
|
||||||
app = models.ForeignKey(App, on_delete=models.CASCADE)
|
app = models.ForeignKey(App, on_delete=models.CASCADE)
|
||||||
name = models.CharField(max_length=50)
|
name = models.CharField(max_length=50)
|
||||||
extra1 = models.TextField()
|
extra = models.TextField()
|
||||||
extra2 = models.TextField()
|
|
||||||
host_ids = models.TextField()
|
host_ids = models.TextField()
|
||||||
desc = models.CharField(max_length=255, null=True)
|
desc = models.CharField(max_length=255, null=True)
|
||||||
|
status = models.CharField(max_length=2, choices=STATUS)
|
||||||
|
reason = models.CharField(max_length=255, null=True)
|
||||||
|
|
||||||
created_at = models.CharField(max_length=20, default=human_time)
|
created_at = models.CharField(max_length=20, default=human_time)
|
||||||
created_by = models.ForeignKey(User, models.PROTECT, related_name='+')
|
created_by = models.ForeignKey(User, models.PROTECT, related_name='+')
|
||||||
|
|
|
@ -0,0 +1,7 @@
|
||||||
|
from django.urls import path
|
||||||
|
|
||||||
|
from .views import *
|
||||||
|
|
||||||
|
urlpatterns = [
|
||||||
|
path('request/', RequestView.as_view()),
|
||||||
|
]
|
|
@ -1,23 +1,54 @@
|
||||||
from django.views.generic import View
|
from django.views.generic import View
|
||||||
|
from django.db.models import F
|
||||||
from libs import json_response, JsonParser, Argument
|
from libs import json_response, JsonParser, Argument
|
||||||
from apps.deploy.models import DeployRequest
|
from apps.deploy.models import DeployRequest
|
||||||
|
from apps.app.models import App
|
||||||
import json
|
import json
|
||||||
|
|
||||||
|
|
||||||
class RequestView(View):
|
class RequestView(View):
|
||||||
def get(self, request):
|
def get(self, request):
|
||||||
requests = DeployRequest.objects.all()
|
data = []
|
||||||
return json_response(requests)
|
for item in DeployRequest.objects.annotate(
|
||||||
|
env_name=F('app__env__name'),
|
||||||
|
app_name=F('app__name'),
|
||||||
|
app_host_ids=F('app__host_ids'),
|
||||||
|
app_extend=F('app__extend'),
|
||||||
|
created_by_user=F('created_by__nickname')):
|
||||||
|
tmp = item.to_dict()
|
||||||
|
tmp['env_name'] = item.env_name
|
||||||
|
tmp['app_name'] = item.app_name
|
||||||
|
tmp['app_extend'] = item.app_extend
|
||||||
|
tmp['extra'] = json.loads(item.extra)
|
||||||
|
tmp['host_ids'] = json.loads(item.host_ids)
|
||||||
|
tmp['app_host_ids'] = json.loads(item.app_host_ids)
|
||||||
|
tmp['status_alias'] = item.get_status_display()
|
||||||
|
tmp['created_by_user'] = item.created_by_user
|
||||||
|
data.append(tmp)
|
||||||
|
return json_response(data)
|
||||||
|
|
||||||
def post(self, request):
|
def post(self, request):
|
||||||
form, error = JsonParser(
|
form, error = JsonParser(
|
||||||
|
Argument('id', type=int, required=False),
|
||||||
|
Argument('app_id', type=int, help='缺少必要参数'),
|
||||||
Argument('name', help='请输申请标题'),
|
Argument('name', help='请输申请标题'),
|
||||||
Argument('extra1', help='缺少必要参数'),
|
Argument('extra', type=list, help='缺少必要参数'),
|
||||||
Argument('extra2', help='缺少必要参数'),
|
|
||||||
Argument('host_ids', type=list, filter=lambda x: len(x), help='请选择要部署的主机'),
|
Argument('host_ids', type=list, filter=lambda x: len(x), help='请选择要部署的主机'),
|
||||||
Argument('desc', required=False),
|
Argument('desc', required=False),
|
||||||
).parse(request.body)
|
).parse(request.body)
|
||||||
if error is None:
|
if error is None:
|
||||||
|
app = App.objects.filter(pk=form.app_id).first()
|
||||||
|
if not app:
|
||||||
|
return json_response(error='未找到该应用')
|
||||||
|
form.status = '1' if app.is_audit else '2'
|
||||||
|
form.extra = json.dumps(form.extra)
|
||||||
form.host_ids = json.dumps(form.host_ids)
|
form.host_ids = json.dumps(form.host_ids)
|
||||||
DeployRequest.objects.create(**form)
|
if form.id:
|
||||||
|
DeployRequest.objects.filter(pk=form.id).update(
|
||||||
|
created_by=request.user,
|
||||||
|
reason=None,
|
||||||
|
**form
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
DeployRequest.objects.create(created_by=request.user, **form)
|
||||||
return json_response(error=error)
|
return json_response(error=error)
|
||||||
|
|
|
@ -39,6 +39,7 @@ INSTALLED_APPS = [
|
||||||
'apps.alarm',
|
'apps.alarm',
|
||||||
'apps.config',
|
'apps.config',
|
||||||
'apps.app',
|
'apps.app',
|
||||||
|
'apps.deploy',
|
||||||
]
|
]
|
||||||
|
|
||||||
MIDDLEWARE = [
|
MIDDLEWARE = [
|
||||||
|
|
|
@ -25,4 +25,5 @@ urlpatterns = [
|
||||||
path('setting/', include('apps.setting.urls')),
|
path('setting/', include('apps.setting.urls')),
|
||||||
path('config/', include('apps.config.urls')),
|
path('config/', include('apps.config.urls')),
|
||||||
path('app/', include('apps.app.urls')),
|
path('app/', include('apps.app.urls')),
|
||||||
|
path('deploy/', include('apps.deploy.urls')),
|
||||||
]
|
]
|
||||||
|
|
Loading…
Reference in New Issue