From a3317eadd2a8d38da0dda9aaab3a86dfa94b27e8 Mon Sep 17 00:00:00 2001 From: grossmj Date: Sat, 24 Jun 2023 23:46:09 +0930 Subject: [PATCH] Add proposed changes to appliance_v8.json --- schemas/appliance_v8.json | 994 +++++++++++++++++++++++++------------- 1 file changed, 664 insertions(+), 330 deletions(-) diff --git a/schemas/appliance_v8.json b/schemas/appliance_v8.json index d4f4e81..8edda1d 100644 --- a/schemas/appliance_v8.json +++ b/schemas/appliance_v8.json @@ -2,17 +2,491 @@ "$schema": "http://json-schema.org/draft-04/schema#", "type": "object", "title": "JSON schema validating a GNS3 appliance", - "definitions": { "dynamips_slot": { - "enum": ["C2600-MB-2FE", "C2600-MB-1E", "PA-A1", "PA-8E", "C1700-MB-1FE", "PA-8T", "PA-2FE-TX", "PA-FE-TX", "PA-GE", "C2600-MB-2E", "C7200-IO-FE", "NM-4T", "C2600-MB-1FE", "C7200-IO-2FE", "PA-POS-OC3", "PA-4T+", "C1700-MB-WIC1", "NM-16ESW", "C7200-IO-GE-E", "NM-4E", "GT96100-FE", "NM-1FE-TX", "Leopard-2FE", "NM-1E", "PA-4E", ""] + "enum": [ + "C2600-MB-2FE", + "C2600-MB-1E", + "PA-A1", + "PA-8E", + "C1700-MB-1FE", + "PA-8T", + "PA-2FE-TX", + "PA-FE-TX", + "PA-GE", + "C2600-MB-2E", + "C7200-IO-FE", + "NM-4T", + "C2600-MB-1FE", + "C7200-IO-2FE", + "PA-POS-OC3", + "PA-4T+", + "C1700-MB-WIC1", + "NM-16ESW", + "C7200-IO-GE-E", + "NM-4E", + "GT96100-FE", + "NM-1FE-TX", + "Leopard-2FE", + "NM-1E", + "PA-4E", + "" + ] }, - "dynamips_wic": { - "enum": ["WIC-1ENET", "WIC-1T", "WIC-2T", ""] + "enum": [ + "WIC-1ENET", + "WIC-1T", + "WIC-2T", + "" + ] + }, + "docker_properties": { + "type": "object", + "title": "Docker specific properties", + "properties": { + "adapters": { + "type": "integer", + "title": "Number of ethernet adapters" + }, + "image": { + "type": "string", + "title": "Docker image in the Docker Hub" + }, + "start_command": { + "type": "string", + "title": "Command executed when the container start. Empty will use the default" + }, + "environment": { + "type": "string", + "title": "One KEY=VAR environment by line" + }, + "console_type": { + "enum": [ + "telnet", + "vnc", + "http", + "https" + ], + "title": "Type of console connection for the administration of the appliance" + }, + "console_http_port": { + "description": "Internal port in the container of the HTTP server", + "type": "integer" + }, + "console_http_path": { + "description": "Path of the web interface", + "type": "string" + } + }, + "required": [ + "adapters", + "image" + ] + }, + "iou_properties": { + "type": "object", + "title": "IOU specific properties", + "properties": { + "ethernet_adapters": { + "type": "integer", + "title": "Number of ethernet adapters" + }, + "serial_adapters": { + "type": "integer", + "title": "Number of serial adapters" + }, + "nvram": { + "type": "integer", + "title": "Host NVRAM" + }, + "ram": { + "type": "integer", + "title": "Host RAM" + }, + "startup_config": { + "type": "string", + "title": "Config loaded at startup" + } + }, + "required": [ + "ethernet_adapters", + "serial_adapters", + "nvram", + "ram", + "startup_config" + ] + }, + "dynamips_properties": { + "type": "object", + "title": "Dynamips specific properties", + "properties": { + "chassis": { + "title": "Chassis type", + "enum": [ + "1720", + "1721", + "1750", + "1751", + "1760", + "2610", + "2620", + "2610XM", + "2620XM", + "2650XM", + "2621", + "2611XM", + "2621XM", + "2651XM", + "3620", + "3640", + "3660", + "" + ] + }, + "platform": { + "title": "Platform type", + "enum": [ + "c1700", + "c2600", + "c2691", + "c3725", + "c3745", + "c3600", + "c7200" + ] + }, + "ram": { + "title": "Amount of ram", + "type": "integer", + "minimum": 1 + }, + "nvram": { + "title": "Amount of nvram", + "type": "integer", + "minimum": 1 + }, + "startup_config": { + "type": "string", + "title": "Config loaded at startup" + }, + "wic0": { + "$ref": "#/definitions/dynamips_wic" + }, + "wic1": { + "$ref": "#/definitions/dynamips_wic" + }, + "wic2": { + "$ref": "#/definitions/dynamips_wic" + }, + "slot0": { + "$ref": "#/definitions/dynamips_slot" + }, + "slot1": { + "$ref": "#/definitions/dynamips_slot" + }, + "slot2": { + "$ref": "#/definitions/dynamips_slot" + }, + "slot3": { + "$ref": "#/definitions/dynamips_slot" + }, + "slot4": { + "$ref": "#/definitions/dynamips_slot" + }, + "slot5": { + "$ref": "#/definitions/dynamips_slot" + }, + "slot6": { + "$ref": "#/definitions/dynamips_slot" + }, + "midplane": { + "enum": [ + "std", + "vxr" + ] + }, + "npe": { + "enum": [ + "npe-100", + "npe-150", + "npe-175", + "npe-200", + "npe-225", + "npe-300", + "npe-400", + "npe-g2" + ] + } + }, + "required": [ + "platform", + "ram", + "nvram" + ] + }, + "qemu_properties": { + "type": "object", + "title": "Qemu specific properties", + "properties": { + "adapter_type": { + "enum": [ + "e1000", + "i82550", + "i82551", + "i82557a", + "i82557b", + "i82557c", + "i82558a", + "i82558b", + "i82559a", + "i82559b", + "i82559c", + "i82559er", + "i82562", + "i82801", + "ne2k_pci", + "pcnet", + "rtl8139", + "virtio", + "virtio-net-pci", + "vmxnet3" + ], + "title": "Type of network adapter" + }, + "adapters": { + "type": "integer", + "title": "Number of adapters" + }, + "custom_adapters": { + "type": "array", + "title": "Custom adapters", + "items": { + "type": "object", + "properties": { + "adapter_number": { + "title": "Adapter number", + "type": "integer" + }, + "port_name": { + "title": "Custom port name", + "type": "string", + "minimum": 1 + }, + "adapter_type": { + "title": "Custom adapter type", + "type": "string", + "enum": [ + "e1000", + "i82550", + "i82551", + "i82557a", + "i82557b", + "i82557c", + "i82558a", + "i82558b", + "i82559a", + "i82559b", + "i82559c", + "i82559er", + "i82562", + "i82801", + "ne2k_pci", + "pcnet", + "rtl8139", + "virtio", + "virtio-net-pci", + "vmxnet3" + ] + }, + "mac_address": { + "title": "Custom MAC address", + "type": "string", + "minimum": 1, + "pattern": "^([0-9a-fA-F]{2}[:]){5}([0-9a-fA-F]{2})$" + } + }, + "required": [ + "adapter_number" + ] + } + }, + "ram": { + "type": "integer", + "title": "Ram allocated to the appliance (MB)" + }, + "cpus": { + "type": "integer", + "title": "Number of Virtual CPU" + }, + "hda_disk_interface": { + "enum": [ + "ide", + "scsi", + "sd", + "mtd", + "floppy", + "pflash", + "virtio", + "sata" + ], + "title": "Disk interface for the installed hda_disk_image" + }, + "hdb_disk_interface": { + "enum": [ + "ide", + "scsi", + "sd", + "mtd", + "floppy", + "pflash", + "virtio", + "sata" + ], + "title": "Disk interface for the installed hdb_disk_image" + }, + "hdc_disk_interface": { + "enum": [ + "ide", + "scsi", + "sd", + "mtd", + "floppy", + "pflash", + "virtio", + "sata" + ], + "title": "Disk interface for the installed hdc_disk_image" + }, + "hdd_disk_interface": { + "enum": [ + "ide", + "scsi", + "sd", + "mtd", + "floppy", + "pflash", + "virtio", + "sata" + ], + "title": "Disk interface for the installed hdd_disk_image" + }, + "arch": { + "enum": [ + "aarch64", + "alpha", + "arm", + "cris", + "i386", + "lm32", + "m68k", + "microblaze", + "microblazeel", + "mips", + "mips64", + "mips64el", + "mipsel", + "moxie", + "or32", + "ppc", + "ppc64", + "ppcemb", + "s390x", + "sh4", + "sh4eb", + "sparc", + "sparc64", + "tricore", + "unicore32", + "x86_64", + "xtensa", + "xtensaeb" + ], + "title": "Architecture emulated" + }, + "console_type": { + "enum": [ + "telnet", + "vnc", + "spice" + ], + "title": "Type of console connection for the administration of the appliance" + }, + "boot_priority": { + "enum": [ + "d", + "c", + "dc", + "cd", + "n", + "nc", + "nd", + "cn", + "dn" + ], + "title": "Optional define the disk boot priory. Refer to -boot option in qemu manual for more details." + }, + "kernel_command_line": { + "type": "string", + "title": "Command line parameters send to the kernel" + }, + "kvm": { + "title": "KVM requirements", + "enum": [ + "require", + "allow", + "disable" + ] + }, + "options": { + "type": "string", + "title": "Optional additional qemu command line options" + }, + "cpu_throttling": { + "type": "number", + "minimum": 0, + "maximum": 100, + "title": "Throttle the CPU" + }, + "tpm": { + "type": "boolean", + "title": "Enable the Trusted Platform Module (TPM)" + }, + "uefi": { + "type": "boolean", + "title": "Enable the UEFI boot mode" + }, + "on_close": { + "title": "Action to execute on the VM is closed", + "enum": [ + "power_off", + "shutdown_signal", + "save_vm_state" + ] + }, + "process_priority": { + "title": "Process priority for QEMU", + "enum": [ + "realtime", + "very high", + "high", + "normal", + "low", + "very low", + "null" + ] + } + }, + "required": [ + "adapter_type", + "adapters", + "ram", + "arch", + "console_type", + "kvm" + ] } }, - "properties": { "appliance_id": { "title": "Appliance ID", @@ -27,10 +501,10 @@ }, "category": { "enum": [ - "router", - "multilayer_switch", - "firewall", - "guest" + "router", + "multilayer_switch", + "firewall", + "guest" ], "title": "Category of the appliance" }, @@ -62,15 +536,33 @@ "title": "An optional product url on vendor website" }, "registry_version": { - "enum": [1, 2, 3, 4, 5, 6, 7, 8], + "enum": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8 + ], "title": "Version of the registry compatible with this appliance" }, "status": { - "enum": ["stable", "experimental", "broken"], + "enum": [ + "stable", + "experimental", + "broken" + ], "title": "Document if the appliance is working or not" }, "availability": { - "enum": ["free", "with-registration", "free-to-try", "service-contract"], + "enum": [ + "free", + "with-registration", + "free-to-try", + "service-contract" + ], "title": "About image availability: can be downloaded directly; download requires a free registration; paid but a trial version (time or feature limited) is available; not available publicly" }, "maintainer": { @@ -82,317 +574,99 @@ "format": "email", "title": "Maintainer email" }, + "installation_instructions": { + "type": "string", + "title": "Optional installation instructions" + }, "usage": { - "type": "string", - "title": "How to use the appliance" + "type": "string", + "title": "How to use the appliance" + }, + "default_username": { + "type": "string", + "title": "Default username for the appliance" + }, + "default_password": { + "type": "string", + "title": "Default password for the appliance" }, "symbol": { "type": "string", "title": "An optional symbol for the appliance" }, "first_port_name": { - "type": "string", - "title": "Optional name of the first networking port example: eth0" + "type": "string", + "title": "Optional name of the first networking port example: eth0" }, "port_name_format": { - "type": "string", - "title": "Optional formating of the networking port example: eth{0}" + "type": "string", + "title": "Optional formating of the networking port example: eth{0}" }, "port_segment_size": { - "type": "integer", - "title": "Optional port segment size. A port segment is a block of port. For example Ethernet0/0 Ethernet0/1 is the module 0 with a port segment size of 2" + "type": "integer", + "title": "Optional port segment size. A port segment is a block of port. For example Ethernet0/0 Ethernet0/1 is the module 0 with a port segment size of 2" }, "linked_clone": { - "type": "boolean", - "title": "False if you don't want to use a single image for all nodes" + "type": "boolean", + "title": "False if you don't want to use a single image for all nodes" }, - - "docker": { + "settings": { + "type": "array", + "title": "Settings for running the appliance", + "items": { "type": "object", - "title": "Docker specific options", + "title": "Emulator settings", "properties": { - "adapters": { - "type": "integer", - "title": "Number of ethernet adapters" - }, - "image": { - "type": "string", - "title": "Docker image in the Docker Hub" - }, - "start_command": { - "type": "string", - "title": "Command executed when the container start. Empty will use the default" - }, - "environment": { - "type": "string", - "title": "One KEY=VAR environment by line" - }, - "console_type": { - "enum": ["telnet", "vnc", "http", "https"], - "title": "Type of console connection for the administration of the appliance" - }, - "console_http_port": { - "description": "Internal port in the container of the HTTP server", - "type": "integer" - }, - "console_http_path": { - "description": "Path of the web interface", - "type": "string" - } - }, - "required": [ - "adapters", - "image" - ] - }, - "iou": { - "type": "object", - "title": "IOU specific options", - "properties": { - "ethernet_adapters": { - "type": "integer", - "title": "Number of ethernet adapters" - }, - "serial_adapters": { - "type": "integer", - "title": "Number of serial adapters" - }, - "nvram": { - "type": "integer", - "title": "Host NVRAM" - }, - "ram": { - "type": "integer", - "title": "Host RAM" - }, - "startup_config": { - "type": "string", - "title": "Config loaded at startup" - } - }, - "required": [ - "ethernet_adapters", - "serial_adapters", - "nvram", - "ram", - "startup_config" - ] - }, - "dynamips": { - "type": "object", - "title": "Dynamips specific options", - "properties": { - "chassis": { - "title": "Chassis type", - "enum": ["1720", "1721", "1750", "1751", "1760", "2610", "2620", "2610XM", "2620XM", "2650XM", "2621", "2611XM", "2621XM", "2651XM", "3620", "3640", "3660", ""] - }, - "platform": { - "title": "Platform type", - "enum": ["c1700", "c2600", "c2691", "c3725", "c3745", "c3600", "c7200"] - }, - "ram": { - "title": "Amount of ram", - "type": "integer", - "minimum": 1 - }, - "nvram": { - "title": "Amount of nvram", - "type": "integer", - "minimum": 1 - }, - "startup_config": { - "type": "string", - "title": "Config loaded at startup" - }, - "wic0": { "$ref": "#/definitions/dynamips_wic" }, - "wic1": { "$ref": "#/definitions/dynamips_wic" }, - "wic2": { "$ref": "#/definitions/dynamips_wic" }, - "slot0": { "$ref": "#/definitions/dynamips_slot" }, - "slot1": { "$ref": "#/definitions/dynamips_slot" }, - "slot2": { "$ref": "#/definitions/dynamips_slot" }, - "slot3": { "$ref": "#/definitions/dynamips_slot" }, - "slot4": { "$ref": "#/definitions/dynamips_slot" }, - "slot5": { "$ref": "#/definitions/dynamips_slot" }, - "slot6": { "$ref": "#/definitions/dynamips_slot" }, - "midplane": { "enum": ["std", "vxr"] }, - "npe": { "enum": ["npe-100", "npe-150", "npe-175", "npe-200", "npe-225", "npe-300", "npe-400", "npe-g2"] } - }, - "required": [ - "platform", - "ram", - "nvram" - ] - }, - - "qemu": { - "type": "object", - "title": "Qemu specific options", - "properties": { - "adapter_type": { - "enum": [ - "e1000", - "i82550", - "i82551", - "i82557a", - "i82557b", - "i82557c", - "i82558a", - "i82558b", - "i82559a", - "i82559b", - "i82559c", - "i82559er", - "i82562", - "i82801", - "ne2k_pci", - "pcnet", - "rtl8139", - "virtio", - "virtio-net-pci", - "vmxnet3" - ], - "title": "Type of network adapter" - }, - "adapters": { - "type": "integer", - "title": "Number of adapters" - }, - "custom_adapters": { + "name": { + "type": "string", + "title": "Name of the settings set" + }, + "default": { + "type": "boolean", + "title": "Whether these are the default settings" + }, + "emulator_type": { + "enum": [ + "docker", + "iou", + "dynamips", + "qemu" + ], + "title": "Type of emulator properties" + }, + "emulator_versions": { "type": "array", - "title": "Custom adapters", + "title": "Versions of the emulator", "items": { - "type": "object", - "properties": { - "adapter_number": { - "title": "Adapter number", - "type": "integer" - }, - "port_name": { - "title": "Custom port name", - "type": "string", - "minimum": 1 - }, - "adapter_type": { - "title": "Custom adapter type", - "type": "string", - "enum": [ - "e1000", - "i82550", - "i82551", - "i82557a", - "i82557b", - "i82557c", - "i82558a", - "i82558b", - "i82559a", - "i82559b", - "i82559c", - "i82559er", - "i82562", - "i82801", - "ne2k_pci", - "pcnet", - "rtl8139", - "virtio", - "virtio-net-pci", - "vmxnet3" - ] - }, - "mac_address": { - "title": "Custom MAC address", - "type": "string", - "minimum": 1, - "pattern": "^([0-9a-fA-F]{2}[:]){5}([0-9a-fA-F]{2})$" - } + "type": "string", + "title": "Version of the emulator" + }, + "emulator_properties": { + "type": "object", + "title": "Properties for the emulator", + "oneOf": [ + { + "$ref": "#/definitions/qemu_properties" }, - "required": ["adapter_number"] + { + "$ref": "#/definitions/dynamips_properties" + }, + { + "$ref": "#/definitions/iou_properties" + }, + { + "$ref": "#/definitions/docker_properties" + } + ] } - }, - "ram": { - "type": "integer", - "title": "Ram allocated to the appliance (MB)" - }, - "cpus": { - "type": "integer", - "title": "Number of Virtual CPU" - }, - "hda_disk_interface": { - "enum": ["ide", "scsi", "sd", "mtd", "floppy", "pflash", "virtio", "sata"], - "title": "Disk interface for the installed hda_disk_image" - }, - "hdb_disk_interface": { - "enum": ["ide", "scsi", "sd", "mtd", "floppy", "pflash", "virtio", "sata"], - "title": "Disk interface for the installed hdb_disk_image" - }, - "hdc_disk_interface": { - "enum": ["ide", "scsi", "sd", "mtd", "floppy", "pflash", "virtio", "sata"], - "title": "Disk interface for the installed hdc_disk_image" - }, - "hdd_disk_interface": { - "enum": ["ide", "scsi", "sd", "mtd", "floppy", "pflash", "virtio", "sata"], - "title": "Disk interface for the installed hdd_disk_image" - }, - "arch": { - "enum": ["aarch64", "alpha", "arm", "cris", "i386", "lm32", "m68k", "microblaze", "microblazeel", "mips", "mips64", "mips64el", "mipsel", "moxie", "or32", "ppc", "ppc64", "ppcemb", "s390x", "sh4", "sh4eb", "sparc", "sparc64", "tricore", "unicore32", "x86_64", "xtensa", "xtensaeb"], - "title": "Architecture emulated" - }, - "console_type": { - "enum": ["telnet", "vnc", "spice"], - "title": "Type of console connection for the administration of the appliance" - }, - "boot_priority": { - "enum": ["d", "c", "dc", "cd", "n", "nc", "nd", "cn", "dn"], - "title": "Optional define the disk boot priory. Refer to -boot option in qemu manual for more details." - }, - "kernel_command_line": { - "type": "string", - "title": "Command line parameters send to the kernel" - }, - "kvm": { - "title": "KVM requirements", - "enum": ["require", "allow", "disable"] - }, - "options": { - "type": "string", - "title": "Optional additional qemu command line options" - }, - "cpu_throttling": { - "type": "number", - "minimum": 0, - "maximum": 100, - "title": "Throttle the CPU" - }, - "tpm": { - "type": "boolean", - "title": "Enable the Trusted Platform Module (TPM)" - }, - "uefi": { - "type": "boolean", - "title": "Enable the UEFI boot mode" - }, - "on_close": { - "title": "Action to execute on the VM is closed", - "enum": ["power_off", "shutdown_signal", "save_vm_state"] - }, - "process_priority": { - "title": "Process priority for QEMU", - "enum": ["realtime", - "very high", - "high", - "normal", - "low", - "very low", - "null"] + }, + "required": [ + "name", + "emulator_type", + "emulator_properties" + ] } - }, - "required": [ - "adapter_type", - "adapters", - "ram", - "arch", - "console_type", - "kvm" - ] + } }, "images": { "type": "array", @@ -409,14 +683,19 @@ "type": "string", "title": "Version of the file" }, - "md5sum": { + "checksum": { "type": "string", - "title": "md5sum of the file", - "pattern": "^[a-f0-9]{32}$" + "title": "checksum of the file" + }, + "checksum_type": { + "title": "checksum type", + "enum": [ + "md5" + ] }, "filesize": { - "type": "integer", - "title": "File size in bytes" + "type": "integer", + "title": "File size in bytes" }, "download_url": { "type": "string", @@ -429,15 +708,27 @@ "title": "Optional. Non authenticated url to the image file where you can download the image." }, "compression": { - "enum": ["bzip2", "gzip", "lzma", "xz", "rar", "zip", "7z"], + "enum": [ + "bzip2", + "gzip", + "lzma", + "xz", + "rar", + "zip", + "7z" + ], "title": "Optional, compression type of direct download url image." + }, + "compression_target": { + "type": "string", + "title": "Optional, file name of the image file inside the compressed file." } }, "required": [ - "filename", - "version", - "md5sum", - "filesize" + "filename", + "version", + "md5sum", + "filesize" ] } }, @@ -452,7 +743,50 @@ "type": "string", "title": "Name of the version" }, - "idlepc": {"type": "string", "pattern": "^0x[0-9a-f]{8}"}, + "settings": { + "type": "string", + "title": "Emulator settings to use to run the version" + }, + "installation_instructions": { + "type": "string", + "title": "Optional installation instructions for the version" + }, + "usage": { + "type": "string", + "title": "Optional instructions about using the version" + }, + "default_username": { + "type": "string", + "title": "Default username for the version" + }, + "default_password": { + "type": "string", + "title": "Default password for the version" + }, + "symbol": { + "type": "string", + "title": "An optional symbol for the version" + }, + "first_port_name": { + "type": "string", + "title": "Optional name of the first networking port example: eth0" + }, + "port_name_format": { + "type": "string", + "title": "Optional formating of the networking port example: eth{0}" + }, + "port_segment_size": { + "type": "integer", + "title": "Optional port segment size. A port segment is a block of port. For example Ethernet0/0 Ethernet0/1 is the module 0 with a port segment size of 2" + }, + "linked_clone": { + "type": "boolean", + "title": "False if you don't want to use a single image for all nodes" + }, + "idlepc": { + "type": "string", + "pattern": "^0x[0-9a-f]{8}" + }, "images": { "type": "object", "title": "Images used for this version", @@ -497,22 +831,22 @@ } }, "required": [ - "name" + "name" ] } - } - }, - "required": [ - "appliance_id", - "name", - "category", - "description", - "vendor_name", - "vendor_url", - "product_name", - "registry_version", - "status", - "maintainer", - "maintainer_email" - ] -} + }, + "required": [ + "appliance_id", + "name", + "category", + "description", + "vendor_name", + "vendor_url", + "product_name", + "registry_version", + "status", + "maintainer", + "maintainer_email" + ] + } +} \ No newline at end of file