Service instantiation #31
2 changed files with 46 additions and 29 deletions
|
@ -1,3 +1,5 @@
|
||||||
|
import json
|
||||||
|
|
||||||
import kubernetes
|
import kubernetes
|
||||||
import urlman
|
import urlman
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
|
@ -506,6 +508,7 @@ class ServiceInstance(ServalaModelMixin, models.Model):
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
try:
|
||||||
group = context.service_definition.api_definition["group"]
|
group = context.service_definition.api_definition["group"]
|
||||||
version = context.service_definition.api_definition["version"]
|
version = context.service_definition.api_definition["version"]
|
||||||
kind = context.service_definition.api_definition["kind"]
|
kind = context.service_definition.api_definition["kind"]
|
||||||
|
@ -519,7 +522,9 @@ class ServiceInstance(ServalaModelMixin, models.Model):
|
||||||
"spec": spec_data or {},
|
"spec": spec_data or {},
|
||||||
}
|
}
|
||||||
if label := context.control_plane.required_label:
|
if label := context.control_plane.required_label:
|
||||||
create_data["metadata"]["labels"] = {settings.DEFAULT_LABEL_KEY: label}
|
create_data["metadata"]["labels"] = [
|
||||||
|
{settings.DEFAULT_LABEL_KEY: label}
|
||||||
|
]
|
||||||
api_instance = client.CustomObjectsApi(
|
api_instance = client.CustomObjectsApi(
|
||||||
context.control_plane.get_kubernetes_client()
|
context.control_plane.get_kubernetes_client()
|
||||||
)
|
)
|
||||||
|
@ -534,4 +539,14 @@ class ServiceInstance(ServalaModelMixin, models.Model):
|
||||||
plural=plural,
|
plural=plural,
|
||||||
body=create_data,
|
body=create_data,
|
||||||
)
|
)
|
||||||
|
except Exception as e:
|
||||||
|
instance.delete()
|
||||||
|
if isinstance(e, ApiException):
|
||||||
|
try:
|
||||||
|
error_body = json.loads(e.body)
|
||||||
|
reason = error_body.get("message", str(e))
|
||||||
|
raise ValidationError(_("Kubernetes API error: {}").format(reason))
|
||||||
|
except (ValueError, TypeError):
|
||||||
|
raise ValidationError(_("Kubernetes API error: {}").format(str(e)))
|
||||||
|
raise ValidationError(_("Error creating instance: {}").format(str(e)))
|
||||||
return instance
|
return instance
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
from django.contrib import messages
|
from django.contrib import messages
|
||||||
|
from django.core.exceptions import ValidationError
|
||||||
from django.shortcuts import redirect
|
from django.shortcuts import redirect
|
||||||
from django.utils.functional import cached_property
|
from django.utils.functional import cached_property
|
||||||
from django.views.generic import DetailView, ListView
|
from django.views.generic import DetailView, ListView
|
||||||
|
@ -134,9 +135,10 @@ class ServiceOfferingDetailView(OrganizationViewMixin, HtmxViewMixin, DetailView
|
||||||
spec_data=form.get_nested_data().get("spec"),
|
spec_data=form.get_nested_data().get("spec"),
|
||||||
)
|
)
|
||||||
return redirect(service_instance.urls.base)
|
return redirect(service_instance.urls.base)
|
||||||
|
except ValidationError as e:
|
||||||
|
messages.error(self.request, e.message or str(e))
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
error_message = getattr(e, "message", None) or str(e)
|
messages.error(self.request, str(e))
|
||||||
messages.error(self.request, error_message)
|
|
||||||
|
|
||||||
# If the form is not valid or if the service creation failed, we render it again
|
# If the form is not valid or if the service creation failed, we render it again
|
||||||
context["service_form"] = form
|
context["service_form"] = form
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue