{ "$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", ""] }, "dynamips_wic": { "enum": ["WIC-1ENET", "WIC-1T", "WIC-2T", ""] } }, "properties": { "appliance_id": { "title": "Appliance ID", "type": "string", "minLength": 36, "maxLength": 36, "pattern": "^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$" }, "name": { "type": "string", "title": "Appliance name" }, "category": { "enum": [ "router", "multilayer_switch", "firewall", "guest" ], "title": "Category of the appliance" }, "description": { "type": "string", "title": "Description of the appliance. Could be a marketing description" }, "vendor_name": { "type": "string", "title": "Name of the vendor" }, "vendor_url": { "type": "string", "format": "uri", "title": "Website of the vendor" }, "vendor_logo_url": { "type": "string", "format": "uri", "title": "Link to the vendor logo (used by the GNS3 marketplace)" }, "documentation_url": { "type": "string", "format": "uri", "title": "An optional documentation for using the appliance on vendor website" }, "product_name": { "type": "string", "title": "Product name" }, "product_url": { "type": "string", "format": "uri", "title": "An optional product url on vendor website" }, "registry_version": { "enum": [1, 2, 3, 4], "title": "Version of the registry compatible with this appliance" }, "status": { "enum": ["stable", "experimental", "broken"], "title": "Document if the appliance is working or not" }, "availability": { "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": { "type": "string", "title": "Maintainer name" }, "maintainer_email": { "type": "string", "format": "email", "title": "Maintainer email" }, "usage": { "type": "string", "title": "How to use 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" }, "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" }, "docker": { "type": "object", "title": "Docker specific options", "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", "igb", "ne2k_pci", "pcnet", "rtl8139", "virtio", "virtio-net-pci", "vmxnet3" ], "title": "Type of network adapter" }, "adapters": { "type": "integer", "title": "Number of adapters" }, "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"], "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" }, "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" ] }, "images": { "type": "array", "title": "Images for this appliance", "items": { "type": "object", "title": "An image file", "properties": { "filename": { "type": "string", "title": "Filename" }, "version": { "type": "string", "title": "Version of the file" }, "md5sum": { "type": "string", "title": "md5sum of the file", "pattern": "^[a-f0-9]{32}$" }, "filesize": { "type": "integer", "title": "File size in bytes" }, "download_url": { "type": "string", "format": "uri", "title": "Download url where you can download the appliance from a browser" }, "direct_download_url": { "type": "string", "format": "uri", "title": "Optional. Non authenticated url to the image file where you can download the image." }, "compression": { "enum": ["bzip2", "gzip", "lzma", "xz", "rar", "zip", "7z"], "title": "Optional, compression type of direct download url image." } }, "required": [ "filename", "version", "md5sum", "filesize" ] } }, "versions": { "type": "array", "title": "Versions of the appliance", "items": { "type": "object", "title": "A version of the appliance", "properties": { "name": { "type": "string", "title": "Name of the version" }, "idlepc": {"type": "string", "pattern": "^0x[0-9a-f]{8}"}, "images": { "type": "object", "title": "Images used for this version", "properties": { "kernel_image": { "type": "string", "title": "Kernel image" }, "initrd": { "type": "string", "title": "Initrd disk image" }, "image": { "type": "string", "title": "OS image" }, "bios_image": { "type": "string", "title": "Bios image" }, "hda_disk_image": { "type": "string", "title": "Hda disk image" }, "hdb_disk_image": { "type": "string", "title": "Hdc disk image" }, "hdc_disk_image": { "type": "string", "title": "Hdd disk image" }, "hdd_disk_image": { "type": "string", "title": "Hdd diskimage" }, "cdrom_image": { "type": "string", "title": "cdrom image" } } } }, "required": [ "name" ] } } }, "required": [ "appliance_id", "name", "category", "description", "vendor_name", "vendor_url", "product_name", "registry_version", "status", "maintainer", "maintainer_email" ] }