mirror of
https://github.com/ansible/awx.git
synced 2026-02-12 07:04:45 -03:30
* Adding hosts bulk deletion feature Signed-off-by: Avi Layani <alayani@redhat.com> * fix the type of the argument Signed-off-by: Avi Layani <alayani@redhat.com> * fixing activity_entry tracking Signed-off-by: Avi Layani <alayani@redhat.com> * Revert "fixing activity_entry tracking" This reverts commit c8eab52c2ccc5abe215d56d1704ba1157e5fbbd0. Since the bulk_delete is not related to an inventory, only hosts which can be from different inventories. * get only needed vars to reduce memory consumption Signed-off-by: Avi Layani <alayani@redhat.com> * filtering the data to reduce memory increase the number of queries Signed-off-by: Avi Layani <alayani@redhat.com> * update the activity stream for inventories Signed-off-by: Avi Layani <alayani@redhat.com> * fix the changes dict initialiazation Signed-off-by: Avi Layani <alayani@redhat.com> --------- Signed-off-by: Avi Layani <alayani@redhat.com>
93 lines
3.4 KiB
Python
93 lines
3.4 KiB
Python
from collections import OrderedDict
|
|
|
|
from django.utils.translation import gettext_lazy as _
|
|
|
|
from rest_framework.permissions import IsAuthenticated
|
|
from rest_framework.renderers import JSONRenderer
|
|
from rest_framework.reverse import reverse
|
|
from rest_framework import status
|
|
from rest_framework.response import Response
|
|
|
|
from awx.main.models import UnifiedJob, Host
|
|
from awx.api.generics import (
|
|
GenericAPIView,
|
|
APIView,
|
|
)
|
|
from awx.api import (
|
|
serializers,
|
|
renderers,
|
|
)
|
|
|
|
|
|
class BulkView(APIView):
|
|
name = _('Bulk')
|
|
swagger_topic = 'Bulk'
|
|
|
|
permission_classes = [IsAuthenticated]
|
|
renderer_classes = [
|
|
renderers.BrowsableAPIRenderer,
|
|
JSONRenderer,
|
|
]
|
|
allowed_methods = ['GET', 'OPTIONS']
|
|
|
|
def get(self, request, format=None):
|
|
'''List top level resources'''
|
|
data = OrderedDict()
|
|
data['host_create'] = reverse('api:bulk_host_create', request=request)
|
|
data['host_delete'] = reverse('api:bulk_host_delete', request=request)
|
|
data['job_launch'] = reverse('api:bulk_job_launch', request=request)
|
|
return Response(data)
|
|
|
|
|
|
class BulkJobLaunchView(GenericAPIView):
|
|
permission_classes = [IsAuthenticated]
|
|
model = UnifiedJob
|
|
serializer_class = serializers.BulkJobLaunchSerializer
|
|
allowed_methods = ['GET', 'POST', 'OPTIONS']
|
|
|
|
def get(self, request):
|
|
data = OrderedDict()
|
|
data['detail'] = "Specify a list of unified job templates to launch alongside their launchtime parameters"
|
|
return Response(data, status=status.HTTP_200_OK)
|
|
|
|
def post(self, request):
|
|
bulkjob_serializer = serializers.BulkJobLaunchSerializer(data=request.data, context={'request': request})
|
|
if bulkjob_serializer.is_valid():
|
|
result = bulkjob_serializer.create(bulkjob_serializer.validated_data)
|
|
return Response(result, status=status.HTTP_201_CREATED)
|
|
return Response(bulkjob_serializer.errors, status=status.HTTP_400_BAD_REQUEST)
|
|
|
|
|
|
class BulkHostCreateView(GenericAPIView):
|
|
permission_classes = [IsAuthenticated]
|
|
model = Host
|
|
serializer_class = serializers.BulkHostCreateSerializer
|
|
allowed_methods = ['GET', 'POST', 'OPTIONS']
|
|
|
|
def get(self, request):
|
|
return Response({"detail": "Bulk create hosts with this endpoint"}, status=status.HTTP_200_OK)
|
|
|
|
def post(self, request):
|
|
serializer = serializers.BulkHostCreateSerializer(data=request.data, context={'request': request})
|
|
if serializer.is_valid():
|
|
result = serializer.create(serializer.validated_data)
|
|
return Response(result, status=status.HTTP_201_CREATED)
|
|
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
|
|
|
|
|
|
class BulkHostDeleteView(GenericAPIView):
|
|
permission_classes = [IsAuthenticated]
|
|
model = Host
|
|
serializer_class = serializers.BulkHostDeleteSerializer
|
|
allowed_methods = ['GET', 'POST', 'OPTIONS']
|
|
|
|
def get(self, request):
|
|
return Response({"detail": "Bulk delete hosts with this endpoint"}, status=status.HTTP_200_OK)
|
|
|
|
def post(self, request):
|
|
serializer = serializers.BulkHostDeleteSerializer(data=request.data, context={'request': request})
|
|
if serializer.is_valid():
|
|
result = serializer.delete(serializer.validated_data)
|
|
return Response(result, status=status.HTTP_201_CREATED)
|
|
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
|