Merge pull request 'Testing' (#43) from testing into main
Dockerfile runner / Explore-Gitea-Actions (push) Successful in 2m39s
Dockerfile runner / Explore-Gitea-Actions (push) Successful in 2m39s
Reviewed-on: http://gitea.geeraert.eu/pi-ux-ce/Django_kube/pulls/43
This commit was merged in pull request #43.
This commit is contained in:
@@ -1,8 +1,10 @@
|
|||||||
from django.contrib import admin,messages
|
from django.contrib import admin,messages
|
||||||
from django.utils.translation import ngettext
|
from django.utils.translation import ngettext
|
||||||
from .models import Deployment_Data,Schedule_Day_Data,Schedule_Week_Data,Namespace_Data
|
from .models import Deployment_Data,Schedule_Day_Data,Schedule_Week_Data,Namespace_Data
|
||||||
from .utils import import_namespace,import_deployment,generate_default_day_schedule,generate_default_week_schedule,Check_server_supposed_XXX
|
from .utils import import_namespace,import_deployment,generate_default_day_schedule,generate_default_week_schedule,Check_server_supposed_XXX,retrieve_and_apply
|
||||||
from apps.kubernetes_connection.utils import scale_up,scale_down
|
from apps.kubernetes_connection.utils import scale_up,scale_down
|
||||||
|
from admin_extra_buttons.api import ExtraButtonsMixin, button
|
||||||
|
|
||||||
|
|
||||||
DB = 'cloudmanager_db'
|
DB = 'cloudmanager_db'
|
||||||
|
|
||||||
@@ -50,21 +52,6 @@ def Check_server_supposed_true(modeladmin, request, queryset):
|
|||||||
for server in servers_supposed_false:
|
for server in servers_supposed_false:
|
||||||
messages.add_message(request, messages.INFO, server)
|
messages.add_message(request, messages.INFO, server)
|
||||||
|
|
||||||
@admin.action(description="create default schedule")
|
|
||||||
def generate_default_day_schedule_admin(modeladmin, request, queryset):
|
|
||||||
generate_default_day_schedule()
|
|
||||||
generate_default_week_schedule()
|
|
||||||
|
|
||||||
|
|
||||||
@admin.action(description="import namespace")
|
|
||||||
def import_namespace_admin(modeladmin, request, queryset):
|
|
||||||
import_namespace()
|
|
||||||
|
|
||||||
@admin.action(description="import deployment")
|
|
||||||
def import_deployment_admin(modeladmin, request, queryset):
|
|
||||||
import_deployment()
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class ActiveAtHourFilter(admin.SimpleListFilter):
|
class ActiveAtHourFilter(admin.SimpleListFilter):
|
||||||
title = 'Active at hour'
|
title = 'Active at hour'
|
||||||
@@ -98,27 +85,52 @@ class MultiDBModelAdmin(admin.ModelAdmin):
|
|||||||
|
|
||||||
|
|
||||||
@admin.register(Deployment_Data)
|
@admin.register(Deployment_Data)
|
||||||
class DeploymentDataAdmin(MultiDBModelAdmin):
|
class DeploymentDataAdmin(ExtraButtonsMixin, MultiDBModelAdmin):
|
||||||
list_display = ('name', 'namespace', 'schedule_week', 'schedule_day', 'replicas')
|
list_display = ('name', 'namespace', 'schedule_week', 'schedule_day', 'replicas')
|
||||||
list_filter = (ActiveAtHourFilter,)
|
list_filter = (ActiveAtHourFilter,)
|
||||||
actions = [Check_server_supposed_False,Check_server_supposed_true,scale_up_deploy,scale_down_deploy,import_deployment_admin,generate_default_day_schedule_admin]
|
actions = [Check_server_supposed_False,Check_server_supposed_true,scale_up_deploy,scale_down_deploy]
|
||||||
|
@button()
|
||||||
|
def retrieve_and_apply(self, request):
|
||||||
|
# your business logic here
|
||||||
|
retrieve_and_apply()
|
||||||
|
self.message_user(request, 'Operation started')
|
||||||
|
|
||||||
|
@button()
|
||||||
|
def import_deployment(self, request):
|
||||||
|
# your business logic here
|
||||||
|
import_deployment()
|
||||||
|
self.message_user(request, 'Deployments imported')
|
||||||
|
|
||||||
@admin.register(Schedule_Day_Data)
|
@admin.register(Schedule_Day_Data)
|
||||||
class ScheduleDayAdmin(MultiDBModelAdmin):
|
class ScheduleDayAdmin(ExtraButtonsMixin,MultiDBModelAdmin):
|
||||||
list_display = ['name_schedule'] + [f'state_at_{h}' for h in range(24)]
|
list_display = ['name_schedule'] + [f'state_at_{h}' for h in range(24)]
|
||||||
actions = [import_deployment_admin,generate_default_day_schedule_admin]
|
@button()
|
||||||
|
def generate_default_day_schedule_admin(self, request):
|
||||||
|
generate_default_day_schedule()
|
||||||
|
generate_default_week_schedule()
|
||||||
|
self.message_user(request, 'Created default schedules')
|
||||||
|
|
||||||
@admin.register(Schedule_Week_Data)
|
@admin.register(Schedule_Week_Data)
|
||||||
class ScheduleWeekAdmin(MultiDBModelAdmin):
|
class ScheduleWeekAdmin(ExtraButtonsMixin,MultiDBModelAdmin):
|
||||||
list_display = (
|
list_display = (
|
||||||
'name_schedule',
|
'name_schedule',
|
||||||
'state_Monday', 'state_Tuesday', 'state_Wednesday',
|
'state_Monday', 'state_Tuesday', 'state_Wednesday',
|
||||||
'state_Thursday', 'state_Friday', 'state_Saturday', 'state_Sunday',
|
'state_Thursday', 'state_Friday', 'state_Saturday', 'state_Sunday',
|
||||||
)
|
)
|
||||||
actions = [import_deployment_admin,generate_default_day_schedule_admin]
|
@button()
|
||||||
|
def generate_default_day_schedule_admin(self, request):
|
||||||
|
generate_default_day_schedule()
|
||||||
|
generate_default_week_schedule()
|
||||||
|
self.message_user(request, 'Created default schedules')
|
||||||
|
|
||||||
|
|
||||||
@admin.register(Namespace_Data)
|
@admin.register(Namespace_Data)
|
||||||
class NamespaceAdmin(MultiDBModelAdmin):
|
class NamespaceAdmin(ExtraButtonsMixin, MultiDBModelAdmin):
|
||||||
list_display = ('namespace',)
|
list_display = ('namespace',)
|
||||||
actions = [import_namespace_admin]
|
|
||||||
|
|
||||||
|
@button()
|
||||||
|
def import_namespace(self, request):
|
||||||
|
# your business logic here
|
||||||
|
import_namespace()
|
||||||
|
self.message_user(request, 'Namespaces imported')
|
||||||
|
|||||||
@@ -1,37 +1,6 @@
|
|||||||
from django.apps import AppConfig
|
from django.apps import AppConfig
|
||||||
from django.http import HttpResponse
|
|
||||||
from django.http import HttpResponseRedirect
|
|
||||||
from django.shortcuts import render
|
|
||||||
import os
|
|
||||||
#import psycopg2
|
|
||||||
from apps.cloudmanager.db_interaction import DB_generation,Check_server_supposed_XXX,Give_current_weekday,Give_current_hour
|
|
||||||
|
|
||||||
|
|
||||||
class CloudmanagerConfig(AppConfig):
|
class CloudmanagerConfig(AppConfig):
|
||||||
default_auto_field = 'django.db.models.BigAutoField'
|
default_auto_field = 'django.db.models.BigAutoField'
|
||||||
name = 'apps.cloudmanager'
|
name = 'apps.cloudmanager'
|
||||||
label = 'cloudmanager'
|
label = 'cloudmanager'
|
||||||
|
|
||||||
def coucou(request):
|
|
||||||
return HttpResponse('<h1>Hello cmm!</h1>')
|
|
||||||
|
|
||||||
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 redirect(request):
|
|
||||||
db_host = os.environ.get('DB_HOST')
|
|
||||||
db_port = os.environ.get('DB_PORT')
|
|
||||||
db_user = os.environ.get('DB_USERNAME')
|
|
||||||
db_password = os.environ.get('DB_PASSWORD')
|
|
||||||
db_name = os.environ.get('CUSTOM_DB_DATABASE',os.environ.get('DB_DATABASE'))
|
|
||||||
|
|
||||||
generated_db = DB_generation(db_host, db_port, db_user, db_password,db_name)
|
|
||||||
##operation:
|
|
||||||
## Server(s) supposed to be UP
|
|
||||||
|
|
||||||
list_servers_up = Check_server_supposed_XXX(generated_db, "up", Give_current_hour(),Give_current_weekday())
|
|
||||||
print(list_servers_up)
|
|
||||||
return render(request, 'cloudmanager/cmm_blank_page.html', {'list_servers_up':list_servers_up})
|
|
||||||
|
|
||||||
|
|||||||
@@ -154,10 +154,6 @@ def main(request):
|
|||||||
#print(Is_the_server_already_wanted_state(112, "stopped"))
|
#print(Is_the_server_already_wanted_state(112, "stopped"))
|
||||||
return HttpResponse('<h1>CMM executed!</h1>')
|
return HttpResponse('<h1>CMM executed!</h1>')
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
main()
|
|
||||||
|
|
||||||
|
|
||||||
"""
|
"""
|
||||||
TO DO:
|
TO DO:
|
||||||
EXTRACT TYPE OF MACHINE
|
EXTRACT TYPE OF MACHINE
|
||||||
|
|||||||
@@ -15,25 +15,16 @@ Including another URLconf
|
|||||||
2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
|
2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
|
||||||
"""
|
"""
|
||||||
from django.urls import path
|
from django.urls import path
|
||||||
from apps.cloudmanager import apps as cloudmanager_apps
|
|
||||||
from apps.cloudmanager import views as cloudmanager_views
|
from .views import coucou,display,hello,import_namespace_view,retrieve_and_apply_view
|
||||||
|
|
||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
################### cloudmanager ###################
|
################### cloudmanager ###################
|
||||||
path('', cloudmanager_apps.redirect),
|
path('', hello, name='hello'),
|
||||||
path('hello', cloudmanager_apps.hello, name='hello'),
|
path('coucou', coucou, name='coucou'),
|
||||||
path('coucou', cloudmanager_views.coucou, name='coucou'),
|
path('display', display, name='display'),
|
||||||
path('display', cloudmanager_views.display, name='display'),
|
path('import_namespace', import_namespace_view, name='import_namespace'),
|
||||||
#path('/run-action/', cloudmanager_views.trigger_my_action, name='run_my_action_url'),
|
path('retrieve_and_apply_view', retrieve_and_apply_view, name='retrieve_and_apply_view'),
|
||||||
#path('change-schedule/', cloudmanager_views.change_schedule, name='change_schedule'),
|
|
||||||
#path('/main/', db_interaction.main),
|
|
||||||
|
|
||||||
################### onenote ###################
|
|
||||||
path('dashboard/', dashboardapp.hello),
|
|
||||||
path('view/about', dashboardview.about),
|
|
||||||
path('view/home', dashboardview.home),
|
|
||||||
path('view/success', dashboardview.success),
|
|
||||||
path('scale_up/<str:namespace_name>/<str:deploy_name>', dashboardview.scale_up),
|
|
||||||
path('scale_down/<str:namespace_name>/<str:deploy_name>', dashboardview.scale_down),
|
|
||||||
|
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -17,8 +17,13 @@ def import_deployment():
|
|||||||
Schedule_Week_Always_off,Schedule_Week_Always_on = generate_default_week_schedule()
|
Schedule_Week_Always_off,Schedule_Week_Always_on = generate_default_week_schedule()
|
||||||
|
|
||||||
for deployment in deployment_list:
|
for deployment in deployment_list:
|
||||||
|
#if the replicas is originally 0 , it means it is disabled so put the schedule as always off
|
||||||
|
if deployment[2] == 0:
|
||||||
|
schedule_object = Schedule_Day_Always_off
|
||||||
|
else:
|
||||||
|
schedule_object = Schedule_Day_Always_on
|
||||||
if deployment[0]!="kube-system":
|
if deployment[0]!="kube-system":
|
||||||
Deployment_Data.objects.get_or_create(namespace=deployment[0],name=deployment[1],defaults={"replicas":deployment[2],"actual_replica":deployment[2],"schedule_day":Schedule_Day_Always_on,"schedule_week":Schedule_Week_Always_on})
|
Deployment_Data.objects.get_or_create(namespace=deployment[0],name=deployment[1],defaults={"replicas":deployment[2],"actual_replica":deployment[2],"schedule_day":schedule_object,"schedule_week":Schedule_Week_Always_on})
|
||||||
|
|
||||||
|
|
||||||
def generate_default_day_schedule():
|
def generate_default_day_schedule():
|
||||||
@@ -92,6 +97,10 @@ def Check_server_supposed_XXX(expected_status,verbose=False):
|
|||||||
|
|
||||||
|
|
||||||
def retrieve_and_apply(verbose=False):
|
def retrieve_and_apply(verbose=False):
|
||||||
|
output = ""
|
||||||
|
output += str(Give_current_hour())
|
||||||
|
output += str("\n")
|
||||||
|
|
||||||
|
|
||||||
#Get current replica to compare with the replicas created at the start
|
#Get current replica to compare with the replicas created at the start
|
||||||
get_current_replicas()
|
get_current_replicas()
|
||||||
@@ -105,7 +114,11 @@ def retrieve_and_apply(verbose=False):
|
|||||||
if server[3].actual_replica == server[2]:
|
if server[3].actual_replica == server[2]:
|
||||||
if verbose : print("name: "+str(server[1])+" namespace: "+str(server[0])+" already UP")
|
if verbose : print("name: "+str(server[1])+" namespace: "+str(server[0])+" already UP")
|
||||||
else:
|
else:
|
||||||
print("Starting -> name: "+str(server[1])+" namespace: "+str(server[0])+" replicas: "+str(server[2]))
|
echo = "Starting -> name: "+str(server[1])+" namespace: "+str(server[0])+" replicas: "+str(server[2])
|
||||||
|
output += str(echo)
|
||||||
|
output += "\n"
|
||||||
|
print(echo)
|
||||||
|
|
||||||
scale_up(namespace_name=server[1],deploy_name=server[0],replicas=server[2])
|
scale_up(namespace_name=server[1],deploy_name=server[0],replicas=server[2])
|
||||||
|
|
||||||
print("------------------------------------------")
|
print("------------------------------------------")
|
||||||
@@ -117,5 +130,11 @@ def retrieve_and_apply(verbose=False):
|
|||||||
if server[3].actual_replica == 0:
|
if server[3].actual_replica == 0:
|
||||||
if verbose : print("name: "+str(server[1])+" namespace: "+str(server[0])+" already DOWN")
|
if verbose : print("name: "+str(server[1])+" namespace: "+str(server[0])+" already DOWN")
|
||||||
else:
|
else:
|
||||||
print("Shutting down -> name: "+str(server[1])+" namespace: "+str(server[0])+" replicas: "+str(server[2]))
|
|
||||||
|
echo = "Shutting down -> name: "+str(server[1])+" namespace: "+str(server[0])+" replicas: "+str(server[2])
|
||||||
|
output += str(echo)
|
||||||
|
output += str("\n")
|
||||||
|
print(echo)
|
||||||
scale_down(namespace_name=server[1],deploy_name=server[0])
|
scale_down(namespace_name=server[1],deploy_name=server[0])
|
||||||
|
|
||||||
|
return output
|
||||||
@@ -1,7 +1,10 @@
|
|||||||
from django.http import HttpResponse
|
from django.http import HttpResponse
|
||||||
|
from django.shortcuts import render
|
||||||
|
|
||||||
# IMPORT AT THE TOP HERE: This is completely safe!
|
# IMPORT AT THE TOP HERE: This is completely safe!
|
||||||
from apps.cloudmanager.models import Deployment_Data,Schedule_Week_Data
|
from .models import Deployment_Data,Schedule_Week_Data
|
||||||
|
from .db_interaction import DB_generation,Check_server_supposed_XXX,Give_current_weekday,Give_current_hour
|
||||||
|
from .utils import import_namespace,retrieve_and_apply
|
||||||
|
|
||||||
def coucou(request):
|
def coucou(request):
|
||||||
# 1. Prepare the data inside the function
|
# 1. Prepare the data inside the function
|
||||||
@@ -23,3 +26,32 @@ def display(request):
|
|||||||
print(data[0].namespace)
|
print(data[0].namespace)
|
||||||
return HttpResponse(data)
|
return HttpResponse(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('<h1>Namespace imported!</h1>')
|
||||||
|
|
||||||
|
|
||||||
|
def retrieve_and_apply_view(request):
|
||||||
|
output = retrieve_and_apply()
|
||||||
|
return HttpResponse('<h1>'+output+'</h1>')
|
||||||
|
|
||||||
|
def redirect(request):
|
||||||
|
db_host = os.environ.get('DB_HOST')
|
||||||
|
db_port = os.environ.get('DB_PORT')
|
||||||
|
db_user = os.environ.get('DB_USERNAME')
|
||||||
|
db_password = os.environ.get('DB_PASSWORD')
|
||||||
|
db_name = os.environ.get('CUSTOM_DB_DATABASE',os.environ.get('DB_DATABASE'))
|
||||||
|
|
||||||
|
generated_db = DB_generation(db_host, db_port, db_user, db_password,db_name)
|
||||||
|
##operation:
|
||||||
|
## Server(s) supposed to be UP
|
||||||
|
|
||||||
|
list_servers_up = Check_server_supposed_XXX(generated_db, "up", Give_current_hour(),Give_current_weekday())
|
||||||
|
print(list_servers_up)
|
||||||
|
return render(request, 'cloudmanager/cmm_blank_page.html', {'list_servers_up':list_servers_up})
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import redis
|
#import redis
|
||||||
from django.http import HttpResponse
|
from django.http import HttpResponse
|
||||||
from django.http import HttpResponseRedirect
|
from django.http import HttpResponseRedirect
|
||||||
from django.shortcuts import render
|
from django.shortcuts import render
|
||||||
|
|||||||
@@ -53,6 +53,7 @@ INSTALLED_APPS = [
|
|||||||
'apps.streaming.apps.StreamingConfig',
|
'apps.streaming.apps.StreamingConfig',
|
||||||
'import_export',
|
'import_export',
|
||||||
'djangoql',
|
'djangoql',
|
||||||
|
'admin_extra_buttons',
|
||||||
]
|
]
|
||||||
|
|
||||||
MIDDLEWARE = [
|
MIDDLEWARE = [
|
||||||
|
|||||||
+1
-1
@@ -1,6 +1,5 @@
|
|||||||
django
|
django
|
||||||
psycopg2
|
psycopg2
|
||||||
#xrequests
|
|
||||||
kubernetes
|
kubernetes
|
||||||
ruamel.yaml
|
ruamel.yaml
|
||||||
pyyaml
|
pyyaml
|
||||||
@@ -17,3 +16,4 @@ bitwarden_sdk
|
|||||||
xmltodict
|
xmltodict
|
||||||
whitenoise
|
whitenoise
|
||||||
djangoql
|
djangoql
|
||||||
|
django-admin-extra-buttons
|
||||||
|
|||||||
Reference in New Issue
Block a user