All checks were successful
Build And Test / build-and-push (push) Successful in 2m41s
59 lines
2.7 KiB
Python
59 lines
2.7 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={user.email}, key_name={key_name}, 암호화 길이={len(encrypted_key)}")
|
|
logger.info(f"[🔐 SSH 암호화 성공] user={user.email}, key_name={key_name}, 암호화 길이={len(encrypted_key)}")
|
|
|
|
return Response(self.get_serializer(task).data)
|
|
except Exception as e:
|
|
logger.exception("[❌ SSH 암호화 실패]")
|
|
logger.error(f"작업 실행 실패: {str(e)}")
|
|
|
|
return Response({"error": f"작업 실행 실패: {str(e)}"}, status=500)
|