mirror of
https://github.com/ansible/awx.git
synced 2026-05-20 07:17:40 -02:30
Add approve/deny endpoints, fix some typos
This commit is contained in:
@@ -3401,11 +3401,18 @@ class WorkflowJobCancelSerializer(WorkflowJobSerializer):
|
|||||||
fields = ('can_cancel',)
|
fields = ('can_cancel',)
|
||||||
|
|
||||||
|
|
||||||
|
class WorkflowApprovalViewSerializer(UnifiedJobSerializer):
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
model = WorkflowApproval
|
||||||
|
fields = []
|
||||||
|
|
||||||
|
|
||||||
class WorkflowApprovalSerializer(UnifiedJobSerializer):
|
class WorkflowApprovalSerializer(UnifiedJobSerializer):
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = WorkflowApproval
|
model = WorkflowApproval
|
||||||
fields = ('*', '-controller_node', '-execution_node',)
|
fields = (['*', '-controller_node', '-execution_node',])
|
||||||
|
|
||||||
def get_related(self, obj):
|
def get_related(self, obj):
|
||||||
res = super(WorkflowApprovalSerializer, self).get_related(obj)
|
res = super(WorkflowApprovalSerializer, self).get_related(obj)
|
||||||
@@ -3414,9 +3421,12 @@ class WorkflowApprovalSerializer(UnifiedJobSerializer):
|
|||||||
res['workflow_approval_template'] = self.reverse('api:workflow_approval_template_detail',
|
res['workflow_approval_template'] = self.reverse('api:workflow_approval_template_detail',
|
||||||
kwargs={'pk': obj.workflow_approval_template.pk})
|
kwargs={'pk': obj.workflow_approval_template.pk})
|
||||||
res['notifications'] = self.reverse('api:workflow_approval_notifications_list', kwargs={'pk': obj.pk})
|
res['notifications'] = self.reverse('api:workflow_approval_notifications_list', kwargs={'pk': obj.pk})
|
||||||
|
res['approve'] = self.reverse('api:workflow_approval_approve', kwargs={'pk': obj.pk})
|
||||||
|
res['deny'] = self.reverse('api:workflow_approval_deny', kwargs={'pk': obj.pk})
|
||||||
return res
|
return res
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class WorkflowApprovalListSerializer(WorkflowApprovalSerializer, UnifiedJobListSerializer):
|
class WorkflowApprovalListSerializer(WorkflowApprovalSerializer, UnifiedJobListSerializer):
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
|
|||||||
@@ -6,6 +6,8 @@ from django.conf.urls import url
|
|||||||
from awx.api.views import (
|
from awx.api.views import (
|
||||||
WorkflowApprovalList,
|
WorkflowApprovalList,
|
||||||
WorkflowApprovalDetail,
|
WorkflowApprovalDetail,
|
||||||
|
WorkflowApprovalApprove,
|
||||||
|
WorkflowApprovalDeny,
|
||||||
WorkflowApprovalNotificationsList,
|
WorkflowApprovalNotificationsList,
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -13,8 +15,8 @@ from awx.api.views import (
|
|||||||
urls = [
|
urls = [
|
||||||
url(r'^$', WorkflowApprovalList.as_view(), name='workflow_approval_list'),
|
url(r'^$', WorkflowApprovalList.as_view(), name='workflow_approval_list'),
|
||||||
url(r'^(?P<pk>[0-9]+)/$', WorkflowApprovalDetail.as_view(), name='workflow_approval_detail'),
|
url(r'^(?P<pk>[0-9]+)/$', WorkflowApprovalDetail.as_view(), name='workflow_approval_detail'),
|
||||||
url(r'^(?P<pk>[0-9]+)/approve/$', WorkflowApprovalDetail.as_view(), name='approved_workflow'),
|
url(r'^(?P<pk>[0-9]+)/approve/$', WorkflowApprovalApprove.as_view(), name='workflow_approval_approve'),
|
||||||
url(r'^(?P<pk>[0-9]+)/reject/$', WorkflowApprovalDetail.as_view(), name='rejected_workflow'),
|
url(r'^(?P<pk>[0-9]+)/deny/$', WorkflowApprovalDeny.as_view(), name='workflow_approval_deny'),
|
||||||
url(r'^(?P<pk>[0-9]+)/notifications/$', WorkflowApprovalNotificationsList.as_view(), name='workflow_approval_notifications_list'),
|
url(r'^(?P<pk>[0-9]+)/notifications/$', WorkflowApprovalNotificationsList.as_view(), name='workflow_approval_notifications_list'),
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|||||||
@@ -4,8 +4,8 @@
|
|||||||
from django.conf.urls import url
|
from django.conf.urls import url
|
||||||
|
|
||||||
from awx.api.views import (
|
from awx.api.views import (
|
||||||
WorfklowApprovalTemplateList,
|
WorkflowApprovalTemplateList,
|
||||||
WorfklowApprovalTemplateDetail,
|
WorkflowApprovalTemplateDetail,
|
||||||
WorkflowApprovalTemplateJobsList,
|
WorkflowApprovalTemplateJobsList,
|
||||||
WorkflowApprovalTemplateNotificationTemplatesErrorList,
|
WorkflowApprovalTemplateNotificationTemplatesErrorList,
|
||||||
WorkflowApprovalTemplateNotificationTemplatesStartedList,
|
WorkflowApprovalTemplateNotificationTemplatesStartedList,
|
||||||
@@ -14,8 +14,8 @@ from awx.api.views import (
|
|||||||
|
|
||||||
|
|
||||||
urls = [
|
urls = [
|
||||||
url(r'^$', WorfklowApprovalTemplateList.as_view(), name='workflow_approval_template_list'),
|
url(r'^$', WorkflowApprovalTemplateList.as_view(), name='workflow_approval_template_list'),
|
||||||
url(r'^(?P<pk>[0-9]+)/$', WorfklowApprovalTemplateDetail.as_view(), name='workflow_approval_template_detail'),
|
url(r'^(?P<pk>[0-9]+)/$', WorkflowApprovalTemplateDetail.as_view(), name='workflow_approval_template_detail'),
|
||||||
url(r'^(?P<pk>[0-9]+)/approvals/$', WorkflowApprovalTemplateJobsList.as_view(), name='workflow_approval_template_jobs_list'),
|
url(r'^(?P<pk>[0-9]+)/approvals/$', WorkflowApprovalTemplateJobsList.as_view(), name='workflow_approval_template_jobs_list'),
|
||||||
url(r'^(?P<pk>[0-9]+)/notification_templates_started/$', WorkflowApprovalTemplateNotificationTemplatesStartedList.as_view(),
|
url(r'^(?P<pk>[0-9]+)/notification_templates_started/$', WorkflowApprovalTemplateNotificationTemplatesStartedList.as_view(),
|
||||||
name='workflow_approval_template_notification_templates_started_list'),
|
name='workflow_approval_template_notification_templates_started_list'),
|
||||||
|
|||||||
@@ -4407,18 +4407,13 @@ for attr, value in list(locals().items()):
|
|||||||
setattr(this_module, name, view)
|
setattr(this_module, name, view)
|
||||||
|
|
||||||
|
|
||||||
class WorfklowApprovalTemplateList(ListAPIView):
|
class WorkflowApprovalTemplateList(ListCreateAPIView):
|
||||||
|
|
||||||
model = models.WorkflowApprovalTemplate
|
model = models.WorkflowApprovalTemplate
|
||||||
serializer_class = serializers.WorkflowApprovalTemplateSerializer
|
serializer_class = serializers.WorkflowApprovalTemplateSerializer
|
||||||
|
|
||||||
def get(self, request, *args, **kwargs):
|
|
||||||
if not request.user.is_superuser and not request.user.is_system_auditor:
|
|
||||||
raise PermissionDenied(_("Superuser privileges needed."))
|
|
||||||
return super(WorfklowApprovalTemplateList, self).get(request, *args, **kwargs)
|
|
||||||
|
|
||||||
|
class WorkflowApprovalTemplateDetail(RelatedJobsPreventDeleteMixin, RetrieveUpdateDestroyAPIView):
|
||||||
class WorfklowApprovalTemplateDetail(RetrieveAPIView):
|
|
||||||
|
|
||||||
model = models.WorkflowApprovalTemplate
|
model = models.WorkflowApprovalTemplate
|
||||||
serializer_class = serializers.WorkflowApprovalTemplateSerializer
|
serializer_class = serializers.WorkflowApprovalTemplateSerializer
|
||||||
@@ -4472,6 +4467,26 @@ class WorkflowApprovalDetail(UnifiedJobDeletionMixin, RetrieveDestroyAPIView):
|
|||||||
serializer_class = serializers.WorkflowApprovalSerializer
|
serializer_class = serializers.WorkflowApprovalSerializer
|
||||||
|
|
||||||
|
|
||||||
|
class WorkflowApprovalApprove(RetrieveAPIView):
|
||||||
|
model = models.WorkflowApproval
|
||||||
|
serializer_class = serializers.WorkflowApprovalViewSerializer
|
||||||
|
|
||||||
|
def post(self, request, *args, **kwargs):
|
||||||
|
obj = self.get_object()
|
||||||
|
obj.approve()
|
||||||
|
return Response(status=status.HTTP_202_ACCEPTED)
|
||||||
|
|
||||||
|
|
||||||
|
class WorkflowApprovalDeny(RetrieveAPIView):
|
||||||
|
model = models.WorkflowApproval
|
||||||
|
serializer_class = serializers.WorkflowApprovalViewSerializer
|
||||||
|
|
||||||
|
def post(self, request, *args, **kwargs):
|
||||||
|
obj = self.get_object()
|
||||||
|
obj.deny()
|
||||||
|
return Response(status=status.HTTP_202_ACCEPTED)
|
||||||
|
|
||||||
|
|
||||||
class WorkflowApprovalNotificationsList(SubListAPIView):
|
class WorkflowApprovalNotificationsList(SubListAPIView):
|
||||||
|
|
||||||
model = models.Notification
|
model = models.Notification
|
||||||
|
|||||||
@@ -2812,7 +2812,7 @@ class WorkflowApprovalTemplateAccess(BaseAccess):
|
|||||||
return True
|
return True
|
||||||
|
|
||||||
def filtered_queryset(self):
|
def filtered_queryset(self):
|
||||||
return self.model.objects.all()
|
return self.model.filter(workflowjobtemplatenodes__workflow_job_template=WorkflowJobTemplate.accessible_pk_qs(self.user, 'read_role'))
|
||||||
|
|
||||||
|
|
||||||
for cls in BaseAccess.__subclasses__():
|
for cls in BaseAccess.__subclasses__():
|
||||||
|
|||||||
@@ -648,10 +648,10 @@ class WorkflowApproval(UnifiedJob):
|
|||||||
self.status = 'successful'
|
self.status = 'successful'
|
||||||
self.save()
|
self.save()
|
||||||
schedule_task_manager()
|
schedule_task_manager()
|
||||||
return reverse('api:approved_workflow', kwargs={'pk': self.pk}, request=request)
|
return reverse('api:workflow_approval_approve', kwargs={'pk': self.pk}, request=request)
|
||||||
|
|
||||||
def reject(self, request=None):
|
def deny(self, request=None):
|
||||||
self.status = 'failed'
|
self.status = 'failed'
|
||||||
self.save()
|
self.save()
|
||||||
schedule_task_manager()
|
schedule_task_manager()
|
||||||
return reverse('api:rejected_workflow', kwargs={'pk': self.pk}, request=request)
|
return reverse('api:workflow_approval_deny', kwargs={'pk': self.pk}, request=request)
|
||||||
|
|||||||
Reference in New Issue
Block a user