Files
Django_kube/django_code/stash_management/apps.py
T
Pierre Geeraert bccd344aa7
Gitea Actions Demo / Explore-Gitea-Actions (push) Has been cancelled
adding new form
2025-07-29 09:39:41 +01:00

152 lines
5.0 KiB
Python

from django.apps import AppConfig
from django.http import HttpResponse
from django.shortcuts import render
from django.shortcuts import redirect
from jinja2 import Environment, FileSystemLoader
from django.core.files import File
from kubernetes import client, config
#from django.template.loader import render_to_string
import time
import random
import mimetypes
import ruamel.yaml
import yaml
import urllib.request
def hello(request):
return HttpResponse('<h1>Hello stash!</h1>')
def form(request):
return render(request, 'stash_form.html',{})
def handle_survey_form(request):
config.load_kube_config(config_file='/kubeconfig/config')
v1 = client.BatchV1Api()
name = request.GET.get('name')
url = request.GET.get('url')
environment = Environment(loader=FileSystemLoader("django_code/stash_management/templates/"))
template = environment.get_template("template.stash-pornpics-dowloader.job.yml")
pod_manifest_job = template.render(name=name, url=url)
api_response = v1.create_namespaced_job(body=pod_manifest_job)
return HttpResponse(api_response)
# You can now process or store the data
#return HttpResponse(f"Received: {name}, {url}")
#return HttpResponse(content)
def scale_up(request,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 = 1
resp = api.patch_namespaced_deployment(
name=deploy_name, namespace=namespace_name, body=deployment);
#return HttpResponse('<h1>Scaled up !</h1>')
return render(request, 'start.html', {'namespace':namespace_name,'deployment': deploy_name, 'url': 'https://namespace.com'})
def scale_down(request,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 HttpResponse('<h1>Scaled down !</h1>')
return render(request, 'shutdown.html',
{'namespace': namespace_name, 'deployment': deploy_name, 'url': 'https://namespace.com'})
def nodes(request):
config.load_kube_config(config_file='/code/kubeconfig')
v1 = client.CoreV1Api()
# v1.list_node()
pod_manifest = {
'apiVersion': 'v1',
'kind': 'Pod',
'metadata': {
'labels': {
'bot': 'current-bot'
},
'name': 'podname',
'namespace': 'echo-server'
},
'spec': {
'containers': [{
'image': 'gitea.tryton.geeraert.eu/pi-ux-ce/bitwarden_cli:1.0.1',
# 'pod-running-timeout': '5m0s',
'name': 'testpython',
'env': [
{'name': 'env_variable', 'value': 'env_value'},
]
}],
'restartPolicy': 'Always',
# 'serviceAccountName': 'bots-service-account'
}
}
# print(f'POD MANIFEST:\n{pod_manifest}')
api_response = v1.create_namespaced_pod(body=pod_manifest,namespace='echo-server')
return HttpResponse(api_response)
def backup_job(request):
config.load_kube_config(config_file='/code/kubeconfig')
v1 = client.CoreV1Api()
#v1 = client.BatchV1Api()
# v1.list_node()
pod_manifest_job = {
'apiVersion': 'batch/v1',
'kind': 'Job',
'metadata': {
'name': 'bitwarden-backup-django',
'namespace': 'bwbackup'
},
'spec': {
'template': {
'spec': {
'containers': [{
'image': 'gitea.tryton.geeraert.eu/pi-ux-ce/bitwarden_cli:1.0.1',
'name': 'testpython',
'command': ['/bin/sh -c /config/export_bitwarden.sh'],
'env': [
{'name': 'env_variable', 'value': 'env_value'},
],
'volumeMounts': [
{'name': 'scripts', 'configMap': [{'name':'bitwarden-export-scripts'},]},
]
}],
'restartPolicy': 'Always',
}
}
}
}
api_response = v1.create_namespaced_job(body=pod_manifest_job)
return HttpResponse(api_response)
#help with yaml import
#https://github.com/kubernetes-client/python/issues/589
def backup_job_yaml(request,sync_target):
config.load_kube_config(config_file='/code/kubeconfig')
v1 = client.BatchV1Api()
yaml_location = {
"synology" : "https://gitea.tryton.geeraert.eu/pi-ux-ce/Backup_kube/raw/branch/main/Infrequent_access/synology_pod.yaml",
"openmediavault":"https://gitea.tryton.geeraert.eu/pi-ux-ce/Backup_kube/raw/branch/main/Infrequent_access/openmediavault_pod.yaml"
}
print(yaml_location[sync_target])
url_to_select=yaml_location[sync_target]
api_response = v1.create_namespaced_job(body=pod_manifest_job)
return HttpResponse(api_response)