diff --git a/src/servala/api/views.py b/src/servala/api/views.py
index 7d8ebfa..5fdb91a 100644
--- a/src/servala/api/views.py
+++ b/src/servala/api/views.py
@@ -233,9 +233,12 @@ The Servala Team"""
try:
service = Service.objects.get(osb_service_id=service_id)
- service_offering = ServiceOffering.objects.get(
- osb_plan_id=plan_id, service=service
- )
+ # Special handling: when plan_id is "suspend", don't lookup service_offering
+ service_offering = None
+ if plan_id != "suspend":
+ service_offering = ServiceOffering.objects.get(
+ osb_plan_id=plan_id, service=service
+ )
except Service.DoesNotExist:
return self._error(f"Unknown service_id: {service_id}")
except ServiceOffering.DoesNotExist:
@@ -258,7 +261,7 @@ The Servala Team"""
return self.request.build_absolute_uri(admin_path)
def _create_action_helpdesk_ticket(
- self, request, action, instance_id, service, service_offering, users=None
+ self, request, action, instance_id, service, service_offering=None, users=None
):
"""
Create an Odoo helpdesk ticket for offboarding or suspension actions.
@@ -269,11 +272,12 @@ The Servala Team"""
organization = None
try:
# Look for instances with this name in the service offering's context
+ filter_kwargs = {"name": instance_id}
+ if service_offering:
+ filter_kwargs["context__service_offering"] = service_offering
+
service_instance = (
- ServiceInstance.objects.filter(
- name=instance_id,
- context__service_offering=service_offering,
- )
+ ServiceInstance.objects.filter(**filter_kwargs)
.select_related("organization")
.first()
)
@@ -302,13 +306,14 @@ The Servala Team"""
else:
description_parts.append(f"Instance: {instance_id}")
- offering_url = self._get_admin_url(
- "core_serviceoffering_change", service_offering.pk
- )
- description_parts.append(f"Service Offering: {offering_url}")
+ if service_offering:
+ offering_url = self._get_admin_url(
+ "core_serviceoffering_change", service_offering.pk
+ )
+ description_parts.append(f"Service Offering: {offering_url}")
if users:
- description_parts.append("\nUsers:")
+ description_parts.append("
Users:")
for user_data in users:
email = user_data.get("email", "N/A")
full_name = user_data.get("full_name", "N/A")
@@ -324,7 +329,7 @@ The Servala Team"""
description_parts.append(f" - {full_name} ({user_link}) - {role}")
- description = "\n".join(description_parts)
+ description = "
".join(description_parts)
create_helpdesk_ticket(
title=f"Exoscale OSB {action} - {service.name} - {instance_id}",