from django.http import HttpResponse
from django.shortcuts import render
from datetime import timedelta
from django.utils import timezone
from django.views.decorators.csrf import csrf_exempt
from django.http import JsonResponse
from apps.import_aggregator.import_rest_framework import api_view, authentication_classes, permission_classes,TokenAuthentication,IsAuthenticated,Response,status
from .utils import import_namespace,retrieve_and_apply
from apps.kubernetes_connection.utils import scale_up,scale_down
from .models import Deployment_Data,Ingress_Data
def hello(request):
list_schedule = ['schedule1','schedule2']
list_servers_up = [['wiki', 'wikijs', 2], ['book', 'bookstack-db', 1]]
return render(request, 'cloudmanager/index.html', {'list_schedule':list_schedule,'list_servers_up':list_servers_up})
def import_namespace_view(request):
import_namespace()
return HttpResponse('
Namespace imported!
')
def retrieve_and_apply_view(request):
output = retrieve_and_apply()
return HttpResponse(''+output+'
')
def scale_up_gui(request,namespace_name,deploy_name,replicas=1):
Deployment_Data.objects.filter(namespace=namespace_name,name=deploy_name).update(do_not_touch_until=timezone.now() + timedelta(hours=1))
scale_up(namespace_name=namespace_name,deploy_name=deploy_name,replicas=replicas)
return render(request, 'dashboard/start.html', {'namespace':namespace_name,'deployment': deploy_name, 'url': 'https://namespace.com'})
def scale_down_gui(request,namespace_name,deploy_name):
Deployment_Data.objects.filter(namespace=namespace_name,name=deploy_name).update(do_not_touch_until=timezone.now() + timedelta(hours=1))
scale_down(namespace_name=namespace_name,deploy_name=deploy_name)
return render(request, 'dashboard/shutdown.html',
{'namespace': namespace_name, 'deployment': deploy_name, 'url': 'https://namespace.com'})
@api_view(['POST'])
@authentication_classes([TokenAuthentication])
@permission_classes([IsAuthenticated])
def add_ingress(request):
url = request.POST.get('url')
namespace = request.POST.get('namespace')
print("URL: "+str(url))
print("NS: "+str(namespace))
try:
Ingress_Data.objects.update_or_create(url=url,namespace=namespace)
except Exception as exception:
return JsonResponse({"status": "error","reason":str(exception)})
return JsonResponse({"status": "added","url":str(url),"namespace":str(namespace)})
@api_view(['POST'])
@authentication_classes([TokenAuthentication])
@permission_classes([IsAuthenticated])
def delete_ingress(request):
url = request.POST.get('url')
namespace = request.POST.get('namespace')
print("URL: "+str(url))
print("NS: "+str(namespace))
try:
ingress_object = Ingress_Data.objects.filter(url=url,namespace=namespace)
except Exception as exception:
return JsonResponse({"status": "error","reason":str(exception)})
try:
ingress_object.delete()
except Exception as exception:
return JsonResponse({"status": "error","reason":str(exception)})
return JsonResponse({"status": "deleted","url":str(url),"namespace":str(namespace)})