mirror of
https://github.com/GNS3/gns3-server.git
synced 2025-01-22 09:23:48 +02:00
commit
185cd01e19
12
CHANGELOG
12
CHANGELOG
@ -1,9 +1,19 @@
|
|||||||
# Change Log
|
# Change Log
|
||||||
|
|
||||||
|
## 2.2.53 21/01/2025
|
||||||
|
|
||||||
|
* Bundle web-ui v2.2.53
|
||||||
|
* Add more information when patching .vbox file. Ref https://github.com/GNS3/gns3-gui/issues/3542
|
||||||
|
* Increase timeout to run compute HTTP queries. Fixes #2461
|
||||||
|
* Use 'allow_methods="*"' in aiohttp_cors.ResourceOptions(). Fixes #2459
|
||||||
|
* Upgrade dependencies
|
||||||
|
* Update remote-install.sh to support a custom repository and the deb822 source format
|
||||||
|
* Fix: do not use the iourc file if IOU licence check is not enabled
|
||||||
|
|
||||||
|
|
||||||
## 2.2.52 02/12/2024
|
## 2.2.52 02/12/2024
|
||||||
|
|
||||||
* Bundle web-ui v2.2.52
|
* Bundle web-ui v2.2.52
|
||||||
* Sync appliances
|
|
||||||
* Remove restrictions based on file extension when listing images and fix ELF header checks
|
* Remove restrictions based on file extension when listing images and fix ELF header checks
|
||||||
* Fix use project name instead of ID for fast duplication when running local server. Fixes #2446
|
* Fix use project name instead of ID for fast duplication when running local server. Fixes #2446
|
||||||
* Overwrite user resources when the originals have changed.
|
* Overwrite user resources when the originals have changed.
|
||||||
|
56
gns3server/appliances/alpine-cloud.gns3a
Normal file
56
gns3server/appliances/alpine-cloud.gns3a
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
{
|
||||||
|
"appliance_id": "edbaa01e-2032-4ee2-bb9f-dd5c4d84c270",
|
||||||
|
"name": "Alpine Cloud Guest",
|
||||||
|
"category": "guest",
|
||||||
|
"description": "Alpine Linux is a security-oriented, lightweight Linux distribution based on musl libc and busybox.",
|
||||||
|
"vendor_name": "Alpine Linux Development Team",
|
||||||
|
"vendor_url": "http://alpinelinux.org",
|
||||||
|
"vendor_logo_url": "https://raw.githubusercontent.com/GNS3/gns3-registry/master/vendor-logos/Alpine Linux.png",
|
||||||
|
"documentation_url": "http://wiki.alpinelinux.org",
|
||||||
|
"product_name": "Alpine Linux",
|
||||||
|
"product_url": "https://www.alpinelinux.org/cloud/",
|
||||||
|
"registry_version": 4,
|
||||||
|
"status": "stable",
|
||||||
|
"maintainer": "GNS3 Team",
|
||||||
|
"maintainer_email": "developers@gns3.net",
|
||||||
|
"usage": "\nUsername: alpine\nPassword: alpine",
|
||||||
|
"port_name_format": "Ethernet{0}",
|
||||||
|
"qemu": {
|
||||||
|
"adapter_type": "virtio-net-pci",
|
||||||
|
"adapters": 1,
|
||||||
|
"ram": 1024,
|
||||||
|
"hda_disk_interface": "virtio",
|
||||||
|
"arch": "x86_64",
|
||||||
|
"console_type": "telnet",
|
||||||
|
"boot_priority": "c",
|
||||||
|
"kvm": "require",
|
||||||
|
"options": "-nographic"
|
||||||
|
},
|
||||||
|
"images": [
|
||||||
|
{
|
||||||
|
"filename": "generic_alpine-3.21.2-x86_64-bios-cloudinit-r0.qcow2",
|
||||||
|
"version": "3.21.2",
|
||||||
|
"md5sum": "b40825dff2867e0ffaffbc4c87674462",
|
||||||
|
"filesize": 189726720,
|
||||||
|
"download_url": "https://www.alpinelinux.org/cloud/",
|
||||||
|
"direct_download_url": "https://dl-cdn.alpinelinux.org/alpine/v3.21/releases/cloud/generic_alpine-3.21.2-x86_64-bios-cloudinit-r0.qcow2"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "alpine-cloud-init-data.iso",
|
||||||
|
"version": "1.0",
|
||||||
|
"md5sum": "b1b4b16cc3bf0250c0fa377c19c97683",
|
||||||
|
"filesize": 374784,
|
||||||
|
"download_url": "https://github.com/GNS3/gns3-registry/tree/master/cloud-init/alpine-cloud",
|
||||||
|
"direct_download_url": "https://github.com/GNS3/gns3-registry/raw/master/cloud-init/alpine-cloud/alpine-cloud-init-data.iso"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"versions": [
|
||||||
|
{
|
||||||
|
"name": "3.21.2",
|
||||||
|
"images": {
|
||||||
|
"hda_disk_image": "generic_alpine-3.21.2-x86_64-bios-cloudinit-r0.qcow2",
|
||||||
|
"cdrom_image": "alpine-cloud-init-data.iso"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
@ -2,14 +2,14 @@
|
|||||||
"appliance_id": "c90f3ff3-4ed2-4437-9afb-21232fa92015",
|
"appliance_id": "c90f3ff3-4ed2-4437-9afb-21232fa92015",
|
||||||
"name": "Arista vEOS",
|
"name": "Arista vEOS",
|
||||||
"category": "multilayer_switch",
|
"category": "multilayer_switch",
|
||||||
"description": "Arista EOS\u00ae is the core of Arista cloud networking solutions for next-generation data centers and cloud networks. Cloud architectures built with Arista EOS scale to tens of thousands of compute and storage nodes with management and provisioning capabilities that work at scale. Through its programmability, EOS enables a set of software applications that deliver workflow automation, high availability, unprecedented network visibility and analytics and rapid integration with a wide range of third-party applications for virtualization, management, automation and orchestration services.\n\nArista Extensible Operating System (EOS) is a fully programmable and highly modular, Linux-based network operation system, using familiar industry standard CLI and runs a single binary software image across the Arista switching family. Architected for resiliency and programmability, EOS has a unique multi-process state sharing architecture that separates state information and packet forwarding from protocol processing and application logic.",
|
"description": "Arista EOS is the core of Arista cloud networking solutions for next-generation data centers and cloud networks. Cloud architectures built with Arista EOS scale to tens of thousands of compute and storage nodes with management and provisioning capabilities that work at scale. Through its programmability, EOS enables a set of software applications that deliver workflow automation, high availability, unprecedented network visibility and analytics and rapid integration with a wide range of third-party applications for virtualization, management, automation and orchestration services.\n\nArista Extensible Operating System (EOS) is a fully programmable and highly modular, Linux-based network operation system, using familiar industry standard CLI and runs a single binary software image across the Arista switching family. Architected for resiliency and programmability, EOS has a unique multi-process state sharing architecture that separates state information and packet forwarding from protocol processing and application logic.",
|
||||||
"vendor_name": "Arista",
|
"vendor_name": "Arista",
|
||||||
"vendor_url": "http://www.arista.com/",
|
"vendor_url": "http://www.arista.com/",
|
||||||
"documentation_url": "https://www.arista.com/assets/data/docs/Manuals/EOS-4.17.2F-Manual.pdf",
|
"documentation_url": "https://www.arista.com/assets/data/docs/Manuals/EOS-4.17.2F-Manual.pdf",
|
||||||
"product_name": "vEOS",
|
"product_name": "vEOS",
|
||||||
"product_url": "https://eos.arista.com/",
|
"product_url": "https://eos.arista.com/",
|
||||||
"registry_version": 4,
|
"registry_version": 4,
|
||||||
"status": "experimental",
|
"status": "stable",
|
||||||
"maintainer": "GNS3 Team",
|
"maintainer": "GNS3 Team",
|
||||||
"maintainer_email": "developers@gns3.net",
|
"maintainer_email": "developers@gns3.net",
|
||||||
"usage": "The login is admin, with no password by default",
|
"usage": "The login is admin, with no password by default",
|
||||||
@ -29,87 +29,24 @@
|
|||||||
},
|
},
|
||||||
"images": [
|
"images": [
|
||||||
{
|
{
|
||||||
"filename": "vEOS64-lab-4.32.0F.vmdk",
|
"filename": "vEOS-lab-4.33.1F.qcow2",
|
||||||
"version": "4.32.0F",
|
"version": "4.33.1F",
|
||||||
"md5sum": "851771260bb18ad3e90fa6956f0c6161",
|
"md5sum": "8f662409c0732ed9f682edce63601e8a",
|
||||||
"filesize": 591724544,
|
"filesize": 611909632,
|
||||||
"download_url": "https://www.arista.com/en/support/software-download"
|
"download_url": "https://www.arista.com/en/support/software-download"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"filename": "vEOS64-lab-4.31.3M.vmdk",
|
"filename": "vEOS-lab-4.32.3M.qcow2",
|
||||||
"version": "4.31.3M",
|
"version": "4.32.3M",
|
||||||
"md5sum": "7df107da137f4a4e752014d4f0e94cd3",
|
"md5sum": "46fc46f5ed1da8752eed8396f08862f8",
|
||||||
"filesize": 577961984,
|
"filesize": 605683712,
|
||||||
"download_url": "https://www.arista.com/en/support/software-download"
|
"download_url": "https://www.arista.com/en/support/software-download"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"filename": "vEOS64-lab-4.30.6M.vmdk",
|
"filename": "vEOS-lab-4.31.6M.qcow2",
|
||||||
"version": "4.30.6M",
|
"version": "4.31.6M",
|
||||||
"md5sum": "19721aace820b9ebf6d7ae6524803cf5",
|
"md5sum": "7410110b77472f058322ec4681f8a356",
|
||||||
"filesize": 553123840,
|
"filesize": 590479360,
|
||||||
"download_url": "https://www.arista.com/en/support/software-download"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"filename": "vEOS64-lab-4.29.8M.vmdk",
|
|
||||||
"version": "4.29.8M",
|
|
||||||
"md5sum": "131888f74cd63a93894521d40eb4d0b6",
|
|
||||||
"filesize": 548405248,
|
|
||||||
"download_url": "https://www.arista.com/en/support/software-download"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"filename": "vEOS64-lab-4.28.11M.vmdk",
|
|
||||||
"version": "4.28.11M",
|
|
||||||
"md5sum": "6cac0e7b04a74ee0dc358327a00accfd",
|
|
||||||
"filesize": 513343488,
|
|
||||||
"download_url": "https://www.arista.com/en/support/software-download"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"filename": "vEOS64-lab-4.27.12M.vmdk",
|
|
||||||
"version": "4.27.12M",
|
|
||||||
"md5sum": "34c4f785c7fc054cda8754dd13c0d7c7",
|
|
||||||
"filesize": 496697344,
|
|
||||||
"download_url": "https://www.arista.com/en/support/software-download"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"filename": "vEOS-lab-4.32.0F.vmdk",
|
|
||||||
"version": "4.32.0F",
|
|
||||||
"md5sum": "584b901a1249717504050e48f74fb8dd",
|
|
||||||
"filesize": 591396864,
|
|
||||||
"download_url": "https://www.arista.com/en/support/software-download"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"filename": "vEOS-lab-4.31.3M.vmdk",
|
|
||||||
"version": "4.31.3M",
|
|
||||||
"md5sum": "a2e130697cdf8547006eebebde6eefca",
|
|
||||||
"filesize": 590086144,
|
|
||||||
"download_url": "https://www.arista.com/en/support/software-download"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"filename": "vEOS-lab-4.30.6M.vmdk",
|
|
||||||
"version": "4.30.6M",
|
|
||||||
"md5sum": "a4467648bcfa7b19640af8a4ad3153c6",
|
|
||||||
"filesize": 565968896,
|
|
||||||
"download_url": "https://www.arista.com/en/support/software-download"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"filename": "vEOS-lab-4.29.8M.vmdk",
|
|
||||||
"version": "4.29.8M",
|
|
||||||
"md5sum": "1952f6114a4376212c525db9ec8efd5f",
|
|
||||||
"filesize": 558039040,
|
|
||||||
"download_url": "https://www.arista.com/en/support/software-download"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"filename": "vEOS-lab-4.28.11M.vmdk",
|
|
||||||
"version": "4.28.11M",
|
|
||||||
"md5sum": "5502df24dfc231c45afb33d6018c16d0",
|
|
||||||
"filesize": 521338880,
|
|
||||||
"download_url": "https://www.arista.com/en/support/software-download"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"filename": "vEOS-lab-4.27.12M.vmdk",
|
|
||||||
"version": "4.27.12M",
|
|
||||||
"md5sum": "e08a97e7c1977993f947fedeb4c6ddd5",
|
|
||||||
"filesize": 504299520,
|
|
||||||
"download_url": "https://www.arista.com/en/support/software-download"
|
"download_url": "https://www.arista.com/en/support/software-download"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -118,459 +55,28 @@
|
|||||||
"md5sum": "8d7e754efebca1930a93a2587ff7606c",
|
"md5sum": "8d7e754efebca1930a93a2587ff7606c",
|
||||||
"filesize": 6291456,
|
"filesize": 6291456,
|
||||||
"download_url": "https://www.arista.com/en/support/software-download"
|
"download_url": "https://www.arista.com/en/support/software-download"
|
||||||
},
|
|
||||||
{
|
|
||||||
"filename": "vEOS-lab-4.26.2F.vmdk",
|
|
||||||
"version": "4.26.2F",
|
|
||||||
"md5sum": "de8ce9750fddb63bd3f71bccfcd7651e",
|
|
||||||
"filesize": 475332608,
|
|
||||||
"download_url": "https://www.arista.com/en/support/software-download"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"filename": "vEOS-lab-4.25.3M.vmdk",
|
|
||||||
"version": "4.25.3M",
|
|
||||||
"md5sum": "2f196969036b4d283e86f15118d59c26",
|
|
||||||
"filesize": 451543040,
|
|
||||||
"download_url": "https://www.arista.com/en/support/software-download"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"filename": "vEOS-lab-4.24.3M.vmdk",
|
|
||||||
"version": "4.24.3M",
|
|
||||||
"md5sum": "0a28e44c7ce4a8965f24a4a463a89b7d",
|
|
||||||
"filesize": 455213056,
|
|
||||||
"download_url": "https://www.arista.com/en/support/software-download"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"filename": "vEOS-lab-4.24.2.1F.vmdk",
|
|
||||||
"version": "4.24.2.1F",
|
|
||||||
"md5sum": "6bab8b59ce5230e243e56f4127448fc8",
|
|
||||||
"filesize": 455213056,
|
|
||||||
"download_url": "https://www.arista.com/en/support/software-download"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"filename": "vEOS-lab-4.23.4.2M.vmdk",
|
|
||||||
"version": "4.23.4.2M",
|
|
||||||
"md5sum": "d21cbef4e39f1e783b13a926cb54a242",
|
|
||||||
"filesize": 454295552,
|
|
||||||
"download_url": "https://www.arista.com/en/support/software-download"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"filename": "vEOS-lab-4.23.0.1F.vmdk",
|
|
||||||
"version": "4.23.0.1F",
|
|
||||||
"md5sum": "08d52154aa11a834aef9f42bbf29f977",
|
|
||||||
"filesize": 439484416,
|
|
||||||
"download_url": "https://www.arista.com/en/support/software-download"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"filename": "vEOS-lab-4.22.2.1F.vmdk",
|
|
||||||
"version": "4.22.2.1F",
|
|
||||||
"md5sum": "2a425bf8efe569a2bdf0e328f240cd16",
|
|
||||||
"filesize": 426377216,
|
|
||||||
"download_url": "https://www.arista.com/en/support/software-download"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"filename": "vEOS-lab-4.22.0F.vmdk",
|
|
||||||
"version": "4.22.0F",
|
|
||||||
"md5sum": "cfcc75c2b8176cfd819afcfd6799b74c",
|
|
||||||
"filesize": 414121984,
|
|
||||||
"download_url": "https://www.arista.com/en/support/software-download"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"filename": "vEOS-lab-4.21.1.1F.vmdk",
|
|
||||||
"version": "4.21.1F",
|
|
||||||
"md5sum": "02bfb7e53781fd44ff02357f201586d9",
|
|
||||||
"filesize": 358809600,
|
|
||||||
"download_url": "https://www.arista.com/en/support/software-download"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"filename": "vEOS-lab-4.20.10M-combined.vmdk",
|
|
||||||
"version": "4.20.10M-combined",
|
|
||||||
"md5sum": "d1f2d650f93dbf24e04fdd2c9d62bd62",
|
|
||||||
"filesize": 334626816,
|
|
||||||
"download_url": "https://www.arista.com/en/support/software-download"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"filename": "vEOS-lab-4.20.1F.vmdk",
|
|
||||||
"version": "4.20.1F",
|
|
||||||
"md5sum": "aadb6f3dbff28317f68cb4c4502d0db8",
|
|
||||||
"filesize": 662044672,
|
|
||||||
"download_url": "https://www.arista.com/en/support/software-download"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"filename": "vEOS-lab-4.19.10M-combined.vmdk",
|
|
||||||
"version": "4.19.10M-combined",
|
|
||||||
"md5sum": "103daa45c33be4584cbe6adc60de46a3",
|
|
||||||
"filesize": 324141056,
|
|
||||||
"download_url": "https://www.arista.com/en/support/software-download"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"filename": "vEOS-lab-4.19.10M.vmdk",
|
|
||||||
"version": "4.19.10M",
|
|
||||||
"md5sum": "665ed14389411ae5f16ba0a2ff84240a",
|
|
||||||
"filesize": 637337600,
|
|
||||||
"download_url": "https://www.arista.com/en/support/software-download"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"filename": "vEOS-lab-4.18.10M-combined.vmdk",
|
|
||||||
"version": "4.18.10M-combined",
|
|
||||||
"md5sum": "e33e0ef5b8cecc84c5bb57569b36b9c6",
|
|
||||||
"filesize": 317652992,
|
|
||||||
"download_url": "https://www.arista.com/en/support/software-download"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"filename": "vEOS-lab-4.18.10M.vmdk",
|
|
||||||
"version": "4.18.10M",
|
|
||||||
"md5sum": "1d87e9ace37fe3706dbf3e49c8d4d231",
|
|
||||||
"filesize": 624427008,
|
|
||||||
"download_url": "https://www.arista.com/en/support/software-download"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"filename": "vEOS-lab-4.18.5M.vmdk",
|
|
||||||
"version": "4.18.5M",
|
|
||||||
"md5sum": "b1ee6268dbaf2b2276fd7a5286c7ce2b",
|
|
||||||
"filesize": 623116288,
|
|
||||||
"download_url": "https://www.arista.com/en/support/software-download"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"filename": "vEOS-lab-4.18.1F.vmdk",
|
|
||||||
"version": "4.18.1F",
|
|
||||||
"md5sum": "9648c63185f3b793b47528a858ca4364",
|
|
||||||
"filesize": 620625920,
|
|
||||||
"download_url": "https://www.arista.com/en/support/software-download"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"filename": "vEOS-lab-4.17.8M.vmdk",
|
|
||||||
"version": "4.17.8M",
|
|
||||||
"md5sum": "afc79a06f930ea2cc0ae3e03cbfd3f23",
|
|
||||||
"filesize": 608829440,
|
|
||||||
"download_url": "https://www.arista.com/en/support/software-download"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"filename": "vEOS-lab-4.17.2F.vmdk",
|
|
||||||
"version": "4.17.2F",
|
|
||||||
"md5sum": "3b4845edfa77cf9aaeb9c0a005d3e277",
|
|
||||||
"filesize": 609615872,
|
|
||||||
"download_url": "https://www.arista.com/en/support/software-download"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"filename": "vEOS-lab-4.16.13M.vmdk",
|
|
||||||
"version": "4.16.13M",
|
|
||||||
"md5sum": "4d0facf90140fc3aab031f0f8f88a32f",
|
|
||||||
"filesize": 521404416,
|
|
||||||
"download_url": "https://www.arista.com/en/support/software-download"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"filename": "vEOS-lab-4.16.6M.vmdk",
|
|
||||||
"version": "4.16.6M",
|
|
||||||
"md5sum": "b3f7b7cee17f2e66bb38b453a4939fef",
|
|
||||||
"filesize": 519962624,
|
|
||||||
"download_url": "https://www.arista.com/en/support/software-download"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"filename": "vEOS-lab-4.15.10M.vmdk",
|
|
||||||
"version": "4.15.10M",
|
|
||||||
"md5sum": "98e08281a9c48ddf6f3c5d62a124a20f",
|
|
||||||
"filesize": 517079040,
|
|
||||||
"download_url": "https://www.arista.com/en/support/software-download"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"filename": "vEOS-lab-4.15.5M.vmdk",
|
|
||||||
"version": "4.15.5M",
|
|
||||||
"md5sum": "cd74bb69c7ee905ac3d33c4d109f3ab7",
|
|
||||||
"filesize": 516030464,
|
|
||||||
"download_url": "https://www.arista.com/en/support/software-download"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"filename": "vEOS-lab-4.14.14M.vmdk",
|
|
||||||
"version": "4.14.14M",
|
|
||||||
"md5sum": "d81ba0522f4d7838d96f7985e41cdc47",
|
|
||||||
"filesize": 422641664,
|
|
||||||
"download_url": "https://www.arista.com/en/support/software-download"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"filename": "vEOS-lab-4.13.16M.vmdk",
|
|
||||||
"version": "4.13.16M",
|
|
||||||
"md5sum": "5763b2c043830c341c8b1009f4ea9a49",
|
|
||||||
"filesize": 404684800,
|
|
||||||
"download_url": "https://www.arista.com/en/support/software-download"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"filename": "vEOS-lab-4.13.8M.vmdk",
|
|
||||||
"version": "4.13.8M",
|
|
||||||
"md5sum": "a47145b9e6e7a24171c0850f8755535e",
|
|
||||||
"filesize": 409010176,
|
|
||||||
"download_url": "https://www.arista.com/en/support/software-download"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"filename": "Aboot-veos-serial-8.0.0.iso",
|
|
||||||
"version": "8.0.0",
|
|
||||||
"md5sum": "488ad1c435d18c69bb8d69c7806457c9",
|
|
||||||
"filesize": 5242880,
|
|
||||||
"download_url": "https://www.arista.com/en/support/software-download"
|
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"versions": [
|
"versions": [
|
||||||
{
|
{
|
||||||
"name": "4.32.0F",
|
"name": "4.33.1F",
|
||||||
"images": {
|
"images": {
|
||||||
"hda_disk_image": "Aboot-veos-serial-8.0.2.iso",
|
"hda_disk_image": "Aboot-veos-serial-8.0.2.iso",
|
||||||
"hdb_disk_image": "vEOS64-lab-4.32.0F.vmdk"
|
"hdb_disk_image": "vEOS-lab-4.33.1F.qcow2"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "4.31.3M",
|
"name": "4.32.3M",
|
||||||
"images": {
|
"images": {
|
||||||
"hda_disk_image": "Aboot-veos-serial-8.0.2.iso",
|
"hda_disk_image": "Aboot-veos-serial-8.0.2.iso",
|
||||||
"hdb_disk_image": "vEOS64-lab-4.31.3M.vmdk"
|
"hdb_disk_image": "vEOS-lab-4.32.3M.qcow2"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "4.30.6M",
|
"name": "4.31.6M",
|
||||||
"images": {
|
"images": {
|
||||||
"hda_disk_image": "Aboot-veos-serial-8.0.2.iso",
|
"hda_disk_image": "Aboot-veos-serial-8.0.2.iso",
|
||||||
"hdb_disk_image": "vEOS64-lab-4.30.6M.vmdk"
|
"hdb_disk_image": "vEOS-lab-4.31.6M.qcow2"
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "4.29.8M",
|
|
||||||
"images": {
|
|
||||||
"hda_disk_image": "Aboot-veos-serial-8.0.2.iso",
|
|
||||||
"hdb_disk_image": "vEOS64-lab-4.29.8M.vmdk"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "4.28.11M",
|
|
||||||
"images": {
|
|
||||||
"hda_disk_image": "Aboot-veos-serial-8.0.2.iso",
|
|
||||||
"hdb_disk_image": "vEOS64-lab-4.28.11M.vmdk"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "4.27.12M",
|
|
||||||
"images": {
|
|
||||||
"hda_disk_image": "Aboot-veos-serial-8.0.2.iso",
|
|
||||||
"hdb_disk_image": "vEOS64-lab-4.27.12M.vmdk"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "4.32.0F",
|
|
||||||
"images": {
|
|
||||||
"hda_disk_image": "Aboot-veos-serial-8.0.2.iso",
|
|
||||||
"hdb_disk_image": "vEOS-lab-4.32.0F.vmdk"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "4.31.3M",
|
|
||||||
"images": {
|
|
||||||
"hda_disk_image": "Aboot-veos-serial-8.0.2.iso",
|
|
||||||
"hdb_disk_image": "vEOS-lab-4.31.3M.vmdk"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "4.30.6M",
|
|
||||||
"images": {
|
|
||||||
"hda_disk_image": "Aboot-veos-serial-8.0.2.iso",
|
|
||||||
"hdb_disk_image": "vEOS-lab-4.30.6M.vmdk"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "4.29.8M",
|
|
||||||
"images": {
|
|
||||||
"hda_disk_image": "Aboot-veos-serial-8.0.2.iso",
|
|
||||||
"hdb_disk_image": "vEOS-lab-4.29.8M.vmdk"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "4.28.11M",
|
|
||||||
"images": {
|
|
||||||
"hda_disk_image": "Aboot-veos-serial-8.0.2.iso",
|
|
||||||
"hdb_disk_image": "vEOS-lab-4.28.11M.vmdk"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "4.27.12M",
|
|
||||||
"images": {
|
|
||||||
"hda_disk_image": "Aboot-veos-serial-8.0.2.iso",
|
|
||||||
"hdb_disk_image": "vEOS-lab-4.27.12M.vmdk"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "4.26.2F",
|
|
||||||
"images": {
|
|
||||||
"hda_disk_image": "Aboot-veos-serial-8.0.0.iso",
|
|
||||||
"hdb_disk_image": "vEOS-lab-4.26.2F.vmdk"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "4.25.3M",
|
|
||||||
"images": {
|
|
||||||
"hda_disk_image": "Aboot-veos-serial-8.0.0.iso",
|
|
||||||
"hdb_disk_image": "vEOS-lab-4.25.3M.vmdk"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "4.24.3M",
|
|
||||||
"images": {
|
|
||||||
"hda_disk_image": "Aboot-veos-serial-8.0.0.iso",
|
|
||||||
"hdb_disk_image": "vEOS-lab-4.24.3M.vmdk"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "4.24.2.1F",
|
|
||||||
"images": {
|
|
||||||
"hda_disk_image": "Aboot-veos-serial-8.0.0.iso",
|
|
||||||
"hdb_disk_image": "vEOS-lab-4.24.2.1F.vmdk"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "4.23.4.2M",
|
|
||||||
"images": {
|
|
||||||
"hda_disk_image": "Aboot-veos-serial-8.0.0.iso",
|
|
||||||
"hdb_disk_image": "vEOS-lab-4.23.4.2M.vmdk"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "4.23.0.1F",
|
|
||||||
"images": {
|
|
||||||
"hda_disk_image": "Aboot-veos-serial-8.0.0.iso",
|
|
||||||
"hdb_disk_image": "vEOS-lab-4.23.0.1F.vmdk"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "4.22.2.1F",
|
|
||||||
"images": {
|
|
||||||
"hda_disk_image": "Aboot-veos-serial-8.0.0.iso",
|
|
||||||
"hdb_disk_image": "vEOS-lab-4.22.2.1F.vmdk"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "4.22.0F",
|
|
||||||
"images": {
|
|
||||||
"hda_disk_image": "Aboot-veos-serial-8.0.0.iso",
|
|
||||||
"hdb_disk_image": "vEOS-lab-4.22.0F.vmdk"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "4.21.1F",
|
|
||||||
"images": {
|
|
||||||
"hda_disk_image": "Aboot-veos-serial-8.0.0.iso",
|
|
||||||
"hdb_disk_image": "vEOS-lab-4.21.1.1F.vmdk"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "4.20.10M-combined",
|
|
||||||
"images": {
|
|
||||||
"hda_disk_image": "vEOS-lab-4.20.10M-combined.vmdk"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "4.20.1F",
|
|
||||||
"images": {
|
|
||||||
"hda_disk_image": "Aboot-veos-serial-8.0.0.iso",
|
|
||||||
"hdb_disk_image": "vEOS-lab-4.20.1F.vmdk"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "4.19.10M-combined",
|
|
||||||
"images": {
|
|
||||||
"hda_disk_image": "vEOS-lab-4.19.10M-combined.vmdk"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "4.19.10M",
|
|
||||||
"images": {
|
|
||||||
"hda_disk_image": "Aboot-veos-serial-8.0.0.iso",
|
|
||||||
"hdb_disk_image": "vEOS-lab-4.19.10M.vmdk"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "4.18.10M-combined",
|
|
||||||
"images": {
|
|
||||||
"hda_disk_image": "vEOS-lab-4.18.10M-combined.vmdk"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "4.18.10M",
|
|
||||||
"images": {
|
|
||||||
"hda_disk_image": "Aboot-veos-serial-8.0.0.iso",
|
|
||||||
"hdb_disk_image": "vEOS-lab-4.18.10M.vmdk"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "4.18.5M",
|
|
||||||
"images": {
|
|
||||||
"hda_disk_image": "Aboot-veos-serial-8.0.0.iso",
|
|
||||||
"hdb_disk_image": "vEOS-lab-4.18.5M.vmdk"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "4.18.1F",
|
|
||||||
"images": {
|
|
||||||
"hda_disk_image": "Aboot-veos-serial-8.0.0.iso",
|
|
||||||
"hdb_disk_image": "vEOS-lab-4.18.1F.vmdk"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "4.17.8M",
|
|
||||||
"images": {
|
|
||||||
"hda_disk_image": "Aboot-veos-serial-8.0.0.iso",
|
|
||||||
"hdb_disk_image": "vEOS-lab-4.17.8M.vmdk"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "4.17.2F",
|
|
||||||
"images": {
|
|
||||||
"hda_disk_image": "Aboot-veos-serial-8.0.0.iso",
|
|
||||||
"hdb_disk_image": "vEOS-lab-4.17.2F.vmdk"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "4.16.13M",
|
|
||||||
"images": {
|
|
||||||
"hda_disk_image": "Aboot-veos-serial-8.0.0.iso",
|
|
||||||
"hdb_disk_image": "vEOS-lab-4.16.13M.vmdk"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "4.16.6M",
|
|
||||||
"images": {
|
|
||||||
"hda_disk_image": "Aboot-veos-serial-8.0.0.iso",
|
|
||||||
"hdb_disk_image": "vEOS-lab-4.16.6M.vmdk"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "4.15.10M",
|
|
||||||
"images": {
|
|
||||||
"hda_disk_image": "Aboot-veos-serial-8.0.0.iso",
|
|
||||||
"hdb_disk_image": "vEOS-lab-4.15.10M.vmdk"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "4.15.5M",
|
|
||||||
"images": {
|
|
||||||
"hda_disk_image": "Aboot-veos-serial-8.0.0.iso",
|
|
||||||
"hdb_disk_image": "vEOS-lab-4.15.5M.vmdk"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "4.14.14M",
|
|
||||||
"images": {
|
|
||||||
"hda_disk_image": "Aboot-veos-serial-8.0.0.iso",
|
|
||||||
"hdb_disk_image": "vEOS-lab-4.14.14M.vmdk"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "4.13.16M",
|
|
||||||
"images": {
|
|
||||||
"hda_disk_image": "Aboot-veos-serial-8.0.0.iso",
|
|
||||||
"hdb_disk_image": "vEOS-lab-4.13.16M.vmdk"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "4.13.8M",
|
|
||||||
"images": {
|
|
||||||
"hda_disk_image": "Aboot-veos-serial-8.0.0.iso",
|
|
||||||
"hdb_disk_image": "vEOS-lab-4.13.8M.vmdk"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
@ -25,7 +25,7 @@
|
|||||||
"filesize": 243251976
|
"filesize": 243251976
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"filename": "x86_64_crb_linux_l2-adventerprisek9-ms.bin",
|
"filename": "x86_64_crb_linux_l2-adventerprisek9-ms",
|
||||||
"version": "17.12.1",
|
"version": "17.12.1",
|
||||||
"md5sum": "2b5055e4cef8fd257416d74a94adb626",
|
"md5sum": "2b5055e4cef8fd257416d74a94adb626",
|
||||||
"filesize": 240355720
|
"filesize": 240355720
|
||||||
@ -59,7 +59,7 @@
|
|||||||
{
|
{
|
||||||
"name": "17.12.1",
|
"name": "17.12.1",
|
||||||
"images": {
|
"images": {
|
||||||
"image": "x86_64_crb_linux_l2-adventerprisek9-ms.bin"
|
"image": "x86_64_crb_linux_l2-adventerprisek9-ms"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -25,7 +25,7 @@
|
|||||||
"filesize": 292001512
|
"filesize": 292001512
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"filename": "x86_64_crb_linux-adventerprisek9-ms.bin",
|
"filename": "x86_64_crb_linux-adventerprisek9-ms",
|
||||||
"version": "17.12.1",
|
"version": "17.12.1",
|
||||||
"md5sum": "4a2fce8de21d1831fbceffd155e41ae7",
|
"md5sum": "4a2fce8de21d1831fbceffd155e41ae7",
|
||||||
"filesize": 288947184
|
"filesize": 288947184
|
||||||
@ -59,7 +59,7 @@
|
|||||||
{
|
{
|
||||||
"name": "17.12.1",
|
"name": "17.12.1",
|
||||||
"images": {
|
"images": {
|
||||||
"image": "x86_64_crb_linux-adventerprisek9-ms.bin"
|
"image": "x86_64_crb_linux-adventerprisek9-ms"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
50
gns3server/appliances/innovaphone-app.gns3a
Normal file
50
gns3server/appliances/innovaphone-app.gns3a
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
{
|
||||||
|
"appliance_id": "92dbd0e9-144e-4c59-a4a8-97b6a1661818",
|
||||||
|
"name": "Innovaphone App-Platform",
|
||||||
|
"category": "guest",
|
||||||
|
"description": "In addition to telephony, apps for Video Telephony, Chat, Conferencing, Application Sharing and many other functions have become indispensable UCC tools in the area of business communication. Based on the myApps platform and its various components, innovaphone provides a collaborative work and communication platform for enhanced corporate communications \u2013 regardless of the location and the device being used. The innovaphone platform myApps consists of many independent components that work well individually, yet unfold their remarkable performance when combined.",
|
||||||
|
"vendor_name": "Innovaphone",
|
||||||
|
"vendor_url": "https://www.innovaphone.com",
|
||||||
|
"vendor_logo_url": "https://www.innovaphone.com/content/downloads/innovaphone-myapps-logo-short-without-background-screen.png",
|
||||||
|
"documentation_url": "https://wiki.innovaphone.com/index.php?title=Reference14r2:Concept_App_Platform",
|
||||||
|
"product_name": "App-Platform",
|
||||||
|
"product_url": "https://www.innovaphone.com/en/products/myapps/myapps-platform.html",
|
||||||
|
"registry_version": 4,
|
||||||
|
"status": "experimental",
|
||||||
|
"availability": "free-to-try",
|
||||||
|
"maintainer": "Thomas Marchsteiner",
|
||||||
|
"maintainer_email": "thomas.marchsteiner@acp.at",
|
||||||
|
"usage": "Default users console:root/iplinux , ssh:admin/ipapps , Webinterface:pwd \nAfter first boot wait for automatic reboot.\nA static ip can be set via the setip utility. \nLoading another keymap can be done via the loadkeys command. \nThe app-platform-disk1.vmdk file is contained within an ova file. \nIt can be extraced with the tar utility, 7Zip or any other tool which can handle tar files.",
|
||||||
|
"symbol": "innovaphone-ap-icon.jpg",
|
||||||
|
"first_port_name": "eth0",
|
||||||
|
"qemu": {
|
||||||
|
"adapter_type": "vmxnet3",
|
||||||
|
"adapters": 1,
|
||||||
|
"ram": 512,
|
||||||
|
"cpus": 1,
|
||||||
|
"hda_disk_interface": "scsi",
|
||||||
|
"arch": "x86_64",
|
||||||
|
"console_type": "vnc",
|
||||||
|
"boot_priority": "d",
|
||||||
|
"kvm": "allow",
|
||||||
|
"on_close": "power_off",
|
||||||
|
"process_priority": "normal"
|
||||||
|
},
|
||||||
|
"images": [
|
||||||
|
{
|
||||||
|
"filename": "app-platform-disk1_120010.vmdk",
|
||||||
|
"version": "12.0010",
|
||||||
|
"md5sum": "d5a5a77f682c2c988b0810935d79a787",
|
||||||
|
"filesize": 129474560,
|
||||||
|
"download_url": "https://store.innovaphone.com/"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"versions": [
|
||||||
|
{
|
||||||
|
"images": {
|
||||||
|
"hda_disk_image": "app-platform-disk1_120010.vmdk"
|
||||||
|
},
|
||||||
|
"name": "12.0010"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
78
gns3server/appliances/innovaphone-ipva.gns3a
Normal file
78
gns3server/appliances/innovaphone-ipva.gns3a
Normal file
@ -0,0 +1,78 @@
|
|||||||
|
{
|
||||||
|
"appliance_id": "ddf8f7a4-60c0-4c9d-849c-ffc3c9d1d082",
|
||||||
|
"name": "Innovaphone IPVA",
|
||||||
|
"category": "guest",
|
||||||
|
"description": "The innovaphone PBX is a professional IP telephone system. The IPVA is a software-only solution. It appears as and performs as an innovaphone 'hard-box' excluding DSP-, ISDN-/AB-resources.",
|
||||||
|
"vendor_name": "Innovaphone",
|
||||||
|
"vendor_url": "https://www.innovaphone.com/",
|
||||||
|
"vendor_logo_url": "https://www.innovaphone.com/content/downloads/innovaphone-myapps-logo-short-without-background-screen.png",
|
||||||
|
"documentation_url": "https://wiki.innovaphone.com/index.php?title=Reference15r1:Concept_Innovaphone_Virtual_Appliance_(IPVA)",
|
||||||
|
"product_name": "IPVA",
|
||||||
|
"product_url": "https://www.innovaphone.com/en/products/innovaphone-pbx.html",
|
||||||
|
"registry_version": 4,
|
||||||
|
"status": "experimental",
|
||||||
|
"availability": "free-to-try",
|
||||||
|
"maintainer": "Thomas Marchsteiner",
|
||||||
|
"maintainer_email": "thomas.marchsteiner@acp.at",
|
||||||
|
"usage": "Default user admin/ipva \nDefault network configuration: DHCP client on eth0 with fallback to static address 192.168.0.1/24 after timeout. Static address 192.168.1.1/24 on eth1\n The ova in the zip file contains the disk images to run this appliance. Disableing the dhcp client and setting a static IP is possible with the following commands:\n> config change IP0 ETH0 /addr 192.168.0.1 /mask 255.255.255.0 \n> config change DHCP0 /mode off \n> config write \n> config activate \n> reset",
|
||||||
|
"symbol": "innovaphone-pbx-green.png",
|
||||||
|
"first_port_name": "eth0",
|
||||||
|
"port_name_format": "eth{port1}",
|
||||||
|
"qemu": {
|
||||||
|
"adapter_type": "vmxnet3",
|
||||||
|
"adapters": 2,
|
||||||
|
"ram": 256,
|
||||||
|
"cpus": 1,
|
||||||
|
"hda_disk_interface": "ide",
|
||||||
|
"hdb_disk_interface": "ide",
|
||||||
|
"hdc_disk_interface": "ide",
|
||||||
|
"hdd_disk_interface": "ide",
|
||||||
|
"arch": "x86_64",
|
||||||
|
"console_type": "vnc",
|
||||||
|
"boot_priority": "d",
|
||||||
|
"kvm": "allow",
|
||||||
|
"on_close": "power_off",
|
||||||
|
"process_priority": "normal"
|
||||||
|
},
|
||||||
|
"images": [
|
||||||
|
{
|
||||||
|
"filename": "ipva-qemu-disk1-14r2.vmdk",
|
||||||
|
"version": "14r2",
|
||||||
|
"md5sum": "aaa1c3885eee30ca6ffa3827619e8643",
|
||||||
|
"filesize": 6269952,
|
||||||
|
"download_url": "https://store.innovaphone.com/"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "ipva-qemu-disk2-14r2.vmdk",
|
||||||
|
"version": "14r2",
|
||||||
|
"md5sum": "008a8fc6b0b1e5f11a3e7fd6f22ba349",
|
||||||
|
"filesize": 72192,
|
||||||
|
"download_url": "https://store.innovaphone.com/"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "ipva-qemu-disk3-14r2.vmdk",
|
||||||
|
"version": "14r2",
|
||||||
|
"md5sum": "20516731c480e2112b3fb4a4d7f514f2",
|
||||||
|
"filesize": 68096,
|
||||||
|
"download_url": "https://store.innovaphone.com/"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "ipva-qemu-disk4-14r2.vmdk",
|
||||||
|
"version": "14r2",
|
||||||
|
"md5sum": "15d7d79ef8c28bd29b2eceac8405f964",
|
||||||
|
"filesize": 68096,
|
||||||
|
"download_url": "https://store.innovaphone.com/"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"versions": [
|
||||||
|
{
|
||||||
|
"images": {
|
||||||
|
"hda_disk_image": "ipva-qemu-disk1-14r2.vmdk",
|
||||||
|
"hdb_disk_image": "ipva-qemu-disk2-14r2.vmdk",
|
||||||
|
"hdc_disk_image": "ipva-qemu-disk3-14r2.vmdk",
|
||||||
|
"hdd_disk_image": "ipva-qemu-disk4-14r2.vmdk"
|
||||||
|
},
|
||||||
|
"name": "14r2"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
@ -24,6 +24,13 @@
|
|||||||
"process_priority": "normal"
|
"process_priority": "normal"
|
||||||
},
|
},
|
||||||
"images": [
|
"images": [
|
||||||
|
{
|
||||||
|
"filename": "pfSense-CE-2.7.2-RELEASE-amd64.iso",
|
||||||
|
"version": "2.7.2",
|
||||||
|
"md5sum": "50c3e723d68ec74d038041a34fa846f8",
|
||||||
|
"filesize": 874672128,
|
||||||
|
"download_url": "https://www.pfsense.org/download/mirror.php?section=downloads"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"filename": "pfSense-CE-2.7.0-RELEASE-amd64.iso",
|
"filename": "pfSense-CE-2.7.0-RELEASE-amd64.iso",
|
||||||
"version": "2.7.0",
|
"version": "2.7.0",
|
||||||
@ -76,6 +83,13 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"versions": [
|
"versions": [
|
||||||
|
{
|
||||||
|
"name": "2.7.2",
|
||||||
|
"images": {
|
||||||
|
"hda_disk_image": "empty100G.qcow2",
|
||||||
|
"cdrom_image": "pfSense-CE-2.7.2-RELEASE-amd64.iso"
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "2.7.0",
|
"name": "2.7.0",
|
||||||
"images": {
|
"images": {
|
||||||
|
50
gns3server/appliances/stormshield-eva.gns3a
Normal file
50
gns3server/appliances/stormshield-eva.gns3a
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
{
|
||||||
|
"appliance_id": "60801097-332e-4f40-a63e-8ad62047c01f",
|
||||||
|
"name": "Stormshield EVA",
|
||||||
|
"category": "firewall",
|
||||||
|
"description": "Stormshield EVA (Elastic Virtual Appliance) is a french virtual firewall designed to protect network infrastructures. It offers advanced features such as filtering, intrusion prevention (IPS), VPN management (IPSec/SSL), and access control.",
|
||||||
|
"vendor_name": "Stormshield",
|
||||||
|
"vendor_url": "https://www.stormshield.com/",
|
||||||
|
"vendor_logo_url": "https://www.stormshield.com/wp-content/uploads/stormshield-logo.png",
|
||||||
|
"documentation_url": "https://www.stormshield.com/fr/ressourcescenter/network-security-elastic-virtual-appliances/",
|
||||||
|
"product_name": "Stormshield EVA",
|
||||||
|
"product_url": "https://www.stormshield.com/fr/produits-et-services/produits/protection-des-reseaux/nos-produits/appliances-virtuelles/",
|
||||||
|
"registry_version": 4,
|
||||||
|
"status": "stable",
|
||||||
|
"availability": "service-contract",
|
||||||
|
"maintainer": "Samy SCANNA",
|
||||||
|
"maintainer_email": "samy.scanna@outlook.com",
|
||||||
|
"usage": "After the first boot, the appliance automatically runs the configuration script to set up the password, and network interfaces.",
|
||||||
|
"symbol": "stormshield.png",
|
||||||
|
"port_name_format": "port{port1}",
|
||||||
|
"qemu": {
|
||||||
|
"adapter_type": "vmxnet3",
|
||||||
|
"adapters": 8,
|
||||||
|
"ram": 2048,
|
||||||
|
"cpus": 1,
|
||||||
|
"hda_disk_interface": "scsi",
|
||||||
|
"arch": "x86_64",
|
||||||
|
"console_type": "telnet",
|
||||||
|
"kvm": "allow",
|
||||||
|
"options": "-serial stdio",
|
||||||
|
"on_close": "shutdown_signal",
|
||||||
|
"process_priority": "normal"
|
||||||
|
},
|
||||||
|
"images": [
|
||||||
|
{
|
||||||
|
"filename": "utm-SNS-EVA-4.3.33-kvm.qcow2",
|
||||||
|
"version": "4.3.33",
|
||||||
|
"md5sum": "21d94d0e20f2e270f06c5853fd750d5b",
|
||||||
|
"filesize": 284360704,
|
||||||
|
"download_url": "https://mystormshield.eu/product/download/"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"versions": [
|
||||||
|
{
|
||||||
|
"images": {
|
||||||
|
"hda_disk_image": "utm-SNS-EVA-4.3.33-kvm.qcow2"
|
||||||
|
},
|
||||||
|
"name": "4.3.33"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
@ -390,14 +390,16 @@ class IOUVM(BaseNode):
|
|||||||
raise IOUError("The following shared library dependencies cannot be found for IOU image {}: {}".format(self._path,
|
raise IOUError("The following shared library dependencies cannot be found for IOU image {}: {}".format(self._path,
|
||||||
", ".join(missing_libs)))
|
", ".join(missing_libs)))
|
||||||
|
|
||||||
async def _check_iou_licence(self):
|
def _is_iou_license_check_enabled(self):
|
||||||
"""
|
"""
|
||||||
Checks for a valid IOU key in the iourc file (paranoid mode).
|
Returns if IOU license check is enabled.
|
||||||
|
|
||||||
|
:return: boolean
|
||||||
"""
|
"""
|
||||||
|
|
||||||
# license check is sent by the controller
|
# license check is sent by the controller
|
||||||
if self.license_check is False:
|
if self.license_check is False:
|
||||||
return
|
return False
|
||||||
|
|
||||||
try:
|
try:
|
||||||
# we allow license check to be disabled server wide
|
# we allow license check to be disabled server wide
|
||||||
@ -407,7 +409,14 @@ class IOUVM(BaseNode):
|
|||||||
|
|
||||||
if server_wide_license_check is False:
|
if server_wide_license_check is False:
|
||||||
log.warning("License check is explicitly disabled on this server")
|
log.warning("License check is explicitly disabled on this server")
|
||||||
return
|
return False
|
||||||
|
|
||||||
|
return True
|
||||||
|
|
||||||
|
async def _check_iou_license(self):
|
||||||
|
"""
|
||||||
|
Checks for a valid IOU key in the iourc file (paranoid mode).
|
||||||
|
"""
|
||||||
|
|
||||||
config = configparser.ConfigParser()
|
config = configparser.ConfigParser()
|
||||||
try:
|
try:
|
||||||
@ -511,15 +520,16 @@ class IOUVM(BaseNode):
|
|||||||
except OSError as e:
|
except OSError as e:
|
||||||
raise IOUError("Could not rename nvram files: {}".format(e))
|
raise IOUError("Could not rename nvram files: {}".format(e))
|
||||||
|
|
||||||
iourc_path = self.iourc_path
|
iourc_path = None
|
||||||
if not iourc_path:
|
if self._is_iou_license_check_enabled():
|
||||||
raise IOUError("Could not find an iourc file (IOU license), please configure an IOU license")
|
iourc_path = self.iourc_path
|
||||||
if not os.path.isfile(iourc_path):
|
if not iourc_path:
|
||||||
raise IOUError("The iourc path '{}' is not a regular file".format(iourc_path))
|
raise IOUError("Could not find an iourc file (IOU license), please configure an IOU license")
|
||||||
|
if not os.path.isfile(iourc_path):
|
||||||
|
raise IOUError("The iourc path '{}' is not a regular file".format(iourc_path))
|
||||||
|
await self._check_iou_license()
|
||||||
|
|
||||||
await self._check_iou_licence()
|
|
||||||
await self._start_ubridge()
|
await self._start_ubridge()
|
||||||
|
|
||||||
self._create_netmap_config()
|
self._create_netmap_config()
|
||||||
if self.use_default_iou_values:
|
if self.use_default_iou_values:
|
||||||
# make sure we have the default nvram amount to correctly push the configs
|
# make sure we have the default nvram amount to correctly push the configs
|
||||||
@ -531,7 +541,7 @@ class IOUVM(BaseNode):
|
|||||||
|
|
||||||
self._nvram_watcher = FileWatcher(self._nvram_file(), self._nvram_changed, delay=2)
|
self._nvram_watcher = FileWatcher(self._nvram_file(), self._nvram_changed, delay=2)
|
||||||
|
|
||||||
# created a environment variable pointing to the iourc file.
|
# created an environment variable pointing to the iourc file.
|
||||||
env = os.environ.copy()
|
env = os.environ.copy()
|
||||||
if "IOURC" not in os.environ and iourc_path:
|
if "IOURC" not in os.environ and iourc_path:
|
||||||
env["IOURC"] = iourc_path
|
env["IOURC"] = iourc_path
|
||||||
|
@ -218,28 +218,45 @@ class VirtualBoxVM(BaseNode):
|
|||||||
"""
|
"""
|
||||||
Fix the VM uuid in the case of linked clone
|
Fix the VM uuid in the case of linked clone
|
||||||
"""
|
"""
|
||||||
if os.path.exists(self._linked_vbox_file()):
|
|
||||||
try:
|
|
||||||
tree = ET.parse(self._linked_vbox_file())
|
|
||||||
except ET.ParseError:
|
|
||||||
raise VirtualBoxError("Cannot modify VirtualBox linked nodes file. "
|
|
||||||
"File {} is corrupted.".format(self._linked_vbox_file()))
|
|
||||||
except OSError as e:
|
|
||||||
raise VirtualBoxError("Cannot modify VirtualBox linked nodes file '{}': {}".format(self._linked_vbox_file(), e))
|
|
||||||
|
|
||||||
machine = tree.getroot().find("{http://www.virtualbox.org/}Machine")
|
linked_vbox_file = self._linked_vbox_file()
|
||||||
if machine is not None and machine.get("uuid") != "{" + self.id + "}":
|
if not os.path.exists(linked_vbox_file):
|
||||||
|
raise VirtualBoxError("Cannot find VirtualBox linked node file: {}".format(linked_vbox_file))
|
||||||
|
|
||||||
for image in tree.getroot().findall("{http://www.virtualbox.org/}Image"):
|
try:
|
||||||
currentSnapshot = machine.get("currentSnapshot")
|
tree = ET.parse(linked_vbox_file)
|
||||||
if currentSnapshot:
|
except ET.ParseError:
|
||||||
newSnapshot = re.sub(r"\{.*\}", "{" + str(uuid.uuid4()) + "}", currentSnapshot)
|
raise VirtualBoxError("Cannot modify VirtualBox linked node file. "
|
||||||
shutil.move(os.path.join(self.working_dir, self._vmname, "Snapshots", currentSnapshot) + ".vdi",
|
"File {} is corrupted.".format(linked_vbox_file))
|
||||||
os.path.join(self.working_dir, self._vmname, "Snapshots", newSnapshot) + ".vdi")
|
except OSError as e:
|
||||||
image.set("uuid", newSnapshot)
|
raise VirtualBoxError("Cannot modify VirtualBox linked node file '{}': {}".format(linked_vbox_file, e))
|
||||||
|
|
||||||
machine.set("uuid", "{" + self.id + "}")
|
machine = tree.getroot().find("{http://www.virtualbox.org/}Machine")
|
||||||
tree.write(self._linked_vbox_file())
|
if machine is not None and machine.get("uuid") != "{" + self.id + "}":
|
||||||
|
|
||||||
|
for image in tree.getroot().findall("{http://www.virtualbox.org/}Image"):
|
||||||
|
currentSnapshot = machine.get("currentSnapshot")
|
||||||
|
if currentSnapshot:
|
||||||
|
newSnapshot = re.sub(r"\{.*\}", "{" + str(uuid.uuid4()) + "}", currentSnapshot)
|
||||||
|
shutil.move(
|
||||||
|
os.path.join(self.working_dir, self._vmname, "Snapshots", currentSnapshot) + ".vdi",
|
||||||
|
os.path.join(self.working_dir, self._vmname, "Snapshots", newSnapshot) + ".vdi"
|
||||||
|
)
|
||||||
|
log.info("VirtualBox VM '{name}' [{id}] snapshot file moved from '{current}' to '{new}'".format(
|
||||||
|
name=self.name,
|
||||||
|
id=self.id,
|
||||||
|
current=currentSnapshot,
|
||||||
|
new=newSnapshot,
|
||||||
|
))
|
||||||
|
image.set("uuid", newSnapshot)
|
||||||
|
|
||||||
|
log.info("VirtualBox VM '{name}' [{id}] '{vbox_file}' has been patched".format(
|
||||||
|
name=self.name,
|
||||||
|
id=self.id,
|
||||||
|
vbox_file=linked_vbox_file,
|
||||||
|
))
|
||||||
|
machine.set("uuid", "{" + self.id + "}")
|
||||||
|
tree.write(linked_vbox_file)
|
||||||
|
|
||||||
async def check_hw_virtualization(self):
|
async def check_hw_virtualization(self):
|
||||||
"""
|
"""
|
||||||
@ -458,7 +475,7 @@ class VirtualBoxVM(BaseNode):
|
|||||||
|
|
||||||
async def save_linked_hdds_info(self):
|
async def save_linked_hdds_info(self):
|
||||||
"""
|
"""
|
||||||
Save linked cloned hard disks information.
|
Save linked cloned hard disk information.
|
||||||
|
|
||||||
:returns: disk table information
|
:returns: disk table information
|
||||||
"""
|
"""
|
||||||
|
@ -18,14 +18,19 @@
|
|||||||
import ipaddress
|
import ipaddress
|
||||||
import aiohttp
|
import aiohttp
|
||||||
import asyncio
|
import asyncio
|
||||||
import async_timeout
|
|
||||||
import socket
|
import socket
|
||||||
import json
|
import json
|
||||||
import uuid
|
import uuid
|
||||||
import sys
|
import sys
|
||||||
import io
|
import io
|
||||||
|
|
||||||
from operator import itemgetter
|
from operator import itemgetter
|
||||||
|
|
||||||
|
if sys.version_info >= (3, 11):
|
||||||
|
from asyncio import timeout as asynctimeout
|
||||||
|
else:
|
||||||
|
from async_timeout import timeout as asynctimeout
|
||||||
|
|
||||||
from ..utils import parse_version
|
from ..utils import parse_version
|
||||||
from ..utils.asyncio import locking
|
from ..utils.asyncio import locking
|
||||||
from ..controller.controller_error import ControllerError
|
from ..controller.controller_error import ControllerError
|
||||||
@ -483,8 +488,8 @@ class Compute:
|
|||||||
""" Returns URL for specific path at Compute"""
|
""" Returns URL for specific path at Compute"""
|
||||||
return self._getUrl(path)
|
return self._getUrl(path)
|
||||||
|
|
||||||
async def _run_http_query(self, method, path, data=None, timeout=20, raw=False):
|
async def _run_http_query(self, method, path, data=None, timeout=120, raw=False):
|
||||||
async with async_timeout.timeout(delay=timeout):
|
async with asynctimeout(delay=timeout):
|
||||||
url = self._getUrl(path)
|
url = self._getUrl(path)
|
||||||
headers = {}
|
headers = {}
|
||||||
headers['content-type'] = 'application/json'
|
headers['content-type'] = 'application/json'
|
||||||
|
@ -57,7 +57,7 @@ class CrashReport:
|
|||||||
Report crash to a third party service
|
Report crash to a third party service
|
||||||
"""
|
"""
|
||||||
|
|
||||||
DSN = "https://b2ea85d65646be3f56aebf2458337918@o19455.ingest.us.sentry.io/38482"
|
DSN = "https://98c55f74bc61432b375d3eb392af9f7d@o19455.ingest.us.sentry.io/38482"
|
||||||
_instance = None
|
_instance = None
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
|
@ -46,6 +46,6 @@
|
|||||||
|
|
||||||
gtag('config', 'G-0BT7QQV1W1');
|
gtag('config', 'G-0BT7QQV1W1');
|
||||||
</script>
|
</script>
|
||||||
<script src="runtime.415291667f70565cd8ef.js" defer></script><script src="polyfills-es5.865074f5cd9a121111a2.js" nomodule defer></script><script src="polyfills.2f91a039d848e57ff02e.js" defer></script><script src="main.9297104511b6616fc55c.js" defer></script>
|
<script src="runtime.415291667f70565cd8ef.js" defer></script><script src="polyfills-es5.865074f5cd9a121111a2.js" nomodule defer></script><script src="polyfills.2f91a039d848e57ff02e.js" defer></script><script src="main.c83939cdfe3af0ec27df.js" defer></script>
|
||||||
|
|
||||||
</body></html>
|
</body></html>
|
File diff suppressed because one or more lines are too long
@ -23,8 +23,8 @@
|
|||||||
# or negative for a release candidate or beta (after the base version
|
# or negative for a release candidate or beta (after the base version
|
||||||
# number has been incremented)
|
# number has been incremented)
|
||||||
|
|
||||||
__version__ = "2.2.52"
|
__version__ = "2.2.53"
|
||||||
__version_info__ = (2, 2, 52, 0)
|
__version_info__ = (2, 2, 53, 0)
|
||||||
|
|
||||||
if "dev" in __version__:
|
if "dev" in __version__:
|
||||||
try:
|
try:
|
||||||
|
@ -311,7 +311,13 @@ class WebServer:
|
|||||||
# Background task started with the server
|
# Background task started with the server
|
||||||
self._app.on_startup.append(self._on_startup)
|
self._app.on_startup.append(self._on_startup)
|
||||||
|
|
||||||
resource_options = aiohttp_cors.ResourceOptions(allow_credentials=True, expose_headers="*", allow_headers="*", max_age=0)
|
resource_options = aiohttp_cors.ResourceOptions(
|
||||||
|
allow_credentials=True,
|
||||||
|
expose_headers="*",
|
||||||
|
allow_headers="*",
|
||||||
|
allow_methods="*",
|
||||||
|
max_age=0
|
||||||
|
)
|
||||||
|
|
||||||
# Allow CORS for this domains
|
# Allow CORS for this domains
|
||||||
cors = aiohttp_cors.setup(self._app, defaults={
|
cors = aiohttp_cors.setup(self._app, defaults={
|
||||||
|
@ -2,10 +2,10 @@ jsonschema>=4.23,<4.24
|
|||||||
aiohttp>=3.10.10,<3.11
|
aiohttp>=3.10.10,<3.11
|
||||||
aiohttp-cors>=0.7.0,<0.8
|
aiohttp-cors>=0.7.0,<0.8
|
||||||
aiofiles>=24.1.0,<25.0
|
aiofiles>=24.1.0,<25.0
|
||||||
Jinja2>=3.1.4,<3.2
|
Jinja2>=3.1.5,<3.2
|
||||||
sentry-sdk>=2.17,<2.18 # optional dependency
|
sentry-sdk>=2.19.2,<2.20 # optional dependency
|
||||||
psutil>=6.1.0
|
psutil>=6.1.1
|
||||||
async-timeout>=4.0.3,<4.1
|
async-timeout>=5.0.1,<5.1
|
||||||
distro>=1.9.0
|
distro>=1.9.0
|
||||||
py-cpuinfo>=9.0.0,<10.0
|
py-cpuinfo>=9.0.0,<10.0
|
||||||
platformdirs>=2.4.0,<3 # platformdirs >=3 conflicts when building Debian packages
|
platformdirs>=2.4.0,<3 # platformdirs >=3 conflicts when building Debian packages
|
||||||
|
@ -96,7 +96,7 @@ async def test_start(vm):
|
|||||||
|
|
||||||
mock_process = MagicMock()
|
mock_process = MagicMock()
|
||||||
vm._check_requirements = AsyncioMagicMock(return_value=True)
|
vm._check_requirements = AsyncioMagicMock(return_value=True)
|
||||||
vm._check_iou_licence = AsyncioMagicMock(return_value=True)
|
vm._check_iou_license = AsyncioMagicMock(return_value=True)
|
||||||
vm._start_ubridge = AsyncioMagicMock(return_value=True)
|
vm._start_ubridge = AsyncioMagicMock(return_value=True)
|
||||||
vm._ubridge_send = AsyncioMagicMock()
|
vm._ubridge_send = AsyncioMagicMock()
|
||||||
|
|
||||||
@ -108,7 +108,7 @@ async def test_start(vm):
|
|||||||
assert vm.command_line == ' '.join(mock_exec.call_args[0])
|
assert vm.command_line == ' '.join(mock_exec.call_args[0])
|
||||||
|
|
||||||
assert vm._check_requirements.called
|
assert vm._check_requirements.called
|
||||||
assert vm._check_iou_licence.called
|
assert vm._check_iou_license.called
|
||||||
assert vm._start_ubridge.called
|
assert vm._start_ubridge.called
|
||||||
vm._ubridge_send.assert_any_call("iol_bridge delete IOL-BRIDGE-513")
|
vm._ubridge_send.assert_any_call("iol_bridge delete IOL-BRIDGE-513")
|
||||||
vm._ubridge_send.assert_any_call("iol_bridge create IOL-BRIDGE-513 513")
|
vm._ubridge_send.assert_any_call("iol_bridge create IOL-BRIDGE-513 513")
|
||||||
@ -123,7 +123,8 @@ async def test_start_with_iourc(vm, tmpdir):
|
|||||||
mock_process = MagicMock()
|
mock_process = MagicMock()
|
||||||
|
|
||||||
vm._check_requirements = AsyncioMagicMock(return_value=True)
|
vm._check_requirements = AsyncioMagicMock(return_value=True)
|
||||||
vm._check_iou_licence = AsyncioMagicMock(return_value=True)
|
vm._is_iou_license_check_enabled = AsyncioMagicMock(return_value=True)
|
||||||
|
vm._check_iou_license = AsyncioMagicMock(return_value=True)
|
||||||
vm._start_ioucon = AsyncioMagicMock(return_value=True)
|
vm._start_ioucon = AsyncioMagicMock(return_value=True)
|
||||||
vm._start_ubridge = AsyncioMagicMock(return_value=True)
|
vm._start_ubridge = AsyncioMagicMock(return_value=True)
|
||||||
vm._ubridge_send = AsyncioMagicMock()
|
vm._ubridge_send = AsyncioMagicMock()
|
||||||
@ -158,7 +159,7 @@ async def test_stop(vm):
|
|||||||
|
|
||||||
process = MagicMock()
|
process = MagicMock()
|
||||||
vm._check_requirements = AsyncioMagicMock(return_value=True)
|
vm._check_requirements = AsyncioMagicMock(return_value=True)
|
||||||
vm._check_iou_licence = AsyncioMagicMock(return_value=True)
|
vm._check_iou_license = AsyncioMagicMock(return_value=True)
|
||||||
vm._start_ioucon = AsyncioMagicMock(return_value=True)
|
vm._start_ioucon = AsyncioMagicMock(return_value=True)
|
||||||
vm._start_ubridge = AsyncioMagicMock(return_value=True)
|
vm._start_ubridge = AsyncioMagicMock(return_value=True)
|
||||||
vm._ubridge_send = AsyncioMagicMock()
|
vm._ubridge_send = AsyncioMagicMock()
|
||||||
@ -183,7 +184,7 @@ async def test_reload(vm, fake_iou_bin):
|
|||||||
|
|
||||||
process = MagicMock()
|
process = MagicMock()
|
||||||
vm._check_requirements = AsyncioMagicMock(return_value=True)
|
vm._check_requirements = AsyncioMagicMock(return_value=True)
|
||||||
vm._check_iou_licence = AsyncioMagicMock(return_value=True)
|
vm._check_iou_license = AsyncioMagicMock(return_value=True)
|
||||||
vm._start_ioucon = AsyncioMagicMock(return_value=True)
|
vm._start_ioucon = AsyncioMagicMock(return_value=True)
|
||||||
vm._start_ubridge = AsyncioMagicMock(return_value=True)
|
vm._start_ubridge = AsyncioMagicMock(return_value=True)
|
||||||
vm._ubridge_send = AsyncioMagicMock()
|
vm._ubridge_send = AsyncioMagicMock()
|
||||||
@ -376,42 +377,42 @@ def test_get_legacy_vm_workdir():
|
|||||||
async def test_invalid_iou_file(vm, iourc_file):
|
async def test_invalid_iou_file(vm, iourc_file):
|
||||||
|
|
||||||
hostname = socket.gethostname()
|
hostname = socket.gethostname()
|
||||||
await vm._check_iou_licence()
|
await vm._check_iou_license()
|
||||||
|
|
||||||
# Missing ;
|
# Missing ;
|
||||||
with pytest.raises(IOUError):
|
with pytest.raises(IOUError):
|
||||||
with open(iourc_file, "w+") as f:
|
with open(iourc_file, "w+") as f:
|
||||||
f.write("[license]\n{} = aaaaaaaaaaaaaaaa".format(hostname))
|
f.write("[license]\n{} = aaaaaaaaaaaaaaaa".format(hostname))
|
||||||
await vm._check_iou_licence()
|
await vm._check_iou_license()
|
||||||
|
|
||||||
# Key too short
|
# Key too short
|
||||||
with pytest.raises(IOUError):
|
with pytest.raises(IOUError):
|
||||||
with open(iourc_file, "w+") as f:
|
with open(iourc_file, "w+") as f:
|
||||||
f.write("[license]\n{} = aaaaaaaaaaaaaa;".format(hostname))
|
f.write("[license]\n{} = aaaaaaaaaaaaaa;".format(hostname))
|
||||||
await vm._check_iou_licence()
|
await vm._check_iou_license()
|
||||||
|
|
||||||
# Invalid hostname
|
# Invalid hostname
|
||||||
with pytest.raises(IOUError):
|
with pytest.raises(IOUError):
|
||||||
with open(iourc_file, "w+") as f:
|
with open(iourc_file, "w+") as f:
|
||||||
f.write("[license]\nbla = aaaaaaaaaaaaaa;")
|
f.write("[license]\nbla = aaaaaaaaaaaaaa;")
|
||||||
await vm._check_iou_licence()
|
await vm._check_iou_license()
|
||||||
|
|
||||||
# Missing licence section
|
# Missing licence section
|
||||||
with pytest.raises(IOUError):
|
with pytest.raises(IOUError):
|
||||||
with open(iourc_file, "w+") as f:
|
with open(iourc_file, "w+") as f:
|
||||||
f.write("[licensetest]\n{} = aaaaaaaaaaaaaaaa;")
|
f.write("[licensetest]\n{} = aaaaaaaaaaaaaaaa;")
|
||||||
await vm._check_iou_licence()
|
await vm._check_iou_license()
|
||||||
|
|
||||||
# Broken config file
|
# Broken config file
|
||||||
with pytest.raises(IOUError):
|
with pytest.raises(IOUError):
|
||||||
with open(iourc_file, "w+") as f:
|
with open(iourc_file, "w+") as f:
|
||||||
f.write("[")
|
f.write("[")
|
||||||
await vm._check_iou_licence()
|
await vm._check_iou_license()
|
||||||
|
|
||||||
# Missing file
|
# Missing file
|
||||||
with pytest.raises(IOUError):
|
with pytest.raises(IOUError):
|
||||||
os.remove(iourc_file)
|
os.remove(iourc_file)
|
||||||
await vm._check_iou_licence()
|
await vm._check_iou_license()
|
||||||
|
|
||||||
|
|
||||||
def test_iourc_content(vm):
|
def test_iourc_content(vm):
|
||||||
|
@ -85,7 +85,7 @@ async def test_compute_httpQuery(compute):
|
|||||||
response.status = 200
|
response.status = 200
|
||||||
await compute.post("/projects", {"a": "b"})
|
await compute.post("/projects", {"a": "b"})
|
||||||
await compute.close()
|
await compute.close()
|
||||||
mock.assert_called_with("POST", "https://example.com:84/v2/compute/projects", data=b'{"a": "b"}', headers={'content-type': 'application/json'}, auth=None, chunked=None, timeout=20)
|
mock.assert_called_with("POST", "https://example.com:84/v2/compute/projects", data=b'{"a": "b"}', headers={'content-type': 'application/json'}, auth=None, chunked=None, timeout=120)
|
||||||
assert compute._auth is None
|
assert compute._auth is None
|
||||||
|
|
||||||
|
|
||||||
@ -99,7 +99,7 @@ async def test_compute_httpQueryAuth(compute):
|
|||||||
compute.password = "toor"
|
compute.password = "toor"
|
||||||
await compute.post("/projects", {"a": "b"})
|
await compute.post("/projects", {"a": "b"})
|
||||||
await compute.close()
|
await compute.close()
|
||||||
mock.assert_called_with("POST", "https://example.com:84/v2/compute/projects", data=b'{"a": "b"}', headers={'content-type': 'application/json'}, auth=compute._auth, chunked=None, timeout=20)
|
mock.assert_called_with("POST", "https://example.com:84/v2/compute/projects", data=b'{"a": "b"}', headers={'content-type': 'application/json'}, auth=compute._auth, chunked=None, timeout=120)
|
||||||
assert compute._auth.login == "root"
|
assert compute._auth.login == "root"
|
||||||
assert compute._auth.password == "toor"
|
assert compute._auth.password == "toor"
|
||||||
|
|
||||||
@ -156,7 +156,7 @@ async def test_compute_httpQueryNotConnectedInvalidVersion(compute):
|
|||||||
with asyncio_patch("aiohttp.ClientSession.request", return_value=response) as mock:
|
with asyncio_patch("aiohttp.ClientSession.request", return_value=response) as mock:
|
||||||
with pytest.raises(aiohttp.web.HTTPConflict):
|
with pytest.raises(aiohttp.web.HTTPConflict):
|
||||||
await compute.post("/projects", {"a": "b"})
|
await compute.post("/projects", {"a": "b"})
|
||||||
mock.assert_any_call("GET", "https://example.com:84/v2/compute/capabilities", headers={'content-type': 'application/json'}, data=None, auth=None, chunked=None, timeout=20)
|
mock.assert_any_call("GET", "https://example.com:84/v2/compute/capabilities", headers={'content-type': 'application/json'}, data=None, auth=None, chunked=None, timeout=120)
|
||||||
await compute.close()
|
await compute.close()
|
||||||
|
|
||||||
|
|
||||||
@ -169,7 +169,7 @@ async def test_compute_httpQueryNotConnectedNonGNS3Server(compute):
|
|||||||
with asyncio_patch("aiohttp.ClientSession.request", return_value=response) as mock:
|
with asyncio_patch("aiohttp.ClientSession.request", return_value=response) as mock:
|
||||||
with pytest.raises(aiohttp.web.HTTPConflict):
|
with pytest.raises(aiohttp.web.HTTPConflict):
|
||||||
await compute.post("/projects", {"a": "b"})
|
await compute.post("/projects", {"a": "b"})
|
||||||
mock.assert_any_call("GET", "https://example.com:84/v2/compute/capabilities", headers={'content-type': 'application/json'}, data=None, auth=None, chunked=None, timeout=20)
|
mock.assert_any_call("GET", "https://example.com:84/v2/compute/capabilities", headers={'content-type': 'application/json'}, data=None, auth=None, chunked=None, timeout=120)
|
||||||
await compute.close()
|
await compute.close()
|
||||||
|
|
||||||
|
|
||||||
@ -182,7 +182,7 @@ async def test_compute_httpQueryNotConnectedNonGNS3Server2(compute):
|
|||||||
with asyncio_patch("aiohttp.ClientSession.request", return_value=response) as mock:
|
with asyncio_patch("aiohttp.ClientSession.request", return_value=response) as mock:
|
||||||
with pytest.raises(aiohttp.web.HTTPConflict):
|
with pytest.raises(aiohttp.web.HTTPConflict):
|
||||||
await compute.post("/projects", {"a": "b"})
|
await compute.post("/projects", {"a": "b"})
|
||||||
mock.assert_any_call("GET", "https://example.com:84/v2/compute/capabilities", headers={'content-type': 'application/json'}, data=None, auth=None, chunked=None, timeout=20)
|
mock.assert_any_call("GET", "https://example.com:84/v2/compute/capabilities", headers={'content-type': 'application/json'}, data=None, auth=None, chunked=None, timeout=120)
|
||||||
|
|
||||||
|
|
||||||
async def test_compute_httpQueryError(compute):
|
async def test_compute_httpQueryError(compute):
|
||||||
@ -217,7 +217,7 @@ async def test_compute_httpQuery_project(compute):
|
|||||||
project = Project(name="Test")
|
project = Project(name="Test")
|
||||||
mock_notification.assert_called()
|
mock_notification.assert_called()
|
||||||
await compute.post("/projects", project)
|
await compute.post("/projects", project)
|
||||||
mock.assert_called_with("POST", "https://example.com:84/v2/compute/projects", data=json.dumps(project.__json__()), headers={'content-type': 'application/json'}, auth=None, chunked=None, timeout=20)
|
mock.assert_called_with("POST", "https://example.com:84/v2/compute/projects", data=json.dumps(project.__json__()), headers={'content-type': 'application/json'}, auth=None, chunked=None, timeout=120)
|
||||||
await compute.close()
|
await compute.close()
|
||||||
|
|
||||||
# FIXME: https://github.com/aio-libs/aiohttp/issues/2525
|
# FIXME: https://github.com/aio-libs/aiohttp/issues/2525
|
||||||
@ -424,7 +424,7 @@ async def test_interfaces(compute):
|
|||||||
response.status = 200
|
response.status = 200
|
||||||
with asyncio_patch("aiohttp.ClientSession.request", return_value=response) as mock:
|
with asyncio_patch("aiohttp.ClientSession.request", return_value=response) as mock:
|
||||||
assert await compute.interfaces() == res
|
assert await compute.interfaces() == res
|
||||||
mock.assert_any_call("GET", "https://example.com:84/v2/compute/network/interfaces", auth=None, chunked=None, data=None, headers={'content-type': 'application/json'}, timeout=20)
|
mock.assert_any_call("GET", "https://example.com:84/v2/compute/network/interfaces", auth=None, chunked=None, data=None, headers={'content-type': 'application/json'}, timeout=120)
|
||||||
await compute.close()
|
await compute.close()
|
||||||
|
|
||||||
|
|
||||||
|
@ -163,7 +163,7 @@ def test_list_images(tmpdir):
|
|||||||
"additional_images_path": "/tmp/null24564;{}".format(str(tmpdir / "images2")),
|
"additional_images_path": "/tmp/null24564;{}".format(str(tmpdir / "images2")),
|
||||||
"local": False}):
|
"local": False}):
|
||||||
|
|
||||||
assert list_images("dynamips") == [
|
assert sorted(list_images("dynamips"), key=lambda k: k['filename']) == [
|
||||||
{
|
{
|
||||||
'filename': 'ios_image_1.image',
|
'filename': 'ios_image_1.image',
|
||||||
'filesize': 7,
|
'filesize': 7,
|
||||||
@ -179,22 +179,22 @@ def test_list_images(tmpdir):
|
|||||||
]
|
]
|
||||||
|
|
||||||
if sys.platform.startswith("linux"):
|
if sys.platform.startswith("linux"):
|
||||||
assert list_images("iou") == [
|
assert sorted(list_images("iou"), key=lambda k: k['filename']) == [
|
||||||
|
{
|
||||||
|
'filename': 'iou32.bin',
|
||||||
|
'filesize': 7,
|
||||||
|
'md5sum': 'e573e8f5c93c6c00783f20c7a170aa6c',
|
||||||
|
'path': 'iou32.bin'
|
||||||
|
},
|
||||||
{
|
{
|
||||||
'filename': 'iou64.bin',
|
'filename': 'iou64.bin',
|
||||||
'filesize': 7,
|
'filesize': 7,
|
||||||
'md5sum': 'c73626d23469519894d58bc98bee9655',
|
'md5sum': 'c73626d23469519894d58bc98bee9655',
|
||||||
'path': 'iou64.bin'
|
'path': 'iou64.bin'
|
||||||
},
|
},
|
||||||
{
|
|
||||||
'filename': 'iou32.bin',
|
|
||||||
'filesize': 7,
|
|
||||||
'md5sum': 'e573e8f5c93c6c00783f20c7a170aa6c',
|
|
||||||
'path': 'iou32.bin'
|
|
||||||
}
|
|
||||||
]
|
]
|
||||||
|
|
||||||
assert list_images("qemu") == [
|
assert sorted(list_images("qemu"), key=lambda k: k['filename']) == [
|
||||||
{
|
{
|
||||||
'filename': 'qemu_image.qcow2',
|
'filename': 'qemu_image.qcow2',
|
||||||
'filesize': 7,
|
'filesize': 7,
|
||||||
|
Loading…
Reference in New Issue
Block a user