From 08fada04e032e25d6b5597609df3ac0aa53c4ecb Mon Sep 17 00:00:00 2001 From: Tobias Kunze Date: Thu, 3 Apr 2025 17:17:33 +0200 Subject: [PATCH] Successfully create an instance --- src/servala/core/models/service.py | 30 +++++++++++++++++++++++++-- src/servala/frontend/views/service.py | 2 +- 2 files changed, 29 insertions(+), 3 deletions(-) diff --git a/src/servala/core/models/service.py b/src/servala/core/models/service.py index 9e282a6..8156adf 100644 --- a/src/servala/core/models/service.py +++ b/src/servala/core/models/service.py @@ -6,7 +6,7 @@ from django.db import models from django.utils.functional import cached_property from django.utils.translation import gettext_lazy as _ from encrypted_fields.fields import EncryptedJSONField -from kubernetes import config +from kubernetes import client, config from kubernetes.client.rest import ApiException from servala.core.models.mixins import ServalaModelMixin @@ -137,7 +137,6 @@ class ControlPlane(ServalaModelMixin, models.Model): "clusters": [ { "cluster": { - "insecure-skip-tls-verify": True, "certificate-authority-data": self.api_credentials[ "certificate-authority-data" ], @@ -484,6 +483,33 @@ class ServiceInstance(ServalaModelMixin, models.Model): # Ensure the namespace exists context.control_plane.get_or_create_namespace(organization.namespace) + group = context.service_definition.api_definition["group"] + version = context.service_definition.api_definition["version"] + kind = context.service_definition.api_definition["kind"] + create_data = { + "apiVersion": f"{group}/{version}", + "kind": kind, + "metadata": { + "name": name, + "namespace": organization.namespace, + }, + "spec": spec_data or {}, + } + api_instance = client.CustomObjectsApi( + context.control_plane.get_kubernetes_client() + ) + plural = kind.lower() + if not plural.endswith("s"): + plural = f"{plural}s" + + api_instance.create_namespaced_custom_object( + group=group, + version=version, + namespace=organization.namespace, + plural=plural, + body=create_data, + ) + return cls.objects.create( name=name, organization=organization, diff --git a/src/servala/frontend/views/service.py b/src/servala/frontend/views/service.py index 1803dd0..c19aff5 100644 --- a/src/servala/frontend/views/service.py +++ b/src/servala/frontend/views/service.py @@ -131,7 +131,7 @@ class ServiceOfferingDetailView(OrganizationViewMixin, HtmxViewMixin, DetailView name=form.cleaned_data["name"], context=self.context_object, created_by=request.user, - spec_data=form.get_nested_data(), + spec_data=form.get_nested_data().get("spec"), ) return redirect(service_instance.urls.base) except Exception as e: