From bf0349c3cf5021710468fd821ae051f0a934d7da Mon Sep 17 00:00:00 2001 From: Tobias Kunze Date: Fri, 21 Mar 2025 16:58:59 +0100 Subject: [PATCH] Expose connection test in admin --- src/servala/core/admin.py | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/src/servala/core/admin.py b/src/servala/core/admin.py index 715c861..9f2a009 100644 --- a/src/servala/core/admin.py +++ b/src/servala/core/admin.py @@ -1,4 +1,4 @@ -from django.contrib import admin +from django.contrib import admin, messages from django.utils.translation import gettext_lazy as _ from servala.core.forms import ControlPlaneAdminForm @@ -116,6 +116,7 @@ class ControlPlaneAdmin(admin.ModelAdmin): list_filter = ("cloud_provider",) search_fields = ("name", "description", "k8s_api_endpoint") autocomplete_fields = ("cloud_provider",) + actions = ["test_kubernetes_connection"] fieldsets = ( ( @@ -137,6 +138,29 @@ class ControlPlaneAdmin(admin.ModelAdmin): # Exclude the original api_credentials field as we're using our custom fields return ["api_credentials"] + def response_change(self, request, obj): + result = super().response_change(request, obj) + if "_save_and_test" in request.POST: + success, message = obj.test_connection() + if success: + messages.success(request, message) + else: + messages.warning(request, message) + return result + + def test_kubernetes_connection(self, request, queryset): + """Admin action to test Kubernetes connection for selected control planes""" + for control_plane in queryset: + success, message = control_plane.test_connection() + message = f"{control_plane.name}: {message}" + + if success: + messages.success(request, message) + else: + messages.warning(request, message) + + test_kubernetes_connection.short_description = _("Test Kubernetes connection") + @admin.register(Plan) class PlanAdmin(admin.ModelAdmin):