from django.apps import AppConfig from django.http import HttpResponse from django.shortcuts import render from django.shortcuts import redirect 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('

Hello k8s!

') def echoHello(): print("hello from k8s") return "returned from k8s" def scale_up(request,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 HttpResponse('

Scaled up !

') 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('

Scaled down !

') 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)