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.utils.translation import ngettext
|
||||
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 admin_extra_buttons.api import ExtraButtonsMixin, button
|
||||
|
||||
|
||||
DB = 'cloudmanager_db'
|
||||
|
||||
@@ -49,21 +51,6 @@ def Check_server_supposed_true(modeladmin, request, queryset):
|
||||
servers_supposed_false = Check_server_supposed_XXX(True)
|
||||
for server in servers_supposed_false:
|
||||
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):
|
||||
@@ -98,27 +85,52 @@ class MultiDBModelAdmin(admin.ModelAdmin):
|
||||
|
||||
|
||||
@admin.register(Deployment_Data)
|
||||
class DeploymentDataAdmin(MultiDBModelAdmin):
|
||||
class DeploymentDataAdmin(ExtraButtonsMixin, MultiDBModelAdmin):
|
||||
list_display = ('name', 'namespace', 'schedule_week', 'schedule_day', 'replicas')
|
||||
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)
|
||||
class ScheduleDayAdmin(MultiDBModelAdmin):
|
||||
class ScheduleDayAdmin(ExtraButtonsMixin,MultiDBModelAdmin):
|
||||
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)
|
||||
class ScheduleWeekAdmin(MultiDBModelAdmin):
|
||||
class ScheduleWeekAdmin(ExtraButtonsMixin,MultiDBModelAdmin):
|
||||
list_display = (
|
||||
'name_schedule',
|
||||
'state_Monday', 'state_Tuesday', 'state_Wednesday',
|
||||
'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)
|
||||
class NamespaceAdmin(MultiDBModelAdmin):
|
||||
class NamespaceAdmin(ExtraButtonsMixin, MultiDBModelAdmin):
|
||||
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.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):
|
||||
default_auto_field = 'django.db.models.BigAutoField'
|
||||
name = 'apps.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})
|
||||
|
||||
|
||||
@@ -153,10 +153,6 @@ def main(request):
|
||||
|
||||
#print(Is_the_server_already_wanted_state(112, "stopped"))
|
||||
return HttpResponse('<h1>CMM executed!</h1>')
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
|
||||
|
||||
"""
|
||||
TO DO:
|
||||
|
||||
@@ -15,25 +15,16 @@ Including another URLconf
|
||||
2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
|
||||
"""
|
||||
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 = [
|
||||
################### cloudmanager ###################
|
||||
path('', cloudmanager_apps.redirect),
|
||||
path('hello', cloudmanager_apps.hello, name='hello'),
|
||||
path('coucou', cloudmanager_views.coucou, name='coucou'),
|
||||
path('display', cloudmanager_views.display, name='display'),
|
||||
#path('/run-action/', cloudmanager_views.trigger_my_action, name='run_my_action_url'),
|
||||
#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),
|
||||
path('', hello, name='hello'),
|
||||
path('coucou', coucou, name='coucou'),
|
||||
path('display', display, name='display'),
|
||||
path('import_namespace', import_namespace_view, name='import_namespace'),
|
||||
path('retrieve_and_apply_view', retrieve_and_apply_view, name='retrieve_and_apply_view'),
|
||||
|
||||
]
|
||||
|
||||
@@ -17,8 +17,13 @@ def import_deployment():
|
||||
Schedule_Week_Always_off,Schedule_Week_Always_on = generate_default_week_schedule()
|
||||
|
||||
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":
|
||||
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():
|
||||
@@ -92,6 +97,10 @@ def Check_server_supposed_XXX(expected_status,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_replicas()
|
||||
@@ -105,7 +114,11 @@ def retrieve_and_apply(verbose=False):
|
||||
if server[3].actual_replica == server[2]:
|
||||
if verbose : print("name: "+str(server[1])+" namespace: "+str(server[0])+" already UP")
|
||||
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])
|
||||
|
||||
print("------------------------------------------")
|
||||
@@ -117,5 +130,11 @@ def retrieve_and_apply(verbose=False):
|
||||
if server[3].actual_replica == 0:
|
||||
if verbose : print("name: "+str(server[1])+" namespace: "+str(server[0])+" already DOWN")
|
||||
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])
|
||||
|
||||
return output
|
||||
@@ -1,7 +1,10 @@
|
||||
from django.http import HttpResponse
|
||||
from django.shortcuts import render
|
||||
|
||||
# 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):
|
||||
# 1. Prepare the data inside the function
|
||||
@@ -23,3 +26,32 @@ def display(request):
|
||||
print(data[0].namespace)
|
||||
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})
|
||||
|
||||
|
||||
@@ -10,4 +10,4 @@ class JobAdmin(ImportExportModelAdmin):
|
||||
list_display = ('podcast_name','clickable_links','enabled')
|
||||
|
||||
def clickable_links(self, obj):
|
||||
return format_html('<a href="{}">{}</a>', obj.podcast_url,obj.podcast_url)
|
||||
return format_html('<a href="{}">{}</a>', obj.podcast_url,obj.podcast_url)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import redis
|
||||
#import redis
|
||||
from django.http import HttpResponse
|
||||
from django.http import HttpResponseRedirect
|
||||
from django.shortcuts import render
|
||||
|
||||
@@ -53,6 +53,7 @@ INSTALLED_APPS = [
|
||||
'apps.streaming.apps.StreamingConfig',
|
||||
'import_export',
|
||||
'djangoql',
|
||||
'admin_extra_buttons',
|
||||
]
|
||||
|
||||
MIDDLEWARE = [
|
||||
|
||||
+1
-1
@@ -1,6 +1,5 @@
|
||||
django
|
||||
psycopg2
|
||||
#xrequests
|
||||
kubernetes
|
||||
ruamel.yaml
|
||||
pyyaml
|
||||
@@ -17,3 +16,4 @@ bitwarden_sdk
|
||||
xmltodict
|
||||
whitenoise
|
||||
djangoql
|
||||
django-admin-extra-buttons
|
||||
|
||||
Reference in New Issue
Block a user