Compare commits
28
Commits
view
..
5b5d62e4fa
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5b5d62e4fa | ||
|
|
9afe770202 | ||
|
|
6a52ed2f66 | ||
|
|
279d59e376 | ||
|
|
a6d9f29f1a | ||
|
|
bb36edfca5 | ||
|
|
f451b8ff3b | ||
|
|
b837e1a952 | ||
|
|
aa1501214d | ||
|
|
246eff86a6 | ||
|
|
e2ea76c6c9 | ||
|
|
ad4fe6df26 | ||
|
|
43a000a9c1 | ||
|
|
32a0e65a68 | ||
|
|
b80be01a52 | ||
|
|
daa935bbef | ||
|
|
cb49bfba58 | ||
|
|
60af5e87ce | ||
|
|
aad687f630 | ||
|
|
6b30f381df | ||
|
|
5b03dc35b4 | ||
|
|
f9732160f0 | ||
|
|
8a84a8d42f | ||
|
|
39e6a69a08 | ||
|
|
c9d6d77931 | ||
|
|
2f30234edd | ||
|
|
cdd1dd0245 | ||
|
|
df9d6c93cc |
@@ -2,12 +2,8 @@ name: Gitea Actions Demo
|
||||
run-name: ${{ gitea.actor }} is testing out Gitea Actions 🚀
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- "*"
|
||||
paths:
|
||||
- 'dockerfile'
|
||||
tags-ignore:
|
||||
- '*'
|
||||
issue_comment:
|
||||
types: [created]
|
||||
|
||||
jobs:
|
||||
Explore-Gitea-Actions:
|
||||
@@ -20,6 +16,13 @@ jobs:
|
||||
- name: List files in the repository
|
||||
run: |
|
||||
ls ${{ gitea.workspace }}
|
||||
|
||||
- name: Cache pip
|
||||
uses: actions/cache@v3
|
||||
with:
|
||||
path: /root/.cache/pip
|
||||
key: pip-{{ hashFiles('requirements*.txt') }}
|
||||
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v3
|
||||
|
||||
@@ -34,7 +37,14 @@ jobs:
|
||||
uses: docker/build-push-action@v6
|
||||
with:
|
||||
push: true
|
||||
#build-contexts: pip_cache=${{steps.vars.outputs.pip-dir}}
|
||||
tags: gitea.tryton.geeraert.eu/pi-ux-ce/django-python:latest
|
||||
|
||||
|
||||
cache-from: type=gha
|
||||
cache-to: type=gha,mode=max
|
||||
- name: drop the pod to force pulling the new image
|
||||
uses: actions-hub/kubectl@master
|
||||
env:
|
||||
KUBE_CONFIG: ${{ secrets.KUBE_CONFIG }}
|
||||
with:
|
||||
args: delete pod -n django-python --all
|
||||
- run: echo "🍏 This job's status is ${{ job.status }}."
|
||||
|
||||
@@ -1,6 +1,13 @@
|
||||
name: Gitea Actions Demo
|
||||
run-name: ${{ gitea.actor }} is testing out Gitea Actions 🚀
|
||||
on: [push]
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- "*"
|
||||
paths:
|
||||
- '*.yaml'
|
||||
tags-ignore:
|
||||
- '*'
|
||||
|
||||
jobs:
|
||||
Explore-Gitea-Actions:
|
||||
|
||||
@@ -26,11 +26,14 @@ spec:
|
||||
- containerPort: 8000
|
||||
name: webserver-port
|
||||
volumeMounts:
|
||||
- name: django-python-code
|
||||
mountPath: /code
|
||||
## - name: django-python-code
|
||||
# mountPath: /code
|
||||
- name: servarr-data
|
||||
mountPath: /data
|
||||
readOnly: true
|
||||
- name: secret-kubeconfig
|
||||
mountPath: /kubeconfig
|
||||
|
||||
|
||||
resources:
|
||||
limits:
|
||||
@@ -43,6 +46,10 @@ spec:
|
||||
- name: servarr-data
|
||||
hostPath:
|
||||
path: /data
|
||||
- name: secret-kubeconfig
|
||||
secret:
|
||||
defaultMode: 420
|
||||
secretName: kubeconfig
|
||||
|
||||
|
||||
---
|
||||
|
||||
@@ -0,0 +1,134 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
||||
<title>Scaled down</title>
|
||||
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto|Varela+Round">
|
||||
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css">
|
||||
<link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons">
|
||||
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css">
|
||||
<script src="https://code.jquery.com/jquery-3.5.1.min.js"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js"></script>
|
||||
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/js/bootstrap.min.js"></script>
|
||||
<style>
|
||||
body {
|
||||
font-family: 'Varela Round', sans-serif;
|
||||
}
|
||||
.modal-confirm {
|
||||
color: #636363;
|
||||
width: 325px;
|
||||
font-size: 14px;
|
||||
}
|
||||
.modal-confirm .modal-content {
|
||||
padding: 20px;
|
||||
border-radius: 5px;
|
||||
border: none;
|
||||
}
|
||||
.modal-confirm .modal-header {
|
||||
border-bottom: none;
|
||||
position: relative;
|
||||
}
|
||||
.modal-confirm h4 {
|
||||
text-align: center;
|
||||
font-size: 26px;
|
||||
margin: 30px 0 -15px;
|
||||
}
|
||||
.modal-confirm .form-control, .modal-confirm .btn {
|
||||
min-height: 40px;
|
||||
border-radius: 3px;
|
||||
}
|
||||
.modal-confirm .close {
|
||||
position: absolute;
|
||||
top: -5px;
|
||||
right: -5px;
|
||||
}
|
||||
.modal-confirm .modal-footer {
|
||||
border: none;
|
||||
text-align: center;
|
||||
border-radius: 5px;
|
||||
font-size: 13px;
|
||||
}
|
||||
.modal-confirm .icon-box {
|
||||
color: #fff;
|
||||
position: absolute;
|
||||
margin: 0 auto;
|
||||
left: 0;
|
||||
right: 0;
|
||||
top: -70px;
|
||||
width: 105px;
|
||||
height: 105px;
|
||||
border-radius: 50%;
|
||||
z-index: 9;
|
||||
/*background: #82ce34;*/
|
||||
background: #a80505;
|
||||
padding: 15px;
|
||||
text-align: center;
|
||||
box-shadow: 0px 2px 2px rgba(0, 0, 0, 0.1);
|
||||
}
|
||||
.modal-confirm .icon-box i {
|
||||
font-size: 58px;
|
||||
position: relative;
|
||||
top: 0px;
|
||||
}
|
||||
.modal-confirm .icon-box:hover,.modal-confirm .icon-box:focus {
|
||||
background: #6fb32b;
|
||||
/*background: #a80505;*/
|
||||
outline: none;
|
||||
}
|
||||
.modal-confirm.modal-dialog {
|
||||
margin-top: 80px;
|
||||
}
|
||||
.modal-confirm .btn {
|
||||
color: #fff;
|
||||
border-radius: 4px;
|
||||
/*background: #82ce34;*/
|
||||
background: #a80505;
|
||||
text-decoration: none;
|
||||
transition: all 0.4s;
|
||||
line-height: normal;
|
||||
border: none;
|
||||
}
|
||||
.modal-confirm .btn:hover, .modal-confirm .btn:focus {
|
||||
background: #800404;
|
||||
/*background: #a80505;*/
|
||||
outline: none;
|
||||
}
|
||||
.trigger-btn {
|
||||
display: inline-block;
|
||||
margin: 100px auto;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="text-center">
|
||||
<!-- Button HTML (to Trigger Modal) -->
|
||||
<!--<a href="#myModal" class="trigger-btn" data-toggle="modal">Click to Open Confirm Modal</a> -->
|
||||
|
||||
|
||||
<!-- Modal HTML -->
|
||||
<!--<div id="myModal" class="modal fade">-->
|
||||
<div class="modal-dialog modal-confirm">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<div class="icon-box" onclick="window.location='/kubernetes_connection/scale_up/{{namespace}}/{{deployment}}';">
|
||||
<!--<i class="material-icons"></i>-->
|
||||
<i class="material-icons">×</i>
|
||||
</div>
|
||||
<h4 class="modal-title w-100">Too bad!</h4>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<p class="text-center">{{ deployment }} deployment from namespace {{ namespace }} is now scaled down.</p>
|
||||
<p class="text-center">Current URL {{ url }}.</p>
|
||||
<p class="text-center">base URL {{ baseurl }}.</p>
|
||||
</div>
|
||||
<div href={{ url }} class="modal-footer">
|
||||
<!--<button href={{ url }} class="btn btn-success btn-block" data-dismiss="modal">Redirect</button>-->
|
||||
<a href="https://google.fr" class="btn btn-success btn-block" data-dismiss="modal">Redirect</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,133 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
||||
<title>Scaled up</title>
|
||||
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto|Varela+Round">
|
||||
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css">
|
||||
<link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons">
|
||||
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css">
|
||||
<script src="https://code.jquery.com/jquery-3.5.1.min.js"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js"></script>
|
||||
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/js/bootstrap.min.js"></script>
|
||||
<style>
|
||||
body {
|
||||
font-family: 'Varela Round', sans-serif;
|
||||
}
|
||||
.modal-confirm {
|
||||
color: #636363;
|
||||
width: 325px;
|
||||
font-size: 14px;
|
||||
}
|
||||
.modal-confirm .modal-content {
|
||||
padding: 20px;
|
||||
border-radius: 5px;
|
||||
border: none;
|
||||
}
|
||||
.modal-confirm .modal-header {
|
||||
border-bottom: none;
|
||||
position: relative;
|
||||
}
|
||||
.modal-confirm h4 {
|
||||
text-align: center;
|
||||
font-size: 26px;
|
||||
margin: 30px 0 -15px;
|
||||
}
|
||||
.modal-confirm .form-control, .modal-confirm .btn {
|
||||
min-height: 40px;
|
||||
border-radius: 3px;
|
||||
}
|
||||
.modal-confirm .close {
|
||||
position: absolute;
|
||||
top: -5px;
|
||||
right: -5px;
|
||||
}
|
||||
.modal-confirm .modal-footer {
|
||||
border: none;
|
||||
text-align: center;
|
||||
border-radius: 5px;
|
||||
font-size: 13px;
|
||||
}
|
||||
.modal-confirm .icon-box {
|
||||
color: #fff;
|
||||
position: absolute;
|
||||
margin: 0 auto;
|
||||
left: 0;
|
||||
right: 0;
|
||||
top: -70px;
|
||||
width: 95px;
|
||||
height: 95px;
|
||||
border-radius: 50%;
|
||||
z-index: 9;
|
||||
background: #82ce34;
|
||||
padding: 15px;
|
||||
text-align: center;
|
||||
box-shadow: 0px 2px 2px rgba(0, 0, 0, 0.1);
|
||||
}
|
||||
.modal-confirm .icon-box i {
|
||||
font-size: 58px;
|
||||
position: relative;
|
||||
top: 3px;
|
||||
}
|
||||
.modal-confirm .icon-box:hover,.modal-confirm .icon-box:focus {
|
||||
/*background: #6fb32b;*/
|
||||
background: #a80505;
|
||||
outline: none;
|
||||
}
|
||||
.modal-confirm.modal-dialog {
|
||||
margin-top: 80px;
|
||||
}
|
||||
.modal-confirm .btn {
|
||||
color: #fff;
|
||||
border-radius: 4px;
|
||||
background: #82ce34;
|
||||
text-decoration: none;
|
||||
transition: all 0.4s;
|
||||
line-height: normal;
|
||||
border: none;
|
||||
}
|
||||
.modal-confirm .btn:hover, .modal-confirm .btn:focus {
|
||||
background: #6fb32b;
|
||||
/*background: #a80505;*/
|
||||
outline: none;
|
||||
}
|
||||
.trigger-btn {
|
||||
display: inline-block;
|
||||
margin: 100px auto;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="text-center">
|
||||
<!-- Button HTML (to Trigger Modal) -->
|
||||
<!--<a href="#myModal" class="trigger-btn" data-toggle="modal">Click to Open Confirm Modal</a> -->
|
||||
|
||||
|
||||
<!-- Modal HTML -->
|
||||
<!--<div id="myModal" class="modal fade">-->
|
||||
<div class="modal-dialog modal-confirm">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<div class="icon-box" onclick="window.location='/kubernetes_connection/scale_down/{{namespace}}/{{deployment}}';">
|
||||
<!--<i class="material-icons"></i>-->
|
||||
<i class="material-icons"></i>
|
||||
</div>
|
||||
<h4 class="modal-title w-100">Awesome!</h4>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<p class="text-center">{{ deployment }} deployment from namespace {{ namespace }} is now scaled up.</p>
|
||||
<p class="text-center">Current URL {{ url }}.</p>
|
||||
<p class="text-center">base URL {{ baseurl }}.</p>
|
||||
</div>
|
||||
<div href={{ url }} class="modal-footer">
|
||||
<!--<button href={{ url }} class="btn btn-success btn-block" data-dismiss="modal">Redirect</button>-->
|
||||
|
||||
<a href="https://google.fr" class="btn btn-success btn-block" data-dismiss="modal">Redirect</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,5 +1,6 @@
|
||||
from django.shortcuts import render
|
||||
|
||||
|
||||
def home(request):
|
||||
thislist = ["apple", "banana", "cherry"]
|
||||
return render(request, 'home.html',{'thislist': thislist})
|
||||
@@ -7,3 +8,14 @@ def home(request):
|
||||
def about(request):
|
||||
thislist = ["apple", "banana", "cherry"]
|
||||
return render(request, 'about.html',{'thislist': thislist})
|
||||
|
||||
def success(request):
|
||||
return render(request, 'start.html',{'deployment': 'django','url':'https://google.com'})
|
||||
|
||||
def scale_up(request,namespace_name,deploy_name):
|
||||
baseurl = "{0}://{1}{2}".format(request.scheme, request.get_host(), request.path)
|
||||
return render(request, 'start.html', {'namespace':namespace_name,'deployment': deploy_name, 'url': 'https://namespace.com','baseurl': baseurl})
|
||||
|
||||
def scale_down(request,namespace_name,deploy_name):
|
||||
baseurl = "{0}://{1}{2}".format(request.scheme, request.get_host(), request.path)
|
||||
return render(request, 'shutdown.html', {'namespace':namespace_name,'deployment': deploy_name, 'url': 'https://namespace.com','baseurl': baseurl})
|
||||
|
||||
@@ -43,6 +43,10 @@ urlpatterns = [
|
||||
path('dashboard/hello/', dashboardapp.hello),
|
||||
path('dashboard/view/about', dashboardview.about),
|
||||
path('dashboard/view/home', dashboardview.home),
|
||||
path('dashboard/view/success', dashboardview.success),
|
||||
path('dashboard/scale_up/<str:namespace_name>/<str:deploy_name>', dashboardview.scale_up),
|
||||
path('dashboard/scale_down/<str:namespace_name>/<str:deploy_name>', dashboardview.scale_down),
|
||||
|
||||
|
||||
|
||||
################## kubernetes_connection#####
|
||||
|
||||
@@ -18,23 +18,26 @@ def hello(request):
|
||||
return HttpResponse('<h1>Hello k8s!</h1>')
|
||||
|
||||
def scale_up(request,namespace_name,deploy_name):
|
||||
config.load_kube_config(config_file='/code/kubeconfig')
|
||||
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 = 2
|
||||
deployment.spec.replicas = 1
|
||||
resp = api.patch_namespaced_deployment(
|
||||
name=deploy_name, namespace=namespace_name, body=deployment);
|
||||
return HttpResponse('<h1>Scaled up !</h1>')
|
||||
#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='/code/kubeconfig')
|
||||
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 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')
|
||||
@@ -111,15 +114,16 @@ def backup_job(request):
|
||||
#help with yaml import
|
||||
#https://github.com/kubernetes-client/python/issues/589
|
||||
|
||||
def backup_job_yaml(request):
|
||||
def backup_job_yaml(request,sync_target):
|
||||
config.load_kube_config(config_file='/code/kubeconfig')
|
||||
v1 = client.BatchV1Api()
|
||||
|
||||
with urllib.request.urlopen(https://gitea.tryton.geeraert.eu/pi-ux-ce/Backup_kube/raw/branch/main/Infrequent_access/pod.yaml") as manifest_url:
|
||||
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)
|
||||
|
||||
# with open('/code/pod.yaml') as :
|
||||
job = yaml.safe_load(manifest_url)
|
||||
v1.create_namespaced_job(
|
||||
job['metadata']['namespace'], job, pretty=True
|
||||
)
|
||||
return HttpResponse(job['metadata']['namespace'])
|
||||
return HttpResponse(api_response)
|
||||
|
||||
+2
-2
@@ -5,8 +5,8 @@ WORKDIR /code/
|
||||
COPY requirements.txt ./
|
||||
COPY django_code ./
|
||||
|
||||
RUN pip install --upgrade pip
|
||||
RUN pip install --no-cache-dir -r requirements.txt
|
||||
RUN --mount=type=cache,target=/root/.cache/pip,from=pip_cache pip install --upgrade pip
|
||||
RUN --mount=type=cache,target=/root/.cache/pip,from=pip_cache pip install --no-cache-dir -r requirements.txt
|
||||
COPY . .
|
||||
RUN python django_code/manage.py migrate
|
||||
|
||||
|
||||
@@ -5,3 +5,4 @@ docker
|
||||
kubernetes
|
||||
ruamel.yaml
|
||||
pyyaml
|
||||
django-bootstrap-v5
|
||||
Reference in New Issue
Block a user