mirror of
https://github.com/GNS3/gns3-server.git
synced 2026-11-03 05:51:15 +02:00
Merge branch '3.0' into project-monitoring
This commit is contained in:
34 files changed
+1138
-506
No files matched your search
@@ -44,6 +44,10 @@ class Appliance:
|
||||
def status(self):
|
||||
return self._data["status"]
|
||||
|
||||
@property
|
||||
def registry_version(self):
|
||||
return self._data.get("registry_version")
|
||||
|
||||
@property
|
||||
def symbol(self):
|
||||
return self._data.get("symbol")
|
||||
|
||||
@@ -37,6 +37,7 @@ from .appliance_to_template import ApplianceToTemplate
|
||||
from ..utils.images import InvalidImageError, write_image, read_image_info
|
||||
|
||||
from gns3server import schemas
|
||||
from gns3server.schemas.controller.appliances import ApplianceModel
|
||||
from gns3server.utils.images import default_images_directory
|
||||
from gns3server.db.repositories.images import ImagesRepository
|
||||
from gns3server.db.repositories.templates import TemplatesRepository
|
||||
@@ -248,7 +249,8 @@ class ApplianceManager:
|
||||
appliances_info = self._find_appliances_from_image_checksum(image_checksum)
|
||||
for appliance, image_version in appliances_info:
|
||||
try:
|
||||
schemas.Appliance.model_validate(appliance.asdict())
|
||||
# Validate with discriminated union - automatically routes to correct version
|
||||
ApplianceModel.model_validate(appliance.asdict())
|
||||
except ValidationError as e:
|
||||
log.warning(f"Could not validate appliance '{appliance.id}': {e}")
|
||||
if appliance.versions:
|
||||
@@ -279,7 +281,8 @@ class ApplianceManager:
|
||||
raise ControllerNotFoundError(message=f"Could not find appliance '{appliance_id}'")
|
||||
|
||||
try:
|
||||
schemas.Appliance.model_validate(appliance.asdict())
|
||||
# Validate with discriminated union - automatically routes to correct version
|
||||
ApplianceModel.model_validate(appliance.asdict())
|
||||
except ValidationError as e:
|
||||
raise ControllerError(message=f"Could not validate appliance '{appliance_id}': {e}")
|
||||
|
||||
@@ -334,7 +337,9 @@ class ApplianceManager:
|
||||
appliance = Appliance(path, json.load(f), builtin=builtin)
|
||||
json_data = appliance.asdict() # Check if loaded without error
|
||||
if appliance.status != "broken":
|
||||
schemas.Appliance.model_validate(json_data)
|
||||
# Validate using discriminated union - automatically routes to correct version
|
||||
log.debug(f"Validating appliance '{appliance.id}' with registry version {appliance.registry_version}")
|
||||
ApplianceModel.model_validate(json_data)
|
||||
self._appliances[appliance.id] = appliance
|
||||
if not appliance.symbol or appliance.symbol.startswith(":/symbols/"):
|
||||
# apply a default symbol if the appliance has none or a default symbol
|
||||
|
||||
@@ -83,7 +83,7 @@ class Port:
|
||||
# If port name format has changed we use the port name as the short name (1.X behavior)
|
||||
if self._short_name:
|
||||
return self._short_name
|
||||
elif "/" in self._name:
|
||||
elif self._name and '/' in self._name:
|
||||
return self._name.replace(self.long_name_type(), self.short_name_type())
|
||||
elif self._name.startswith(f"{self.long_name_type()}{self._interface_number}"):
|
||||
return self.short_name_type() + f"{self._interface_number}"
|
||||
|
||||
Reference in new issue
Block a user