Merge remote-tracking branch 'origin/2.1' into 2.1

This commit is contained in:
grossmj committed 2018-08-26 02:44:01 -07:00
commit 4e712280b3
458 files changed
+11443 -10751

No files matched your search

+19
View File
@@ -0,0 +1,19 @@
{
"name": "AAA",
"category": "guest",
"description": "This appliance provides RADIUS and TACACS+ services with preconfigured users and groups.",
"vendor_name": "Ubuntu",
"vendor_url": "https://www.ubuntu.com/",
"product_name": "AAA",
"registry_version": 3,
"status": "stable",
"maintainer": "Andras Dosztal",
"maintainer_email": "developers@gns3.net",
"symbol": "linux_guest.svg",
"usage": "RADIUS users:\n- alice\n- bob\n\nTACACS+ users:\n- gns3 (role: admin)\n- readonly\n\nAll users, as well as the RADIUS/TACACS+ clients have the password 'gns3' set.",
"docker": {
"adapters": 1,
"image": "adosztal/aaa:latest",
"console_type": "telnet"
}
}
+13
View File
@@ -25,6 +25,13 @@
"kvm": "require"
},
"images": [
{
"filename": "asav983.qcow2",
"version": "9.8.3",
"md5sum": "f9cf40b2d555a1bea6d36bc83f06ea33",
"filesize": 199491584,
"download_url": "https://software.cisco.com/download/home/286119613/type/280775065/release/9.8.3"
},
{
"filename": "asav981-5.qcow2",
"version": "9.8.1-5",
@@ -97,6 +104,12 @@
}
],
"versions": [
{
"name": "9.8.3",
"images": {
"hda_disk_image": "asav983.qcow2"
}
},
{
"name": "9.8.1-5",
"images": {
+14 -1
View File
@@ -14,7 +14,7 @@
"usage": "There is no default password and enable password. A default configuration is present.",
"port_name_format": "Gi{port1}",
"qemu": {
"adapter_type": "virtio-net-pci",
"adapter_type": "vmxnet3",
"adapters": 4,
"ram": 3072,
"arch": "x86_64",
@@ -22,6 +22,13 @@
"kvm": "require"
},
"images": [
{
"filename": "csr1000v-universalk9.16.08.01a-serial.qcow2",
"version": "16.8.1a",
"md5sum": "91e2572f20c77606d710223511cd279a",
"filesize": 890044416,
"download_url": "https://software.cisco.com/download/home/284364978/type/282046477"
},
{
"filename": "csr1000v-universalk9.16.07.01-serial.qcow2",
"version": "16.7.1",
@@ -94,6 +101,12 @@
}
],
"versions": [
{
"name": "16.8.1a",
"images": {
"hda_disk_image": "csr1000v-universalk9.16.08.01a-serial.qcow2"
}
},
{
"name": "16.7.1",
"images": {
+1 -1
View File
@@ -18,7 +18,7 @@
"adapter_type": "e1000",
"adapters": 4,
"ram": 16384,
"arch": "i386",
"arch": "x86_64",
"console_type": "telnet",
"kvm": "require",
"options": "-smp 4"
+14
View File
@@ -25,6 +25,13 @@
"kvm": "require"
},
"images": [
{
"filename": "nxosv-final.7.0.3.I7.4.qcow2",
"version": "7.0.3.I7.4",
"md5sum": "1e980c95ca47045ae45ded6e07fabfb8",
"filesize": 985792512,
"download_url": "https://software.cisco.com/download/"
},
{
"filename": "nxosv-final.7.0.3.I7.3.qcow2",
"version": "7.0.3.I7.3",
@@ -78,6 +85,13 @@
}
],
"versions": [
{
"name": "7.0.3.I7.4",
"images": {
"bios_image": "OVMF-20160813.fd",
"hda_disk_image": "nxosv-final.7.0.3.I7.4.qcow2"
}
},
{
"name": "7.0.3.I7.3",
"images": {
+16 -1
View File
@@ -21,6 +21,15 @@
"kvm": "allow"
},
"images": [
{
"filename": "coreos_production_qemu_image.1688.5.3.img",
"version": "1688.5.3",
"md5sum": "f1015a9573fb6e378d2a5e86b4243acd",
"filesize": 867368960,
"download_url": "http://stable.release.core-os.net/amd64-usr/1688.5.3/",
"direct_download_url": "http://stable.release.core-os.net/amd64-usr/1688.5.3/coreos_production_qemu_image.img.bz2",
"compression": "bzip2"
},
{
"filename": "coreos_production_qemu_image.1632.2.1.img",
"version": "1632.2.1",
@@ -158,10 +167,16 @@
}
],
"versions": [
{
"name": "1688.5.3",
"images": {
"hda_disk_image": "coreos_production_qemu_image.1688.5.3.img"
}
},
{
"name": "1632.2.1",
"images": {
"hda_disk_image": "coreos_production_qemu_image.1576.4.0.img"
"hda_disk_image": "coreos_production_qemu_image.1632.2.1.img"
}
},
{
+43 -1
View File
@@ -23,13 +23,37 @@
"kvm": "require"
},
"images": [
{
"filename": "cumulus-linux-3.6.1-vx-amd64.qcow2",
"version": "3.6.1",
"md5sum": "b2145a689ceea668d003a0d2f2faa045",
"filesize": 1068761088,
"download_url": "https://cumulusnetworks.com/cumulus-vx/download/",
"direct_download_url": "https://s3.amazonaws.com/cumulusfiles/CumulusLinux-3.6.1/cumulus-linux-3.6.1-vx-amd64.qcow2"
},
{
"filename": "cumulus-linux-3.6.0-vx-amd64.qcow2",
"version": "3.6.0",
"md5sum": "b5356b6c922f5620d7e6971d44e9be4d",
"filesize": 1105199104,
"download_url": "https://cumulusnetworks.com/cumulus-vx/download/",
"direct_download_url": "http://cumulusfiles.s3.amazonaws.com/cumulus-linux-3.6.0-vx-amd64.qcow2"
},
{
"filename": "cumulus-linux-3.5.3-vx-amd64.qcow2",
"version": "3.5.3",
"md5sum": "4ecbd7341b214fa3c3b27ab11d1df2fb",
"filesize": 1084358656,
"download_url": "https://cumulusnetworks.com/cumulus-vx/download/",
"direct_download_url": "http://cumulusfiles.s3.amazonaws.com/cumulus-linux-3.5.3-vx-amd64.qcow2"
},
{
"filename": "cumulus-linux-3.5.2-vx-amd64.qcow2",
"version": "3.5.2",
"md5sum": "87d1d8b297e5ebd77924669dfb7e4c9f",
"filesize": 996605952,
"download_url": "https://cumulusnetworks.com/cumulus-vx/download/",
"direct_download_url": "http://cumulusfiles.s3.amazonaws.com/cumulus-linux-3.5.0-vx-amd64.qcow2"
"direct_download_url": "http://cumulusfiles.s3.amazonaws.com/cumulus-linux-3.5.3-vx-amd64.qcow2"
},
{
"filename": "cumulus-linux-3.5.0-vx-amd64.qcow2",
@@ -141,6 +165,24 @@
}
],
"versions": [
{
"name": "3.6.1",
"images": {
"hda_disk_image": "cumulus-linux-3.6.1-vx-amd64.qcow2"
}
},
{
"name": "3.6.0",
"images": {
"hda_disk_image": "cumulus-linux-3.6.0-vx-amd64.qcow2"
}
},
{
"name": "3.5.3",
"images": {
"hda_disk_image": "cumulus-linux-3.5.3-vx-amd64.qcow2"
}
},
{
"name": "3.5.2",
"images": {
+19
View File
@@ -0,0 +1,19 @@
{
"name": "DNS",
"category": "guest",
"description": "This appliance provides DNS using dnsmasq with the local domain set to \"lab\".",
"vendor_name": "Ubuntu",
"vendor_url": "https://www.ubuntu.com/",
"product_name": "DNS",
"registry_version": 3,
"status": "stable",
"maintainer": "Andras Dosztal",
"maintainer_email": "developers@gns3.net",
"symbol": "linux_guest.svg",
"usage": "You can add records by adding entries to the /etc/hosts file in the following format:\n%IP_ADDRESS% %HOSTNAME%.lab %HOSTNAME%\n\nExample:\n192.168.123.10 router1.lab router1",
"docker": {
"adapters": 1,
"image": "adosztal/dns:latest",
"console_type": "telnet"
}
}
+28
View File
@@ -27,6 +27,13 @@
"options": "-smp 2 -cpu host"
},
"images": [
{
"filename": "BIGIP-13.1.0.5-0.0.5.qcow2",
"version": "13.1.0 HF5",
"md5sum": "567b70fe36af0f5364883e97e2c08807",
"filesize": 4402446336,
"download_url": "https://downloads.f5.com/esd/serveDownload.jsp?path=/big-ip/big-ip_v13.x/13.1.0/english/13.1.0.5_virtual-edition/&sw=BIG-IP&pro=big-ip_v13.x&ver=13.1.0&container=13.1.0.5_Virtual-Edition&file=BIGIP-13.1.0.5-0.0.5.ALL.qcow2.zip"
},
{
"filename": "BIGIP-13.1.0.2.0.0.6.qcow2",
"version": "13.1.0 HF2",
@@ -55,6 +62,13 @@
"filesize": 3833135104,
"download_url": "https://downloads.f5.com/esd/serveDownload.jsp?path=/big-ip/big-ip_v13.x/13.0.0/english/virtual-edition/&sw=BIG-IP&pro=big-ip_v13.x&ver=13.0.0&container=Virtual-Edition&file=BIGIP-13.0.0.0.0.1645.ALL.qcow2.zip"
},
{
"filename": "BIGIP-12.1.3.4-0.0.2.qcow2",
"version": "12.1.3 HF4",
"md5sum": "b2ec82816480c18af1d45ee833744ee8",
"filesize": 3383164928,
"download_url": "https://downloads.f5.com/esd/serveDownload.jsp?path=/big-ip/big-ip_v12.x/12.1.3/english/12.1.3.4_virtual-edition/&sw=BIG-IP&pro=big-ip_v12.x&ver=12.1.3&container=12.1.3.4_Virtual-Edition&file=BIGIP-12.1.3.4-0.0.2.ALL.qcow2.zip"
},
{
"filename": "BIGIP-12.1.2.1.0.271.LTM.qcow2",
"version": "12.1.2 HF1",
@@ -121,6 +135,13 @@
}
],
"versions": [
{
"name": "13.1.0 HF5",
"images": {
"hda_disk_image": "BIGIP-13.1.0.5-0.0.5.qcow2",
"hdb_disk_image": "empty100G.qcow2"
}
},
{
"name": "13.1.0 HF2",
"images": {
@@ -149,6 +170,13 @@
"hdb_disk_image": "empty100G.qcow2"
}
},
{
"name": "12.1.3 HF4",
"images": {
"hda_disk_image": "BIGIP-12.1.3.4-0.0.2.qcow2",
"hdb_disk_image": "empty100G.qcow2"
}
},
{
"name": "12.1.2 HF1",
"images": {
+61 -19
View File
@@ -28,12 +28,33 @@
},
"images": [
{
"filename": "FAD_KVM-v400-FORTINET.out.kvm-data.qcow2",
"version": "4.x.x",
"filename": "FAD_KVM-FORTINET.out.kvm-data.qcow2",
"version": "ALL",
"md5sum": "b7500835594e62d8acb1c6ec43d597c1",
"filesize": 30998528,
"download_url": "https://support.fortinet.com/Download/FirmwareImages.aspx"
},
{
"filename": "FAD_KVM-V500-build0056-FORTINET.out.kvm-boot.qcow2",
"version": "5.0.1",
"md5sum": "8b3b789fb540b2c30066f66bcbe7f307",
"filesize": 75038720,
"download_url": "https://support.fortinet.com/Download/FirmwareImages.aspx"
},
{
"filename": "FAD_KVM-V500-build0045-FORTINET.out.kvm-boot.qcow2",
"version": "5.0.0",
"md5sum": "d7381b3fb7a4534370ce8983e441d888",
"filesize": 74383360,
"download_url": "https://support.fortinet.com/Download/FirmwareImages.aspx"
},
{
"filename": "FAD_KVM-V400-build0999-FORTINET.out.kvm-boot.qcow2",
"version": "4.8.5",
"md5sum": "d7825b8d0962800c37ffa814a6b2ad45",
"filesize": 73334784,
"download_url": "https://support.fortinet.com/Download/FirmwareImages.aspx"
},
{
"filename": "FAD_KVM-V400-build0989-FORTINET.out.kvm-boot.qcow2",
"version": "4.8.4",
@@ -155,123 +176,144 @@
}
],
"versions": [
{
"name": "5.0.1",
"images": {
"hda_disk_image": "FAD_KVM-V400-build0989-FORTINET.out.kvm-boot.qcow2",
"hdb_disk_image": "FAD_KVM-FORTINET.out.kvm-data.qcow2"
}
},
{
"name": "5.0.0",
"images": {
"hda_disk_image": "FAD_KVM-V400-build0989-FORTINET.out.kvm-boot.qcow2",
"hdb_disk_image": "FAD_KVM-FORTINET.out.kvm-data.qcow2"
}
},
{
"name": "4.8.5",
"images": {
"hda_disk_image": "FAD_KVM-V400-build0999-FORTINET.out.kvm-boot.qcow2",
"hdb_disk_image": "FAD_KVM-FORTINET.out.kvm-data.qcow2"
}
},
{
"name": "4.8.4",
"images": {
"hda_disk_image": "FAD_KVM-V400-build0989-FORTINET.out.kvm-boot.qcow2",
"hdb_disk_image": "FAD_KVM-v400-FORTINET.out.kvm-data.qcow2"
"hdb_disk_image": "FAD_KVM-FORTINET.out.kvm-data.qcow2"
}
},
{
"name": "4.8.3",
"images": {
"hda_disk_image": "FAD_KVM-V400-build0983-FORTINET.out.kvm-boot.qcow2",
"hdb_disk_image": "FAD_KVM-v400-FORTINET.out.kvm-data.qcow2"
"hdb_disk_image": "FAD_KVM-FORTINET.out.kvm-data.qcow2"
}
},
{
"name": "4.8.2",
"images": {
"hda_disk_image": "FAD_KVM-V400-build0977-FORTINET.out.kvm-boot.qcow2",
"hdb_disk_image": "FAD_KVM-v400-FORTINET.out.kvm-data.qcow2"
"hdb_disk_image": "FAD_KVM-FORTINET.out.kvm-data.qcow2"
}
},
{
"name": "4.8.1",
"images": {
"hda_disk_image": "FAD_KVM-V400-build0970-FORTINET.out.kvm-boot.qcow2",
"hdb_disk_image": "FAD_KVM-v400-FORTINET.out.kvm-data.qcow2"
"hdb_disk_image": "FAD_KVM-FORTINET.out.kvm-data.qcow2"
}
},
{
"name": "4.8.0",
"images": {
"hda_disk_image": "FAD_KVM-V400-build0937-FORTINET.out.kvm-boot.qcow2",
"hdb_disk_image": "FAD_KVM-v400-FORTINET.out.kvm-data.qcow2"
"hdb_disk_image": "FAD_KVM-FORTINET.out.kvm-data.qcow2"
}
},
{
"name": "4.7.4",
"images": {
"hda_disk_image": "FAD_KVM-V400-build0858-FORTINET.out.kvm-boot.qcow2",
"hdb_disk_image": "FAD_KVM-v400-FORTINET.out.kvm-data.qcow2"
"hdb_disk_image": "FAD_KVM-FORTINET.out.kvm-data.qcow2"
}
},
{
"name": "4.7.3",
"images": {
"hda_disk_image": "FAD_KVM-V400-build0849-FORTINET.out.kvm-boot.qcow2",
"hdb_disk_image": "FAD_KVM-v400-FORTINET.out.kvm-data.qcow2"
"hdb_disk_image": "FAD_KVM-FORTINET.out.kvm-data.qcow2"
}
},
{
"name": "4.7.2",
"images": {
"hda_disk_image": "FAD_KVM-V400-build0844-FORTINET.out.kvm-boot.qcow2",
"hdb_disk_image": "FAD_KVM-v400-FORTINET.out.kvm-data.qcow2"
"hdb_disk_image": "FAD_KVM-FORTINET.out.kvm-data.qcow2"
}
},
{
"name": "4.7.1",
"images": {
"hda_disk_image": "FAD_KVM-V400-build0832-FORTINET.out.kvm-boot.qcow2",
"hdb_disk_image": "FAD_KVM-v400-FORTINET.out.kvm-data.qcow2"
"hdb_disk_image": "FAD_KVM-FORTINET.out.kvm-data.qcow2"
}
},
{
"name": "4.7.0",
"images": {
"hda_disk_image": "FAD_KVM-V400-build0828-FORTINET.out.kvm-boot.qcow2",
"hdb_disk_image": "FAD_KVM-v400-FORTINET.out.kvm-data.qcow2"
"hdb_disk_image": "FAD_KVM-FORTINET.out.kvm-data.qcow2"
}
},
{
"name": "4.6.2",
"images": {
"hda_disk_image": "FAD_KVM-V400-build0679-FORTINET.out.kvm-boot.qcow2",
"hdb_disk_image": "FAD_KVM-v400-FORTINET.out.kvm-data.qcow2"
"hdb_disk_image": "FAD_KVM-FORTINET.out.kvm-data.qcow2"
}
},
{
"name": "4.6.1",
"images": {
"hda_disk_image": "FAD_KVM-V400-build0677-FORTINET.out.kvm-boot.qcow2",
"hdb_disk_image": "FAD_KVM-v400-FORTINET.out.kvm-data.qcow2"
"hdb_disk_image": "FAD_KVM-FORTINET.out.kvm-data.qcow2"
}
},
{
"name": "4.6.0",
"images": {
"hda_disk_image": "FAD_KVM-V400-build0660-FORTINET.out.kvm-boot.qcow2",
"hdb_disk_image": "FAD_KVM-v400-FORTINET.out.kvm-data.qcow2"
"hdb_disk_image": "FAD_KVM-FORTINET.out.kvm-data.qcow2"
}
},
{
"name": "4.5.3",
"images": {
"hda_disk_image": "FAD_KVM-V400-build0605-FORTINET.out.kvm-boot.qcow2",
"hdb_disk_image": "FAD_KVM-v400-FORTINET.out.kvm-data.qcow2"
"hdb_disk_image": "FAD_KVM-FORTINET.out.kvm-data.qcow2"
}
},
{
"name": "4.5.2",
"images": {
"hda_disk_image": "FAD_KVM-v400-build0597-FORTINET.out.kvm-boot.qcow2",
"hdb_disk_image": "FAD_KVM-v400-FORTINET.out.kvm-data.qcow2"
"hdb_disk_image": "FAD_KVM-FORTINET.out.kvm-data.qcow2"
}
},
{
"name": "4.5.1",
"images": {
"hda_disk_image": "FAD_KVM-v400-build0581-FORTINET.out.kvm-boot.qcow2",
"hdb_disk_image": "FAD_KVM-v400-FORTINET.out.kvm-data.qcow2"
"hdb_disk_image": "FAD_KVM-FORTINET.out.kvm-data.qcow2"
}
},
{
"name": "4.5.0",
"images": {
"hda_disk_image": "FAD_KVM-v400-build0560-FORTINET.out.kvm-boot.qcow2",
"hdb_disk_image": "FAD_KVM-v400-FORTINET.out.kvm-data.qcow2"
"hdb_disk_image": "FAD_KVM-FORTINET.out.kvm-data.qcow2"
}
}
]
+28
View File
@@ -26,6 +26,20 @@
"kvm": "allow"
},
"images": [
{
"filename": "FAZ_VM64_KVM-v6-build0092-FORTINET.out.kvm.qcow2",
"version": "6.0.0",
"md5sum": "e870087db55a095c75ddcafe73e1ea27",
"filesize": 117940224,
"download_url": "https://support.fortinet.com/Download/FirmwareImages.aspx"
},
{
"filename": "FAZ_VM64_KVM-v5-build1631-FORTINET.out.kvm.qcow2",
"version": "5.6.2",
"md5sum": "c7f1cf26051b50b86e7e59b99e36756f",
"filesize": 105816064,
"download_url": "https://support.fortinet.com/Download/FirmwareImages.aspx"
},
{
"filename": "FAZ_VM64_KVM-v5-build1619-FORTINET.out.kvm.qcow2",
"version": "5.6.1",
@@ -113,6 +127,20 @@
}
],
"versions": [
{
"name": "6.0.0",
"images": {
"hda_disk_image": "FAZ_VM64_KVM-v6-build0092-FORTINET.out.kvm.qcow2",
"hdb_disk_image": "empty30G.qcow2"
}
},
{
"name": "5.6.2",
"images": {
"hda_disk_image": "FAZ_VM64_KVM-v5-build1631-FORTINET.out.kvm.qcow2",
"hdb_disk_image": "empty30G.qcow2"
}
},
{
"name": "5.6.1",
"images": {
@@ -26,6 +26,20 @@
"kvm": "allow"
},
"images": [
{
"filename": "FAC_VM_KVM-v5-build0163-FORTINET.out.kvm.qcow2",
"version": "5.2.2",
"md5sum": "e746b3c6c29b0356ec6b90ed14d4b098",
"filesize": 71565312,
"download_url": "https://support.fortinet.com/Download/FirmwareImages.aspx"
},
{
"filename": "FAC_VM_KVM-v500-build0161-FORTINET.out.kvm.qcow2",
"version": "5.2.1",
"md5sum": "c46ad2de4a20296ebd35b3fcc2d81a1d",
"filesize": 72536064,
"download_url": "https://support.fortinet.com/Download/FirmwareImages.aspx"
},
{
"filename": "FAC_VM_KVM-v5-build0155-FORTINET.out.kvm.qcow2",
"version": "5.2.0",
@@ -70,6 +84,20 @@
}
],
"versions": [
{
"name": "5.2.2",
"images": {
"hda_disk_image": "FAC_VM_KVM-v5-build0163-FORTINET.out.kvm.qcow2",
"hdb_disk_image": "FAC_VM_KVM-v500-DATADRIVE.qcow2"
}
},
{
"name": "5.2.1",
"images": {
"hda_disk_image": "FAC_VM_KVM-v500-build0161-FORTINET.out.kvm.qcow2",
"hdb_disk_image": "FAC_VM_KVM-v500-DATADRIVE.qcow2"
}
},
{
"name": "5.2.0",
"images": {
+14
View File
@@ -26,6 +26,13 @@
"kvm": "require"
},
"images": [
{
"filename": "FCHKVM-v400-build0222-FORTINET.out.kvm.qcow2",
"version": "4.2.7",
"md5sum": "d77790e414f4e2b31c756906a720e681",
"filesize": 27631616,
"download_url": "https://support.fortinet.com/Download/FirmwareImages.aspx"
},
{
"filename": "FCHKVM-v400-build0216-FORTINET.out.kvm.qcow2",
"version": "4.2.6",
@@ -99,6 +106,13 @@
}
],
"versions": [
{
"name": "4.2.7",
"images": {
"hda_disk_image": "FCHKVM-v400-build0222-FORTINET.out.kvm.qcow2",
"hdb_disk_image": "empty100G.qcow2"
}
},
{
"name": "4.2.6",
"images": {
+28
View File
@@ -26,6 +26,20 @@
"kvm": "allow"
},
"images": [
{
"filename": "FGT_VM64_KVM-v6-build0076-FORTINET.out.kvm.qcow2",
"version": "6.0.0",
"md5sum": "161728b413e097954bd640ade89dfeb1",
"filesize": 46104576,
"download_url": "https://support.fortinet.com/Download/FirmwareImages.aspx"
},
{
"filename": "FGT_VM64_KVM-v5-build1575-FORTINET.out.kvm.qcow2",
"version": "5.6.4",
"md5sum": "c312ea8ec1afffb73858fb1b15c095ef",
"filesize": 41594880,
"download_url": "https://support.fortinet.com/Download/FirmwareImages.aspx"
},
{
"filename": "FGT_VM64_KVM-v5-build1547-FORTINET.out.kvm.qcow2",
"version": "5.6.3",
@@ -183,6 +197,20 @@
}
],
"versions": [
{
"name": "6.0.0",
"images": {
"hda_disk_image": "FGT_VM64_KVM-v6-build0076-FORTINET.out.kvm.qcow2",
"hdb_disk_image": "empty30G.qcow2"
}
},
{
"name": "5.6.4",
"images": {
"hda_disk_image": "FGT_VM64_KVM-v5-build1575-FORTINET.out.kvm.qcow2",
"hdb_disk_image": "empty30G.qcow2"
}
},
{
"name": "5.6.3",
"images": {
+42
View File
@@ -26,6 +26,20 @@
"kvm": "allow"
},
"images": [
{
"filename": "FML_VMKV-64-v54-build0719-FORTINET.out.kvm.qcow2",
"version": "5.4.5",
"md5sum": "e2f202efd28039a6f1f4ebb7ee69e214",
"filesize": 97255424,
"download_url": "https://support.fortinet.com/Download/FirmwareImages.aspx"
},
{
"filename": "FML_VMKV-64-v54-build0714-FORTINET.out.kvm.qcow2",
"version": "5.4.4",
"md5sum": "6a3155d9cee6af3ecb016e59c0a0765f",
"filesize": 93519872,
"download_url": "https://support.fortinet.com/Download/FirmwareImages.aspx"
},
{
"filename": "FML_VMKV-64-v54-build0712-FORTINET.out.kvm.qcow2",
"version": "5.4.3",
@@ -54,6 +68,13 @@
"filesize": 101253120,
"download_url": "https://support.fortinet.com/Download/FirmwareImages.aspx"
},
{
"filename": "FML_VMKV-64-v53-build0653-FORTINET.out.kvm.qcow2",
"version": "5.3.12",
"md5sum": "aed4dcb17de047860736d8742362a754",
"filesize": 89980928,
"download_url": "https://support.fortinet.com/Download/FirmwareImages.aspx"
},
{
"filename": "FML_VMKV-64-v53-build0648-FORTINET.out.kvm.qcow2",
"version": "5.3.11",
@@ -134,6 +155,20 @@
}
],
"versions": [
{
"name": "5.4.5",
"images": {
"hda_disk_image": "FML_VMKV-64-v54-build0719-FORTINET.out.kvm.qcow2",
"hdb_disk_image": "empty30G.qcow2"
}
},
{
"name": "5.4.4",
"images": {
"hda_disk_image": "FML_VMKV-64-v54-build0714-FORTINET.out.kvm.qcow2",
"hdb_disk_image": "empty30G.qcow2"
}
},
{
"name": "5.4.3",
"images": {
@@ -162,6 +197,13 @@
"hdb_disk_image": "empty30G.qcow2"
}
},
{
"name": "5.3.12",
"images": {
"hda_disk_image": "FML_VMKV-64-v53-build0653-FORTINET.out.kvm.qcow2",
"hdb_disk_image": "empty30G.qcow2"
}
},
{
"name": "5.3.11",
"images": {
+28
View File
@@ -26,6 +26,20 @@
"kvm": "allow"
},
"images": [
{
"filename": "FMG_VM64_KVM-v6-build0092-FORTINET.out.kvm.qcow2",
"version": "6.0.0",
"md5sum": "73bfe1bc70124521a524d857646b9c2e",
"filesize": 119066624,
"download_url": "https://support.fortinet.com/Download/FirmwareImages.aspx"
},
{
"filename": "FMG_VM64_KVM-v5-build1631-FORTINET.out.kvm.qcow2",
"version": "5.6.2",
"md5sum": "c81cc247e8eb03249b475fe0e847653e",
"filesize": 106946560,
"download_url": "https://support.fortinet.com/Download/FirmwareImages.aspx"
},
{
"filename": "FMG_VM64_KVM-v5-build1619-FORTINET.out.kvm.qcow2",
"version": "5.6.1",
@@ -113,6 +127,20 @@
}
],
"versions": [
{
"name": "6.0.0",
"images": {
"hda_disk_image": "FMG_VM64_KVM-v6-build0092-FORTINET.out.kvm.qcow2",
"hdb_disk_image": "empty30G.qcow2"
}
},
{
"name": "5.6.2",
"images": {
"hda_disk_image": "FMG_VM64_KVM-v5-build1631-FORTINET.out.kvm.qcow2",
"hdb_disk_image": "empty30G.qcow2"
}
},
{
"name": "5.6.1",
"images": {
+14
View File
@@ -27,6 +27,13 @@
"options": "-smp 2"
},
"images": [
{
"filename": "FSA_KVM-v200-build0340-FORTINET.out.kvm.qcow2",
"version": "2.5.2",
"md5sum": "527f3225bd3fbd4ba23779cc1987d2ed",
"filesize": 117834240,
"download_url": "https://support.fortinet.com/Download/FirmwareImages.aspx"
},
{
"filename": "FSA_KVM-v200-build0329-FORTINET.out.kvm.qcow2",
"version": "2.5.1",
@@ -78,6 +85,13 @@
}
],
"versions": [
{
"name": "2.5.2",
"images": {
"hda_disk_image": "FSA_KVM-v200-build0340-FORTINET.out.kvm.qcow2",
"hdb_disk_image": "FSA_v200-datadrive.qcow2"
}
},
{
"name": "2.5.1",
"images": {
@@ -28,6 +28,27 @@
"options": "-smp 4"
},
"images": [
{
"filename": "FortiSIEM-VA-5.0.0.1201.qcow2",
"version": "5.0.0",
"md5sum": "1f2f0b1d84e89495fc5b5ca722cb5710",
"filesize": 10029432832,
"download_url": "https://images-cdn.fortisiem.fortinet.com/VirtualAppliances/latestrelease.html"
},
{
"filename": "FortiSIEM-VA-5.0.0.1201-1.qcow2",
"version": "5.0.0",
"md5sum": "88e96259f44a82b7c545b82925880513",
"filesize": 46858240,
"download_url": "https://images-cdn.fortisiem.fortinet.com/VirtualAppliances/latestrelease.html"
},
{
"filename": "FortiSIEM-VA-5.0.0.1201-2.qcow2",
"version": "5.0.0",
"md5sum": "58d61498e1adc1df062fc12113d42d86",
"filesize": 46858240,
"download_url": "https://images-cdn.fortisiem.fortinet.com/VirtualAppliances/latestrelease.html"
},
{
"filename": "FortiSIEM-VA-KVM-4.10.0.1102.qcow2",
"version": "4.10.0",
@@ -72,6 +93,14 @@
}
],
"versions": [
{
"name": "5.0.0",
"images": {
"hda_disk_image": "FortiSIEM-VA-5.0.0.1201.qcow2",
"hdb_disk_image": "FortiSIEM-VA-5.0.0.1201-1.qcow2",
"hdc_disk_image": "FortiSIEM-VA-5.0.0.1201-2.qcow2"
}
},
{
"name": "4.10.0",
"images": {
+51
View File
@@ -26,6 +26,27 @@
"kvm": "allow"
},
"images": [
{
"filename": "FWB_KVM-v500-build1618-FORTINET.out.kvm.qcow2",
"version": "5.9.1",
"md5sum": "12bafff7bbfbf9a49554c6378f0e1a46",
"filesize": 132579840,
"download_url": "https://support.fortinet.com/Download/FirmwareImages.aspx"
},
{
"filename": "FWB_KVM-v500-build1609-FORTINET.out.kvm.qcow2",
"version": "5.9.0",
"md5sum": "a957ae3d60eabc685fcda015c31a5d01",
"filesize": 140837376,
"download_url": "https://support.fortinet.com/Download/FirmwareImages.aspx"
},
{
"filename": "FWB_KVM-v500-build1413-FORTINET.out.kvm.qcow2",
"version": "5.8.6",
"md5sum": "910fefe796daa5c963b0bde121996306",
"filesize": 105775616,
"download_url": "https://support.fortinet.com/Download/FirmwareImages.aspx"
},
{
"filename": "FWB_KVM-v500-build0739-FORTINET.out.kvm-log.qcow2",
"version": "5.5.4",
@@ -60,9 +81,39 @@
"md5sum": "0a613191948d3618ae16cd9f11988448",
"filesize": 87162880,
"download_url": "https://support.fortinet.com/Download/FirmwareImages.aspx"
},
{
"filename": "empty30G.qcow2",
"version": "1.0",
"md5sum": "3411a599e822f2ac6be560a26405821a",
"filesize": 197120,
"download_url": "https://sourceforge.net/projects/gns-3/files/Empty%20Qemu%20disk/",
"direct_download_url": "http://sourceforge.net/projects/gns-3/files/Empty%20Qemu%20disk/empty30G.qcow2/download"
}
],
"versions": [
{
"name": "5.9.1",
"images": {
"hda_disk_image": "FWB_KVM-v500-build1618-FORTINET.out.kvm.qcow2",
"hdb_disk_image": "empty30G.qcow2"
}
},
{
"name": "5.9.0",
"images": {
"hda_disk_image": "FWB_KVM-v500-build1609-FORTINET.out.kvm.qcow2",
"hdb_disk_image": "empty30G.qcow2"
}
},
{
"name": "5.8.6",
"images": {
"hda_disk_image": "FWB_KVM-v500-build1413-FORTINET.out.kvm.qcow2",
"hdb_disk_image": "empty30G.qcow2"
}
},
{
"name": "5.5.4",
"images": {
+16
View File
@@ -24,6 +24,14 @@
"kvm": "require"
},
"images": [
{
"filename": "FreeNAS-11.1-U4.iso",
"version": "11.1 U1",
"md5sum": "d75623e5671dbc82f32f4b4f8d46092f",
"filesize": 633833472,
"download_url": "http://www.freenas.org/download/",
"direct_download_url": "https://download.freenas.org/11/11.1-U4/x64/FreeNAS-11.1-U4.iso"
},
{
"filename": "FreeNAS-11.1-U1.iso",
"version": "11.1 U1",
@@ -66,6 +74,14 @@
}
],
"versions": [
{
"name": "11.1 U4",
"images": {
"hda_disk_image": "empty30G.qcow2",
"hdb_disk_image": "empty30G.qcow2",
"cdrom_image": "FreeNAS-11.1-U4.iso"
}
},
{
"name": "11.1 U1",
"images": {
+41
View File
@@ -0,0 +1,41 @@
{
"name": "FRR",
"category": "router",
"description": "FRRouting (FRR) is an IP routing protocol suite for Linux and Unix platforms which includes protocol daemons for BGP, IS-IS, LDP, OSPF, PIM, and RIP.\n\nFRR’s seamless integration with the native Linux/Unix IP networking stacks makes it applicable to a wide variety of use cases including connecting hosts/VMs/containers to the network, advertising network services, LAN switching and routing, Internet access routers, and Internet peering.\n\nThis is an unofficial VM or FRR.",
"vendor_name": "FRRouting Project",
"vendor_url": "https://frrouting.org",
"product_name": "FRR",
"registry_version": 3,
"status": "stable",
"maintainer": "Andras Dosztal",
"maintainer_email": "developers@gns3.net",
"usage": "Credentials: frr / frr\nIf you exit from the router CLI, you can get back by typing 'vtysh' to the console.",
"port_name_format": "ens{port3}",
"qemu": {
"adapter_type": "virtio-net-pci",
"adapters": 8,
"ram": 256,
"arch": "x86_64",
"console_type": "telnet",
"kvm": "require"
},
"images": [
{
"filename": "frr4.0-vm0.1.qcow2",
"version": "FRR4.0 - VM0.1",
"md5sum": "e1dc58cbb2b71c58051538c07d412493",
"filesize": 1670643712,
"download_url": "https://sourceforge.net/projects/frr/files/",
"direct_download_url": "https://sourceforge.net/projects/frr/files/frr4.0-vm0.1.qcow2.bz2/download",
"compression": "bzip2"
}
],
"versions": [
{
"name": "FRR4.0 - VM0.1",
"images": {
"hda_disk_image": "frr4.0-vm0.1.qcow2"
}
}
]
}
+11 -10
View File
@@ -4,7 +4,7 @@
"description": "The HP VSR1000 Virtual Services Router Series is a software application, running on a server, which provides functionality similar to that of a physical router: robust routing between networked devices using a number of popular routing protocols. It also delivers the critical network services associated with today's enterprise routers such as VPN gateway, firewall and other security and traffic management functions.\n\nThe virtual services router (VSR) application runs on a hypervqcor on the server, and supports VMware vSphere and Linux KVM hypervqcors. From one to eight virtual CPUs are supported, depending on license.\n\nBecause the VSR1000 Series application runs the same HP Comware version 7 operating system as HP switches and routers, it enables significant operational savings. And being virtual, additional agility and ease of deployment is realized, as resources on the VSR can be dynamically allocated and upgraded upon demand as performance requirements grow.\n\nA variety of deployment models are supported including enterprise branch CPE routing, and cloud offload for small to medium workloads.",
"vendor_name": "HPE",
"vendor_url": "http://www.hpe.com",
"documentation_url": "http://h20195.www2.hpe.com/v2/default.aspx?cc=us&lc=en&oid=5443878",
"documentation_url": "https://support.hpe.com/hpesc/public/home/documentHome?document_type=135&sp4ts.oid=5195141",
"product_name": "VSR1001",
"product_url": "https://www.hpe.com/us/en/product-catalog/networking/networking-routers/pip.hpe-flexnetwork-vsr1000-virtual-services-router-series.5443163.html",
"registry_version": 3,
@@ -20,7 +20,8 @@
"arch": "x86_64",
"console_type": "vnc",
"boot_priority": "c",
"kvm": "require"
"kvm": "require",
"options": "-machine type=pc-1.0"
},
"images": [
{
@@ -28,56 +29,56 @@
"version": "7.10.R0327L01",
"md5sum": "907de5140a4a029afe1c517cfc27ecde",
"filesize": 138739712,
"download_url": "https://h10145.www1.hp.com/Downloads/DownloadSoftware.aspx?SoftwareReleaseUId=22702&ProductNumber=JG811AAE&lang=en&cc=us&prodSeriesId=5443163&SaidNumber="
"download_url": "https://h10145.www1.hpe.com/Downloads/DownloadSoftware.aspx?SoftwareReleaseUId=22702&ProductNumber=JG811AAE&lang=en&cc=us&prodSeriesId=5443163&SaidNumber="
},
{
"filename": "VSR1000_HPE-CMW710-R0326-X64.qco",
"version": "7.10.R0326",
"md5sum": "4153d638bfa72ca72a957ea8682ad0e2",
"filesize": 138412032,
"download_url": "https://h10145.www1.hp.com/Downloads/SoftwareReleases.aspx?ProductNumber=JG811AAE&lang=en&cc=us&prodSeriesId=5443163&SoftwareReleaseUId=11832&SerialNumber=&PurchaseDate="
"download_url": "https://h10145.www1.hpe.com/Downloads/DownloadSoftware.aspx?SoftwareReleaseUId=21985&ProductNumber=JG811AAE&lang=en&cc=us&prodSeriesId=5443163&SaidNumber="
},
{
"filename": "VSR1000_HPE-CMW710-E0325-X64.qco",
"version": "7.10.E0325",
"md5sum": "a6731f3af86bee9b209a8b342be6bf75",
"filesize": 111738880,
"download_url": "https://h10145.www1.hp.com/Downloads/SoftwareReleases.aspx?ProductNumber=JG811AAE&lang=en&cc=us&prodSeriesId=5443163&SoftwareReleaseUId=11832&SerialNumber=&PurchaseDate="
"download_url": "https://h10145.www1.hpe.com/Downloads/DownloadSoftware.aspx?SoftwareReleaseUId=20278&ProductNumber=JG811AAE&lang=en&cc=us&prodSeriesId=5443163&SaidNumber="
},
{
"filename": "VSR1000_HPE-CMW710-E0518-X64.qco",
"version": "7.10.E0518",
"md5sum": "4991436442ae706df8041c69778a48df",
"filesize": 201588736,
"download_url": "https://h10145.www1.hp.com/Downloads/SoftwareReleases.aspx?ProductNumber=JG811AAE&lang=en&cc=us&prodSeriesId=5443163&SoftwareReleaseUId=11832&SerialNumber=&PurchaseDate="
"download_url": "https://h10145.www1.hpe.com/Downloads/DownloadSoftware.aspx?SoftwareReleaseUId=21929&ProductNumber=JG811AAE&lang=en&cc=us&prodSeriesId=5443163&SaidNumber="
},
{
"filename": "VSR1000_HPE-CMW710-E0324-X64.qco",
"version": "7.10.E0324",
"md5sum": "7a0ff32281284c042591c6181426effd",
"filesize": 111411200,
"download_url": "https://h10145.www1.hp.com/Downloads/SoftwareReleases.aspx?ProductNumber=JG811AAE&lang=en&cc=us&prodSeriesId=5443163&SoftwareReleaseUId=11832&SerialNumber=&PurchaseDate="
"download_url": "https://h10145.www1.hpe.com/Downloads/DownloadSoftware.aspx?SoftwareReleaseUId=18977&ProductNumber=JG811AAE&lang=en&cc=us&prodSeriesId=5443163&SaidNumber="
},
{
"filename": "VSR1000_HPE-CMW710-E0322P01-X64.qco",
"version": "7.10.E0322P01",
"md5sum": "0aa2dbe5910fa64eb8c623e083b21a5e",
"filesize": 110428160,
"download_url": "https://h10145.www1.hp.com/Downloads/SoftwareReleases.aspx?ProductNumber=JG811AAE&lang=en&cc=us&prodSeriesId=5443163&SoftwareReleaseUId=11832&SerialNumber=&PurchaseDate="
"download_url": "https://h10145.www1.hpe.com/Downloads/DownloadSoftware.aspx?SoftwareReleaseUId=18976&ProductNumber=JG811AAE&lang=en&cc=us&prodSeriesId=5443163&SaidNumber="
},
{
"filename": "VSR1000_HPE-CMW710-E0322-X64.qco",
"version": "7.10.E0322",
"md5sum": "05e0dab6b7aa489f627448b4d79b1f50",
"filesize": 113770496,
"download_url": "https://h10145.www1.hp.com/Downloads/SoftwareReleases.aspx?ProductNumber=JG811AAE&lang=en&cc=us&prodSeriesId=5443163&SoftwareReleaseUId=11832&SerialNumber=&PurchaseDate="
"download_url": "https://h10145.www1.hpe.com/Downloads/DownloadSoftware.aspx?SoftwareReleaseUId=18975&ProductNumber=JG811AAE&lang=en&cc=us&prodSeriesId=5443163&SaidNumber="
},
{
"filename": "VSR1000_HPE-CMW710-E0321P01-X64.qco",
"version": "7.10.E0321P01",
"md5sum": "26d4375fafeedc81f298f29f593de252",
"filesize": 113639424,
"download_url": "https://h10145.www1.hp.com/Downloads/SoftwareReleases.aspx?ProductNumber=JG811AAE&lang=en&cc=us&prodSeriesId=5443163&SoftwareReleaseUId=11832&SerialNumber=&PurchaseDate="
"download_url": "https://h10145.www1.hpe.com/Downloads/DownloadSoftware.aspx?SoftwareReleaseUId=16838&ProductNumber=JG811AAE&lang=en&cc=us&prodSeriesId=5443163&SaidNumber="
}
],
"versions": [
+30
View File
@@ -24,6 +24,24 @@
"kvm": "allow"
},
"images": [
{
"filename": "ipfire-2.19.1gb-ext4-scon.x86_64-full-core119.img",
"version": "2.19.119",
"md5sum": "b57be976ff54569b71eae4ee66634b0d",
"filesize": 1063256064,
"download_url": "http://www.ipfire.org/download",
"direct_download_url": "https://downloads.ipfire.org/releases/ipfire-2.x/2.19-core119/ipfire-2.19.1gb-ext4-scon.x86_64-full-core119.img.gz",
"compression": "gzip"
},
{
"filename": "ipfire-2.19.1gb-ext4-scon.x86_64-full-core118.img",
"version": "2.19.118",
"md5sum": "4dbeb474848d87c16c20ff4e31feb204",
"filesize": 1063256064,
"download_url": "http://www.ipfire.org/download",
"direct_download_url": "https://downloads.ipfire.org/releases/ipfire-2.x/2.19-core118/ipfire-2.19.1gb-ext4-scon.x86_64-full-core118.img.gz",
"compression": "gzip"
},
{
"filename": "ipfire-2.19.1gb-ext4-scon.x86_64-full-core117.img",
"version": "2.19.117",
@@ -62,6 +80,18 @@
}
],
"versions": [
{
"name": "2.19.119",
"images": {
"hda_disk_image": "ipfire-2.19.1gb-ext4-scon.x86_64-full-core119.img"
}
},
{
"name": "2.19.118",
"images": {
"hda_disk_image": "ipfire-2.19.1gb-ext4-scon.x86_64-full-core118.img"
}
},
{
"name": "2.19.117",
"images": {
+54 -2
View File
@@ -18,13 +18,31 @@
"qemu": {
"adapter_type": "e1000",
"adapters": 2,
"ram": 2048,
"ram": 1024,
"arch": "x86_64",
"console_type": "telnet",
"kvm": "require",
"options": "-nographic -enable-kvm"
},
"images": [
{
"filename": "junos-vmx-x86-64-17.4R1.16.qcow2",
"version": "17.4R1.16-KVM",
"md5sum": "85239193e852d643dfd9d5c257240bdf",
"filesize": 1325400064
},
{
"filename": "vmxhdd-17.4R1.16.img",
"version": "17.4R1.16-KVM",
"md5sum": "69e9821ebc59367527336d8bcecd171c",
"filesize": 108986368
},
{
"filename": "metadata-usb-re-17.4R1.16.img",
"version": "17.4R1.16-KVM",
"md5sum": "a5b125822b798c7167c35966ea00229a",
"filesize": 16777216
},
{
"filename": "vcp_17.1R1.8-disk1.vmdk",
"version": "17.1R1.8-ESXi",
@@ -261,9 +279,35 @@
"md5sum": "af48f7e03f94ffcfeecd15a59a4f1567",
"filesize": 16777216,
"download_url": "http://www.juniper.net/us/en/products-services/routing/mx-series/vmx/"
},
{
"filename": "junos-vmx-x86-64-15.1F6.9.qcow2",
"version": "15.1F6.9-KVM",
"md5sum": "595f532b95d6d98590d0375a3d6d14b6",
"filesize": 994181120
},
{
"filename": "vmxhdd-15.1F6.9.img",
"version": "15.1F6.9-KVM",
"md5sum": "bae35d0bb72946d1e91ff9c5e7ddbf86",
"filesize": 108986368
},
{
"filename": "metadata-usb-re-15.1F6.9.img",
"version": "15.1F6.9-KVM",
"md5sum": "15238c3dbc987d1a641c919efe2731c5",
"filesize": 16777216
}
],
"versions": [
{
"name": "17.4R1.16-KVM",
"images": {
"hda_disk_image": "junos-vmx-x86-64-17.4R1.16.qcow2",
"hdb_disk_image": "vmxhdd-17.4R1.16.img",
"hdc_disk_image": "metadata-usb-re-17.4R1.16.img"
}
},
{
"name": "17.1R1.8-ESXi",
"images": {
@@ -367,6 +411,14 @@
"hdb_disk_image": "vmxhdd-15.1.img",
"hdc_disk_image": "metadata-usb-15.1.img"
}
}
},
{
"name": "15.1F6.9",
"images": {
"hda_disk_image": "junos-vmx-x86-64-15.1F6.9.qcow2",
"hdb_disk_image": "vmxhdd-15.1F6.9.img",
"hdc_disk_image": "metadata-usb-re-15.1F6.9.img"
}
}
]
}
+30 -4
View File
@@ -25,13 +25,20 @@
"options": "-nographic -enable-kvm -smp cpus=3"
},
"images": [
{
"filename": "vFPC-20171213.img",
"version": "17.4R1.16-KVM",
"md5sum": "848a6256da7296e8fede368a258c68e4",
"filesize": 2313158656,
"download_url": "http://www.juniper.net/us/en/products-services/routing/mx-series/vmx/"
},
{
"filename": "vfpc_17.1R1.8-disk1.vmdk",
"version": "17.1R1.8-ESXi",
"md5sum": "169dd487b8547d58b12b2918a5667360",
"filesize": 102820352,
"download_url": "http://www.juniper.net/us/en/products-services/routing/mx-series/vmx/"
},
},
{
"filename": "vFPC-20170216.img",
"version": "17.1R1.8-KVM",
@@ -108,17 +115,30 @@
"md5sum": "5ccf252002184a21413cad23fd239c3f",
"filesize": 2313158656,
"download_url": "http://www.juniper.net/us/en/products-services/routing/mx-series/vmx/"
},
},
{
"filename": "vFPC-15.1F6.9.img",
"version": "15.1F6.9-KVM",
"md5sum": "7328501fdfa9b160955bc136664f1e86",
"filesize": 2313158656,
"download_url": "http://www.juniper.net/us/en/products-services/routing/mx-series/vmx/"
},
{
"filename": "vFPC-20151203.img",
"version": "15.1F4.15",
"md5sum": "b3faa91b4d20836a9a6dd6bad2629dd1",
"filesize": 2313158656,
"download_url": "http://www.juniper.net/us/en/products-services/routing/mx-series/vmx/"
}
}
],
"versions": [
{
"name": "17.4R1.16-KVM",
"images": {
"hda_disk_image": "vFPC-20171213.img"
}
},
{
"name": "17.1R1.8-ESXi",
"images": {
@@ -191,12 +211,18 @@
"hda_disk_image": "vFPC-20160617.img"
}
},
{
"name": "15.1F6.9-KVM",
"images": {
"hda_disk_image": "vFPC-15.1F6.9.img"
}
},
{
"name": "15.1F4.15",
"images": {
"hda_disk_image": "vFPC-20151203.img"
}
}
]
}
@@ -24,6 +24,13 @@
"options": "-nographic"
},
"images": [
{
"filename": "cosim_20180212.qcow2",
"version": "17.4R1",
"md5sum": "0372e9c1b7df3608099186ab8cbbf2ad",
"filesize": 1911291904,
"download_url": "https://www.juniper.net/us/en/dm/free-vqfx-trial/"
},
{
"filename": "vqfx10k-pfe-20160609-2.vmdk",
"version": "15.1X53-D60",
@@ -33,6 +40,12 @@
}
],
"versions": [
{
"name": "17.4R1",
"images": {
"hda_disk_image": "cosim_20180212.qcow2"
}
},
{
"name": "15.1X53-D60",
"images": {
@@ -24,6 +24,13 @@
"options": "-nographic -smp 2"
},
"images": [
{
"filename": "jinstall-vqfx-10-f-17.4R1.16.img",
"version": "17.4R1",
"md5sum": "dd83313b0f5beaf68488ed3d5e1e5240",
"filesize": 553910272,
"download_url": "https://www.juniper.net/us/en/dm/free-vqfx-trial/"
},
{
"filename": "vqfx10k-re-15.1X53-D60.vmdk",
"version": "15.1X53-D60",
@@ -33,6 +40,12 @@
}
],
"versions": [
{
"name": "17.4R1",
"images": {
"hda_disk_image": "jinstall-vqfx-10-f-17.4R1.16.img"
}
},
{
"name": "15.1X53-D60",
"images": {
+39
View File
@@ -24,6 +24,13 @@
"options": "-smp 2"
},
"images": [
{
"filename": "junos-media-vsrx-vmdisk-18.1R1.9.qcow2",
"version": "18.1R1",
"md5sum": "4e9393142afc675d5d3d03c5071e70ce",
"filesize": 4418961408,
"download_url": "https://www.juniper.net/us/en/dm/free-vsrx-trial/"
},
{
"filename": "media-vsrx-vmdisk-17.4R1.16.qcow2",
"version": "17.4R1",
@@ -31,6 +38,13 @@
"filesize": 3965386752,
"download_url": "https://www.juniper.net/us/en/dm/free-vsrx-trial/"
},
{
"filename": "media-vsrx-vmdisk-17.3R2.10.qcow2",
"version": "17.3R2",
"md5sum": "8f2adfb0515913e0c7db32628a5deb3e",
"filesize": 3784572928,
"download_url": "https://www.juniper.net/us/en/dm/free-vsrx-trial/"
},
{
"filename": "media-vsrx-vmdisk-17.3R1.10.qcow2",
"version": "17.3R1",
@@ -38,6 +52,13 @@
"filesize": 3782541312,
"download_url": "https://www.juniper.net/us/en/dm/free-vsrx-trial/"
},
{
"filename": "media-vsrx-vmdisk-15.1X49-D130.6.qcow2",
"version": "15.1X49-D130",
"md5sum": "8ad03f4067b3fe5d2ed378733a5e8541",
"filesize": 3300917248,
"download_url": "https://www.juniper.net/us/en/dm/free-vsrx-trial/"
},
{
"filename": "media-vsrx-vmdisk-15.1X49-D120.3.qcow2",
"version": "15.1X49-D120",
@@ -124,18 +145,36 @@
}
],
"versions": [
{
"name": "18.1R1",
"images": {
"hda_disk_image": "junos-media-vsrx-vmdisk-18.1R1.9.qcow2"
}
},
{
"name": "17.4R1",
"images": {
"hda_disk_image": "media-vsrx-vmdisk-17.4R1.16.qcow2"
}
},
{
"name": "17.3R2",
"images": {
"hda_disk_image": "media-vsrx-vmdisk-17.3R2.10.qcow2"
}
},
{
"name": "17.3R1",
"images": {
"hda_disk_image": "media-vsrx-vmdisk-17.3R1.10.qcow2"
}
},
{
"name": "15.1X49-D130",
"images": {
"hda_disk_image": "media-vsrx-vmdisk-15.1X49-D130.6.qcow2"
}
},
{
"name": "15.1X49-D120",
"images": {
+14
View File
@@ -20,6 +20,14 @@
"kvm": "require"
},
"images": [
{
"filename": "kali-linux-2018.1-amd64.iso",
"version": "2018.1",
"md5sum": "a3feb90df5b71b3c7f4a02bdddf221d7",
"filesize": 3028500480,
"download_url": "https://www.kali.org/downloads/",
"direct_download_url": "http://cdimage.kali.org/kali-2018.1/kali-linux-2018.1-amd64.iso"
},
{
"filename": "kali-linux-2017.3-amd64.iso",
"version": "2017.3",
@@ -70,6 +78,12 @@
}
],
"versions": [
{
"name": "2018.8",
"images": {
"cdrom_image": "kali-linux-2018.1-amd64.iso"
}
},
{
"name": "2017.3",
"images": {
+15 -1
View File
@@ -24,6 +24,14 @@
"kvm": "require"
},
"images": [
{
"filename": "kerio-connect-appliance-9.2.6-3851-p1-vmware-amd64-disk1.vmdk",
"version": "9.2.6p1",
"md5sum": "c6ed064114c6fd70608b7951b707528c",
"filesize": 625852004,
"download_url": "http://www.kerio.com/support/kerio-connect",
"direct_download_url": "http://cdn.kerio.com/dwn/connect/connect-9.2.6-3851/kerio-connect-appliance-9.2.6-3851-p1-vmware-amd64-disk1.vmdk"
},
{
"filename": "kerio-connect-appliance-9.2.5-3336-p3-vmware-amd64-disk1.vmdk",
"version": "9.2.5p3",
@@ -68,7 +76,13 @@
],
"versions": [
{
"name": "9.2.5",
"name": "9.2.6p1",
"images": {
"hda_disk_image": "kerio-connect-appliance-9.2.6-3851-p1-vmware-amd64-disk1.vmdk"
}
},
{
"name": "9.2.5p3",
"images": {
"hda_disk_image": "kerio-connect-appliance-9.2.5-3336-p3-vmware-amd64-disk1.vmdk"
}
+14
View File
@@ -23,6 +23,14 @@
"kvm": "require"
},
"images": [
{
"filename": "kerio-control-appliance-9.2.5-2641-p5-vmware-disk1.vmdk",
"version": "9.2.5p5",
"md5sum": "fbb2824eb91ca2502c952c2e9c4e635d",
"filesize": 190706688,
"download_url": "http://www.kerio.com/support/kerio-control",
"direct_download_url": "http://cdn.kerio.com/dwn/control/control-9.2.5-2641/kerio-control-appliance-9.2.5-2641-p5-vmware-disk1.vmdk"
},
{
"filename": "kerio-control-appliance-9.2.4-2223-vmware-disk1.vmdk",
"version": "9.2.4",
@@ -63,6 +71,12 @@
"direct_download_url": "http://cdn.kerio.com/dwn/control/control-9.1.4-1535/kerio-control-appliance-9.1.4-1535-vmware.vmdk" }
],
"versions": [
{
"name": "9.2.5p5",
"images": {
"hda_disk_image": "kerio-control-appliance-9.2.5-2641-p5-vmware-disk1.vmdk"
}
},
{
"name": "9.2.4",
"images": {
@@ -24,6 +24,14 @@
"kvm": "require"
},
"images": [
{
"filename": "kerio-operator-appliance-2.6.2-9085-vmware-disk1.vmdk",
"version": "2.6.2",
"md5sum": "abdfa7697e568b5d9a6396e11292e52a",
"filesize": 306665472,
"download_url": "http://www.kerio.com/support/kerio-operator",
"direct_download_url": "http://cdn.kerio.com/dwn/operator/operator-2.6.2-9085/kerio-operator-appliance-2.6.2-9085-vmware-disk1.vmdk"
},
{
"filename": "kerio-operator-appliance-2.6.0-8413-vmware-disk1.vmdk",
"version": "2.6.0",
@@ -66,6 +74,12 @@
}
],
"versions": [
{
"name": "2.6.2",
"images": {
"hda_disk_image": "kerio-operator-appliance-2.6.2-9085-vmware-disk1.vmdk"
}
},
{
"name": "2.6.0",
"images": {
+19
View File
@@ -0,0 +1,19 @@
{
"name": "Toolbox",
"category": "guest",
"description": "This appliance contains server side software for secondary management of network devices:\n- www (nginx) \n- ftp (vsftpd)\n- tftp (tftpd)\n- syslog (rsyslog)\n- dhcp (isc-dhcpd)\n- snmp server (snmpd + snmptrapd)",
"vendor_name": "Ubuntu",
"vendor_url": "https://www.ubuntu.com/",
"product_name": "Networkers' toolbox",
"registry_version": 3,
"status": "stable",
"maintainer": "Andras Dosztal",
"maintainer_email": "developers@gns3.net",
"symbol": "linux_guest.svg",
"usage": "Root password: gns3",
"docker": {
"adapters": 1,
"image": "adosztal/net_toolbox:latest",
"console_type": "telnet"
}
}
@@ -12,7 +12,7 @@
"symbol": "linux_guest.svg",
"docker": {
"adapters": 1,
"image": "gns3/network_automation:latest",
"image": "adosztal/network_automation:latest",
"console_type": "telnet"
}
}
+20 -7
View File
@@ -25,18 +25,31 @@
},
"images": [
{
"filename": "OPNsense-17.7-OpenSSL-nano-amd64.img",
"version": "17.7",
"md5sum": "14cde5c7a15b2298a242238ad3c3b65a",
"filesize": 3221233664,
"download_url": "https://opnsense.org/download/"
"filename": "OPNsense-18.1.6-OpenSSL-nano-amd64.img",
"version": "18.1.6",
"md5sum": "042f328380ad0c8008759c43435e8843",
"filesize": 272003136,
"download_url": "https://opnsense.c0urier.net/releases/18.1/"
},
{
"filename": "OPNsense-17.7.5-OpenSSL-nano-amd64.img",
"version": "17.7.5",
"md5sum": "6ec5b7f99cc727f904bbf2aaadcab0b8",
"filesize": 237038601,
"download_url": "https://opnsense.c0urier.net/releases/17.7/"
}
],
"versions": [
{
"name": "17.7",
"name": "18.1.6",
"images": {
"hda_disk_image": "OPNsense-17.7-OpenSSL-nano-amd64.img"
"hda_disk_image": "OPNsense-18.1.6-OpenSSL-nano-amd64.img"
}
},
{
"name": "17.7.5",
"images": {
"hda_disk_image": "OPNsense-17.7.5-OpenSSL-nano-amd64.img"
}
}
]
+123 -123
View File
@@ -1,123 +1,123 @@
{
"name": "PA-VM",
"category": "firewall",
"description": "The VM-Series combines next-generation firewall security and advanced threat prevention to protect your virtualized environments from advanced cyberthreats. The VM-Series natively analyzes all traffic in a single pass to determine the application identity, the content within, and the user identity.",
"vendor_name": "Palo Alto Networks",
"vendor_url": "http://www.paloaltonetworks.com/",
"documentation_url": "https://www.paloaltonetworks.com/documentation/80/virtualization/virtualization",
"product_name": "PAN VM-Series Firewall",
"product_url": "https://www.paloaltonetworks.com/products/secure-the-network/virtualized-next-generation-firewall/vm-series",
"registry_version": 3,
"status": "experimental",
"maintainer": "Community",
"maintainer_email": "",
"usage": "Default Username: admin\r\nDefault Password: admin\r\nPAN-VM goes through several iterations of host prompts during boot. This is normal and expected.\r\nLogin is available when prompt is PA-VM login:\r\n\r\nGetting Started:\r\nTo configure a static IP address at the console enter the following commands:\r\n\r\nconfigure\r\nset deviceconfig system ip-address <Static IP> netmask <Netmask> default-gateway <Gateway IP> type static\r\nset deviceconfig system dns-setting servers primary <DNS Server IP> secondary <DNS Server IP>\r\ncommit\r\n",
"symbol": "pan-vm-fw.svg",
"first_port_name": "management",
"port_name_format": "ethernet1/{port1}",
"qemu": {
"adapter_type": "virtio-net-pci",
"adapters": 25,
"ram": 4096,
"arch": "x86_64",
"console_type": "telnet",
"hda_disk_interface": "virtio",
"kvm": "require",
"options": "-smp 2"
},
"images": [
{
"filename": "PA-VM-ESX-8.1.0-disk1.vmdk",
"version": "8.1.0",
"md5sum": "49af8e8225c2e90414bde0be15eaf421",
"filesize": 2281454080,
"download_url": "https://support.paloaltonetworks.com/Updates/SoftwareUpdates/"
},
{
"filename": "PA-VM-KVM-8.1.0.qcow2",
"version": "8.1.0",
"md5sum": "459558515b965b2e43fde2842abbae66",
"filesize": 2260467712,
"download_url": "https://support.paloaltonetworks.com/Updates/SoftwareUpdates/"
},
{
"filename": "PA-VM-ESX-8.0.0-disk1.vmdk",
"version": "8.0.0",
"md5sum": "a505fb1dbcc855ecf98630fd5d329f9a",
"filesize": 2002713088,
"download_url": "https://support.paloaltonetworks.com/Updates/SoftwareUpdates/"
},
{
"filename": "PA-VM-KVM-8.0.0.qcow2",
"version": "8.0.0",
"md5sum": "b6a1ddc8552aff87f05f9c0d4cb54dc3",
"filesize": 1987444736,
"download_url": "https://support.paloaltonetworks.com/Updates/SoftwareUpdates/"
},
{
"filename": "PA-VM-ESX-7.1.0-disk1.vmdk",
"version": "7.1.0 (ESX)",
"md5sum": "e044dc649b7146ee4f619edb0e5f6675",
"filesize": 1871149056,
"download_url": "https://support.paloaltonetworks.com/Updates/SoftwareUpdates/"
},
{
"filename": "PA-VM-KVM-7.1.0.qcow2",
"version": "7.1.0",
"md5sum": "da300253709740068927408239c2e321",
"filesize": 1858797568,
"download_url": "https://support.paloaltonetworks.com/Updates/SoftwareUpdates/"
},
{
"filename": "PA-VM-ESX-6.1.0-disk1.vmdk",
"version": "6.1.0 (ESX)",
"md5sum": "64b1e81cd54008318235832ea6d71424",
"filesize": 2959736832,
"download_url": "https://support.paloaltonetworks.com/Updates/SoftwareUpdates/"
}
],
"versions": [
{
"name": "8.1.0 (ESX)",
"images": {
"hda_disk_image": "PA-VM-ESX-8.1.0-disk1.vmdk"
}
},
{
"name": "8.1.0",
"images": {
"hda_disk_image": "PA-VM-KVM-8.1.0.qcow2"
}
},
{
"name": "8.0.0 (ESX)",
"images": {
"hda_disk_image": "PA-VM-ESX-8.0.0-disk1.vmdk2"
}
},
{
"name": "8.0.0",
"images": {
"hda_disk_image": "PA-VM-KVM-8.0.0.qcow2"
}
},
{
"name": "7.1.0 (ESX)",
"images": {
"hda_disk_image": "PA-VM-ESX-7.1.0-disk1.vmdk"
}
},
{
"name": "7.1.0",
"images": {
"hda_disk_image": "PA-VM-KVM-7.1.0.qcow2"
}
},
{
"name": "6.1.0 (ESX)",
"images": {
"hda_disk_image": "PA-VM-ESX-6.1.0-disk1.vmdk"
}
}
]
}
{
"name": "PA-VM",
"category": "firewall",
"description": "The VM-Series combines next-generation firewall security and advanced threat prevention to protect your virtualized environments from advanced cyberthreats. The VM-Series natively analyzes all traffic in a single pass to determine the application identity, the content within, and the user identity.",
"vendor_name": "Palo Alto Networks",
"vendor_url": "http://www.paloaltonetworks.com/",
"documentation_url": "https://www.paloaltonetworks.com/documentation/80/virtualization/virtualization",
"product_name": "PAN VM-Series Firewall",
"product_url": "https://www.paloaltonetworks.com/products/secure-the-network/virtualized-next-generation-firewall/vm-series",
"registry_version": 3,
"status": "experimental",
"maintainer": "Community",
"maintainer_email": "",
"usage": "Default Username: admin\r\nDefault Password: admin\r\nPAN-VM goes through several iterations of host prompts during boot. This is normal and expected.\r\nLogin is available when prompt is PA-VM login:\r\n\r\nGetting Started:\r\nTo configure a static IP address at the console enter the following commands:\r\n\r\nconfigure\r\nset deviceconfig system ip-address <Static IP> netmask <Netmask> default-gateway <Gateway IP> type static\r\nset deviceconfig system dns-setting servers primary <DNS Server IP> secondary <DNS Server IP>\r\ncommit\r\n",
"symbol": "pan-vm-fw.svg",
"first_port_name": "management",
"port_name_format": "ethernet1/{port1}",
"qemu": {
"adapter_type": "virtio-net-pci",
"adapters": 25,
"ram": 4096,
"arch": "x86_64",
"console_type": "telnet",
"hda_disk_interface": "virtio",
"kvm": "require",
"options": "-smp 2"
},
"images": [
{
"filename": "PA-VM-ESX-8.1.0-disk1.vmdk",
"version": "8.1.0",
"md5sum": "49af8e8225c2e90414bde0be15eaf421",
"filesize": 2281454080,
"download_url": "https://support.paloaltonetworks.com/Updates/SoftwareUpdates/"
},
{
"filename": "PA-VM-KVM-8.1.0.qcow2",
"version": "8.1.0",
"md5sum": "459558515b965b2e43fde2842abbae66",
"filesize": 2260467712,
"download_url": "https://support.paloaltonetworks.com/Updates/SoftwareUpdates/"
},
{
"filename": "PA-VM-ESX-8.0.0-disk1.vmdk",
"version": "8.0.0",
"md5sum": "a505fb1dbcc855ecf98630fd5d329f9a",
"filesize": 2002713088,
"download_url": "https://support.paloaltonetworks.com/Updates/SoftwareUpdates/"
},
{
"filename": "PA-VM-KVM-8.0.0.qcow2",
"version": "8.0.0",
"md5sum": "b6a1ddc8552aff87f05f9c0d4cb54dc3",
"filesize": 1987444736,
"download_url": "https://support.paloaltonetworks.com/Updates/SoftwareUpdates/"
},
{
"filename": "PA-VM-ESX-7.1.0-disk1.vmdk",
"version": "7.1.0 (ESX)",
"md5sum": "e044dc649b7146ee4f619edb0e5f6675",
"filesize": 1871149056,
"download_url": "https://support.paloaltonetworks.com/Updates/SoftwareUpdates/"
},
{
"filename": "PA-VM-KVM-7.1.0.qcow2",
"version": "7.1.0",
"md5sum": "da300253709740068927408239c2e321",
"filesize": 1858797568,
"download_url": "https://support.paloaltonetworks.com/Updates/SoftwareUpdates/"
},
{
"filename": "PA-VM-ESX-6.1.0-disk1.vmdk",
"version": "6.1.0 (ESX)",
"md5sum": "64b1e81cd54008318235832ea6d71424",
"filesize": 2959736832,
"download_url": "https://support.paloaltonetworks.com/Updates/SoftwareUpdates/"
}
],
"versions": [
{
"name": "8.1.0 (ESX)",
"images": {
"hda_disk_image": "PA-VM-ESX-8.1.0-disk1.vmdk"
}
},
{
"name": "8.1.0",
"images": {
"hda_disk_image": "PA-VM-KVM-8.1.0.qcow2"
}
},
{
"name": "8.0.0 (ESX)",
"images": {
"hda_disk_image": "PA-VM-ESX-8.0.0-disk1.vmdk"
}
},
{
"name": "8.0.0",
"images": {
"hda_disk_image": "PA-VM-KVM-8.0.0.qcow2"
}
},
{
"name": "7.1.0 (ESX)",
"images": {
"hda_disk_image": "PA-VM-ESX-7.1.0-disk1.vmdk"
}
},
{
"name": "7.1.0",
"images": {
"hda_disk_image": "PA-VM-KVM-7.1.0.qcow2"
}
},
{
"name": "6.1.0 (ESX)",
"images": {
"hda_disk_image": "PA-VM-ESX-6.1.0-disk1.vmdk"
}
}
]
}
+13 -78
View File
@@ -22,98 +22,33 @@
"process_priority": "normal"
},
"images": [
{
"filename": "pfSense-CE-memstick-2.4.3-RELEASE-amd64.img",
"version": "2.4.3",
"md5sum": "b754d7e75dece5e756b6539c95714a74",
"filesize": 650392576,
"download_url": "https://www.pfsense.org/download/mirror.php?section=downloads"
},
{
"filename": "pfSense-CE-2.3.5-RELEASE-2g-amd64-nanobsd.img",
"version": "2.3.5",
"md5sum": "b6cb76adba3e1113892f84ea01894228",
"filesize": 1989969408,
"download_url": "https://www.pfsense.org/download/mirror.php?section=downloads"
},
{
"filename": "pfSense-CE-2.3.4-RELEASE-2g-amd64-nanobsd.img",
"version": "2.3.4",
"md5sum": "0c9871b54f932be2d550908f7c23b302",
"filesize": 1989969408,
"download_url": "https://www.pfsense.org/download/mirror.php?section=downloads"
},
{
"filename": "pfSense-CE-2.3.3-RELEASE-2g-amd64-nanobsd.img",
"version": "2.3.3",
"md5sum": "200f073c4f0a4ba6690920079f23d5dd",
"filesize": 1989969408,
"download_url": "https://www.pfsense.org/download/mirror.php?section=downloads"
},
{
"filename": "pfSense-CE-2.3.2-RELEASE-2g-amd64-nanobsd.img",
"version": "2.3.2",
"md5sum": "c91f2c8e287f4930695e65a6793cb8fe",
"filesize": 1989969408,
"download_url": "https://www.pfsense.org/download/mirror.php?section=downloads"
},
{
"filename": "pfSense-CE-2.3.1-RELEASE-2g-amd64-nanobsd.img",
"version": "2.3.1",
"md5sum": "719149eed51e03872a8cfd235d958d2e",
"filesize": 1989969408,
"download_url": "https://www.pfsense.org/download/mirror.php?section=downloads"
},
{
"filename": "pfSense-CE-2.3-RELEASE-2g-amd64-nanobsd.img",
"version": "2.3",
"md5sum": "8ab5047bd4c5bbabf71055fb75177d85",
"filesize": 1989969408,
"download_url": "https://www.pfsense.org/download/mirror.php?section=downloads"
},
{
"filename": "pfSense-2.2.6-RELEASE-1g-amd64-nanobsd.img",
"version": "2.2.6",
"md5sum": "7bbe39c4ec698685c9f9b615926820a9",
"filesize": 997097472,
"download_url": "https://www.pfsense.org/download/mirror.php?section=downloads"
}
],
"versions": [
{
"name": "2.4.3",
"images": {
"hda_disk_image": "pfSense-CE-memstick-2.4.3-RELEASE-amd64.img"
}
},
{
"name": "2.3.5",
"images": {
"hda_disk_image": "pfSense-CE-2.3.5-RELEASE-2g-amd64-nanobsd.img"
}
},
{
"name": "2.3.4",
"images": {
"hda_disk_image": "pfSense-CE-2.3.4-RELEASE-2g-amd64-nanobsd.img"
}
},
{
"name": "2.3.3",
"images": {
"hda_disk_image": "pfSense-CE-2.3.3-RELEASE-2g-amd64-nanobsd.img"
}
},
{
"name": "2.3.2",
"images": {
"hda_disk_image": "pfSense-CE-2.3.2-RELEASE-2g-amd64-nanobsd.img"
}
},
{
"name": "2.3.1",
"images": {
"hda_disk_image": "pfSense-CE-2.3.1-RELEASE-2g-amd64-nanobsd.img"
}
},
{
"name": "2.3",
"images": {
"hda_disk_image": "pfSense-CE-2.3-RELEASE-2g-amd64-nanobsd.img"
}
},
{
"name": "2.2.6",
"images": {
"hda_disk_image": "pfSense-2.2.6-RELEASE-1g-amd64-nanobsd.img"
}
}
]
}
@@ -11,6 +11,6 @@
"maintainer_email": "developers@gns3.net",
"docker": {
"adapters": 1,
"image": "gns3/python-go-perl-php:latest"
"image": "adosztal/python-go-perl-php:latest"
}
}
+14
View File
@@ -25,6 +25,13 @@
"options": "-nographic"
},
"images": [
{
"filename": "ubuntu-18.04-server-cloudimg-amd64.img",
"version": "18.04",
"md5sum": "f4134e7fa16d7fa766c7467cbe25c949",
"filesize": 336134144,
"download_url": "https://cloud-images.ubuntu.com/releases/18.04/release-20180426.2/ubuntu-18.04-server-cloudimg-amd64.img"
},
{
"filename": "ubuntu-17.10-server-cloudimg-amd64.img",
"version": "17.10",
@@ -55,6 +62,13 @@
}
],
"versions": [
{
"name": "18.04 (LTS)",
"images": {
"hda_disk_image": "ubuntu-18.04-server-cloudimg-amd64.img",
"cdrom_image": "ubuntu-cloud-init-data.iso"
}
},
{
"name": "17.10",
"images": {
+14
View File
@@ -24,6 +24,13 @@
"kvm": "allow"
},
"images": [
{
"filename": "untangle_1321_x64.iso",
"version": "13.2.1",
"md5sum": "4ce49535372f85565922c7e90bc11ba3",
"filesize": 627048448,
"download_url": "https://www.untangle.com/get-untangle/"
},
{
"filename": "untangle_1320_x64.iso",
"version": "13.2.0",
@@ -97,6 +104,13 @@
}
],
"versions": [
{
"name": "13.2.1",
"images": {
"hda_disk_image": "empty30G.qcow2",
"cdrom_image": "untangle_1321_x64.iso"
}
},
{
"name": "13.2.0",
"images": {
@@ -24,6 +24,14 @@
"kvm": "require"
},
"images": [
{
"filename": "zentyal-5.1-development-amd64.iso",
"version": "5.1",
"md5sum": "dac5623b92c1b361d7805ab8c95c0d99",
"filesize": 947912704,
"download_url": "http://download.zentyal.com/",
"direct_download_url": "http://download.zentyal.com/zentyal-5.1-development-amd64.iso"
},
{
"filename": "zentyal-5.0.1-development-amd64.iso",
"version": "5.0.1",
@@ -74,6 +82,13 @@
}
],
"versions": [
{
"name": "5.1",
"images": {
"hda_disk_image": "empty100G.qcow2",
"cdrom_image": "zentyal-5.1-development-amd64.iso"
}
},
{
"name": "5.0.1",
"images": {
+2 -1
View File
@@ -30,6 +30,7 @@ log = logging.getLogger(__name__)
from uuid import UUID, uuid4
from gns3server.utils.interfaces import is_interface_up
from gns3server.utils.asyncio import asyncio_ensure_future
from ..config import Config
from ..utils.asyncio import wait_run_in_executor
from ..utils import force_unix_path
@@ -127,7 +128,7 @@ class BaseManager:
tasks = []
for node_id in self._nodes.keys():
tasks.append(asyncio.async(self.close_node(node_id)))
tasks.append(asyncio_ensure_future(self.close_node(node_id)))
if tasks:
done, _ = yield from asyncio.wait(tasks)
+3 -2
View File
@@ -29,7 +29,7 @@ import re
from gns3server.utils.interfaces import interfaces
from ..compute.port_manager import PortManager
from ..utils.asyncio import wait_run_in_executor, locked_coroutine
from ..utils.asyncio import wait_run_in_executor, locking
from ..utils.asyncio.telnet_server import AsyncioTelnetServer
from ..ubridge.hypervisor import Hypervisor
from ..ubridge.ubridge_error import UbridgeError
@@ -516,7 +516,8 @@ class BaseNode:
except UbridgeError as e:
raise UbridgeError("Error while sending command '{}': {}: {}".format(command, e, self._ubridge_hypervisor.read_stdout()))
@locked_coroutine
@locking
@asyncio.coroutine
def _start_ubridge(self):
"""
Starts uBridge (handles connections to and from this node).
+3 -2
View File
@@ -25,7 +25,7 @@ import asyncio
import logging
import aiohttp
from gns3server.utils import parse_version
from gns3server.utils.asyncio import locked_coroutine
from gns3server.utils.asyncio import locking
from gns3server.compute.base_manager import BaseManager
from gns3server.compute.docker.docker_vm import DockerVM
from gns3server.compute.docker.docker_error import DockerError, DockerHttp304Error, DockerHttp404Error
@@ -182,7 +182,8 @@ class Docker(BaseManager):
autoping=True)
return connection
@locked_coroutine
@locking
@asyncio.coroutine
def pull_image(self, image, progress_callback=None):
"""
Pull image from docker repository
+2 -1
View File
@@ -29,6 +29,7 @@ import os
from gns3server.utils.asyncio.telnet_server import AsyncioTelnetServer
from gns3server.utils.asyncio.raw_command_server import AsyncioRawCommandServer
from gns3server.utils.asyncio import wait_for_file_creation
from gns3server.utils.asyncio import asyncio_ensure_future
from gns3server.utils.get_resource import get_resource
from gns3server.ubridge.ubridge_error import UbridgeError, UbridgeNamespaceError
@@ -567,7 +568,7 @@ class DockerVM(BaseNode):
output_stream.feed_data(self.name.encode() + b" console is now available... Press RETURN to get started.\r\n")
asyncio.async(self._read_console_output(self._console_websocket, output_stream))
asyncio_ensure_future(self._read_console_output(self._console_websocket, output_stream))
@asyncio.coroutine
def _read_console_output(self, ws, out):
+8 -2
View File
@@ -36,6 +36,7 @@ log = logging.getLogger(__name__)
from gns3server.utils.interfaces import interfaces, is_interface_up
from gns3server.utils.asyncio import wait_run_in_executor
from gns3server.utils import parse_version
from gns3server.utils.asyncio import asyncio_ensure_future
from uuid import uuid4
from ..base_manager import BaseManager
from ..port_manager import PortManager
@@ -172,7 +173,7 @@ class Dynamips(BaseManager):
tasks = []
for device in self._devices.values():
tasks.append(asyncio.async(device.hypervisor.stop()))
tasks.append(asyncio_ensure_future(device.hypervisor.stop()))
if tasks:
done, _ = yield from asyncio.wait(tasks)
@@ -196,7 +197,7 @@ class Dynamips(BaseManager):
tasks = []
for device in self._devices.values():
if device.project.id == project.id:
tasks.append(asyncio.async(device.delete()))
tasks.append(asyncio_ensure_future(device.delete()))
if tasks:
done, _ = yield from asyncio.wait(tasks)
@@ -561,6 +562,7 @@ class Dynamips(BaseManager):
yield from vm.set_idlepc("0x0")
was_auto_started = False
old_priority = None
try:
status = yield from vm.get_status()
if status != "running":
@@ -572,6 +574,8 @@ class Dynamips(BaseManager):
if not idlepcs:
raise DynamipsError("No Idle-PC values found")
if sys.platform.startswith("win"):
old_priority = vm.set_process_priority_windows(vm.hypervisor.process.pid)
for idlepc in idlepcs:
match = re.search(r"^0x[0-9a-f]{8}$", idlepc.split()[0])
if not match:
@@ -600,6 +604,8 @@ class Dynamips(BaseManager):
except DynamipsError:
raise
finally:
if old_priority is not None:
vm.set_process_priority_windows(vm.hypervisor.process.pid, old_priority)
if was_auto_started:
yield from vm.stop()
return validated_idlepc
+30 -2
View File
@@ -40,7 +40,7 @@ from ..nios.nio_udp import NIOUDP
from gns3server.utils.file_watcher import FileWatcher
from gns3server.utils.asyncio import wait_run_in_executor, monitor_process
from gns3server.utils.asyncio import wait_run_in_executor, monitor_process, asyncio_ensure_future
from gns3server.utils.images import md5sum
@@ -196,7 +196,7 @@ class Router(BaseNode):
"""
Called when the NVRAM file has changed
"""
asyncio.async(self.save_configs())
asyncio_ensure_future(self.save_configs())
@property
def dynamips_id(self):
@@ -683,6 +683,29 @@ class Router(BaseNode):
log.info('Router "{name}" [{id}]: idle-PC set to {idlepc}'.format(name=self._name, id=self._id, idlepc=idlepc))
self._idlepc = idlepc
def set_process_priority_windows(self, pid, priority=None):
"""
Sets process priority on Windows
:param pid: process PID
"""
import win32api
import win32process
import win32con
import pywintypes
old_priority = None
try:
handle = win32api.OpenProcess(win32con.PROCESS_ALL_ACCESS, True, pid)
old_priority = win32process.GetPriorityClass(handle)
if priority is None:
priority = win32process.BELOW_NORMAL_PRIORITY_CLASS
win32process.SetPriorityClass(handle, priority)
except pywintypes.error as e:
log.error("Cannot set priority for Dynamips process (PID={}) ".format(pid, e.strerror))
return old_priority
@asyncio.coroutine
def get_idle_pc_prop(self):
"""
@@ -701,8 +724,13 @@ class Router(BaseNode):
yield from asyncio.sleep(20) # leave time to the router to boot
log.info('Router "{name}" [{id}] has started calculating Idle-PC values'.format(name=self._name, id=self._id))
old_priority = None
if sys.platform.startswith("win"):
old_priority = self.set_process_priority_windows(self._hypervisor.process.pid)
begin = time.time()
idlepcs = yield from self._hypervisor.send('vm get_idle_pc_prop "{}" 0'.format(self._name))
if old_priority is not None:
self.set_process_priority_windows(self._hypervisor.process.pid, old_priority)
log.info('Router "{name}" [{id}] has finished calculating Idle-PC values after {time:.4f} seconds'.format(name=self._name,
id=self._id,
time=time.time() - begin))
+3 -2
View File
@@ -43,7 +43,7 @@ from .utils.iou_export import nvram_export
from gns3server.ubridge.ubridge_error import UbridgeError
from gns3server.utils.file_watcher import FileWatcher
from gns3server.utils.asyncio.telnet_server import AsyncioTelnetServer
from gns3server.utils.asyncio import locked_coroutine
from gns3server.utils.asyncio import locking
import gns3server.utils.asyncio
import gns3server.utils.images
@@ -550,7 +550,8 @@ class IOUVM(BaseNode):
# configure networking support
yield from self._networking()
@locked_coroutine
@locking
@asyncio.coroutine
def _networking(self):
"""
Configures the IOL bridge in uBridge.
+2 -2
View File
@@ -29,7 +29,7 @@ from uuid import UUID, uuid4
from .port_manager import PortManager
from .notification_manager import NotificationManager
from ..config import Config
from ..utils.asyncio import wait_run_in_executor
from ..utils.asyncio import wait_run_in_executor, asyncio_ensure_future
from ..utils.path import check_path_allowed, get_default_project_directory
import logging
@@ -346,7 +346,7 @@ class Project:
tasks = []
for node in self._nodes:
tasks.append(asyncio.async(node.manager.close_node(node.id)))
tasks.append(asyncio_ensure_future(node.manager.close_node(node.id)))
if tasks:
done, _ = yield from asyncio.wait(tasks)
@@ -33,7 +33,7 @@ import xml.etree.ElementTree as ET
from gns3server.utils import parse_version
from gns3server.utils.asyncio.telnet_server import AsyncioTelnetServer
from gns3server.utils.asyncio.serial import asyncio_open_serial
from gns3server.utils.asyncio import locked_coroutine
from gns3server.utils.asyncio import locking
from gns3server.compute.virtualbox.virtualbox_error import VirtualBoxError
from gns3server.compute.nios.nio_udp import NIOUDP
from gns3server.compute.adapters.ethernet_adapter import EthernetAdapter
@@ -296,7 +296,8 @@ class VirtualBoxVM(BaseNode):
if (yield from self.check_hw_virtualization()):
self._hw_virtualization = True
@locked_coroutine
@locking
@asyncio.coroutine
def stop(self):
"""
Stops this VirtualBox VM.
+2 -1
View File
@@ -32,6 +32,7 @@ import shlex
from collections import OrderedDict
from gns3server.utils.interfaces import interfaces
from gns3server.utils.asyncio import subprocess_check_output
from gns3server.utils.asyncio import asyncio_ensure_future
from gns3server.utils import parse_version
log = logging.getLogger(__name__)
@@ -738,4 +739,4 @@ if __name__ == '__main__':
loop = asyncio.get_event_loop()
vmware = VMware.instance()
print("=> Check version")
loop.run_until_complete(asyncio.async(vmware.check_vmware_version()))
loop.run_until_complete(asyncio_ensure_future(vmware.check_vmware_version()))
+3 -2
View File
@@ -26,7 +26,7 @@ import tempfile
from gns3server.utils.asyncio.telnet_server import AsyncioTelnetServer
from gns3server.utils.asyncio.serial import asyncio_open_serial
from gns3server.utils.asyncio import locked_coroutine
from gns3server.utils.asyncio import locking
from collections import OrderedDict
from .vmware_error import VMwareError
from ..nios.nio_udp import NIOUDP
@@ -94,7 +94,8 @@ class VMwareVM(BaseNode):
return self._vmnets
@locked_coroutine
@locking
@asyncio.coroutine
def _control_vm(self, subcommand, *additional_args):
args = [self._vmx_path]
+34 -11
View File
@@ -27,9 +27,9 @@ from operator import itemgetter
from ..utils import parse_version
from ..utils.images import list_images
from ..utils.asyncio import locked_coroutine
from ..utils.asyncio import locking, asyncio_ensure_future
from ..controller.controller_error import ControllerError
from ..version import __version__
from ..version import __version__, __version_info__
import logging
@@ -95,6 +95,7 @@ class Compute:
self._set_auth(user, password)
self._cpu_usage_percent = None
self._memory_usage_percent = None
self._last_error = None
self._capabilities = {
"version": None,
"node_types": []
@@ -301,7 +302,8 @@ class Compute:
"connected": self._connected,
"cpu_usage_percent": self._cpu_usage_percent,
"memory_usage_percent": self._memory_usage_percent,
"capabilities": self._capabilities
"capabilities": self._capabilities,
"last_error": self._last_error
}
@asyncio.coroutine
@@ -398,13 +400,14 @@ class Compute:
except aiohttp.web.HTTPConflict:
pass
@locked_coroutine
@locking
@asyncio.coroutine
def connect(self):
"""
Check if remote server is accessible
"""
if not self._connected and not self._closed:
if not self._connected and not self._closed and self.host:
try:
log.info("Connecting to compute '{}'".format(self._id))
response = yield from self._run_http_query("GET", "/capabilities")
@@ -416,7 +419,7 @@ class Compute:
if self._connection_failure == 5:
log.warning("Cannot connect to compute '{}': {}".format(self._id, e))
yield from self._controller.close_compute_projects(self)
asyncio.get_event_loop().call_later(2, lambda: asyncio.async(self._try_reconnect()))
asyncio.get_event_loop().call_later(2, lambda: asyncio_ensure_future(self._try_reconnect()))
return
except aiohttp.web.HTTPNotFound:
raise aiohttp.web.HTTPConflict(text="The server {} is not a GNS3 server or it's a 1.X server".format(self._id))
@@ -428,16 +431,36 @@ class Compute:
raise aiohttp.web.HTTPConflict(text="Invalid server url for server {}".format(self._id))
if "version" not in response.json:
msg = "The server {} is not a GNS3 server".format(self._id)
log.error(msg)
self._http_session.close()
raise aiohttp.web.HTTPConflict(text="The server {} is not a GNS3 server".format(self._id))
raise aiohttp.web.HTTPConflict(text=msg)
self._capabilities = response.json
if parse_version(__version__)[:2] != parse_version(response.json["version"])[:2]:
self._http_session.close()
raise aiohttp.web.HTTPConflict(text="The server {} versions are not compatible {} != {}".format(self._id, __version__, response.json["version"]))
if response.json["version"].split("-")[0] != __version__.split("-")[0]:
msg = "GNS3 controller version {} is not the same as compute server {} version {}".format(__version__,
self._name,
response.json["version"])
if __version_info__[3] == 0:
# Stable release
log.error(msg)
self._http_session.close()
self._last_error = msg
raise aiohttp.web.HTTPConflict(text=msg)
elif parse_version(__version__)[:2] != parse_version(response.json["version"])[:2]:
# We don't allow different major version to interact even with dev build
log.error(msg)
self._http_session.close()
self._last_error = msg
raise aiohttp.web.HTTPConflict(text=msg)
else:
msg = "{}\nUsing different versions may result in unexpected problems. Please use at your own risk.".format(msg)
self._controller.notification.emit("log.warning", {"message": msg})
self._notifications = asyncio.gather(self._connect_notification())
self._connected = True
self._connection_failure = 0
self._last_error = None
self._controller.notification.emit("compute.updated", self.__json__())
@asyncio.coroutine
@@ -472,7 +495,7 @@ class Compute:
# Try to reconnect after 1 seconds if server unavailable only if not during tests (otherwise we create a ressources usage bomb)
if not hasattr(sys, "_called_from_test") or not sys._called_from_test:
asyncio.get_event_loop().call_later(1, lambda: asyncio.async(self.connect()))
asyncio.get_event_loop().call_later(1, lambda: asyncio_ensure_future(self.connect()))
self._ws = None
self._cpu_usage_percent = None
self._memory_usage_percent = None
+21
View File
@@ -16,6 +16,7 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
import os
import sys
import json
import asyncio
import aiohttp
@@ -23,6 +24,7 @@ import zipfile
import tempfile
import zipstream
from datetime import datetime
import logging
log = logging.getLogger(__name__)
@@ -77,6 +79,7 @@ def export_project(project, temporary_dir, include_images=False, keep_compute_id
# ignore the .gns3 file
if file.endswith(".gns3"):
continue
_patch_mtime(path)
zstream.write(path, os.path.relpath(path, project._path), compress_type=zipfile.ZIP_DEFLATED)
# Export files from remote computes
@@ -99,12 +102,29 @@ def export_project(project, temporary_dir, include_images=False, keep_compute_id
f.write(data)
response.close()
f.close()
_patch_mtime(temp_path)
zstream.write(temp_path, arcname=compute_file["path"], compress_type=zipfile.ZIP_DEFLATED)
downloaded_files.add(compute_file['path'])
return zstream
def _patch_mtime(path):
"""
Patch the file mtime because ZIP does not support timestamps before 1980
:param path: file path
"""
if sys.platform.startswith("win"):
# only UNIX type platforms
return
st = os.stat(path)
file_date = datetime.fromtimestamp(st.st_mtime)
if file_date.year < 1980:
new_mtime = file_date.replace(year=1980).timestamp()
os.utime(path, (st.st_atime, new_mtime))
def _is_exportable(path):
"""
:returns: True if file should not be included in the final archive
@@ -228,6 +248,7 @@ def _export_local_image(image, zstream):
if os.path.exists(path):
arcname = os.path.join("images", directory, os.path.basename(image))
_patch_mtime(path)
zstream.write(path, arcname)
return
+10 -5
View File
@@ -21,7 +21,7 @@ import asyncio
import aiohttp
import ipaddress
from ...utils.asyncio import locked_coroutine
from ...utils.asyncio import locking, asyncio_ensure_future
from .vmware_gns3_vm import VMwareGNS3VM
from .virtualbox_gns3_vm import VirtualBoxGNS3VM
from .remote_gns3_vm import RemoteGNS3VM
@@ -265,7 +265,8 @@ class GNS3VM:
except GNS3VMError as e:
log.warn(str(e))
@locked_coroutine
@locking
@asyncio.coroutine
def start(self):
"""
Start the GNS3 VM
@@ -302,7 +303,7 @@ class GNS3VM:
# check if the VM is in the same subnet as the local server, start 10 seconds later to give
# some time for the compute in the VM to be ready for requests
asyncio.get_event_loop().call_later(10, lambda: asyncio.async(self._check_network(compute)))
asyncio.get_event_loop().call_later(10, lambda: asyncio_ensure_future(self._check_network(compute)))
@asyncio.coroutine
def _check_network(self, compute):
@@ -336,8 +337,11 @@ class GNS3VM:
self._controller.notification.emit("log.warning", {"message": msg})
except ComputeError as e:
log.warning("Could not check the VM is in the same subnet as the local server: {}".format(e))
except aiohttp.web.HTTPConflict as e:
log.warning("Could not check the VM is in the same subnet as the local server: {}".format(e.text))
@locked_coroutine
@locking
@asyncio.coroutine
def _suspend(self):
"""
Suspend the GNS3 VM
@@ -349,7 +353,8 @@ class GNS3VM:
log.info("Suspend the GNS3 VM")
yield from engine.suspend()
@locked_coroutine
@locking
@asyncio.coroutine
def _stop(self):
"""
Stop the GNS3 VM
+3 -1
View File
@@ -22,6 +22,8 @@ import html
import asyncio
import aiohttp
from gns3server.utils.asyncio import asyncio_ensure_future
import logging
log = logging.getLogger(__name__)
@@ -296,7 +298,7 @@ class Link:
self._capturing = True
self._capture_file_name = capture_file_name
self._streaming_pcap = asyncio.async(self._start_streaming_pcap())
self._streaming_pcap = asyncio_ensure_future(self._start_streaming_pcap())
self._project.controller.notification.emit("link.updated", self.__json__())
@asyncio.coroutine
+2 -6
View File
@@ -33,8 +33,8 @@ class ATMPort(SerialPort):
"""
return "ATM"
@property
def short_name_type(self):
@staticmethod
def short_name_type():
"""
Returns the short name type for this port.
@@ -42,10 +42,6 @@ class ATMPort(SerialPort):
"""
return "a"
@property
def short_name(self):
return "{}".format(self._port_number)
@property
def data_link_types(self):
"""
+2 -2
View File
@@ -39,8 +39,8 @@ class EthernetPort(Port):
return "Ethernet"
@property
def short_name_type(self):
@staticmethod
def short_name_type():
"""
Returns the short name type for this port.
@@ -34,8 +34,8 @@ class FastEthernetPort(Port):
return "FastEthernet"
@property
def short_name_type(self):
@staticmethod
def short_name_type():
"""
Returns the short name type for this port.
@@ -34,10 +34,6 @@ class FrameRelayPort(SerialPort):
return "FrameRelay"
@property
def short_name(self):
return "{}".format(self._port_number)
@property
def data_link_types(self):
"""
@@ -34,8 +34,8 @@ class GigabitEthernetPort(Port):
return "GigabitEthernet"
@property
def short_name_type(self):
@staticmethod
def short_name_type():
"""
Returns the short name type for this port.
+6 -4
View File
@@ -63,12 +63,14 @@ class Port:
@property
def short_name(self):
# If port name format has change we use the port name as the short name (1.X behavior)
# 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 not self._name.startswith("{}{}".format(self.long_name_type(), self._interface_number)):
return self._name
return self.short_name_type + "{}/{}".format(self._interface_number, self._port_number)
elif '/' in self._name:
return self._name.replace(self.long_name_type(), self.short_name_type())
elif self._name.startswith("{}{}".format(self.long_name_type(), self._interface_number)):
return self.short_name_type() + "{}".format(self._interface_number)
return self._name
@short_name.setter
def short_name(self, val):
+5 -3
View File
@@ -64,7 +64,7 @@ class StandardPortFactory:
for port_number in range(0, port_by_adapter):
if first_port_name and adapter_number == 0:
port_name = first_port_name
port = PortFactory(port_name, segment_number, adapter_number, port_number, "ethernet")
port = PortFactory(port_name, segment_number, adapter_number, port_number, "ethernet", short_name=first_port_name)
else:
try:
port_name = port_name_format.format(
@@ -190,7 +190,9 @@ class DynamipsPortFactory:
if port_class:
for port_number in range(0, cls.ADAPTER_MATRIX[properties[name]]["nb_ports"]):
name = "{}{}/{}".format(port_class.long_name_type(), adapter_number, port_number)
ports.append(port_class(name, adapter_number, adapter_number, port_number))
port = port_class(name, adapter_number, adapter_number, port_number)
port.short_name = "{}{}/{}".format(port_class.short_name_type(), adapter_number, port_number)
ports.append(port)
adapter_number += 1
elif name.startswith("wic") and properties[name]:
port_class = cls.WIC_MATRIX[properties[name]]["port"]
@@ -198,7 +200,7 @@ class DynamipsPortFactory:
for port_number in range(0, cls.WIC_MATRIX[properties[name]]["nb_ports"]):
name = "{}{}/{}".format(port_class.long_name_type(), 0, display_wic_port_number)
port = port_class(name, 0, 0, wic_port_number)
port.short_name = "{}{}/{}".format(port.short_name_type, 0, display_wic_port_number)
port.short_name = "{}{}/{}".format(port_class.short_name_type(), 0, display_wic_port_number)
ports.append(port)
display_wic_port_number += 1
wic_port_number += 1
+2 -2
View File
@@ -33,8 +33,8 @@ class POSPort(SerialPort):
"""
return "POS"
@property
def short_name_type(self):
@staticmethod
def short_name_type():
"""
Returns the short name type for this port.
+2 -2
View File
@@ -34,8 +34,8 @@ class SerialPort(Port):
return "Serial"
@property
def short_name_type(self):
@staticmethod
def short_name_type():
"""
Returns the short name type for this port.
+19 -13
View File
@@ -36,8 +36,9 @@ from .udp_link import UDPLink
from ..config import Config
from ..utils.path import check_path_allowed, get_default_project_directory
from ..utils.asyncio.pool import Pool
from ..utils.asyncio import locked_coroutine
from ..utils.asyncio import locking
from ..utils.asyncio import wait_run_in_executor
from ..utils.asyncio import asyncio_ensure_future
from .export_project import export_project
from .import_project import import_project
@@ -500,18 +501,21 @@ class Project:
if compute not in self._project_created_on_compute:
# For a local server we send the project path
if compute.id == "local":
yield from compute.post("/projects", data={
data = {
"name": self._name,
"project_id": self._id,
"path": self._path,
"variables": self._variables
})
"path": self._path
}
else:
yield from compute.post("/projects", data={
data = {
"name": self._name,
"project_id": self._id,
"variables": self._variables
})
"project_id": self._id
}
if self._variables:
data["variables"] = self._variables
yield from compute.post("/projects", data=data)
self._project_created_on_compute.add(compute)
yield from node.create()
@@ -521,7 +525,8 @@ class Project:
self.dump()
return node
@locked_coroutine
@locking
@asyncio.coroutine
def __delete_node_links(self, node):
"""
Delete all link connected to this node.
@@ -779,7 +784,8 @@ class Project:
def _topology_file(self):
return os.path.join(self.path, self._filename)
@locked_coroutine
@locking
@asyncio.coroutine
def open(self):
"""
Load topology elements
@@ -884,7 +890,7 @@ class Project:
# Start all in the background without waiting for completion
# we ignore errors because we want to let the user open
# their project and fix it
asyncio.async(self.start_all())
asyncio_ensure_future(self.start_all())
@asyncio.coroutine
def wait_loaded(self):
@@ -928,7 +934,7 @@ class Project:
yield from wait_run_in_executor(self._create_duplicate_project_file, project_path, zipstream)
with open(project_path, "rb") as f:
project = yield from import_project(self._controller, str(uuid.uuid4()), f, location=location, name=name, keep_compute_id=True)
except (OSError, UnicodeEncodeError) as e:
except (ValueError, OSError, UnicodeEncodeError) as e:
raise aiohttp.web.HTTPConflict(text="Can not duplicate project: {}".format(str(e)))
if previous_status == "closed":
+1 -1
View File
@@ -101,7 +101,7 @@ class Snapshot:
with tempfile.TemporaryDirectory() as tmpdir:
zipstream = yield from export_project(self._project, tmpdir, keep_compute_id=True, allow_all_nodes=True)
yield from wait_run_in_executor(self._create_snapshot_file, zipstream)
except OSError as e:
except (ValueError, OSError, RuntimeError) as e:
raise aiohttp.web.HTTPConflict(text="Could not create snapshot file '{}': {}".format(self.path, e))
@asyncio.coroutine
+1 -1
View File
@@ -54,7 +54,7 @@ class UDPLink(Link):
try:
(node1_host, node2_host) = yield from node1.compute.get_ip_on_same_subnet(node2.compute)
except ValueError as e:
raise aiohttp.web.HTTPConflict(text=str(e))
raise aiohttp.web.HTTPConflict(text="Cannot get an IP address on same subnet: {}".format(e))
# Reserve a UDP port on both side
response = yield from node1.compute.post("/projects/{}/ports/udp".format(self._project.id))
+1 -1
View File
@@ -57,7 +57,7 @@ class CrashReport:
Report crash to a third party service
"""
DSN = "sync+https://c22d7bab81ea400ca8f6755a53188c5c:702ab3f6257a4bf38101edbdf8a4970a@sentry.io/38482"
DSN = "sync+https://56af21e241ed4c1894ebe17bf06b1cd1:6075f91067954267b51e90b9638a6fad@sentry.io/38482"
if hasattr(sys, "frozen"):
cacert = get_resource("cacert.pem")
if cacert is not None and os.path.isfile(cacert):
@@ -20,6 +20,7 @@ import aiohttp
from aiohttp.web import WebSocketResponse
from gns3server.web.route import Route
from gns3server.compute.notification_manager import NotificationManager
from gns3server.utils.asyncio import asyncio_ensure_future
@asyncio.coroutine
@@ -43,7 +44,7 @@ class NotificationHandler:
ws = WebSocketResponse()
yield from ws.prepare(request)
asyncio.async(process_websocket(ws))
asyncio_ensure_future(process_websocket(ws))
with notifications.queue() as queue:
while True:
@@ -213,7 +213,7 @@ class NodeHandler:
"node_id": "Node UUID"
},
status_codes={
204: "Instance started",
200: "Instance started",
400: "Invalid request",
404: "Instance doesn't exist"
},
@@ -225,7 +225,7 @@ class NodeHandler:
node = project.get_node(request.match_info["node_id"])
yield from node.start(data=request.json)
response.json(node)
response.set_status(201)
response.set_status(200)
@Route.post(
r"/projects/{project_id}/nodes/{node_id}/stop",
@@ -234,7 +234,7 @@ class NodeHandler:
"node_id": "Node UUID"
},
status_codes={
204: "Instance stopped",
200: "Instance stopped",
400: "Invalid request",
404: "Instance doesn't exist"
},
@@ -246,7 +246,7 @@ class NodeHandler:
node = project.get_node(request.match_info["node_id"])
yield from node.stop()
response.json(node)
response.set_status(201)
response.set_status(200)
@Route.post(
r"/projects/{project_id}/nodes/{node_id}/suspend",
@@ -255,7 +255,7 @@ class NodeHandler:
"node_id": "Node UUID"
},
status_codes={
204: "Instance suspended",
200: "Instance suspended",
400: "Invalid request",
404: "Instance doesn't exist"
},
@@ -267,7 +267,7 @@ class NodeHandler:
node = project.get_node(request.match_info["node_id"])
yield from node.suspend()
response.json(node)
response.set_status(201)
response.set_status(200)
@Route.post(
r"/projects/{project_id}/nodes/{node_id}/reload",
@@ -276,7 +276,7 @@ class NodeHandler:
"node_id": "Node UUID"
},
status_codes={
204: "Instance reloaded",
200: "Instance reloaded",
400: "Invalid request",
404: "Instance doesn't exist"
},
@@ -288,7 +288,7 @@ class NodeHandler:
node = project.get_node(request.match_info["node_id"])
yield from node.reload()
response.json(node)
response.set_status(201)
response.set_status(200)
@Route.delete(
r"/projects/{project_id}/nodes/{node_id}",
@@ -16,6 +16,7 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
import os
import sys
import aiohttp
import asyncio
import tempfile
@@ -25,6 +26,7 @@ from gns3server.controller import Controller
from gns3server.controller.import_project import import_project
from gns3server.controller.export_project import export_project
from gns3server.config import Config
from gns3server.utils.asyncio import asyncio_ensure_future
from gns3server.schemas.project import (
@@ -246,7 +248,7 @@ class ProjectHandler:
ws = aiohttp.web.WebSocketResponse()
yield from ws.prepare(request)
asyncio.async(process_websocket(ws))
asyncio_ensure_future(process_websocket(ws))
with controller.notification.queue(project) as queue:
while True:
@@ -302,8 +304,8 @@ class ProjectHandler:
yield from response.write_eof()
# Will be raise if you have no space left or permission issue on your temporary directory
# RuntimeError: something was wrong during the zip process
except (OSError, RuntimeError) as e:
raise aiohttp.web.HTTPNotFound(text="Can't export project: {}".format(str(e)))
except (ValueError, OSError, RuntimeError) as e:
raise aiohttp.web.HTTPNotFound(text="Cannot export project: {}".format(str(e)))
@Route.post(
r"/projects/{project_id}/import",
@@ -332,14 +334,25 @@ class ProjectHandler:
# We write the content to a temporary location and after we extract it all.
# It could be more optimal to stream this but it is not implemented in Python.
# Spooled means the file is temporary kept in memory until max_size is reached
# Cannot use tempfile.SpooledTemporaryFile(max_size=10000) in Python 3.7 due
# to a bug https://bugs.python.org/issue26175
try:
with tempfile.SpooledTemporaryFile(max_size=10000) as temp:
while True:
chunk = yield from request.content.read(1024)
if not chunk:
break
temp.write(chunk)
project = yield from import_project(controller, request.match_info["project_id"], temp, location=path, name=name)
if sys.version_info >= (3, 7) and sys.version_info < (3, 8):
with tempfile.TemporaryFile() as temp:
while True:
chunk = yield from request.content.read(1024)
if not chunk:
break
temp.write(chunk)
project = yield from import_project(controller, request.match_info["project_id"], temp, location=path, name=name)
else:
with tempfile.SpooledTemporaryFile(max_size=10000) as temp:
while True:
chunk = yield from request.content.read(1024)
if not chunk:
break
temp.write(chunk)
project = yield from import_project(controller, request.match_info["project_id"], temp, location=path, name=name)
except OSError as e:
raise aiohttp.web.HTTPInternalServerError(text="Could not import the project: {}".format(e))
@@ -20,6 +20,7 @@ from gns3server.config import Config
from gns3server.controller import Controller
from gns3server.schemas.version import VERSION_SCHEMA
from gns3server.version import __version__
from gns3server.utils.asyncio import asyncio_ensure_future
from aiohttp.web import HTTPConflict, HTTPForbidden
@@ -57,7 +58,7 @@ class ServerHandler:
tasks = []
for project in projects:
tasks.append(asyncio.async(project.close()))
tasks.append(asyncio_ensure_future(project.close()))
if tasks:
done, _ = yield from asyncio.wait(tasks)
@@ -71,7 +72,7 @@ class ServerHandler:
# then shutdown the server itself
from gns3server.web.web_server import WebServer
server = WebServer.instance()
asyncio.async(server.shutdown_server())
asyncio_ensure_future(server.shutdown_server())
response.set_status(201)
@Route.get(
+4
View File
@@ -104,6 +104,10 @@ COMPUTE_OBJECT_SCHEMA = {
"maximum": 100,
"minimum": 0
},
"last_error": {
"description": "Last error on the compute",
"type": ["string", "null"]
},
"capabilities": CAPABILITIES_SCHEMA
},
"additionalProperties": False,
+3 -3
View File
@@ -131,7 +131,7 @@ QEMU_CREATE_SCHEMA = {
},
"boot_priority": {
"description": "QEMU boot priority",
"enum": ["c", "d", "n", "cn", "cd"]
"enum": ["c", "d", "n", "cn", "cd", "dn", "dc", "nc", "nd"]
},
"ram": {
"description": "Amount of RAM in MB",
@@ -316,7 +316,7 @@ QEMU_UPDATE_SCHEMA = {
},
"boot_priority": {
"description": "QEMU boot priority",
"enum": ["c", "d", "n", "cn", "cd"]
"enum": ["c", "d", "n", "cn", "cd", "dn", "dc", "nc", "nd"]
},
"ram": {
"description": "Amount of RAM in MB",
@@ -500,7 +500,7 @@ QEMU_OBJECT_SCHEMA = {
},
"boot_priority": {
"description": "QEMU boot priority",
"enum": ["c", "d", "n", "cn", "cd"]
"enum": ["c", "d", "n", "cn", "cd", "dn", "dc", "nc", "nd"]
},
"node_directory": {
"description": "Path to the VM working directory",
+3 -2
View File
@@ -20,7 +20,7 @@ import time
import logging
import asyncio
from ..utils.asyncio import locked_coroutine
from ..utils.asyncio import locking
from .ubridge_error import UbridgeError
log = logging.getLogger(__name__)
@@ -176,7 +176,8 @@ class UBridgeHypervisor:
self._host = host
@locked_coroutine
@locking
@asyncio.coroutine
def send(self, command):
"""
Sends commands to this hypervisor.
+27 -18
View File
@@ -108,7 +108,7 @@ def _check_process(process, termination_callback):
def monitor_process(process, termination_callback):
"""Call termination_callback when a process dies"""
asyncio.async(_check_process(process, termination_callback))
asyncio_ensure_future(_check_process(process, termination_callback))
@asyncio.coroutine
@@ -138,23 +138,32 @@ def wait_for_named_pipe_creation(pipe_path, timeout=60):
return
raise asyncio.TimeoutError()
#FIXME: Use the following wrapper when we drop Python 3.4 and use the async def syntax
# def locking(f):
#
# @wraps(f)
# async def wrapper(oself, *args, **kwargs):
# lock_name = "__" + f.__name__ + "_lock"
# if not hasattr(oself, lock_name):
# setattr(oself, lock_name, asyncio.Lock())
# async with getattr(oself, lock_name):
# return await f(oself, *args, **kwargs)
# return wrapper
def locked_coroutine(f):
"""
Method decorator that replace asyncio.coroutine that warranty
that this specific method of this class instance will not we
executed twice at the same time
"""
@asyncio.coroutine
def new_function(*args, **kwargs):
def locking(f):
# In the instance of the class we will store
# a lock has an attribute.
lock_var_name = "__" + f.__name__ + "_lock"
if not hasattr(args[0], lock_var_name):
setattr(args[0], lock_var_name, asyncio.Lock())
@functools.wraps(f)
def wrapper(oself, *args, **kwargs):
lock_name = "__" + f.__name__ + "_lock"
if not hasattr(oself, lock_name):
setattr(oself, lock_name, asyncio.Lock())
with (yield from getattr(oself, lock_name)):
return (yield from f(oself, *args, **kwargs))
return wrapper
with (yield from getattr(args[0], lock_var_name)):
return (yield from f(*args, **kwargs))
return new_function
#FIXME: conservative approach to supported versions, please remove it when we drop the support to Python < 3.4.4
try:
from asyncio import ensure_future
asyncio_ensure_future = asyncio.ensure_future
except ImportError:
asyncio_ensure_future = getattr(asyncio, 'async')
@@ -20,6 +20,8 @@ import copy
import asyncio
import asyncio.subprocess
from gns3server.utils.asyncio import asyncio_ensure_future
import logging
log = logging.getLogger(__name__)
@@ -69,8 +71,8 @@ class AsyncioRawCommandServer:
else:
replaces.append((replace[0], replace[1], ))
network_read = asyncio.async(network_reader.read(READ_SIZE))
reader_read = asyncio.async(process_reader.read(READ_SIZE))
network_read = asyncio_ensure_future(network_reader.read(READ_SIZE))
reader_read = asyncio_ensure_future(process_reader.read(READ_SIZE))
timeout = 30
while True:
@@ -89,7 +91,7 @@ class AsyncioRawCommandServer:
if network_reader.at_eof():
raise ConnectionResetError()
network_read = asyncio.async(network_reader.read(READ_SIZE))
network_read = asyncio_ensure_future(network_reader.read(READ_SIZE))
process_writer.write(data)
yield from process_writer.drain()
@@ -97,7 +99,7 @@ class AsyncioRawCommandServer:
if process_reader.at_eof():
raise ConnectionResetError()
reader_read = asyncio.async(process_reader.read(READ_SIZE))
reader_read = asyncio_ensure_future(process_reader.read(READ_SIZE))
for replace in replaces:
data = data.replace(replace[0], replace[1])
+16 -10
View File
@@ -20,6 +20,8 @@ import asyncio
import asyncio.subprocess
import struct
from gns3server.utils.asyncio import asyncio_ensure_future
import logging
log = logging.getLogger(__name__)
@@ -212,9 +214,12 @@ class AsyncioTelnetServer:
@asyncio.coroutine
def close(self):
for writer, connection in self._connections.items():
writer.write_eof()
yield from writer.drain()
try:
writer.write_eof()
yield from writer.drain()
except ConnectionResetError:
continue
@asyncio.coroutine
def client_connected_hook(self):
pass
@@ -229,13 +234,13 @@ class AsyncioTelnetServer:
self._reader_process = network_reader
if self._reader:
if self._reader_process == network_reader:
self._current_read = asyncio.async(self._reader.read(READ_SIZE))
self._current_read = asyncio_ensure_future(self._reader.read(READ_SIZE))
return self._current_read
return None
@asyncio.coroutine
def _process(self, network_reader, network_writer, connection):
network_read = asyncio.async(network_reader.read(READ_SIZE))
network_read = asyncio_ensure_future(network_reader.read(READ_SIZE))
reader_read = yield from self._get_reader(network_reader)
while True:
@@ -261,7 +266,7 @@ class AsyncioTelnetServer:
if network_reader.at_eof():
raise ConnectionResetError()
network_read = asyncio.async(network_reader.read(READ_SIZE))
network_read = asyncio_ensure_future(network_reader.read(READ_SIZE))
if IAC in data:
data = yield from self._IAC_parser(data, network_reader, network_writer, connection)
@@ -317,6 +322,7 @@ class AsyncioTelnetServer:
else:
log.debug("Not supported negotiation sequence, received {} bytes", len(data))
@asyncio.coroutine
def _IAC_parser(self, buf, network_reader, network_writer, connection):
"""
Processes and removes any Telnet commands from the buffer.
@@ -418,10 +424,10 @@ if __name__ == '__main__':
logging.basicConfig(level=logging.DEBUG)
loop = asyncio.get_event_loop()
process = loop.run_until_complete(asyncio.async(asyncio.subprocess.create_subprocess_exec("/bin/sh", "-i",
stdout=asyncio.subprocess.PIPE,
stderr=asyncio.subprocess.STDOUT,
stdin=asyncio.subprocess.PIPE)))
process = loop.run_until_complete(asyncio_ensure_future(asyncio.subprocess.create_subprocess_exec("/bin/sh", "-i",
stdout=asyncio.subprocess.PIPE,
stderr=asyncio.subprocess.STDOUT,
stdin=asyncio.subprocess.PIPE)))
server = AsyncioTelnetServer(reader=process.stdout, writer=process.stdin, binary=False, echo=False)
coro = asyncio.start_server(server.run, '127.0.0.1', 4444, loop=loop)
+2 -2
View File
@@ -23,8 +23,8 @@
# or negative for a release candidate or beta (after the base version
# number has been incremented)
__version__ = "2.1.8dev1"
__version_info__ = (2, 1, 8, 99)
__version__ = "2.1.10dev2"
__version_info__ = (2, 1, 10, 99)
# If it's a git checkout try to add the commit
if "dev" in __version__:
+4 -3
View File
@@ -35,6 +35,7 @@ from ..compute import MODULES
from ..compute.port_manager import PortManager
from ..compute.qemu import Qemu
from ..controller import Controller
from ..utils.asyncio import asyncio_ensure_future
# do not delete this import
import gns3server.handlers
@@ -136,7 +137,7 @@ class WebServer:
def signal_handler(signame, *args):
log.warning("Server has got signal {}, exiting...".format(signame))
asyncio.async(self.shutdown_server())
asyncio_ensure_future(self.shutdown_server())
signals = ["SIGTERM", "SIGINT"]
if sys.platform.startswith("win"):
@@ -203,7 +204,7 @@ class WebServer:
# Because with a large image collection
# without md5sum already computed we start the
# computing with server start
asyncio.async(Qemu.instance().list_images())
asyncio_ensure_future(Qemu.instance().list_images())
def run(self):
"""
@@ -283,7 +284,7 @@ class WebServer:
self._exit_handling()
if server_config.getboolean("shell"):
asyncio.async(self.start_shell())
asyncio_ensure_future(self.start_shell())
try:
self._loop.run_forever()