Compare commits
15
Commits
672edccd70
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3ff4f98841 | ||
|
|
0a8c337b1e | ||
|
|
2dac0d1f53 | ||
|
|
73b627214d | ||
|
|
c79168453b | ||
|
|
299f72abca | ||
|
|
058125f0b1 | ||
|
|
130b0af8d8 | ||
|
|
6f7542ef27 | ||
|
|
919d1a3a28 | ||
|
|
3c4c32e72d | ||
|
|
3294e70b3f | ||
|
|
5908d8d282 | ||
|
|
32f8251a90 | ||
|
|
a3fec86eae |
@@ -15,9 +15,9 @@ jobs:
|
||||
env:
|
||||
RUNNER_TOOL_CACHE: /toolcache
|
||||
DEBUG: True
|
||||
ALLOWED_HOSTS: "django.tryton.geeraert.eu"
|
||||
ALLOWED_HOSTS: "django.geeraert.eu"
|
||||
container:
|
||||
image: gitea.tryton.geeraert.eu/pi-ux-ce/custom-runner-debian-slim:1.0.6
|
||||
image: gitea.geeraert.eu/pi-ux-ce/custom-runner-debian-slim:1.0.6
|
||||
volumes:
|
||||
- act-toolcache:/opt/hostedtoolcache # this is where Runner store their cache default
|
||||
runs-on: host-runner
|
||||
@@ -59,7 +59,7 @@ jobs:
|
||||
- name: Login to gitea
|
||||
uses: docker/login-action@v3
|
||||
with:
|
||||
registry: gitea.tryton.geeraert.eu
|
||||
registry: gitea.geeraert.eu
|
||||
username: ${{ secrets.USERNAME_GITEA }}
|
||||
password: ${{ secrets.PASSWORD_GITEA }}
|
||||
|
||||
@@ -67,16 +67,16 @@ jobs:
|
||||
run: |
|
||||
docker build \
|
||||
-f infra/production/dockerfile \
|
||||
--build-arg ALLOWED_HOSTS='django.tryton.geeraert.eu' \
|
||||
--build-arg ALLOWED_HOSTS='django.geeraert.eu' \
|
||||
--build-arg DEBUG='True' \
|
||||
-t gitea.tryton.geeraert.eu/pi-ux-ce/django-python:latest \
|
||||
-t gitea.tryton.geeraert.eu/pi-ux-ce/django-python:${{ env.next_version }} \
|
||||
-t gitea.geeraert.eu/pi-ux-ce/django-python:latest \
|
||||
-t gitea.geeraert.eu/pi-ux-ce/django-python:${{ env.next_version }} \
|
||||
.
|
||||
|
||||
- name: Push image
|
||||
run: |
|
||||
docker push gitea.tryton.geeraert.eu/pi-ux-ce/django-python:latest
|
||||
docker push gitea.tryton.geeraert.eu/pi-ux-ce/django-python:${{ env.next_version }}
|
||||
docker push gitea.geeraert.eu/pi-ux-ce/django-python:latest
|
||||
docker push gitea.geeraert.eu/pi-ux-ce/django-python:${{ env.next_version }}
|
||||
|
||||
- name: Rollout Django to force pulling the new image
|
||||
uses: actions-hub/kubectl@master
|
||||
@@ -91,7 +91,7 @@ jobs:
|
||||
run: |
|
||||
curl -X PUT -H "Content-Type: application/json" \
|
||||
--user ${{ secrets.USERNAME_GITEA }}:${{ secrets.PASSWORD_GITEA }} \
|
||||
https://gitea.tryton.geeraert.eu/api/v1/repos/pi-ux-ce/${{ github.event.repository.name }}/actions/variables/VERSION \
|
||||
https://gitea.geeraert.eu/api/v1/repos/pi-ux-ce/${{ github.event.repository.name }}/actions/variables/VERSION \
|
||||
-d "{\"Value\":\"$next_version\"}"
|
||||
|
||||
- name: backup git for future use
|
||||
|
||||
@@ -36,7 +36,7 @@ jobs:
|
||||
- name: Login to gitea
|
||||
uses: docker/login-action@v3
|
||||
with:
|
||||
registry: gitea.tryton.geeraert.eu
|
||||
registry: gitea.geeraert.eu
|
||||
username: ${{ secrets.USERNAME_GITEA }}
|
||||
password: ${{ secrets.PASSWORD_GITEA }}
|
||||
|
||||
@@ -44,23 +44,23 @@ jobs:
|
||||
run: |
|
||||
docker build \
|
||||
-f infra/testing/dockerfile \
|
||||
--build-arg ALLOWED_HOSTS='django-testing.tryton.geeraert.eu' \
|
||||
--build-arg ALLOWED_HOSTS='django-testing.geeraert.eu' \
|
||||
--build-arg DEBUG='True' \
|
||||
--build-arg CACHE_BUST=${{ env.next_version }} \
|
||||
-t gitea.tryton.geeraert.eu/pi-ux-ce/django-testing:latest \
|
||||
-t gitea.tryton.geeraert.eu/pi-ux-ce/django-testing:${{ env.next_version }} \
|
||||
-t gitea.geeraert.eu/pi-ux-ce/django-testing:latest \
|
||||
-t gitea.geeraert.eu/pi-ux-ce/django-testing:${{ env.next_version }} \
|
||||
.
|
||||
|
||||
- name: Push image
|
||||
run: |
|
||||
docker push gitea.tryton.geeraert.eu/pi-ux-ce/django-testing:latest
|
||||
docker push gitea.tryton.geeraert.eu/pi-ux-ce/django-testing:${{ env.next_version }}
|
||||
docker push gitea.geeraert.eu/pi-ux-ce/django-testing:latest
|
||||
docker push gitea.geeraert.eu/pi-ux-ce/django-testing:${{ env.next_version }}
|
||||
|
||||
- name: update version in the variable
|
||||
run: |
|
||||
curl -X PUT -H "Content-Type: application/json" \
|
||||
--user ${{ secrets.USERNAME_GITEA }}:${{ secrets.PASSWORD_GITEA }} \
|
||||
https://gitea.tryton.geeraert.eu/api/v1/repos/pi-ux-ce/${{ github.event.repository.name }}/actions/variables/VERSION_TESTING \
|
||||
https://gitea.geeraert.eu/api/v1/repos/pi-ux-ce/${{ github.event.repository.name }}/actions/variables/VERSION_TESTING \
|
||||
-d "{\"Value\":\"$next_version\"}"
|
||||
|
||||
- name: Rollout Django to force pulling the new image
|
||||
|
||||
@@ -72,14 +72,14 @@ export bitwarden_organization_id=""
|
||||
|
||||
```
|
||||
cd existing_repo
|
||||
git remote add origin https://gitlab.tryton.geeraert.eu/pierre/django_kube.git
|
||||
git remote add origin https://gitea.geeraert.eu/pi-ux-ce/Django_kube.git
|
||||
git branch -M main
|
||||
git push -uf origin main
|
||||
```
|
||||
|
||||
## Integrate with your tools
|
||||
|
||||
- [ ] [Set up project integrations](https://gitlab.tryton.geeraert.eu/pierre/django_kube/-/settings/integrations)
|
||||
- [ ] [Set up project integrations](https://gitlab.geeraert.eu/pierre/django_kube/-/settings/integrations)
|
||||
|
||||
## Collaborate with your team
|
||||
|
||||
|
||||
@@ -12,9 +12,9 @@ class bitwardenUtils():
|
||||
client = BitwardenClient(
|
||||
client_settings_from_dict(
|
||||
{
|
||||
"apiUrl": os.getenv("API_URL", "https://bitwarden.tryton.geeraert.eu/api"),
|
||||
"apiUrl": os.getenv("API_URL", "https://bitwarden.geeraert.eu/api"),
|
||||
"deviceType": DeviceType.SDK,
|
||||
"identityUrl": os.getenv("IDENTITY_URL", "https://bitwarden.tryton.geeraert.eu/identity"),
|
||||
"identityUrl": os.getenv("IDENTITY_URL", "https://bitwarden.geeraert.eu/identity"),
|
||||
"userAgent": "Python",
|
||||
}
|
||||
)
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
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 .models import Deployment_Data,Schedule_Day_Data,Schedule_Week_Data,Namespace_Data,Ingress_Data
|
||||
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 button
|
||||
@@ -117,3 +117,7 @@ class NamespaceAdmin(UniversalModelAdmin):
|
||||
# your business logic here
|
||||
import_namespace()
|
||||
self.message_user(request, 'Namespaces imported')
|
||||
|
||||
@admin.register(Ingress_Data)
|
||||
class IngressAdmin(UniversalModelAdmin):
|
||||
list_display = ('url','namespace')
|
||||
@@ -0,0 +1,22 @@
|
||||
# Generated by Django 4.2.30 on 2026-09-21 16:14
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('cloudmanager', '0012_alter_deployment_data_do_not_touch_until'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='Ingress_Data',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('url', models.CharField(max_length=100)),
|
||||
('namespace', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='cloudmanager.namespace_data')),
|
||||
],
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,18 @@
|
||||
# Generated by Django 4.2.30 on 2026-09-21 21:06
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('cloudmanager', '0013_ingress_data'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='ingress_data',
|
||||
name='namespace',
|
||||
field=models.CharField(blank=True, max_length=100, null=True),
|
||||
),
|
||||
]
|
||||
@@ -62,3 +62,9 @@ class Namespace_Data(models.Model):
|
||||
#deployments = models.ForeignKey(Schedule_Week_Data,null=True, blank=True, on_delete=models.SET_NULL)
|
||||
class Meta:
|
||||
db_table = 'namespace'
|
||||
def __str__(self):
|
||||
return self.namespace
|
||||
|
||||
class Ingress_Data(models.Model):
|
||||
url = models.CharField(max_length=100)
|
||||
namespace = models.CharField(max_length=100,null=True, blank=True)
|
||||
|
||||
@@ -16,7 +16,7 @@ Including another URLconf
|
||||
"""
|
||||
from django.urls import path
|
||||
|
||||
from .views import hello,import_namespace_view,retrieve_and_apply_view,scale_up_gui,scale_down_gui
|
||||
from .views import hello,import_namespace_view,retrieve_and_apply_view,scale_up_gui,scale_down_gui,add_ingress,delete_ingress
|
||||
|
||||
|
||||
urlpatterns = [
|
||||
@@ -26,4 +26,8 @@ urlpatterns = [
|
||||
path('retrieve_and_apply_view', retrieve_and_apply_view, name='retrieve_and_apply_view'),
|
||||
path('scale_up/<str:namespace_name>/<str:deploy_name>', scale_up_gui),
|
||||
path('scale_down/<str:namespace_name>/<str:deploy_name>', scale_down_gui),
|
||||
path('add_ingress', add_ingress),
|
||||
path('delete_ingress', delete_ingress),
|
||||
|
||||
|
||||
]
|
||||
|
||||
@@ -2,10 +2,14 @@ from django.http import HttpResponse
|
||||
from django.shortcuts import render
|
||||
from datetime import timedelta
|
||||
from django.utils import timezone
|
||||
from django.views.decorators.csrf import csrf_exempt
|
||||
from django.http import JsonResponse
|
||||
|
||||
from apps.import_aggregator.import_rest_framework import api_view, authentication_classes, permission_classes,TokenAuthentication,IsAuthenticated,Response,status
|
||||
|
||||
from .utils import import_namespace,retrieve_and_apply
|
||||
from apps.kubernetes_connection.utils import scale_up,scale_down
|
||||
from .models import Deployment_Data
|
||||
from .models import Deployment_Data,Ingress_Data
|
||||
|
||||
def hello(request):
|
||||
list_schedule = ['schedule1','schedule2']
|
||||
@@ -32,3 +36,42 @@ def scale_down_gui(request,namespace_name,deploy_name):
|
||||
scale_down(namespace_name=namespace_name,deploy_name=deploy_name)
|
||||
return render(request, 'dashboard/shutdown.html',
|
||||
{'namespace': namespace_name, 'deployment': deploy_name, 'url': 'https://namespace.com'})
|
||||
|
||||
|
||||
@api_view(['POST'])
|
||||
@authentication_classes([TokenAuthentication])
|
||||
@permission_classes([IsAuthenticated])
|
||||
def add_ingress(request):
|
||||
url = request.POST.get('url')
|
||||
namespace = request.POST.get('namespace')
|
||||
print("URL: "+str(url))
|
||||
print("NS: "+str(namespace))
|
||||
|
||||
try:
|
||||
Ingress_Data.objects.update_or_create(url=url,namespace=namespace)
|
||||
except Exception as exception:
|
||||
return JsonResponse({"status": "error","reason":str(exception)})
|
||||
|
||||
return JsonResponse({"status": "added","url":str(url),"namespace":str(namespace)})
|
||||
|
||||
@api_view(['POST'])
|
||||
@authentication_classes([TokenAuthentication])
|
||||
@permission_classes([IsAuthenticated])
|
||||
def delete_ingress(request):
|
||||
url = request.POST.get('url')
|
||||
namespace = request.POST.get('namespace')
|
||||
print("URL: "+str(url))
|
||||
print("NS: "+str(namespace))
|
||||
|
||||
try:
|
||||
ingress_object = Ingress_Data.objects.filter(url=url,namespace=namespace)
|
||||
except Exception as exception:
|
||||
return JsonResponse({"status": "error","reason":str(exception)})
|
||||
|
||||
try:
|
||||
ingress_object.delete()
|
||||
except Exception as exception:
|
||||
return JsonResponse({"status": "error","reason":str(exception)})
|
||||
|
||||
return JsonResponse({"status": "deleted","url":str(url),"namespace":str(namespace)})
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
from rest_framework.decorators import api_view, authentication_classes, permission_classes
|
||||
from rest_framework.authentication import TokenAuthentication
|
||||
from rest_framework.permissions import IsAuthenticated
|
||||
from rest_framework.response import Response
|
||||
from rest_framework import status
|
||||
|
||||
@@ -62,7 +62,7 @@ def nodes(request):
|
||||
'spec': {
|
||||
|
||||
'containers': [{
|
||||
'image': 'gitea.tryton.geeraert.eu/pi-ux-ce/bitwarden_cli:1.0.1',
|
||||
'image': 'gitea.geeraert.eu/pi-ux-ce/bitwarden_cli:1.0.1',
|
||||
# 'pod-running-timeout': '5m0s',
|
||||
'name': 'testpython',
|
||||
'env': [
|
||||
@@ -96,7 +96,7 @@ def backup_job(request):
|
||||
'spec': {
|
||||
|
||||
'containers': [{
|
||||
'image': 'gitea.tryton.geeraert.eu/pi-ux-ce/bitwarden_cli:1.0.1',
|
||||
'image': 'gitea.geeraert.eu/pi-ux-ce/bitwarden_cli:1.0.1',
|
||||
'name': 'testpython',
|
||||
'command': ['/bin/sh -c /config/export_bitwarden.sh'],
|
||||
'env': [
|
||||
@@ -124,8 +124,8 @@ def backup_job_yaml(request,sync_target):
|
||||
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"
|
||||
"synology" : "https://gitea.geeraert.eu/pi-ux-ce/Backup_kube/raw/branch/main/Infrequent_access/synology_pod.yaml",
|
||||
"openmediavault":"https://gitea.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]
|
||||
|
||||
@@ -2,10 +2,24 @@ from django.contrib import admin
|
||||
from django.utils.html import format_html
|
||||
from .models import StreamingSiteTestingData,StreamingRedirectData
|
||||
from .utils import full_testing
|
||||
from apps.website_redirection.utils import redirect_method
|
||||
from urllib.parse import urlsplit, urlunsplit
|
||||
from core.admin import UniversalModelAdmin
|
||||
|
||||
|
||||
@admin.action(description="Add this show to streaming")
|
||||
def re_redirect(modeladmin, request, queryset):
|
||||
output_generated = ""
|
||||
for query in queryset.values():
|
||||
print(query)
|
||||
key = "streaming"
|
||||
value = query.get('url_display')
|
||||
output_generated = output_generated + redirect_method(key,value)+";"
|
||||
|
||||
modeladmin.message_user(
|
||||
request,
|
||||
output_generated
|
||||
)
|
||||
|
||||
@admin.action(description="check the URLs")
|
||||
def check(modeladmin, request, queryset):
|
||||
@@ -61,6 +75,8 @@ class streamingAdmin(UniversalModelAdmin):
|
||||
@admin.register(StreamingRedirectData)
|
||||
class StreamingRedirectAdmin(UniversalModelAdmin):
|
||||
list_display = ['name','image_tag','season','episode','randomViewing','clickable_links','addedDate','alias']
|
||||
actions = [re_redirect]
|
||||
|
||||
#fields = ['name','season','episode','url_example','prefix','infix','suffix','alias','randomViewing','seasonInformation']
|
||||
fieldsets = (
|
||||
(
|
||||
@@ -81,4 +97,4 @@ class StreamingRedirectAdmin(UniversalModelAdmin):
|
||||
link_field = 'url_display'
|
||||
|
||||
def image_tag(self,obj):
|
||||
return format_html('<img src="{0}" style="width: 150px; height:100px;" />'.format(obj.poster_url))
|
||||
return format_html('<img src="{0}" style="width: 355px; height:200px;" />'.format(obj.poster_url))
|
||||
|
||||
@@ -21,7 +21,7 @@ class StreamingRedirectData(models.Model):
|
||||
name = models.CharField(primary_key=True,max_length=1000, help_text="Name of the show")
|
||||
season = models.IntegerField(null=False,default=1)
|
||||
episode = models.IntegerField(null=False,default=0)
|
||||
url_display = models.CharField(max_length=1000, help_text="https://www.1shows.org/tv/456-the-simpsons?streaming=true&season=18&episode=5",blank=True, null=True)
|
||||
url_display = models.CharField(max_length=1000, help_text="https://streaming.geeraert.eu/office",blank=True, null=True)
|
||||
prefix = models.CharField(max_length=1000, help_text="https://www.1shows.org/tv/456-the-simpsons?streaming=true&season=",blank=True, null=True)
|
||||
infix = models.CharField(max_length=1000, help_text="&episode=",blank=True, null=True)
|
||||
suffix = models.CharField(max_length=1000, help_text="" ,blank=True, null=True)
|
||||
@@ -34,7 +34,7 @@ class StreamingRedirectData(models.Model):
|
||||
poster_url = models.CharField(max_length=1000, help_text="poster URL",blank=True, null=True)
|
||||
|
||||
def sanitize(self, name):
|
||||
return name.replace(" ", "")
|
||||
return name.replace(" ", "").lower()
|
||||
|
||||
def season_information(self, serie_name):
|
||||
betaserie = betaserieUtils()
|
||||
|
||||
@@ -15,6 +15,9 @@ def hello(request):
|
||||
|
||||
|
||||
def streamingRedirect(request,alias):
|
||||
#sanitize
|
||||
alias = alias.lower()
|
||||
|
||||
streaming_object = StreamingRedirectData.objects.filter(alias=alias)
|
||||
|
||||
episode = streaming_object.values('episode')[0]['episode']
|
||||
|
||||
@@ -54,6 +54,9 @@ INSTALLED_APPS = [
|
||||
'import_export',
|
||||
'djangoql',
|
||||
'admin_extra_buttons',
|
||||
'rest_framework',
|
||||
'rest_framework.authtoken',
|
||||
|
||||
]
|
||||
|
||||
MIDDLEWARE = [
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
FROM python:3.12
|
||||
|
||||
ENV PYTHONUNBUFFERED 1
|
||||
#ENV ALLOWED_HOSTS 'django.tryton.geeraert.eu'
|
||||
#ENV ALLOWED_HOSTS 'django.geeraert.eu'
|
||||
#ENV DEBUG 'True'
|
||||
|
||||
ARG ALLOWED_HOSTS
|
||||
|
||||
@@ -4,7 +4,7 @@ FROM python:3.12
|
||||
MAINTAINER pi-ux-ce
|
||||
|
||||
ENV PYTHONUNBUFFERED 1
|
||||
ENV ALLOWED_HOSTS 'django-testing.tryton.geeraert.eu'
|
||||
ENV ALLOWED_HOSTS 'django-testing.geeraert.eu'
|
||||
ENV DEBUG 'True'
|
||||
|
||||
WORKDIR /code/
|
||||
@@ -20,7 +20,7 @@ RUN apt-get update && \
|
||||
# image silently keeps stale code.
|
||||
ARG CACHE_BUST=1
|
||||
RUN echo "cache bust: ${CACHE_BUST}" && \
|
||||
git clone --depth 1 -b testing https://gitea.tryton.geeraert.eu/pi-ux-ce/Django_kube.git .
|
||||
git clone --depth 1 -b testing https://gitea.geeraert.eu/pi-ux-ce/Django_kube.git .
|
||||
|
||||
RUN pip install --cache-dir=/opt/hostedtoolcache/pip --upgrade pip
|
||||
RUN pip list --cache-dir=/opt/hostedtoolcache/pip --outdated
|
||||
|
||||
@@ -17,3 +17,4 @@ xmltodict
|
||||
whitenoise
|
||||
djangoql
|
||||
django-admin-extra-buttons
|
||||
djangorestframework
|
||||
|
||||
Reference in New Issue
Block a user