Compare commits

...
8 Commits
15 changed files with 58 additions and 529 deletions

No files matched your search

+8
View File
@@ -1,5 +1,13 @@
# Change Log
## 3.0.1 27/12/2024
* Bundle web-ui v3.0.1
* Allow for upgrading built-in disks
* Fix config parsing when configuring server protocol. Fixes https://github.com/GNS3/gns3-gui/issues/3681
* Update empty Qemu disks with correct MD5 checksums
* Increase timeout to run compute HTTP queries. Fixes #3453
## 3.0.0 20/12/2024
* Bundle web-ui v3.0.0
+20 -514
View File
@@ -2,14 +2,14 @@
"appliance_id": "c90f3ff3-4ed2-4437-9afb-21232fa92015",
"name": "Arista vEOS",
"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_url": "http://www.arista.com/",
"documentation_url": "https://www.arista.com/assets/data/docs/Manuals/EOS-4.17.2F-Manual.pdf",
"product_name": "vEOS",
"product_url": "https://eos.arista.com/",
"registry_version": 4,
"status": "experimental",
"status": "stable",
"maintainer": "GNS3 Team",
"maintainer_email": "developers@gns3.net",
"usage": "The login is admin, with no password by default",
@@ -29,87 +29,24 @@
},
"images": [
{
"filename": "vEOS64-lab-4.32.0F.vmdk",
"version": "4.32.0F",
"md5sum": "851771260bb18ad3e90fa6956f0c6161",
"filesize": 591724544,
"filename": "vEOS-lab-4.33.1F.qcow2",
"version": "4.33.1F",
"md5sum": "8f662409c0732ed9f682edce63601e8a",
"filesize": 611909632,
"download_url": "https://www.arista.com/en/support/software-download"
},
{
"filename": "vEOS64-lab-4.31.3M.vmdk",
"version": "4.31.3M",
"md5sum": "7df107da137f4a4e752014d4f0e94cd3",
"filesize": 577961984,
"filename": "vEOS-lab-4.32.3M.qcow2",
"version": "4.32.3M",
"md5sum": "46fc46f5ed1da8752eed8396f08862f8",
"filesize": 605683712,
"download_url": "https://www.arista.com/en/support/software-download"
},
{
"filename": "vEOS64-lab-4.30.6M.vmdk",
"version": "4.30.6M",
"md5sum": "19721aace820b9ebf6d7ae6524803cf5",
"filesize": 553123840,
"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,
"filename": "vEOS-lab-4.31.6M.qcow2",
"version": "4.31.6M",
"md5sum": "7410110b77472f058322ec4681f8a356",
"filesize": 590479360,
"download_url": "https://www.arista.com/en/support/software-download"
},
{
@@ -118,459 +55,28 @@
"md5sum": "8d7e754efebca1930a93a2587ff7606c",
"filesize": 6291456,
"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": [
{
"name": "4.32.0F",
"name": "4.33.1F",
"images": {
"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": {
"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": {
"hda_disk_image": "Aboot-veos-serial-8.0.2.iso",
"hdb_disk_image": "vEOS64-lab-4.30.6M.vmdk"
}
},
{
"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"
"hdb_disk_image": "vEOS-lab-4.31.6M.qcow2"
}
}
]
+14
View File
@@ -24,6 +24,13 @@
"process_priority": "normal"
},
"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",
"version": "2.7.0",
@@ -76,6 +83,13 @@
}
],
"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",
"images": {
+2 -1
View File
@@ -344,6 +344,7 @@ class Controller:
dst_path = self.configs_path()
log.info(f"Installing base configs in '{dst_path}'")
try:
# do not overwrite base configs because they may have been customized by the user
Controller.install_resource_files(dst_path, "configs", upgrade_resources=False)
except OSError as e:
log.error(f"Could not install base config files to {dst_path}: {e}")
@@ -357,7 +358,7 @@ class Controller:
dst_path = self.disks_path()
log.info(f"Installing built-in disks in '{dst_path}'")
try:
Controller.install_resource_files(dst_path, "disks", upgrade_resources=False)
Controller.install_resource_files(dst_path, "disks")
except OSError as e:
log.error(f"Could not install disk files to {dst_path}: {e}")
+1 -1
View File
@@ -502,7 +502,7 @@ class Compute:
""" Returns URL for specific path at Compute"""
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):
url = self._getUrl(path)
headers = {"content-type": "application/json"}
+1 -1
View File
@@ -58,7 +58,7 @@ class CrashReport:
Report crash to a third party service
"""
DSN = "https://8374a6208714ff37e18725c21a04b8d1@o19455.ingest.us.sentry.io/38482"
DSN = "https://847198b87dbd50ef8962901641918a08@o19455.ingest.us.sentry.io/38482"
_instance = None
def __init__(self):
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+1 -1
View File
@@ -147,7 +147,7 @@ class ServerSettings(BaseModel):
allow_remote_console: bool = False
enable_builtin_templates: bool = True
install_builtin_appliances: bool = True
model_config = ConfigDict(validate_assignment=True, str_strip_whitespace=True, use_enum_values=True)
model_config = ConfigDict(validate_assignment=True, str_strip_whitespace=True)
@field_validator("additional_images_paths", mode="before")
@classmethod
+1 -1
View File
@@ -46,6 +46,6 @@
gtag('config', 'G-0BT7QQV1W1');
</script>
<script src="runtime.24fa95b7061d7056.js" type="module"></script><script src="polyfills.319c79dd175e50d0.js" type="module"></script><script src="main.f802edd2b8c6db1d.js" type="module"></script>
<script src="runtime.24fa95b7061d7056.js" type="module"></script><script src="polyfills.319c79dd175e50d0.js" type="module"></script><script src="main.e55eeff5c0ba1cf4.js" type="module"></script>
</body></html>
@@ -1 +1 @@
(self.webpackChunkgns3_web_ui=self.webpackChunkgns3_web_ui||[]).push([[179],{5735:function(De,K,m){"use strict";m.d(K,{o:function(){return R}});var G=m(5671),W=m(3144),A=m(591),U=m(8929),R=function(){function P(){(0,G.Z)(this,P),this.data=[],this.dataChange=new A.X([]),this.itemUpdated=new U.xQ}return(0,W.Z)(P,[{key:"getItems",value:function(){return this.data}},{key:"add",value:function(D){this.findIndex(D)>=0?this.update(D):(this.data.push(D),this.dataChange.next(this.data))}},{key:"set",value:function(D){var j=this;D.forEach(function(v){var k=j.findIndex(v);if(k>=0){var b=Object.assign(j.data[k],v);j.data[k]=b}else j.data.push(v)}),this.data.filter(function(v){return 0===D.filter(function(k){return j.getItemKey(k)===j.getItemKey(v)}).length}).forEach(function(v){return j.remove(v)}),this.dataChange.next(this.data)}},{key:"get",value:function(D){var j=this,L=this.data.findIndex(function(v){return j.getItemKey(v)===D});if(L>=0)return this.data[L]}},{key:"update",value:function(D){var j=this.findIndex(D);if(j>=0){var L=Object.assign(this.data[j],D);this.data[j]=L,this.dataChange.next(this.data),this.itemUpdated.next(L)}}},{key:"remove",value:function(D){var j=this.findIndex(D);j>=0&&(this.data.splice(j,1),this.dataChange.next(this.data))}},{key:"changes",get:function(){return this.dataChange}},{key:"itemChanged",get:function(){return this.itemUpdated}},{key:"clear",value:function(){this.data=[],this.dataChange.next(this.data)}},{key:"findIndex",value:function(D){var j=this;return this.data.findIndex(function(L){return j.getItemKey(L)===j.getItemKey(D)})}}]),P}()},6215:function(De,K,m){"use strict";m.d(K,{F:function(){return E}});var G=m(5671),W=m(3144),A=m(136),U=m(9388),R=m(5735),P=m(5e3),E=function(D){(0,A.Z)(L,D);var j=(0,U.Z)(L);function L(){return(0,G.Z)(this,L),j.apply(this,arguments)}return(0,W.Z)(L,[{key:"getItemKey",value:function(k){return k.link_id}}]),L}(R.o);E.\u0275fac=function(){var D;return function(L){return(D||(D=P.n5z(E)))(L||E)}}(),E.\u0275prov=P.Yz7({token:E,factory:E.\u0275fac})},5366:function(De,K,m){"use strict";m.d(K,{G:function(){return E}});var G=m(5671),W=m(3144),A=m(136),U=m(9388),R=m(5735),P=m(5e3),E=function(D){(0,A.Z)(L,D);var j=(0,U.Z)(L);function L(){return(0,G.Z)(this,L),j.apply(this,arguments)}return(0,W.Z)(L,[{key:"getItemKey",value:function(k){return k.node_id}}]),L}(R.o);E.\u0275fac=function(){var D;return function(L){return(D||(D=P.n5z(E)))(L||E)}}(),E.\u0275prov=P.Yz7({token:E,factory:E.\u0275fac})},5542:function(De,K,m){"use strict";m.d(K,{X:function(){return P}});var G=m(5671),W=m(3144),A=m(4766),U=m(5e3),R=m(2437),P=function(){function E(D){(0,G.Z)(this,E),this.httpController=D}return(0,W.Z)(E,[{key:"getComputes",value:function(j){return this.httpController.get(j,"/computes")}},{key:"getUploadPath",value:function(j,L,v){return"".concat(j.protocol,"//").concat(j.host,":").concat(j.port,"/").concat(A.N.current_version,"/").concat(L,"/images/").concat(v)}},{key:"getStatistics",value:function(j){return this.httpController.get(j,"/statistics")}}]),E}();P.\u0275fac=function(D){return new(D||P)(U.LFG(R.zw))},P.\u0275prov=U.Yz7({token:P,factory:P.\u0275fac})},2437:function(De,K,m){"use strict";m.d(K,{CJ:function(){return k},zw:function(){return b}});var G=m(5671),W=m(3144),A=m(136),U=m(9388),R=m(5724),P=m(5e3),E=m(4766),D=m(1737),j=m(7221),L=m(520),v=function(O){(0,A.Z)(y,O);var S=(0,U.Z)(y);function y(T){return(0,G.Z)(this,y),S.call(this,T)}return(0,W.Z)(y,null,[{key:"fromError",value:function(M,x){var N=new y(M);return N.originalError=x,N}}]),y}((0,R.Z)(Error)),k=function(){function O(){(0,G.Z)(this,O)}return(0,W.Z)(O,[{key:"handleError",value:function(y){var T=y;return"HttpErrorResponse"===y.name&&0===y.status&&(T=v.fromError("Controller is unreachable",y)),401===y.status&&window.location.reload(),(0,D._)(T)}}]),O}();k.\u0275fac=function(S){return new(S||k)},k.\u0275prov=P.Yz7({token:k,factory:k.\u0275fac});var b=function(){function O(S,y){(0,G.Z)(this,O),this.http=S,this.errorHandler=y,this.requestsNotificationEmitter=new P.vpe}return(0,W.Z)(O,[{key:"get",value:function(y,T,M){M=this.getJsonOptions(M);var x=this.getOptionsForController(y,T,M);return this.requestsNotificationEmitter.emit("GET ".concat(x.url)),this.http.get(x.url,x.options).pipe((0,j.K)(this.errorHandler.handleError))}},{key:"getText",value:function(y,T,M){M=this.getTextOptions(M);var x=this.getOptionsForController(y,T,M);return this.requestsNotificationEmitter.emit("GET ".concat(x.url)),this.http.get(x.url,x.options).pipe((0,j.K)(this.errorHandler.handleError))}},{key:"getBlob",value:function(y,T,M){M=this.getBlobOptions(M);var x=this.getOptionsForController(y,T,M);return this.requestsNotificationEmitter.emit("GET ".concat(x.url)),this.http.get(x.url,x.options).pipe((0,j.K)(this.errorHandler.handleError))}},{key:"post",value:function(y,T,M,x){x=this.getJsonOptions(x);var N=this.getOptionsForController(y,T,x);return this.requestsNotificationEmitter.emit("POST ".concat(N.url)),this.http.post(N.url,M,N.oLine truncated
(self.webpackChunkgns3_web_ui=self.webpackChunkgns3_web_ui||[]).push([[179],{5735:function(De,K,m){"use strict";m.d(K,{o:function(){return R}});var G=m(5671),W=m(3144),A=m(591),U=m(8929),R=function(){function P(){(0,G.Z)(this,P),this.data=[],this.dataChange=new A.X([]),this.itemUpdated=new U.xQ}return(0,W.Z)(P,[{key:"getItems",value:function(){return this.data}},{key:"add",value:function(D){this.findIndex(D)>=0?this.update(D):(this.data.push(D),this.dataChange.next(this.data))}},{key:"set",value:function(D){var j=this;D.forEach(function(v){var k=j.findIndex(v);if(k>=0){var b=Object.assign(j.data[k],v);j.data[k]=b}else j.data.push(v)}),this.data.filter(function(v){return 0===D.filter(function(k){return j.getItemKey(k)===j.getItemKey(v)}).length}).forEach(function(v){return j.remove(v)}),this.dataChange.next(this.data)}},{key:"get",value:function(D){var j=this,L=this.data.findIndex(function(v){return j.getItemKey(v)===D});if(L>=0)return this.data[L]}},{key:"update",value:function(D){var j=this.findIndex(D);if(j>=0){var L=Object.assign(this.data[j],D);this.data[j]=L,this.dataChange.next(this.data),this.itemUpdated.next(L)}}},{key:"remove",value:function(D){var j=this.findIndex(D);j>=0&&(this.data.splice(j,1),this.dataChange.next(this.data))}},{key:"changes",get:function(){return this.dataChange}},{key:"itemChanged",get:function(){return this.itemUpdated}},{key:"clear",value:function(){this.data=[],this.dataChange.next(this.data)}},{key:"findIndex",value:function(D){var j=this;return this.data.findIndex(function(L){return j.getItemKey(L)===j.getItemKey(D)})}}]),P}()},6215:function(De,K,m){"use strict";m.d(K,{F:function(){return E}});var G=m(5671),W=m(3144),A=m(136),U=m(9388),R=m(5735),P=m(5e3),E=function(D){(0,A.Z)(L,D);var j=(0,U.Z)(L);function L(){return(0,G.Z)(this,L),j.apply(this,arguments)}return(0,W.Z)(L,[{key:"getItemKey",value:function(k){return k.link_id}}]),L}(R.o);E.\u0275fac=function(){var D;return function(L){return(D||(D=P.n5z(E)))(L||E)}}(),E.\u0275prov=P.Yz7({token:E,factory:E.\u0275fac})},5366:function(De,K,m){"use strict";m.d(K,{G:function(){return E}});var G=m(5671),W=m(3144),A=m(136),U=m(9388),R=m(5735),P=m(5e3),E=function(D){(0,A.Z)(L,D);var j=(0,U.Z)(L);function L(){return(0,G.Z)(this,L),j.apply(this,arguments)}return(0,W.Z)(L,[{key:"getItemKey",value:function(k){return k.node_id}}]),L}(R.o);E.\u0275fac=function(){var D;return function(L){return(D||(D=P.n5z(E)))(L||E)}}(),E.\u0275prov=P.Yz7({token:E,factory:E.\u0275fac})},5542:function(De,K,m){"use strict";m.d(K,{X:function(){return P}});var G=m(5671),W=m(3144),A=m(4766),U=m(5e3),R=m(2437),P=function(){function E(D){(0,G.Z)(this,E),this.httpController=D}return(0,W.Z)(E,[{key:"getComputes",value:function(j){return this.httpController.get(j,"/computes")}},{key:"getUploadPath",value:function(j,L,v){return"".concat(j.protocol,"//").concat(j.host,":").concat(j.port,"/").concat(A.N.current_version,"/").concat(L,"/images/").concat(v)}},{key:"getStatistics",value:function(j){return this.httpController.get(j,"/statistics")}}]),E}();P.\u0275fac=function(D){return new(D||P)(U.LFG(R.zw))},P.\u0275prov=U.Yz7({token:P,factory:P.\u0275fac})},2437:function(De,K,m){"use strict";m.d(K,{CJ:function(){return k},zw:function(){return b}});var G=m(5671),W=m(3144),A=m(136),U=m(9388),R=m(5724),P=m(5e3),E=m(4766),D=m(1737),j=m(7221),L=m(520),v=function(O){(0,A.Z)(y,O);var S=(0,U.Z)(y);function y(T){return(0,G.Z)(this,y),S.call(this,T)}return(0,W.Z)(y,null,[{key:"fromError",value:function(M,x){var N=new y(M);return N.originalError=x,N}}]),y}((0,R.Z)(Error)),k=function(){function O(){(0,G.Z)(this,O)}return(0,W.Z)(O,[{key:"handleError",value:function(y){var T=y;return"HttpErrorResponse"===y.name&&0===y.status&&(T=v.fromError("Controller is unreachable",y)),401===y.status&&window.location.reload(),(0,D._)(T)}}]),O}();k.\u0275fac=function(S){return new(S||k)},k.\u0275prov=P.Yz7({token:k,factory:k.\u0275fac});var b=function(){function O(S,y){(0,G.Z)(this,O),this.http=S,this.errorHandler=y,this.requestsNotificationEmitter=new P.vpe}return(0,W.Z)(O,[{key:"get",value:function(y,T,M){M=this.getJsonOptions(M);var x=this.getOptionsForController(y,T,M);return this.requestsNotificationEmitter.emit("GET ".concat(x.url)),this.http.get(x.url,x.options).pipe((0,j.K)(this.errorHandler.handleError))}},{key:"getText",value:function(y,T,M){M=this.getTextOptions(M);var x=this.getOptionsForController(y,T,M);return this.requestsNotificationEmitter.emit("GET ".concat(x.url)),this.http.get(x.url,x.options).pipe((0,j.K)(this.errorHandler.handleError))}},{key:"getBlob",value:function(y,T,M){M=this.getBlobOptions(M);var x=this.getOptionsForController(y,T,M);return this.requestsNotificationEmitter.emit("GET ".concat(x.url)),this.http.get(x.url,x.options).pipe((0,j.K)(this.errorHandler.handleError))}},{key:"post",value:function(y,T,M,x){x=this.getJsonOptions(x);var N=this.getOptionsForController(y,T,x);return this.requestsNotificationEmitter.emit("POST ".concat(N.url)),this.http.post(N.url,M,N.oLine truncated
+2 -2
View File
@@ -22,8 +22,8 @@
# or negative for a release candidate or beta (after the base version
# number has been incremented)
__version__ = "3.0.0"
__version_info__ = (3, 0, 0, 0)
__version__ = "3.0.1"
__version_info__ = (3, 0, 1, 0)
if "dev" in __version__:
try:
+7 -7
View File
@@ -87,7 +87,7 @@ async def test_compute_httpQuery(compute):
response.status = 200
await compute.post("/projects", {"a": "b"})
await compute.close()
mock.assert_called_with("POST", "https://example.com:84/v3/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/v3/compute/projects", data=b'{"a": "b"}', headers={'content-type': 'application/json'}, auth=None, chunked=None, timeout=120)
assert compute._auth is None
@@ -102,7 +102,7 @@ async def test_compute_httpQueryAuth(compute):
compute.password = SecretStr("toor")
await compute.post("/projects", {"a": "b"})
await compute.close()
mock.assert_called_with("POST", "https://example.com:84/v3/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/v3/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.password == "toor"
@@ -162,7 +162,7 @@ async def test_compute_httpQueryNotConnectedInvalidVersion(compute):
with asyncio_patch("aiohttp.ClientSession.request", return_value=response) as mock:
with pytest.raises(ControllerError):
await compute.post("/projects", {"a": "b"})
mock.assert_any_call("GET", "https://example.com:84/v3/compute/capabilities", headers={'content-type': 'application/json'}, data=None, auth=None, chunked=None, timeout=20)
mock.assert_any_call("GET", "https://example.com:84/v3/compute/capabilities", headers={'content-type': 'application/json'}, data=None, auth=None, chunked=None, timeout=120)
await compute.close()
@@ -176,7 +176,7 @@ async def test_compute_httpQueryNotConnectedNonGNS3Server(compute):
with asyncio_patch("aiohttp.ClientSession.request", return_value=response) as mock:
with pytest.raises(ControllerError):
await compute.post("/projects", {"a": "b"})
mock.assert_any_call("GET", "https://example.com:84/v3/compute/capabilities", headers={'content-type': 'application/json'}, data=None, auth=None, chunked=None, timeout=20)
mock.assert_any_call("GET", "https://example.com:84/v3/compute/capabilities", headers={'content-type': 'application/json'}, data=None, auth=None, chunked=None, timeout=120)
await compute.close()
@@ -190,7 +190,7 @@ async def test_compute_httpQueryNotConnectedNonGNS3Server2(compute):
with asyncio_patch("aiohttp.ClientSession.request", return_value=response) as mock:
with pytest.raises(ControllerError):
await compute.post("/projects", {"a": "b"})
mock.assert_any_call("GET", "https://example.com:84/v3/compute/capabilities", headers={'content-type': 'application/json'}, data=None, auth=None, chunked=None, timeout=20)
mock.assert_any_call("GET", "https://example.com:84/v3/compute/capabilities", headers={'content-type': 'application/json'}, data=None, auth=None, chunked=None, timeout=120)
@pytest.mark.asyncio
@@ -228,7 +228,7 @@ async def test_compute_httpQuery_project(compute):
project = Project(name="Test")
mock_notification.assert_called()
await compute.post("/projects", project)
mock.assert_called_with("POST", "https://example.com:84/v3/compute/projects", data=json.dumps(project.asdict()), headers={'content-type': 'application/json'}, auth=None, chunked=None, timeout=20)
mock.assert_called_with("POST", "https://example.com:84/v3/compute/projects", data=json.dumps(project.asdict()), headers={'content-type': 'application/json'}, auth=None, chunked=None, timeout=120)
await compute.close()
# FIXME: https://github.com/aio-libs/aiohttp/issues/2525
@@ -430,7 +430,7 @@ async def test_interfaces(compute):
response.status = 200
with asyncio_patch("aiohttp.ClientSession.request", return_value=response) as mock:
assert await compute.interfaces() == res
mock.assert_any_call("GET", "https://example.com:84/v3/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/v3/compute/network/interfaces", auth=None, chunked=None, data=None, headers={'content-type': 'application/json'}, timeout=120)
await compute.close()