All checks were successful
		
		
	
	Build And Test / build-and-push (push) Successful in 2m40s
				
			
		
			
				
	
	
		
			57 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			57 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
from rest_framework import viewsets, status
 | 
						|
from rest_framework.response import Response
 | 
						|
from rest_framework.permissions import IsAuthenticated
 | 
						|
from rest_framework.decorators import action
 | 
						|
from .models import AnsibleTask
 | 
						|
from .serializers import AnsibleTaskSerializer, AnsibleTaskDetailSerializer
 | 
						|
from .services import run_ansible_job, get_ssh_key_from_auth_server
 | 
						|
import logging 
 | 
						|
 | 
						|
logger = logging.getLogger(__name__) 
 | 
						|
 | 
						|
class AnsibleTaskViewSet(viewsets.ModelViewSet):
 | 
						|
    serializer_class = AnsibleTaskSerializer
 | 
						|
    permission_classes = [IsAuthenticated]
 | 
						|
 | 
						|
    def get_queryset(self):
 | 
						|
        # ✅ 현재 로그인한 사용자의 email로 필터
 | 
						|
        logger.info(f"[🔐 조회] user={self.request.user.email}")
 | 
						|
        return AnsibleTask.objects.filter(author_email=self.request.user.email).order_by("-created_at")
 | 
						|
 | 
						|
    def get_serializer_class(self):
 | 
						|
        if self.action == "retrieve":
 | 
						|
            return AnsibleTaskDetailSerializer
 | 
						|
        return AnsibleTaskSerializer
 | 
						|
 | 
						|
    def create(self, request, *args, **kwargs):
 | 
						|
        serializer = self.get_serializer(data=request.data)
 | 
						|
        serializer.is_valid(raise_exception=True)
 | 
						|
 | 
						|
        # ✅ author_email 저장
 | 
						|
        task = serializer.save(author_email=request.user.email)
 | 
						|
        logger.info(f"[저장 완료] user={request.user.email}, task_id={task.id}"
 | 
						|
                    )
 | 
						|
        return Response(self.get_serializer(task).data, status=status.HTTP_201_CREATED)
 | 
						|
        # try:
 | 
						|
        #     token = request.headers.get("Authorization", "").replace("Bearer ", "")
 | 
						|
        #     ssh_key = get_ssh_key_from_auth_server(token)
 | 
						|
        #     run_ansible_job(task, ssh_key)
 | 
						|
        #     return Response(self.get_serializer(task).data, status=status.HTTP_201_CREATED)
 | 
						|
        # except Exception as e:
 | 
						|
        #     return Response({"error": f"작업 실행 실패: {str(e)}"}, status=500)
 | 
						|
 | 
						|
    @action(detail=True, methods=["post"], url_path="run")
 | 
						|
    def run_task(self, request, pk=None):
 | 
						|
        task = self.get_object()
 | 
						|
        try:
 | 
						|
            token = request.headers.get("Authorization", "").replace("Bearer ", "")
 | 
						|
            ssh_key = get_ssh_key_from_auth_server(token)
 | 
						|
            run_ansible_job(task, ssh_key)
 | 
						|
            logger.info(f"[실행 완료] user={request.user.email}, 작업={self.get_serializer(task).data}")
 | 
						|
 | 
						|
            return Response(self.get_serializer(task).data)
 | 
						|
        except Exception as e:
 | 
						|
            logger.error(f"작업 실행 실패: {str(e)}, status=500")
 | 
						|
 | 
						|
            return Response({"error": f"작업 실행 실패: {str(e)}"}, status=500)
 |