diff --git a/spug_api/apps/deploy/models.py b/spug_api/apps/deploy/models.py index 9c2a2d8..7ab626c 100644 --- a/spug_api/apps/deploy/models.py +++ b/spug_api/apps/deploy/models.py @@ -5,12 +5,20 @@ from apps.app.models import App class DeployRequest(models.Model, ModelMixin): + STATUS = ( + ('-2', '发布失败'), + ('-1', '已驳回'), + ('1', '待审核'), + ('2', '待发布'), + ('3', '已完成'), + ) app = models.ForeignKey(App, on_delete=models.CASCADE) name = models.CharField(max_length=50) - extra1 = models.TextField() - extra2 = models.TextField() + extra = models.TextField() host_ids = models.TextField() 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_by = models.ForeignKey(User, models.PROTECT, related_name='+') diff --git a/spug_api/apps/deploy/urls.py b/spug_api/apps/deploy/urls.py new file mode 100644 index 0000000..5b0cb31 --- /dev/null +++ b/spug_api/apps/deploy/urls.py @@ -0,0 +1,7 @@ +from django.urls import path + +from .views import * + +urlpatterns = [ + path('request/', RequestView.as_view()), +] diff --git a/spug_api/apps/deploy/views.py b/spug_api/apps/deploy/views.py index f32c3f7..b47cce9 100644 --- a/spug_api/apps/deploy/views.py +++ b/spug_api/apps/deploy/views.py @@ -1,23 +1,54 @@ from django.views.generic import View +from django.db.models import F from libs import json_response, JsonParser, Argument from apps.deploy.models import DeployRequest +from apps.app.models import App import json class RequestView(View): def get(self, request): - requests = DeployRequest.objects.all() - return json_response(requests) + data = [] + 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): form, error = JsonParser( + Argument('id', type=int, required=False), + Argument('app_id', type=int, help='缺少必要参数'), Argument('name', help='请输申请标题'), - Argument('extra1', help='缺少必要参数'), - Argument('extra2', help='缺少必要参数'), + Argument('extra', type=list, help='缺少必要参数'), Argument('host_ids', type=list, filter=lambda x: len(x), help='请选择要部署的主机'), Argument('desc', required=False), ).parse(request.body) 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) - 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) diff --git a/spug_api/spug/settings.py b/spug_api/spug/settings.py index d8ad11f..54e7244 100644 --- a/spug_api/spug/settings.py +++ b/spug_api/spug/settings.py @@ -39,6 +39,7 @@ INSTALLED_APPS = [ 'apps.alarm', 'apps.config', 'apps.app', + 'apps.deploy', ] MIDDLEWARE = [ diff --git a/spug_api/spug/urls.py b/spug_api/spug/urls.py index 0d75863..527a787 100644 --- a/spug_api/spug/urls.py +++ b/spug_api/spug/urls.py @@ -25,4 +25,5 @@ urlpatterns = [ path('setting/', include('apps.setting.urls')), path('config/', include('apps.config.urls')), path('app/', include('apps.app.urls')), + path('deploy/', include('apps.deploy.urls')), ]