diff --git a/gns3server/schemas/compute/docker_nodes.py b/gns3server/schemas/compute/docker_nodes.py index 2d6d7d47..2328baab 100644 --- a/gns3server/schemas/compute/docker_nodes.py +++ b/gns3server/schemas/compute/docker_nodes.py @@ -43,8 +43,8 @@ class DockerBase(BaseModel): environment: Optional[str] = Field(None, description="Docker environment variables") extra_hosts: Optional[str] = Field(None, description="Docker extra hosts (added to /etc/hosts)") extra_volumes: Optional[List[str]] = Field(None, description="Additional directories to make persistent") - memory: Optional[int] = Field(None, description="Maximum amount of memory the container can use in MB") - cpus: Optional[float] = Field(None, description="Maximum amount of CPU resources the container can use") + memory: Optional[int] = Field(None, ge=0, description="Maximum amount of memory the container can use in MB") + cpus: Optional[float] = Field(None, ge=0, description="Maximum amount of CPU resources the container can use") custom_adapters: Optional[List[CustomAdapter]] = Field(None, description="Custom adapters") diff --git a/gns3server/schemas/compute/dynamips_nodes.py b/gns3server/schemas/compute/dynamips_nodes.py index f59790c5..3f636461 100644 --- a/gns3server/schemas/compute/dynamips_nodes.py +++ b/gns3server/schemas/compute/dynamips_nodes.py @@ -124,8 +124,8 @@ class DynamipsBase(BaseModel): name: Optional[str] = None dynamips_id: Optional[int] = Field(None, description="Dynamips internal ID") platform: Optional[DynamipsPlatform] = Field(None, description="Cisco router platform") - ram: Optional[int] = Field(None, description="Amount of RAM in MB") - nvram: Optional[int] = Field(None, description="Amount of NVRAM in KB") + ram: Optional[int] = Field(None, gt=0, description="Amount of RAM in MB") + nvram: Optional[int] = Field(None, gt=0, description="Amount of NVRAM in KB") image: Optional[str] = Field(None, description="Path to the IOS image") image_md5sum: Optional[str] = Field(None, description="Checksum of the IOS image") usage: Optional[str] = Field(None, description="How to use the Dynamips VM") @@ -139,8 +139,8 @@ class DynamipsBase(BaseModel): idlemax: Optional[int] = Field(None, description="Idlemax value") idlesleep: Optional[int] = Field(None, description="Idlesleep value") exec_area: Optional[int] = Field(None, description="Exec area value") - disk0: Optional[int] = Field(None, description="Disk0 size in MB") - disk1: Optional[int] = Field(None, description="Disk1 size in MB") + disk0: Optional[int] = Field(None, ge=0, description="Disk0 size in MB") + disk1: Optional[int] = Field(None, ge=0, description="Disk1 size in MB") auto_delete_disks: Optional[bool] = Field(None, description="Automatically delete nvram and disk files") console: Optional[int] = Field(None, gt=0, le=65535, description="Console TCP port") console_type: Optional[DynamipsConsoleType] = Field(None, description="Console type") @@ -176,7 +176,7 @@ class DynamipsCreate(DynamipsBase): name: str platform: str = Field(..., description="Cisco router platform", pattern="^c[0-9]{4}$") image: str = Field(..., description="Path to the IOS image") - ram: int = Field(..., description="Amount of RAM in MB") + ram: int = Field(..., gt=0, description="Amount of RAM in MB") class DynamipsUpdate(DynamipsBase): diff --git a/gns3server/schemas/compute/iou_nodes.py b/gns3server/schemas/compute/iou_nodes.py index 61dcae9c..7e3d3a91 100644 --- a/gns3server/schemas/compute/iou_nodes.py +++ b/gns3server/schemas/compute/iou_nodes.py @@ -36,8 +36,8 @@ class IOUBase(BaseModel): md5sum: Optional[str] = Field(None, description="IOU executable checksum") serial_adapters: Optional[int] = Field(None, description="How many serial adapters are connected to IOU") ethernet_adapters: Optional[int] = Field(None, description="How many Ethernet adapters are connected to IOU") - ram: Optional[int] = Field(None, description="Amount of RAM in MB") - nvram: Optional[int] = Field(None, description="Amount of NVRAM in KB") + ram: Optional[int] = Field(None, gt=0, description="Amount of RAM in MB") + nvram: Optional[int] = Field(None, gt=0, description="Amount of NVRAM in KB") l1_keepalives: Optional[bool] = Field(None, description="Use default IOU values") use_default_iou_values: Optional[bool] = Field(None, description="Always up Ethernet interfaces") startup_config_content: Optional[str] = Field(None, description="Content of IOU startup configuration file") diff --git a/gns3server/schemas/controller/templates/docker_templates.py b/gns3server/schemas/controller/templates/docker_templates.py index 329de37a..5eb10d7f 100644 --- a/gns3server/schemas/controller/templates/docker_templates.py +++ b/gns3server/schemas/controller/templates/docker_templates.py @@ -49,8 +49,8 @@ class DockerTemplate(TemplateBase): ) extra_hosts: Optional[str] = Field("", description="Docker extra hosts (added to /etc/hosts)") extra_volumes: Optional[List] = Field([], description="Additional directories to make persistent") - memory: Optional[int] = Field(0, description="Maximum amount of memory the container can use in MB") - cpus: Optional[float] = Field(0, description="Maximum amount of CPU resources the container can use") + memory: Optional[int] = Field(0, ge=0, description="Maximum amount of memory the container can use in MB") + cpus: Optional[float] = Field(0, ge=0, description="Maximum amount of CPU resources the container can use") custom_adapters: Optional[List[CustomAdapter]] = Field(default_factory=list, description="Custom adapters") diff --git a/gns3server/schemas/controller/templates/dynamips_templates.py b/gns3server/schemas/controller/templates/dynamips_templates.py index 4fb5235a..86a359cd 100644 --- a/gns3server/schemas/controller/templates/dynamips_templates.py +++ b/gns3server/schemas/controller/templates/dynamips_templates.py @@ -37,7 +37,7 @@ class DynamipsTemplate(TemplateBase): symbol: Optional[str] = "router" platform: DynamipsPlatform = Field(..., description="Cisco router platform") image: str = Field(..., description="Path to the IOS image") - exec_area: Optional[int] = Field(64, description="Exec area value") + exec_area: Optional[int] = Field(64, ge=0, description="Exec area value") mmap: Optional[bool] = Field(True, description="MMAP feature") mac_addr: Optional[str] = Field( "", description="Base MAC address", pattern="^([0-9a-fA-F]{4}\\.){2}[0-9a-fA-F]{4}$|^$" @@ -46,10 +46,10 @@ class DynamipsTemplate(TemplateBase): startup_config: Optional[str] = Field("ios_base_startup-config.txt", description="IOS startup configuration file") private_config: Optional[str] = Field("", description="IOS private configuration file") idlepc: Optional[str] = Field("", description="Idle-PC value", pattern="^(0x[0-9a-fA-F]+)?$|^$") - idlemax: Optional[int] = Field(500, description="Idlemax value") - idlesleep: Optional[int] = Field(30, description="Idlesleep value") - disk0: Optional[int] = Field(0, description="Disk0 size in MB") - disk1: Optional[int] = Field(0, description="Disk1 size in MB") + idlemax: Optional[int] = Field(500, ge=0, description="Idlemax value") + idlesleep: Optional[int] = Field(30, ge=0, description="Idlesleep value") + disk0: Optional[int] = Field(0, ge=0, description="Disk0 size in MB") + disk1: Optional[int] = Field(0, ge=0, description="Disk1 size in MB") auto_delete_disks: Optional[bool] = Field(False, description="Automatically delete nvram and disk files") console_type: Optional[DynamipsConsoleType] = Field(DynamipsConsoleType.telnet, description="Console type") console_auto_start: Optional[bool] = Field( @@ -70,8 +70,8 @@ class DynamipsTemplate(TemplateBase): class C7200DynamipsTemplate(DynamipsTemplate): - ram: Optional[int] = Field(512, description="Amount of RAM in MB") - nvram: Optional[int] = Field(512, description="Amount of NVRAM in KB") + ram: Optional[int] = Field(512, gt=0, description="Amount of RAM in MB") + nvram: Optional[int] = Field(512, gt=0, description="Amount of NVRAM in KB") npe: Optional[DynamipsNPE] = Field(DynamipsNPE.npe_400, description="NPE model") midplane: Optional[DynamipsMidplane] = Field(DynamipsMidplane.vxr, description="Midplane model") sparsemem: Optional[bool] = Field(True, description="Sparse memory feature") @@ -85,8 +85,8 @@ class C7200DynamipsTemplateUpdate(C7200DynamipsTemplate): class C3725DynamipsTemplate(DynamipsTemplate): - ram: Optional[int] = Field(128, description="Amount of RAM in MB") - nvram: Optional[int] = Field(256, description="Amount of NVRAM in KB") + ram: Optional[int] = Field(128, gt=0, description="Amount of RAM in MB") + nvram: Optional[int] = Field(256, gt=0, description="Amount of NVRAM in KB") iomem: Optional[int] = Field(5, ge=0, le=100, description="I/O memory percentage") sparsemem: Optional[bool] = Field(True, description="Sparse memory feature") @@ -99,8 +99,8 @@ class C3725DynamipsTemplateUpdate(C3725DynamipsTemplate): class C3745DynamipsTemplate(DynamipsTemplate): - ram: Optional[int] = Field(256, description="Amount of RAM in MB") - nvram: Optional[int] = Field(256, description="Amount of NVRAM in KB") + ram: Optional[int] = Field(256, gt=0, description="Amount of RAM in MB") + nvram: Optional[int] = Field(256, gt=0, description="Amount of NVRAM in KB") iomem: Optional[int] = Field(5, ge=0, le=100, description="I/O memory percentage") sparsemem: Optional[bool] = Field(True, description="Sparse memory feature") @@ -121,8 +121,8 @@ class C3600ChassisType(str, Enum): class C3600DynamipsTemplate(DynamipsTemplate): chassis: Optional[C3600ChassisType] = Field("c3660", description="Chassis type") - ram: Optional[int] = Field(192, description="Amount of RAM in MB") - nvram: Optional[int] = Field(128, description="Amount of NVRAM in KB") + ram: Optional[int] = Field(192, gt=0, description="Amount of RAM in MB") + nvram: Optional[int] = Field(128, gt=0, description="Amount of NVRAM in KB") iomem: Optional[int] = Field(5, ge=0, le=100, description="I/O memory percentage") sparsemem: Optional[bool] = Field(True, description="Sparse memory feature") @@ -135,8 +135,8 @@ class C3600DynamipsTemplateUpdate(C3600DynamipsTemplate): class C2691DynamipsTemplate(DynamipsTemplate): - ram: Optional[int] = Field(192, description="Amount of RAM in MB") - nvram: Optional[int] = Field(256, description="Amount of NVRAM in KB") + ram: Optional[int] = Field(192, gt=0, description="Amount of RAM in MB") + nvram: Optional[int] = Field(256, gt=0, description="Amount of NVRAM in KB") iomem: Optional[int] = Field(5, ge=0, le=100, description="I/O memory percentage") sparsemem: Optional[bool] = Field(True, description="Sparse memory feature") @@ -163,8 +163,8 @@ class C2600ChassisType(str, Enum): class C2600DynamipsTemplate(DynamipsTemplate): chassis: Optional[C2600ChassisType] = Field("2651XM", description="Chassis type") - ram: Optional[int] = Field(160, description="Amount of RAM in MB") - nvram: Optional[int] = Field(128, description="Amount of NVRAM in KB") + ram: Optional[int] = Field(160, gt=0, description="Amount of RAM in MB") + nvram: Optional[int] = Field(128, gt=0, description="Amount of NVRAM in KB") iomem: Optional[int] = Field(15, ge=0, le=100, description="I/O memory percentage") sparsemem: Optional[bool] = Field(True, description="Sparse memory feature") @@ -187,8 +187,8 @@ class C1700ChassisType(str, Enum): class C1700DynamipsTemplate(DynamipsTemplate): chassis: Optional[C1700ChassisType] = Field("1760", description="Chassis type") - ram: Optional[int] = Field(160, description="Amount of RAM in MB") - nvram: Optional[int] = Field(128, description="Amount of NVRAM in KB") + ram: Optional[int] = Field(160, gt=0, description="Amount of RAM in MB") + nvram: Optional[int] = Field(128, gt=0, description="Amount of NVRAM in KB") iomem: Optional[int] = Field(15, ge=0, le=100, description="I/O memory percentage") sparsemem: Optional[bool] = Field(False, description="Sparse memory feature") diff --git a/gns3server/schemas/controller/templates/iou_templates.py b/gns3server/schemas/controller/templates/iou_templates.py index cf581c8c..e906f74f 100644 --- a/gns3server/schemas/controller/templates/iou_templates.py +++ b/gns3server/schemas/controller/templates/iou_templates.py @@ -28,10 +28,10 @@ class IOUTemplate(TemplateBase): default_name_format: Optional[str] = "IOU{0}" symbol: Optional[str] = "multilayer_switch" path: str = Field(..., description="Path of IOU executable") - ethernet_adapters: Optional[int] = Field(2, description="Number of ethernet adapters") - serial_adapters: Optional[int] = Field(2, description="Number of serial adapters") - ram: Optional[int] = Field(256, description="Amount of RAM in MB") - nvram: Optional[int] = Field(128, description="Amount of NVRAM in KB") + ethernet_adapters: Optional[int] = Field(2, ge=0, description="Number of ethernet adapters") + serial_adapters: Optional[int] = Field(2, ge=0, description="Number of serial adapters") + ram: Optional[int] = Field(256, gt=0, description="Amount of RAM in MB") + nvram: Optional[int] = Field(128, gt=0, description="Amount of NVRAM in KB") use_default_iou_values: Optional[bool] = Field(True, description="Use default IOU values") startup_config: Optional[str] = Field("iou_l3_base_startup-config.txt", description="Startup-config of IOU") private_config: Optional[str] = Field("", description="Private-config of IOU") diff --git a/gns3server/schemas/controller/templates/qemu_templates.py b/gns3server/schemas/controller/templates/qemu_templates.py index f5353d7b..13abaf40 100644 --- a/gns3server/schemas/controller/templates/qemu_templates.py +++ b/gns3server/schemas/controller/templates/qemu_templates.py @@ -39,7 +39,7 @@ class QemuTemplate(TemplateBase): qemu_path: Optional[str] = Field("", description="Qemu executable path") platform: Optional[QemuPlatform] = Field(QemuPlatform.x86_64, description="Platform to emulate") linked_clone: Optional[bool] = Field(True, description="Whether the VM is a linked clone or not") - ram: Optional[int] = Field(256, description="Amount of RAM in MB") + ram: Optional[int] = Field(256, gt=0, description="Amount of RAM in MB") cpus: Optional[int] = Field(1, ge=1, le=255, description="Number of vCPUs") maxcpus: Optional[int] = Field(1, ge=1, le=255, description="Maximum number of hotpluggable vCPUs") adapters: Optional[int] = Field(1, ge=0, le=275, description="Number of adapters")