dynamicweb/opennebula_api/exceptions.py

20 lines
462 B
Python
Raw Normal View History

class KeyExistsError(Exception):
pass
class UserExistsError(Exception):
pass
class UserCredentialError(Exception):
pass
Do not break the VM list when a VM's OpenNebula template was deleted The "my virtual machines" page showed "We could not load your VMs due to a backend connection error" for any user owning a VM whose template had been removed from OpenNebula. OpenNebulaManager.get_template() converted every failure, including WrongIdError for a missing template, into ConnectionRefusedError, and VirtualMachineSerializer.get_configuration() let that propagate, so one VM with a stale template id took down the whole list. The only log output was an empty ERROR line, because WrongIdError has no message. * Add opennebula_api.exceptions.TemplateNotFoundError and raise it from get_template() for a missing template; keep ConnectionRefusedError for genuine backend failures and log them with a traceback. * Add OpenNebulaManager.get_template_names() and resolve_template_id() so the serializer fetches the template pool once per list instead of constructing an OpenNebulaManager and fetching the pool for every VM. * get_configuration() now falls back to the template name embedded in the VM name ("<template>-<vm id>") when the template is missing or the pool cannot be fetched, and logs why. * Replace str.lstrip('public-') with a real prefix strip (lstrip removes a character set, so "public-ubuntu" became "ntu") and also strip "ipv6only-". * ProcessVMSelectionMixin shows "configuration is no longer available" instead of an unhandled error when ordering a retired template. * VirtualMachinesPlanListView logs the exception behind the banner. * Add mock-based unit tests for the fallback, the UPDATED_TEMPLATES mapping, the single pool fetch and the new exception. The UPDATED_TEMPLATES setting keeps working as an operational override for mapping retired template ids to their replacements.
2026-10-19 20:53:32 +05:30
class TemplateNotFoundError(Exception):
"""Raised when an OpenNebula VM template id does not exist (any more)."""
def __init__(self, template_id):
super(TemplateNotFoundError, self).__init__(
"OpenNebula template %s does not exist" % template_id
)
self.template_id = template_id