diff --git a/django_code/apps/cloudmanager/admin.py b/django_code/apps/cloudmanager/admin.py index 0c89bcc..4a83a4f 100644 --- a/django_code/apps/cloudmanager/admin.py +++ b/django_code/apps/cloudmanager/admin.py @@ -1,11 +1,18 @@ from django.contrib import admin,messages from django.utils.translation import ngettext from .models import Machine_Data,Schedule_Day_Data,Schedule_Week_Data +from apps.kubernetes_connection.utils import scale_up # Register your models here. DB = 'cloudmanager_db' +@admin.action(description="scale up") +def scale_up_deploy(modeladmin, request, queryset): + for query in queryset.values(): + scale_up(namespace_name=query['namespace'],deploy_name=query['name'],replicas=query['replicas']) + + class ActiveAtHourFilter(admin.SimpleListFilter): title = 'Active at hour' parameter_name = 'active_at_hour' @@ -41,6 +48,7 @@ class MultiDBModelAdmin(admin.ModelAdmin): class MachineDataAdmin(MultiDBModelAdmin): list_display = ('name', 'namespace', 'schedule_week', 'schedule_day', 'replicas') list_filter = (ActiveAtHourFilter,) + actions = [scale_up_deploy] @admin.register(Schedule_Day_Data) diff --git a/django_code/apps/cloudmanager/views.py b/django_code/apps/cloudmanager/views.py index ac26e14..b792b88 100644 --- a/django_code/apps/cloudmanager/views.py +++ b/django_code/apps/cloudmanager/views.py @@ -22,3 +22,4 @@ def display(request): data = CmmData.objects.all() print(data[0].namespace) return HttpResponse(data) + diff --git a/django_code/apps/kubernetes_connection/utils.py b/django_code/apps/kubernetes_connection/utils.py new file mode 100644 index 0000000..bcee53e --- /dev/null +++ b/django_code/apps/kubernetes_connection/utils.py @@ -0,0 +1,19 @@ +from kubernetes import client, config + +def scale_up(namespace_name,deploy_name,replicas=1): + config.load_kube_config(config_file='/kubeconfig/config') + api = client.AppsV1Api() + deployment = api.read_namespaced_deployment(name=deploy_name, namespace=namespace_name) + deployment.spec.replicas = replicas + resp = api.patch_namespaced_deployment( + name=deploy_name, namespace=namespace_name, body=deployment); + return 0 + +def scale_down(namespace_name,deploy_name): + config.load_kube_config(config_file='/kubeconfig/config') + api = client.AppsV1Api() + deployment = api.read_namespaced_deployment(name=deploy_name, namespace=namespace_name) + deployment.spec.replicas = 0 + resp = api.patch_namespaced_deployment( + name=deploy_name, namespace=namespace_name, body=deployment); + return 0 \ No newline at end of file diff --git a/django_code/apps/random_simpsons/admin.py b/django_code/apps/random_simpsons/admin.py index 031aa8e..d1fc630 100644 --- a/django_code/apps/random_simpsons/admin.py +++ b/django_code/apps/random_simpsons/admin.py @@ -2,6 +2,7 @@ from django.contrib import admin,messages from django.utils.translation import ngettext from .models import SimpsonsData + # Register your models here. DB = 'simpsons_db' @@ -34,6 +35,8 @@ def make_unseen(modeladmin, request, queryset): messages.SUCCESS, ) + + @admin.register(SimpsonsData) class EpisodeAdmin(admin.ModelAdmin): list_display = ('season', 'episode', 'url', 'seen')