mirror of
https://github.com/GNS3/gns3-server.git
synced 2026-11-03 05:51:15 +02:00
Merge remote-tracking branch 'origin/2.1' into 2.1
This commit is contained in:
commit
4e712280b3
458 files changed
+11443
-10751
No files matched your search
@@ -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"
|
||||
}
|
||||
}
|
||||
@@ -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,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": {
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
"adapter_type": "e1000",
|
||||
"adapters": 4,
|
||||
"ram": 16384,
|
||||
"arch": "i386",
|
||||
"arch": "x86_64",
|
||||
"console_type": "telnet",
|
||||
"kvm": "require",
|
||||
"options": "-smp 4"
|
||||
|
||||
@@ -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": {
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
||||
@@ -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": {
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
@@ -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": {
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
]
|
||||
|
||||
@@ -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": {
|
||||
|
||||
@@ -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": {
|
||||
|
||||
@@ -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": {
|
||||
|
||||
@@ -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": {
|
||||
|
||||
@@ -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": {
|
||||
|
||||
@@ -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": {
|
||||
|
||||
@@ -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": {
|
||||
|
||||
@@ -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": {
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -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": [
|
||||
|
||||
@@ -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": {
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -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": {
|
||||
|
||||
@@ -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": {
|
||||
|
||||
@@ -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": {
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
|
||||
@@ -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": {
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
]
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
@@ -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": {
|
||||
|
||||
@@ -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": {
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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).
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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):
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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()))
|
||||
@@ -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]
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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):
|
||||
"""
|
||||
|
||||
@@ -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.
|
||||
|
||||
|
||||
@@ -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):
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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.
|
||||
|
||||
|
||||
@@ -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.
|
||||
|
||||
|
||||
@@ -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":
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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])
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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__:
|
||||
|
||||
@@ -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()
|
||||
|
||||
Reference in new issue
Block a user