Compare commits

..
206 Commits
Author SHA1 Message Date
grossmj 59a95edd3d Release v2.2.59 2026-05-08 19:06:04 +08:00
grossmj e34a7afe79 Sync appliances 2026-05-08 19:03:14 +08:00
Jeremy Grossmann 2dcbe0f1c2 Merge pull request #2717 from GNS3/bugfix/2709
Fix snapshot restore does not work after export/import of project
2026-05-08 18:59:37 +08:00
grossmj b1c8ce8b58 Remove unneeded code 2026-05-08 18:56:56 +08:00
grossmj b304511b5e Fix snapshot restore does not work after export/import of project 2026-05-08 18:47:47 +08:00
grossmj 163d4e0534 Update requirements.txt & python_requires 2026-05-08 17:01:10 +08:00
grossmj 72f64ee60b Warn to use 64-bit IOU images. Fixes #2716
32-bit IOU image support has been removed from the GNS3 VM.
2026-05-08 16:37:06 +08:00
Jeremy Grossmann cd03abb7ed Merge pull request #2669 from arl1984/fix/telnet-proxy-reader-cleanup-2344
Fix telnet console silent-proxy hang on non-ConnectionError exit (#2344)
2026-05-08 15:42:51 +08:00
grossmj 6551bf56f8 Tweak and merge changes from 3.0 branch 2026-05-08 15:36:40 +08:00
arl1984 de0d050689 Fix telnet console silent-proxy hang on non-ConnectionError exit (#2344)
The run() cleanup block was guarded by `except (ConnectionError, OSError):`,
so exits via asyncio.CancelledError or any other exception type skipped
cleanup. Result: `_reader_process` stays pinned to the dead reader and
`_get_reader()` returns None for every subsequent client — the silent-proxy
symptom described in #2344.

Convert the except block to try/finally so cleanup always runs, regardless
of how `_process()` exits. Also:
- catch asyncio.CancelledError + generic Exception (with log.exception) so
  unexpected failures don't swallow the cleanup
- reset `_current_read = None` after cancellation
- use `dict.pop(..., None)` instead of `del` to avoid KeyError races if
  the broadcast loop's timeout handler already removed the entry

Triggering pattern observed in practice: a diagnostic tool opens a console,
sends a few commands, and closes abruptly (e.g. from a test harness or
orchestration script that cancels its Task). If the `_process()` task was
awaiting on one of the `network_read` / `reader_read` futures at the time
of cancellation, the CancelledError propagates up through `run()` and
bypasses the ConnectionError-only except clause. The proxy accepts future
connections (the listen socket is still alive) but never forwards any data
because `_reader_process` never got reset.

Validated against gns3/gns3-server:latest (2.2.56.1) running a 10-scenario
sequential regression batch that previously hung reliably on the 4th
sp_v1 / L3VPN scenario and now completes cleanly across all 10.
2026-04-16 14:46:49 +00:00
grossmj ae3ae46151 Development on 2.2.59.dev2 2026-04-12 21:17:17 +08:00
grossmj 58fc6a8478 Release v2.2.58.1 2026-04-12 20:59:20 +08:00
grossmj d9b8d0d1ff Sync appliances 2026-04-12 20:49:56 +08:00
grossmj 2b0b31b402 Merge branch 'master' into 2.2 2026-04-12 20:47:14 +08:00
grossmj 4a47151526 Development on 2.2.59.dev1 2026-04-11 18:05:54 +08:00
Jeremy Grossmann adeec10188 Merge pull request #2667 from GNS3/release/v2.2.58
Release v2.2.58
2026-04-11 17:42:38 +08:00
Jeremy Grossmann e747deae88 Merge branch 'master' into release/v2.2.58 2026-04-11 17:37:31 +08:00
Jeremy GrossmannandCopilot Autofix powered by AI 264fffbc6c Potential fix for pull request finding 'CodeQL / Information exposure through an exception'
Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>
2026-04-11 17:34:53 +08:00
grossmj a295d653b8 Release v2.2.58 2026-04-10 20:36:01 +08:00
grossmj c6eec799fb Remove old files 2026-04-10 20:27:46 +08:00
grossmj 8503840307 Bundle web-ui v2.2.58 2026-04-10 20:24:16 +08:00
grossmj c4dbecc1ea Sync appliances 2026-04-10 20:11:16 +08:00
Jeremy Grossmann 3d71967983 Merge pull request #2665 from GNS3/refector-snapshots
Snapshot refactoring
2026-04-10 20:01:45 +08:00
grossmj 161e016594 Remove log message 2026-04-10 19:58:55 +08:00
grossmj 82f795c9ee Add some additional tests 2026-04-10 19:50:42 +08:00
grossmj 2670c68467 Last adjustments for import/export 2026-04-10 18:58:21 +08:00
grossmj 6f7730c455 Update snapshots when duplicating a project 2026-04-09 23:18:55 +08:00
grossmj 274cef6cf5 Add description for snapshots 2026-04-09 20:25:44 +08:00
grossmj fbea9b655d Fix issue when restoring a snapshot of a duplicated project 2026-04-08 22:16:47 +08:00
grossmj 6869f2d71d Snapshot refactoring 2026-04-08 20:02:01 +08:00
Jeremy Grossmann e871a1aed6 Merge pull request #2661 from GNS3/revert-2660-backport-telnetlib3
Revert "Backport telnetlib3 changes"
2026-04-05 22:02:05 +08:00
Jeremy Grossmann b222fba42c Revert "Backport telnetlib3 changes" 2026-04-05 21:58:21 +08:00
Jeremy Grossmann f9957b1d90 Merge pull request #2660 from GNS3/backport-telnetlib3
Backport telnetlib3 changes
2026-04-05 21:08:43 +08:00
grossmj bc6374f7fc Add keepalive mechanism using the NOP command 2026-04-05 13:30:38 +08:00
Cristi c739a16d70 Improved exception handling and telnet client disconnect 2026-04-05 13:29:35 +08:00
Cristi 7684ce60ce Backport: Re-write current Telnet server implementation using telnetlib3 library 2026-04-05 13:29:25 +08:00
Jeremy Grossmann 4701712a86 Merge pull request #2644 from GNS3/release/v2.2.57
Release v2.2.57
2026-03-24 10:10:22 +08:00
grossmj e5ff9e7f00 Development on 2.2.58.dev1 2026-03-24 08:35:49 +08:00
grossmj 7adb0c5226 Release v2.2.57 2026-03-23 09:45:46 +08:00
grossmj 667833dda5 Merge remote-tracking branch 'origin/master' into 2.2 2026-03-23 09:38:13 +08:00
grossmj 646ff00ade Sync appliances 2026-03-23 09:37:15 +08:00
YueGuobin ffcfa4ccb1 feat(telnet_server): improve error handling and connection management
- Catch OSError alongside ConnectionError in connection processing to handle more network errors
- Move client_info retrieval inside try block to prevent AttributeError on failed connections
- Replace bare except with specific exceptions (OSError, ConnectionError, asyncio.TimeoutError)
- Improve error logging to include specific exception details and client information
2026-03-15 23:07:06 +08:00
Jeremy Grossmann 5c63928636 Merge pull request #2634 from GNS3/update-iol-ram-nvram
Deactivate 'use default IOU values' by default and update RAM/NVRAM values
2026-03-12 13:53:04 +08:00
grossmj 0624c1b945 Deactivate 'use default IOU values' by default and update RAM/NVRAM values 2026-03-10 20:28:00 +08:00
grossmj b658f7ff68 Make sure the node shows as stopped when the wrap console cannot be stopped. Ref https://github.com/GNS3/gns3-registry/pull/1010 2026-03-09 17:10:00 +08:00
Jeremy Grossmann cd51afb01f Merge pull request #2633 from GNS3/revert-2628-console
Revert "Fix QEMU serial console artifacts by filtering ANSI CPR responses in …"
2026-03-07 22:24:17 +08:00
Jeremy Grossmann 14ffa2c2d6 Revert "Fix QEMU serial console artifacts by filtering ANSI CPR responses in …" 2026-03-07 22:22:16 +08:00
Jeremy Grossmann 09aaf43dd1 Merge pull request #2628 from Raizo62/console
Fix QEMU serial console artifacts by filtering ANSI CPR responses in …
2026-03-06 18:24:34 +08:00
Raizo62 590eedeb46 Fix QEMU serial console artifacts by filtering ANSI CPR responses in telnet proxy
- filter incoming cursor position report sequences (`ESC[<row>;<col>R`) in `AsyncioTelnetServer`
- prevent stray `;1R;80R` characters on late telnet console attach after VM boot
- keep QEMU serial transport unchanged (`-serial telnet`) for BIOS compatibility
2026-03-04 14:26:52 +01:00
Jeremy Grossmann d3710e8e9a Merge pull request #2621 from markparonyan/issue-2521
handle None port name to prevent TypeError in short_name method
2026-03-01 12:31:17 +08:00
Mark Paronyan 0da1a6639a tests(controller,port): short_name finishes successfully when port name is None 2026-02-28 21:45:08 +03:00
Mark Paronyan 729eb43115 fix(controller,port): handle None port name to prevent TypeError in short_name method 2026-02-28 21:45:00 +03:00
grossmj 4d85e517b4 Development on 2.2.57.dev2 2026-02-24 21:21:03 +08:00
Jeremy Grossmann 3b95859b79 Merge pull request #2612 from dalearbo/fix/busybox-musl-ldd-check
fix: busybox static link detection on Alpine/musl
2026-02-20 16:01:01 +08:00
grossmj 47cc827c1f Remove some files not related to PR 2026-02-20 15:56:08 +08:00
grossmj 715b7032bc Fix tests 2026-02-20 15:51:49 +08:00
Jeremy Grossmann bc1729b255 Merge branch '2.2' into fix/busybox-musl-ldd-check 2026-02-20 15:24:54 +08:00
Dale Arbogast 3dd4184193 fix: busybox static link detection on Alpine/musl
On musl-based systems (Alpine), ldd returns exit code 0 for static
binaries, unlike glibc which returns 1. This causes install_busybox()
to reject all busybox binaries as "dynamically linked" on Alpine.

Fix by also accepting binaries whose executable name contains "static"
(i.e. busybox-static, busybox.static), which are the first two
candidates checked by the function. The generic "busybox" fallback
still relies on the ldd return code check.
2026-02-19 16:44:01 -05:00
Jeremy Grossmann 2b4a05eedd Merge pull request #2608 from RishikesavanRamesh/patch-1
Add dynamips to Dockerfile dependencies
2026-02-12 21:13:51 +08:00
Jeremy Grossmann 898a9ce208 Merge branch 'master' into patch-1 2026-02-12 21:13:38 +08:00
grossmj dd87ccff4d Upgrade pytest and jsonschema dependencies 2026-02-11 17:38:49 +08:00
Jeremy Grossmann 78c7d36b1c Merge pull request #2606 from GNS3/release/v2.2.56.1
Release v2.2.56.1
2026-02-11 16:52:43 +08:00
grossmj 44d4a426b5 Upgrade sentry-sdk and psutil dependencies 2026-02-11 16:46:21 +08:00
RishikesavanRamesh 3273f7e992 Add dynamips to Dockerfile dependencies 2026-02-06 20:34:44 +05:30
Jeremy Grossmann d2d19b43c2 Merge pull request #2607 from polsson86/update-pci-device-id-computation
Take populated disks into consideration when calculating PCI device ID
2026-02-06 12:45:30 +08:00
Patrik Olsson fe2014854e Take populated disks into consideration when calculating PCI device ID 2026-02-05 15:10:57 +01:00
grossmj ebe4fdc5b5 Development on 2.2.57.dev2 2026-01-28 18:44:51 +08:00
grossmj 43d7e8a437 Release v2.2.56.1 2026-01-28 17:00:07 +08:00
grossmj 833b5a9ea8 Sync appliances 2026-01-28 16:52:30 +08:00
grossmj 05dda0117f Merge branch 'master' into 2.2 2026-01-28 16:00:14 +08:00
Jeremy Grossmann 6f0dfecc3d Merge pull request #2605 from iskanred/bugfix/2604
Fix telnet keepalive options on macOS
2026-01-28 15:56:13 +08:00
Iskander Nafikov 2414b7a968 Fix telnet keepalive options on macOS 2026-01-26 00:31:03 +08:00
grossmj 7b20314edb Delete random_query.py 2026-01-24 19:17:55 +08:00
grossmj 193f470eaf Upgrade dependencies 2026-01-24 19:12:58 +08:00
grossmj 4335fd7ce0 Drop Python 3.8 support 2026-01-24 18:51:44 +08:00
grossmj ef2cf277c1 Development on 2.2.57.dev1 2026-01-24 16:53:43 +08:00
Jeremy Grossmann 66db267e27 Merge pull request #2591 from GNS3/release/v2.2.56
Release v2.2.56
2026-01-24 16:49:35 +08:00
grossmj 27fbe37375 Release v2.2.56 2026-01-21 22:15:12 +08:00
grossmj 7b3fd4450e Sync appliances 2026-01-17 18:37:41 +08:00
grossmj 58d1e8f0c5 Set default location of udhcpc in "/etc/network/udhcpc". Fixes #2582 2026-01-17 18:01:42 +08:00
grossmj 8ce690ce78 Upgrade pywin32 to v311 2026-01-17 17:54:27 +08:00
grossmj c676a5bf82 Development on v2.2.56.dev1 2025-12-16 16:46:31 +08:00
grossmj 37f17209d3 Release v2.2.55 2025-11-19 12:13:56 +10:00
grossmj f24134a8f5 Sync appliances 2025-11-19 12:08:29 +10:00
Jeremy Grossmann 1f2036defd Merge pull request #2575 from GNS3/bugfix/2574
Handle Docker API version requirements
2025-11-17 22:31:41 +10:00
grossmj f2aaf5ab38 Docker API version requirements and process to handle older daemons 2025-11-17 22:26:18 +10:00
Jeremy Grossmann 32f48e555c Merge pull request #2573 from GNS3/bugfix/2541
Python 3.14 compatibility
2025-11-17 11:30:42 +10:00
grossmj 942f021b58 Fix test_config.py 2025-11-17 11:26:06 +10:00
Jeremy Grossmann 4dc321454e Merge pull request #2572 from GNS3/feature/name-of-container-in-docker
Set name of container in Docker
2025-11-17 11:13:47 +10:00
grossmj 3a24318694 Use docker_name property when creating a container 2025-11-17 11:11:11 +10:00
grossmj bae6221991 Set name of container in Docker 2025-11-17 10:59:05 +10:00
grossmj c67ba6da0d Fix config tests 2025-11-17 10:21:12 +10:00
grossmj 4d23ca221f Comment out some tests in test_project.py 2025-11-16 20:52:14 +10:00
grossmj 09eab9529a Fix syntax error in testing.yml 2025-11-16 19:32:19 +10:00
grossmj 3bb23708fc Support for Python 3.14 2025-11-16 19:30:45 +10:00
grossmj 672b3c052b Downgrade aiofiles version 2025-11-16 19:25:12 +10:00
grossmj bfe7b7a735 Upgrade dependencies 2025-11-16 19:16:38 +10:00
Jeremy Grossmann 230866890e Merge pull request #2556 from GNS3/bugfix/2543
Enable ip cef in IOU L2 and IOU L3 base configs
2025-09-01 18:59:10 +02:00
grossmj 355cfb7571 Enable ip cef in IOU L2 and IOU L3 base configs 2025-09-01 18:55:36 +02:00
grossmj 8dddfe056e Merge branch 'master' into 2.2 2025-09-01 18:42:02 +02:00
Jeremy Grossmann 9c33827de3 Merge pull request #2555 from GNS3/update-gh-docker-build
Update docker-build.yml
2025-09-01 18:28:04 +02:00
grossmj a34fa53823 Update tags 2025-09-01 18:27:04 +02:00
grossmj 565a76ae27 Only build and push Docker image when releasing a new version 2025-09-01 18:23:52 +02:00
grossmj dc9c3b1c5d Fix pushing Docker image to Docker hub 2025-09-01 18:17:52 +02:00
grossmj a394fb71dc Update method to login to ghcr.io 2025-09-01 17:55:46 +02:00
grossmj 6cbf3baa1b Update docker-build.yml 2025-09-01 17:49:34 +02:00
grossmj 10322135e3 Upgrade sentry-sdk package 2025-08-30 21:51:20 +02:00
grossmj 12d1d04462 Update security issues again in README.md. Fixes #2535 2025-08-29 18:28:14 +02:00
grossmj 8b4c2f5e90 Update security issues in README.md. Fixes #2535 2025-08-29 18:25:57 +02:00
Jeremy Grossmann aaffc731ee Merge pull request #2538 from Nick1200000/enhancement/docker-build
Add automated Docker build and publish workflow
2025-06-09 22:14:11 +02:00
Nick1200000 5ce55aff02 Resolving the Error 2025-06-08 14:11:01 +05:30
Nick1200000 aa1c0bb557 Resolving the Errors 2025-06-08 13:38:35 +05:30
Nick1200000 25bc2dce57 Resolving the Errors 2025-06-08 13:30:49 +05:30
Nick1200000 7e35d164dc Resolving the Errors 2025-06-08 13:26:40 +05:30
Nick1200000 8666ffaff3 Resolving the Errors 2025-06-08 13:24:38 +05:30
Nick1200000 020f6a123d Docker build CI/CD pipeline 2025-06-07 18:16:47 +05:30
grossmj c2c89b0ff3 Add missing 'nat' template type in schema. Fixes #2529 2025-05-13 20:52:44 +02:00
grossmj ef3570dc95 Merge branch 'master' into 2.2 2025-05-13 20:48:59 +02:00
Jeremy Grossmann add8c4e8a2 Merge pull request #2526 from emmanuel-ferdman/master
Resolve deprecation warnings of regex library
2025-04-30 14:14:37 +07:00
Emmanuel Ferdman c05e6f4de4 Resolve deprecation warnings of regex library
Signed-off-by: Emmanuel Ferdman <emmanuelferdman@gmail.com>
2025-04-26 00:15:16 -07:00
grossmj e32576d5ed Development on 2.2.55.dev1 2025-04-21 19:35:13 +07:00
Jeremy Grossmann bd3657d8f3 Merge pull request #2524 from GNS3/release/v2.2.54
Release v2.2.54
2025-04-21 19:30:57 +07:00
grossmj 4418d6bb2b Release v2.2.54 2025-04-21 17:15:22 +07:00
grossmj dbcafdd314 Merge branch 'master' into 2.2 2025-04-21 17:08:59 +07:00
grossmj 4dd1803a70 Bundle web-ui v2.2.54 2025-04-21 16:40:59 +07:00
grossmj 99272fb7e0 Sync appliances 2025-04-21 16:30:32 +07:00
grossmj a24d2e25ed Add new method to find the IP address of a VBox GNS3 VM + allow NAT Network 2025-04-21 16:29:32 +07:00
grossmj a5a663bc99 Remove OVMF_CODE_4M.secboot.fd and associated code 2025-04-18 17:31:31 +07:00
grossmj 2b7eb91694 Add edk2-stable202502 UEFI firmwares and try to first use firmwares from the ovmf package if installed. Fixes #2494 2025-04-18 17:13:29 +07:00
grossmj 684770a220 Prettify TPM error message 2025-04-18 15:25:50 +07:00
grossmj f6546bf1de Fix bug in qemu_stdout message 2025-04-18 15:19:06 +07:00
grossmj 355b97398b Reduce matching error for TPM result 2025-04-18 15:13:41 +07:00
grossmj 6242a0be80 Try to detect swtpm and AppArmor issue. Ref https://github.com/GNS3/gns3-gui/issues/3725 2025-04-18 15:06:49 +07:00
grossmj 18413c923c Development on 2.2.54.dev1 2025-04-18 15:05:34 +07:00
grossmj ffd628902c Fix Docker logs decoding. Ref #2522 2025-04-18 13:58:56 +07:00
grossmj ca34053125 Add delay after starting a Docker container and adding connections in uBridge. Ref #2522 2025-04-18 13:50:20 +07:00
grossmj d06f93e772 Fix TypeError when reading Docker container logs. Ref #2522 2025-04-18 13:47:29 +07:00
grossmj 0e89ff56a8 Replace "Docker hub" by "Docker repository" because it is possible to use different repositories 2025-04-16 17:42:40 +07:00
grossmj f00f21c4bd Upgrade dependencies 2025-04-16 17:08:08 +07:00
grossmj 2e9127449c Upgrade Jinja2 to v3.1.6. Fixes #2515 2025-03-18 21:33:31 +07:00
Jeremy Grossmann 483719568f Merge pull request #2511 from NAKNAO-nnct/feature/update-dockerfile-ubuntu-2404
Update Dockerfile base image to Ubuntu 24.04
2025-03-08 20:26:12 +07:00
NAKNAO-nnct 018598a300 refactor 2025-03-08 20:22:06 +09:00
NAKNAO-nnct e262a46cfd rm space 2025-03-08 20:19:37 +09:00
NAKNAO-nnct 00bf1c028b Update README to Run Docker Compose 2025-03-08 14:11:42 +09:00
NAKNAO-nnct 21ebb934f4 add compose.yaml 2025-03-08 14:08:42 +09:00
NAKNAO-nnct 2ecd2cfe3b update Ubuntu24.04 2025-03-08 13:59:05 +09:00
Jeremy Grossmann ce4b3091dd Merge pull request #2507 from GNS3/fix-remote-install-script
Improvements for remote-install.sh
2025-03-03 05:55:42 +07:00
grossmj f722816849 Improvements for remote-install.sh
* Use apt-add-repository to install repository
* Add option to not upgrade the system
* Check if Python version is >= 3.9 when installing from ppa-v3 repository
2025-03-02 22:27:53 +07:00
Jeremy Grossmann 4cb38b23eb Merge pull request #2506 from FedericoTorres233/patch-1
Check if remote-install.sh is being run as root
2025-03-02 16:14:33 +08:00
Federico Torres f3e46227d8 fix: check if remote-install.sh is being run as root 2025-03-01 16:56:21 -03:00
Jeremy Grossmann 185cd01e19 Merge pull request #2488 from GNS3/release/v2.2.53
Release v2.2.53
2025-01-21 09:47:43 +07:00
grossmj 369fcaa512 Release v2.2.53 2025-01-21 11:52:11 +10:00
grossmj 7b7d3d676f Bundle web-ui v2.2.53 2025-01-21 11:43:11 +10:00
grossmj d1186b2acc Sync appliances 2025-01-21 11:29:28 +10:00
grossmj bd58196817 Add more information when patching .vbox file. Ref https://github.com/GNS3/gns3-gui/issues/3542 2025-01-20 13:22:22 +10:00
grossmj ccc8974d92 Fix tests 2024-12-30 16:14:33 +07:00
grossmj 0090ff3722 Increase timeout to run compute HTTP queries. Fixes #2461 2024-12-30 16:10:04 +07:00
grossmj 2c727c6bd2 Use 'allow_methods="*"' in aiohttp_cors.ResourceOptions(). Fixes #2459 2024-12-30 11:06:19 +07:00
grossmj 13b0caef4f Upgrade dependencies 2024-12-30 10:49:35 +07:00
grossmj 8ed1fa6ad5 Merge branch 'master' into 2.2 2024-12-28 18:03:39 +07:00
Jeremy Grossmann a689a55937 Merge pull request #2467 from GNS3/update-remote-install-script
Use iptables to block IOU home call
2024-12-28 18:01:25 +07:00
grossmj 1c0b0ae423 Remove blocking IOU phone home call. 2024-12-28 18:00:22 +07:00
grossmj ad7813d04b Use iptables to block IOU home call 2024-12-28 17:50:59 +07:00
Jeremy Grossmann 685bf88005 Merge pull request #2457 from GNS3/update-remote-install-script
Update remote install script
2024-12-22 22:07:33 +07:00
grossmj a1090a3da8 Fallback when cannot use deb822 format 2024-12-22 21:52:18 +07:00
grossmj c8e5b41f39 Add compatibility for earlier Ubuntu versions 2024-12-22 21:29:05 +07:00
grossmj 94b5d3e636 Update remote-install.sh to support a custom repository and the deb822 source format 2024-12-22 20:26:24 +07:00
grossmj df56955bf0 Use license instead of licence 2024-12-17 15:01:01 +07:00
grossmj 423d3fd82b Fix tests 2024-12-16 18:30:30 +07:00
grossmj 86fbae00e1 Fix issue with iourc_path 2024-12-16 18:16:42 +07:00
grossmj 91e9fa1cbc Fix tests 2024-12-16 18:13:51 +07:00
grossmj 6314dd3c35 Fix: do not use the iourc file if IOU licence check is not enabled 2024-12-16 18:07:02 +07:00
Jeremy Grossmann e94b55e3bf Merge pull request #2452 from GNS3/release/v2.2.52
release/v2.2.52
2024-12-02 11:36:09 +10:00
grossmj 6c521b5f7a Development on 2.2.53.dev1 2024-12-02 11:33:59 +10:00
grossmj a8014da10b Release v2.2.52 2024-12-02 11:14:23 +10:00
grossmj f6080013e3 Bundle web-ui v2.2.52 2024-12-02 11:09:30 +10:00
grossmj fc54c6e496 Sync appliances 2024-12-02 11:02:47 +10:00
Jeremy Grossmann 04cd107651 Merge pull request #2448 from GNS3/bugfix/3664
Fix listing images
2024-11-28 12:45:37 +10:00
grossmj 19cabdfde6 Use log.debug for some messages in images.py 2024-11-28 12:42:50 +10:00
grossmj af7fbe6bb4 Fix tests 2024-11-27 15:18:49 +10:00
grossmj 3d58b437b4 Remove restrictions based on file extension when listing images and fix ELF header checks 2024-11-27 14:51:34 +10:00
grossmj 83921a45df Fix use project name instead of ID for fast duplication when running local server. Fixes #2446 2024-11-26 12:07:06 +10:00
Jeremy Grossmann 11c9802268 Merge pull request #2443 from GNS3/feature/upgrade-resource-files
Overwrite user resources when the originals have changed
2024-11-10 18:30:13 +10:00
grossmj a60e0d424d Overwrite user resources when the originals have changed.
Excepting configs and disks which can be customized.
2024-11-09 12:17:06 +10:00
grossmj db1fb29c63 Relax setuptools requirement to allow for easier Debian packaging on Ubuntu Focal & Jammy 2024-11-08 12:46:55 +10:00
Jeremy Grossmann 1a6a729736 Merge pull request #2442 from Xatrekak/master
Fixed issues with installing on Ubuntu 24.04 via remote-install.sh
2024-11-08 10:02:43 +10:00
Dustin 77c356c82c Update remote-install.sh
Fixes for Ubuntu 24.04
2024-11-07 18:15:52 -05:00
Dustin b4819b5500 Update remote-install.sh
Fixing changes for Ubuntu 24.04
2024-11-07 17:44:42 -05:00
grossmj a5f0dba5cf Development on 2.2.52.dev1 2024-11-07 23:13:31 +10:00
Jeremy Grossmann 11a9451098 Merge pull request #2440 from GNS3/release/v2.2.51
release/v2.2.51
2024-11-07 23:13:03 +10:00
grossmj 754680d8e9 Release v2.2.51 2024-11-07 15:08:27 +10:00
grossmj 05773ce189 Sync appliances 2024-11-07 15:06:06 +10:00
grossmj aeae9deb01 Merge remote-tracking branch 'origin/2.2' into 2.2 2024-11-07 14:53:23 +10:00
grossmj f3749e83ec Catch error when cannot resize Docker container TTY. 2024-11-07 14:52:59 +10:00
Jeremy Grossmann c2db4e8542 Merge pull request #2439 from GNS3/bugfix/2438
Fix disk interface is being overriden when set to none
2024-11-07 14:52:08 +10:00
grossmj 52a7696618 Fix tests 2024-11-07 14:48:57 +10:00
grossmj 7bf17392dd Do not use "ide" if there is a disk image and no interface type has been explicitly configured. 2024-11-07 14:37:26 +10:00
grossmj fb06eb3c0c Remove old debug message 2024-10-31 13:07:09 +10:00
grossmj 753135a80d Merge branch 'master' into 2.2 2024-10-28 17:32:34 +10:00
grossmj c05e1cb8e7 Use @locking when sending uBridge commands. Ref https://github.com/GNS3/gns3-gui/issues/3651 2024-10-28 13:02:04 +10:00
grossmj 48b7e6ca50 Fix run Docker containers with user namespaces enabled. Fixes #2414 2024-10-26 19:03:05 +10:00
grossmj dbe2b8a5fb Python 3.13 support 2024-10-26 18:38:07 +10:00
grossmj 80487eb62d Upgrade dependencies 2024-10-26 18:22:40 +10:00
grossmj 6e66b26b88 Fix errors in init.sh. Fixes #2431 2024-10-22 12:18:28 +10:00
grossmj 9990666076 Development on 2.2.51.dev1 2024-10-21 13:24:14 +10:00
Jeremy Grossmann 97e5a5edc3 Merge pull request #2430 from GNS3/2.2
Release v2.2.50
2024-10-21 13:21:24 +10:00
137 changed files with 3596 additions and 2626 deletions

No files matched your search

+40
View File
@@ -0,0 +1,40 @@
name: Build and Push Docker Image
on:
workflow_dispatch:
push:
tags:
- v2.*
- v3.*
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Login to GitHub Container Registry
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Login to Docker Hub
uses: docker/login-action@v3
with:
registry: docker.io
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Build and push to GitHub Container Registry
run: |
docker build -t ghcr.io/$(echo "${{ github.repository }}" | tr '[:upper:]' '[:lower:]'):latest .
docker push ghcr.io/$(echo "${{ github.repository }}" | tr '[:upper:]' '[:lower:]'):latest
- name: Build and push to Docker Hub
run: |
docker build -t gns3/${{ github.event.repository.name }}:latest .
docker push gns3/${{ github.event.repository.name }}:latest
+1 -5
View File
@@ -18,11 +18,7 @@ jobs:
strategy:
matrix:
os: ["ubuntu-latest"]
python-version: ["3.8", "3.9", "3.10", "3.11", "3.12"]
#include:
# only test with Python 3.10 on Windows
# - os: windows-latest
# python-version: "3.10"
python-version: ["3.9", "3.10", "3.11", "3.12", "3.13", "3.14"]
steps:
- uses: actions/checkout@v4
+94
View File
@@ -1,5 +1,99 @@
# Change Log
## 2.2.59 08/05/2026
* Sync appliances
* Fix snapshot restore does not work after export/import of project
* Warn to use 64-bit IOU images. Fixes #2716 32-bit IOU image support has been removed from the GNS3 VM.
* Fix telnet console silent-proxy hang on non-ConnectionError exit (#2344)
## 2.2.58.1 12/04/2026
* Sync appliances
## 2.2.58 10/04/2026
* Bundle web-ui v2.2.58
* Sync appliances
* Snapshot refactoring
## 2.2.57 23/03/2026
* feat(telnet_server): improve error handling and connection management
* Deactivate 'use default IOU values' by default and update RAM/NVRAM values
* Make sure the node shows as stopped when the wrap console cannot be stopped
* tests(controller,port): short_name finishes successfully when port name is None
* fix(controller,port): handle None port name to prevent TypeError in short_name method
* fix: busybox static link detection on Alpine/musl
* Take populated disks into consideration when calculating PCI device ID
## 2.2.56.1 28/01/2026
* Fix telnet keepalive options on macOS
* Upgrade dependencies
* Drop Python 3.8 support
## 2.2.56 21/01/2026
* Set default location of udhcpc in "/etc/network/udhcpc". Fixes #2582
* Upgrade pywin32 to v311
## 2.2.55 19/11/2025
* Docker API version requirements and process to handle older daemons
* Use docker_name property when creating a container
* Set name of container in Docker
* Support for Python 3.14
* Enable ip cef in IOU L2 and IOU L3 base configs
* Only build and push Docker image when releasing a new version
* Fix pushing Docker image to Docker hub
* Update security issues in README.md. Fixes #2535
* Add missing 'nat' template type in schema. Fixes #2529
* Resolve deprecation warnings of regex library
## 2.2.54 21/04/2025
* Bundle web-ui v2.2.54
* Add new method to find the IP address of a VBox GNS3 VM + allow NAT Network
* Add edk2-stable202502 UEFI firmwares and try to first use firmwares from the ovmf package if installed. Fixes #2494
* Try to detect swtpm and AppArmor issue. Ref https://github.com/GNS3/gns3-gui/issues/3725
* Fix Docker logs decoding. Ref #2522
* Add delay after starting a Docker container and adding connections in uBridge. Ref #2522
* Fix TypeError when reading Docker container logs. Ref #2522
* Replace "Docker hub" by "Docker repository" because it is possible to use different repositories
* Upgrade dependencies
* Improvements for remote-install.sh
## 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
* Bundle web-ui v2.2.52
* 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
* Overwrite user resources when the originals have changed.
* Relax setuptools requirement to allow for easier Debian packaging on Ubuntu Focal & Jammy
## 2.2.51 07/11/2024
* Catch error when cannot resize Docker container TTY.
* Do not use "ide" if there is a disk image and no interface type has been explicitly configured.
* Use @locking when sending uBridge commands. Ref https://github.com/GNS3/gns3-gui/issues/3651
* Fix run Docker containers with user namespaces enabled. Fixes #2414
* Python 3.13 support
* Upgrade dependencies
* Fix errors in init.sh. Fixes #2431
## 2.2.50 21/10/2024
* Bundle web-ui v2.2.50
+13 -10
View File
@@ -1,29 +1,32 @@
# Dockerfile for GNS3 server development
FROM ubuntu:18.04
FROM ubuntu:24.04
ENV DEBIAN_FRONTEND noninteractive
ENV DEBIAN_FRONTEND=noninteractive
# Set the locale
ENV LANG en_US.UTF-8
ENV LANGUAGE en_US:en
ENV LC_ALL en_US.UTF-8
ENV LANG=en_US.UTF-8
ENV LANGUAGE=en_US:en
ENV LC_ALL=en_US.UTF-8
# this environment is externally managed
ENV PIP_BREAK_SYSTEM_PACKAGES=1
RUN apt-get update && apt-get install -y software-properties-common
RUN add-apt-repository ppa:gns3/ppa
RUN apt-get update && apt-get install -y \
locales \
python3-pip \
python3-dev \
python3-dev \
qemu-system-x86 \
qemu-kvm \
libvirt-bin \
x11vnc
libvirt-daemon-system libvirt-clients \
x11vnc
RUN locale-gen en_US.UTF-8
# Install uninstall to install dependencies
RUN apt-get install -y vpcs ubridge
RUN apt-get install -y vpcs ubridge dynamips
ADD . /server
WORKDIR /server
@@ -32,4 +35,4 @@ RUN pip3 install --no-cache-dir -r /server/requirements.txt
EXPOSE 3080
CMD python3 -m gns3server
CMD [ "python3", "-m", "gns3server", "--port", "3080" ]
+7 -2
View File
@@ -112,6 +112,12 @@ For development, you can run the GNS3 server in a container
bash scripts/docker_dev_server.sh
```
#### use Docker Compose
``` {.bash}
docker compose up -d
```
### Run as daemon (Unix only)
You will find init sample scripts for various systems inside the init
@@ -253,5 +259,4 @@ py.test --cov-report term-missing --cov=gns3server
Security issues
---------------
Please contact us using contact form available here:
<http://docs.gns3.com/1ON9JBXSeR7Nt2-Qum2o3ZX0GU86BZwlmNSUgvmqNWGY/index.html>
Please use GitHub's report a vulnerability feature. More information can be found in https://docs.github.com/en/code-security/security-advisories/guidance-on-reporting-and-writing/privately-reporting-a-security-vulnerability
+7
View File
@@ -0,0 +1,7 @@
services:
gen3-server:
build:
context: .
dockerfile: Dockerfile
ports:
- "8001:3080"
+4 -4
View File
@@ -1,6 +1,6 @@
-rrequirements.txt
pytest==8.3.3
flake8==7.1.0
pytest-timeout==2.3.1
pytest-aiohttp==1.0.5
pytest==8.4.2 # version 8.4.2 is the last one supporting Python 3.9
flake8==7.3.0
pytest-timeout==2.4.0
pytest-aiohttp==1.1.0
+75
View File
@@ -25,6 +25,38 @@
"options": "-cpu host -nographic"
},
"images": [
{
"filename": "AlmaLinux-10-GenericCloud-10.0-20250528.0.x86_64.qcow2",
"version": "10.0",
"md5sum": "e5099e33f16014b6cc851482d865720d",
"filesize": 460062720,
"download_url": "https://vault.almalinux.org/10.0/cloud/x86_64/images/",
"direct_download_url": "https://vault.almalinux.org/10.0/cloud/x86_64/images/AlmaLinux-10-GenericCloud-10.0-20250528.0.x86_64.qcow2"
},
{
"filename": "AlmaLinux-9-GenericCloud-9.6-20250522.x86_64.qcow2",
"version": "9.6",
"md5sum": "ae02074389961caf08bbe44439603061",
"filesize": 530776064,
"download_url": "https://vault.almalinux.org/9.6/cloud/x86_64/images/",
"direct_download_url": "https://vault.almalinux.org/9.6/cloud/x86_64/images/AlmaLinux-9-GenericCloud-9.6-20250522.x86_64.qcow2"
},
{
"filename": "AlmaLinux-9-GenericCloud-9.5-20241120.x86_64.qcow2",
"version": "9.5",
"md5sum": "cb48bc1c609a1d3d62f48397acdd038e",
"filesize": 490995712,
"download_url": "https://vault.almalinux.org/9.5/cloud/x86_64/images/",
"direct_download_url": "https://vault.almalinux.org/9.5/cloud/x86_64/images/AlmaLinux-9-GenericCloud-9.5-20241120.x86_64"
},
{
"filename": "AlmaLinux-9-GenericCloud-9.4-20240805.x86_64.qcow2",
"version": "9.4",
"md5sum": "7c5040c044a989c524d40824cebb4a4d",
"filesize": 591724544,
"download_url": "https://vault.almalinux.org/9.4/cloud/x86_64/images/",
"direct_download_url": "https://vault.almalinux.org/9.4/cloud/x86_64/images/AlmaLinux-9-GenericCloud-9.4-20240805.x86_64.qcow2"
},
{
"filename": "AlmaLinux-9-GenericCloud-9.2-20230513.x86_64.qcow2",
"version": "9.2",
@@ -33,6 +65,14 @@
"download_url": "https://vault.almalinux.org/9.2/cloud/x86_64/images/",
"direct_download_url": "https://vault.almalinux.org/9.2/cloud/x86_64/images/AlmaLinux-9-GenericCloud-9.2-20230513.x86_64.qcow2"
},
{
"filename": "AlmaLinux-8-GenericCloud-8.9-20231128.x86_64.qcow2",
"version": "8.9",
"md5sum": "1afc48c798960f0c6ebb65428c0ea973",
"filesize": 697434112,
"download_url": "https://vault.almalinux.org/8.9/cloud/x86_64/images/",
"direct_download_url": "https://vault.almalinux.org/8.9/cloud/x86_64/images/AlmaLinux-8-GenericCloud-8.9-20231128.x86_64.qcow2"
},
{
"filename": "AlmaLinux-8-GenericCloud-8.8-20230524.x86_64.qcow2",
"version": "8.8",
@@ -59,6 +99,34 @@
}
],
"versions": [
{
"name": "10.0",
"images": {
"hda_disk_image": "AlmaLinux-10-GenericCloud-10.0-20250528.0.x86_64.qcow2",
"cdrom_image": "almalinux-cloud-init-data.iso"
}
},
{
"name": "9.6",
"images": {
"hda_disk_image": "AlmaLinux-9-GenericCloud-9.6-20250522.x86_64.qcow2",
"cdrom_image": "almalinux-cloud-init-data.iso"
}
},
{
"name": "9.5",
"images": {
"hda_disk_image": "AlmaLinux-9-GenericCloud-9.5-20241120.x86_64.qcow2",
"cdrom_image": "almalinux-cloud-init-data.iso"
}
},
{
"name": "9.4",
"images": {
"hda_disk_image": "AlmaLinux-9-GenericCloud-9.4-20240805.x86_64.qcow2",
"cdrom_image": "almalinux-cloud-init-data.iso"
}
},
{
"name": "9.2",
"images": {
@@ -66,6 +134,13 @@
"cdrom_image": "almalinux-cloud-init-data.iso"
}
},
{
"name": "8.9",
"images": {
"hda_disk_image": "AlmaLinux-8-GenericCloud-8.9-20231128.x86_64.qcow2",
"cdrom_image": "almalinux-cloud-init-data.iso"
}
},
{
"name": "8.8",
"images": {
+56
View 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"
}
}
]
}
+21
View File
@@ -0,0 +1,21 @@
{
"appliance_id": "a2209414-88a6-403b-a2e1-477a057ec954",
"name": "AlpiNet",
"category": "guest",
"description": "AlpiNet is a lightweight Alpine-based networking toolbox for GNS3.\n\nCOMPREHENSIVE TOOLKIT:\n• Network: ip, ifconfig, ping, traceroute, mtr, arping, nmap, tcpdump\n• Performance: iperf, iperf3\n• HTTP/Web: curl, wget\n• TCP/UDP: netcat, socat, telnet\n• Advanced: ethtool, bridge-utils, vlan\n• Firewall: iptables, ip6tables, nftables\n• File Transfer: FTP (lftp), TFTP, SSH (scp/sftp), rsync\n• DNS: host, nslookup, dig\n• System: nano, tmux, screen, htop, bash\n• Text Tools: grep, sed, awk, jq, less\n• Compression: tar, gzip\n• Utilities: tree, file, openssl\n\nType 'alpinet-tools' in the container for the complete tool list.\n\nOptimized for network testing, troubleshooting, and education.",
"vendor_name": "AlpiNet Project",
"vendor_url": "https://www.alpinelinux.org/",
"product_name": "AlpiNet",
"registry_version": 4,
"status": "stable",
"maintainer": "nazDridoy",
"maintainer_email": "nazdridoy399@gmail.com",
"usage": "The /root directory is persistent across restarts. Type 'alpinet-tools' to see all available utilities.",
"symbol": "AlpiNet.svg",
"docker": {
"adapters": 1,
"image": "gns3/alpinet:latest",
"console_type": "telnet",
"environment": "TERM=xterm"
}
}
+26 -506
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,31 @@
},
"images": [
{
"filename": "vEOS64-lab-4.32.0F.vmdk",
"version": "4.32.0F",
"md5sum": "851771260bb18ad3e90fa6956f0c6161",
"filesize": 591724544,
"filename": "vEOS64-lab-4.35.3F.qcow2",
"version": "4.35.3F",
"md5sum": "00d11e33dc4288f509441a4ab6319ca0",
"filesize": 638910464,
"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": "vEOS64-lab-4.33.2F.qcow2",
"version": "4.33.2F",
"md5sum": "fbe629a8342cd0b3b19566b9d7ef4f4f",
"filesize": 610992128,
"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,
"filename": "vEOS64-lab-4.32.4.1M.qcow2",
"version": "4.32.4.1M",
"md5sum": "cd369b5ccfd87ccd83a34538681ba35f",
"filesize": 605159424,
"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": "vEOS64-lab-4.31.6M.qcow2",
"version": "4.31.6M",
"md5sum": "02fbd929de9416e1096cd2454507d6ce",
"filesize": 590479360,
"download_url": "https://www.arista.com/en/support/software-download"
},
{
@@ -118,459 +62,35 @@
"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.35.3F",
"images": {
"hda_disk_image": "Aboot-veos-serial-8.0.2.iso",
"hdb_disk_image": "vEOS64-lab-4.32.0F.vmdk"
"hdb_disk_image": "vEOS64-lab-4.35.3F.qcow2"
}
},
{
"name": "4.31.3M",
"name": "4.33.2F",
"images": {
"hda_disk_image": "Aboot-veos-serial-8.0.2.iso",
"hdb_disk_image": "vEOS64-lab-4.31.3M.vmdk"
"hdb_disk_image": "vEOS64-lab-4.33.2F.qcow2"
}
},
{
"name": "4.30.6M",
"name": "4.32.4.1M",
"images": {
"hda_disk_image": "Aboot-veos-serial-8.0.2.iso",
"hdb_disk_image": "vEOS64-lab-4.30.6M.vmdk"
"hdb_disk_image": "vEOS64-lab-4.32.4.1M.qcow2"
}
},
{
"name": "4.29.8M",
"name": "4.31.6M",
"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": "vEOS64-lab-4.31.6M.qcow2"
}
}
]
@@ -32,6 +32,27 @@
"process_priority": "normal"
},
"images": [
{
"filename": "arubaoscx-disk-image-genericx86-p4-20241115202521.vmdk",
"version": "10.15.0005",
"md5sum": "69b3675391c04c1a6e0fd0bf8d8bc2d9",
"filesize": 420049408,
"download_url": "https://networkingsupport.hpe.com"
},
{
"filename": "arubaoscx-disk-image-genericx86-p4-20240731173624.vmdk",
"version": "10.14.1000",
"md5sum": "01d6932fbc9c46180a4f41aee9e98301",
"filesize": 412140544,
"download_url": "https://networkingsupport.hpe.com"
},
{
"filename": "arubaoscx-disk-image-genericx86-p4-20240528190307.vmdk",
"version": "10.14.0001",
"md5sum": "83902dbaa74c37cdda3f066f79431933",
"filesize": 401023488,
"download_url": "https://networkingsupport.hpe.com"
},
{
"filename": "arubaoscx-disk-image-genericx86-p4-20240129204649.vmdk",
"version": "10.13.1000",
@@ -139,6 +160,24 @@
}
],
"versions": [
{
"name": "10.15.0005",
"images": {
"hda_disk_image": "arubaoscx-disk-image-genericx86-p4-20241115202521.vmdk"
}
},
{
"name": "10.14.1000",
"images": {
"hda_disk_image": "arubaoscx-disk-image-genericx86-p4-20240731173624.vmdk"
}
},
{
"name": "10.14.0001",
"images": {
"hda_disk_image": "arubaoscx-disk-image-genericx86-p4-20240528190307.vmdk"
}
},
{
"name": "10.13.1000",
"images": {
@@ -0,0 +1,42 @@
{
"appliance_id": "4aa78f74-c769-43e0-9ef1-5dd2cf1909c6",
"name": "Asterfusion AsterNOS-VPP",
"category": "router",
"description": "AsterNOS-VPP leverages SONiC’s robust routing features and management capability with VPP’s high-performance data forwarding. It supports L3 routing, NAT, PPPoE, and VPN services. Minimum requirements: 4 vCPUs and 8GB RAM.",
"vendor_name": "Asterfusion",
"vendor_url": "https://cloudswit.ch/product/sonic-enterprise-distribution/#vAsterNOS",
"documentation_url": "https://docs.asternos.com/routing",
"product_name": "AsterNOS-VPP",
"registry_version": 6,
"status": "stable",
"maintainer": "Asterfusion Product Team",
"maintainer_email": "bd@cloudswit.ch",
"availability": "with-registration",
"images": [
{
"filename": "AsterNOS-VPP_V6.1-R0101P02_x86.img",
"version": "6.1",
"md5sum": "55834c3e8849ab226144d79ef76acf81",
"filesize": 1318201015,
"download_url": "https://asternos.dev/api/file/b2c9fd83-a9d3-46f3-9676-6b49dd481d6c",
"compression": "gzip"
}
],
"qemu": {
"adapter_type": "virtio-net-pci",
"adapters": 4,
"ram": 8192,
"cpus": 4,
"arch": "x86_64",
"console_type": "telnet",
"kvm": "require"
},
"versions": [
{
"name": "6.1",
"images": {
"hda_disk_image": "AsterNOS-VPP_V6.1-R0101P02_x86.img"
}
}
]
}
@@ -0,0 +1,50 @@
{
"appliance_id": "9e934470-d898-4289-a5ed-50af094e629e",
"name": "Asterfusion vAsterNOS campus",
"category": "multilayer_switch",
"description": "AsterNOS is the core technology of Asterfusion’s one-stop SONiC turnkey solution designed for cloud, enterprise, and AI-driven scenarios. AsterNOS v5.2 Campus is specifically designed for traditional campus networks, offering comprehensive L2/L3 capabilities suitable for various campus scenarios such as schools, office buildings, and hospitals. This version supports a fully cloud-integrated Layer 3 network architecture, providing rich routing and switching functionalities to ensure high-performance operation and ease of maintenance. It can also be deployed in the GNS3 simulation environment to experience a complete All-Layer 3 Cloud-Campus network. This version is ideal for enterprises and campus networks requiring high-performance multi-service transport, supporting cross-domain connectivity and providing nanosecond-level time synchronization. It is well-suited for applications with stringent time accuracy requirements, such as financial trading, industrial automation, and smart manufacturing. NOTICE: This appliance file is a virtualized version of AsterNOS and is intended to be used only to experience the basic functionality and industry standard CLI (Klish), not for official software testing. For more information about AsterNOS commercial version, please feel free to contact us via Email: bd@cloudswit.ch",
"vendor_name": "Asterfusion",
"vendor_url": "https://cloudswit.ch/",
"vendor_logo_url": "https://raw.githubusercontent.com/GNS3/gns3-registry/master/vendor-logos/asterfusion.png",
"documentation_url": "https://help.cloudswit.ch/portal/en/kb/articles/vasternos",
"product_name": "vAsterNOS",
"product_url": "https://cloudswit.ch/",
"registry_version": 4,
"status": "experimental",
"maintainer": "Asterfusion",
"maintainer_email": "bd@cloudswit.ch",
"usage": "The login is admin and the password is asteros",
"symbol": "asterfusion-vAsterNOS.svg",
"first_port_name": "eth0",
"port_name_format": "Ethernet{0}",
"qemu": {
"adapter_type": "e1000",
"adapters": 10,
"ram": 4096,
"cpus": 4,
"hda_disk_interface": "virtio",
"arch": "x86_64",
"console_type": "telnet",
"boot_priority": "d",
"kvm": "require"
},
"images": [
{
"filename": "vAsterNOS-V5.2R012P01.img",
"version": "5.2-12-1",
"md5sum": "d18c0cfd786607ccc6dc1069a8f40465",
"filesize": 2823290880,
"download_url": "https://drive.cloudswitch.io/external/d29f6d0a6c8322fea42b3c08e95113d026b8ec6aafbe29193c338333077f3da7"
}
],
"versions": [
{
"name": "5.2-12-1",
"images": {
"hda_disk_image": "vAsterNOS-V5.2R012P01.img"
}
}
]
}
@@ -6,14 +6,14 @@
"vendor_name": "Asterfusion",
"vendor_url": "https://cloudswit.ch/",
"vendor_logo_url": "https://raw.githubusercontent.com/GNS3/gns3-registry/master/vendor-logos/asterfusion.png",
"documentation_url": "https://help.cloudswit.ch/portal/en/kb/articles/vasternos",
"documentation_url": "https://asternos.com/community/space/vasternos/post/vasternos-for-data-center-network",
"product_name": "vAsterNOS",
"product_url": "https://cloudswit.ch/product/sonic-enterprise-distribution",
"registry_version": 4,
"status": "experimental",
"maintainer": "Asterfusion",
"maintainer_email": "bd@cloudswit.ch",
"usage": "The login is admin, passwd asteros",
"usage": "The login is admin and the password is asteros",
"symbol": "asterfusion-vAsterNOS.svg",
"first_port_name": "eth0",
"port_name_format": "Ethernet{0}",
@@ -30,18 +30,18 @@
},
"images": [
{
"filename": "vAsterNOS-V3.1.img",
"filename": "AsterNOS_V3.1_R0408P01-VS.img.gz",
"version": "V3.1",
"md5sum": "c323c9c3f60e1a93eca2acdc5034b85c",
"filesize": 2724659200,
"download_url": "https://drive.cloudswitch.io/external/8ae2e3932ad8bb2ec30dd25be415d288ff3e4a949c557c6bd48ac6e6265bcfc1"
"md5sum": "5c182306af67be2c79a5642551412e48",
"filesize": 1425945924,
"download_url": "http://pub.asternos.com/AsterNOS_V3.1_R0408P01-VS.img.gz"
}
],
"versions": [
{
"name": "V3.1",
"images": {
"hda_disk_image": "vAsterNOS-V3.1.img"
"hda_disk_image": "AsterNOS_V3.1_R0408P01-VS.img.gz"
}
}
]
+24 -54
View File
@@ -27,44 +27,28 @@
},
"images": [
{
"filename": "CentOS-Stream-GenericCloud-9-20230704.1.x86_64.qcow2",
"version": "Stream-9 (20230704.1)",
"md5sum": "e04511e019325a97837edd9eafe02b48",
"filesize": 1087868416,
"filename": "CentOS-Stream-GenericCloud-10-20260504.0.x86_64.qcow2",
"version": "Stream-10 (20260504.0)",
"md5sum": "932b0bcc7e5c7404f91432979dc95314",
"filesize": 2173501440,
"download_url": "https://cloud.centos.org/centos/10-stream/x86_64/images",
"direct_download_url": "https://cloud.centos.org/centos/10-stream/x86_64/images/CentOS-Stream-GenericCloud-10-20260504.0.x86_64.qcow2"
},
{
"filename": "CentOS-Stream-GenericCloud-9-20260504.0.x86_64.qcow2",
"version": "Stream-9 (20260504.0)",
"md5sum": "ebfbbd23ba7b85bbaf83c6c0626c2b70",
"filesize": 1877251072,
"download_url": "https://cloud.centos.org/centos/9-stream/x86_64/images",
"direct_download_url": "https://cloud.centos.org/centos/9-stream/x86_64/images/CentOS-Stream-GenericCloud-9-20230704.1.x86_64.qcow2"
"direct_download_url": "https://cloud.centos.org/centos/9-stream/x86_64/images/CentOS-Stream-GenericCloud-9-20260504.0.x86_64.qcow2"
},
{
"filename": "CentOS-Stream-GenericCloud-8-20230710.0.x86_64.qcow2",
"version": "Stream-8 (20230710.0)",
"md5sum": "83e02ce98c29753c86fb7be7d802aa75",
"filesize": 1676164096,
"filename": "CentOS-Stream-GenericCloud-8-20240603.0.x86_64.qcow2",
"version": "Stream-8 (20240603.0)",
"md5sum": "77f3c9650785b8e977209796e09ee33e",
"filesize": 2003698688,
"download_url": "https://cloud.centos.org/centos/8-stream/x86_64/images",
"direct_download_url": "https://cloud.centos.org/centos/8-stream/x86_64/images/CentOS-Stream-GenericCloud-8-20230710.0.x86_64.qcow2"
},
{
"filename": "CentOS-8-GenericCloud-8.4.2105-20210603.0.x86_64.qcow2",
"version": "8.4 (2105)",
"md5sum": "032eed270415526546eac07628905a62",
"filesize": 1309652992,
"download_url": "https://cloud.centos.org/centos/8/x86_64/images",
"direct_download_url": "https://cloud.centos.org/centos/8/x86_64/images/CentOS-8-GenericCloud-8.4.2105-20210603.0.x86_64.qcow2"
},
{
"filename": "CentOS-7-x86_64-GenericCloud-2111.qcow2",
"version": "7 (2111)",
"md5sum": "730b8662695831670721c8245be61dac",
"filesize": 897384448,
"download_url": "https://cloud.centos.org/centos/7/images",
"direct_download_url": "https://cloud.centos.org/centos/7/images/CentOS-7-x86_64-GenericCloud-2111.qcow2"
},
{
"filename": "CentOS-7-x86_64-GenericCloud-1809.qcow2",
"version": "7 (1809)",
"md5sum": "da79108d1324b27bd1759362b82fbe40",
"filesize": 914948096,
"download_url": "https://cloud.centos.org/centos/7/images",
"direct_download_url": "https://cloud.centos.org/centos/7/images/CentOS-7-x86_64-GenericCloud-1809.qcow2"
"direct_download_url": "https://cloud.centos.org/centos/8-stream/x86_64/images/CentOS-Stream-GenericCloud-8-20240603.0.x86_64.qcow2"
},
{
"filename": "centos-cloud-init-data.iso",
@@ -77,37 +61,23 @@
],
"versions": [
{
"name": "Stream-9 (20230704.1)",
"name": "Stream-10 (20260504.0)",
"images": {
"hda_disk_image": "CentOS-Stream-GenericCloud-9-20230704.1.x86_64.qcow2",
"hda_disk_image": "CentOS-Stream-GenericCloud-10-20260504.0.x86_64.qcow2",
"cdrom_image": "centos-cloud-init-data.iso"
}
},
{
"name": "Stream-8 (20230710.0)",
"name": "Stream-9 (20260504.0)",
"images": {
"hda_disk_image": "CentOS-Stream-GenericCloud-8-20230710.0.x86_64.qcow2",
"hda_disk_image": "CentOS-Stream-GenericCloud-9-20260504.0.x86_64.qcow2",
"cdrom_image": "centos-cloud-init-data.iso"
}
},
{
"name": "8.4 (2105)",
"name": "Stream-8 (20240603.0)",
"images": {
"hda_disk_image": "CentOS-8-GenericCloud-8.4.2105-20210603.0.x86_64.qcow2",
"cdrom_image": "centos-cloud-init-data.iso"
}
},
{
"name": "7 (2111)",
"images": {
"hda_disk_image": "CentOS-7-x86_64-GenericCloud-2111.qcow2",
"cdrom_image": "centos-cloud-init-data.iso"
}
},
{
"name": "7 (1809)",
"images": {
"hda_disk_image": "CentOS-7-x86_64-GenericCloud-1809.qcow2",
"hda_disk_image": "CentOS-Stream-GenericCloud-8-20240603.0.x86_64.qcow2",
"cdrom_image": "centos-cloud-init-data.iso"
}
}
+1
View File
@@ -1,5 +1,6 @@
{
"appliance_id": "cc2b1802-3520-4963-8ff7-c19b1f6418c5",
"tags": ["device_type:cisco_ios_telnet"],
"name": "Cisco 1700",
"category": "router",
"description": "Cisco 1700 Router",
+1
View File
@@ -1,5 +1,6 @@
{
"appliance_id": "ed474fea-cd3b-4e2e-be84-a855a133060a",
"tags": ["device_type:cisco_ios_telnet"],
"name": "Cisco 2600",
"category": "router",
"description": "Cisco 2600 Router",
+1
View File
@@ -1,5 +1,6 @@
{
"appliance_id": "ed0f079e-a506-4cb4-b46c-714a80bbe2d3",
"tags": ["device_type:cisco_ios_telnet"],
"name": "Cisco 2691",
"category": "router",
"description": "Cisco 2691 Router",
+1
View File
@@ -1,5 +1,6 @@
{
"appliance_id": "7ada6336-7280-4306-9f32-6b1e242ae989",
"tags": ["device_type:cisco_ios_telnet"],
"name": "Cisco 3620",
"category": "router",
"description": "Cisco 3620 Router",
+1
View File
@@ -1,5 +1,6 @@
{
"appliance_id": "ef119e49-19fe-4239-9c6b-16ea12f6ec01",
"tags": ["device_type:cisco_ios_telnet"],
"name": "Cisco 3640",
"category": "router",
"description": "Cisco 3640 Router",
+1
View File
@@ -1,5 +1,6 @@
{
"appliance_id": "ac460a9c-9274-4ccf-a056-af50b699925f",
"tags": ["device_type:cisco_ios_telnet"],
"name": "Cisco 3660",
"category": "router",
"description": "Cisco 3660 Router",
+1
View File
@@ -1,5 +1,6 @@
{
"appliance_id": "5b9c5293-a5a7-47a3-9df4-6cf658f2f378",
"tags": ["device_type:cisco_ios_telnet"],
"name": "Cisco 3725",
"category": "router",
"description": "Cisco 3725 Router",
+1
View File
@@ -1,5 +1,6 @@
{
"appliance_id": "18737edb-e43f-4fb0-8a0f-88982cff58b1",
"tags": ["device_type:cisco_ios_telnet"],
"name": "Cisco 3745",
"category": "router",
"description": "Cisco 3745 Multiservice Access Router",
+40
View File
@@ -1,5 +1,6 @@
{
"appliance_id": "38aa3135-f169-4131-9b64-73605787b5ef",
"tags": ["device_type:cisco_ios_telnet"],
"name": "Cisco 7200",
"category": "router",
"description": "Cisco 7200 Router",
@@ -33,11 +34,29 @@
"md5sum": "cbbbea66a253f1dac0fcf81274dc778d",
"filesize": 87756936
},
{
"filename": "c7200-adventerprisek9-mz.152-4.M11.image",
"version": "152-4.M11",
"md5sum": "9a2005ad09ce1ec6fe7cf9af1e9b099e",
"filesize": 128487680
},
{
"filename": "c7200-adventerprisek9-mz.124-24.T5.image",
"version": "124-24.T5",
"md5sum": "6b89d0d804e1f2bb5b8bda66b5692047",
"filesize": 102345240
},
{
"filename": "c7200-a3jk9s-mz.124-25g.image",
"version": "124-25G",
"md5sum": "9c7cc9b3f3b3571411a7f62faaa2c036",
"filesize": 71528984
},
{
"filename": "c7200-itpk9-mz.124-15.SW.image",
"version": "124-15.SW",
"md5sum": "3334a0facdbd26164e83d3c201fff5b5",
"filesize": 46423952
}
],
"versions": [
@@ -55,12 +74,33 @@
"image": "c7200-advipservicesk9-mz.152-4.S5.image"
}
},
{
"name": "152-4.M11",
"idlepc": "0x6062e5c0",
"images": {
"image": "c7200-adventerprisek9-mz.152-4.M11.image"
}
},
{
"name": "124-24.T5",
"idlepc": "0x606df838",
"images": {
"image": "c7200-adventerprisek9-mz.124-24.T5.image"
}
},
{
"name": "124-25G",
"idlepc": "0x6066a998",
"images": {
"image": "c7200-a3jk9s-mz.124-25g.image"
}
},
{
"name": "124-15.SW",
"idlepc": "0x60b2bc68",
"images": {
"image": "c7200-itpk9-mz.124-15.SW.image"
}
}
]
}
@@ -0,0 +1,43 @@
{
"appliance_id": "924a2ef5-7b91-45ae-a1e4-7220338b76b0",
"name": "Cisco Alpine Linux TRex",
"category": "guest",
"description": "Alpine Linux VM image configured to run Cisco's Trex traffic generator in stateless mode",
"vendor_name": "Cisco",
"vendor_url": "http://www.cisco.com/",
"documentation_url": "https://trex-tgn.cisco.com/",
"product_name": "Alpine Linux Virt",
"product_url": "https://developer.cisco.com/modeling-labs/",
"registry_version": 4,
"status": "experimental",
"maintainer": "GNS3 Team",
"maintainer_email": "developers@gns3.net",
"usage": "By default, a \"cisco\" account with password \"cisco\" is created.",
"port_name_format": "eth{0}",
"qemu": {
"adapter_type": "virtio-net-pci",
"adapters": 3,
"ram": 512,
"hda_disk_interface": "virtio",
"arch": "x86_64",
"console_type": "vnc",
"kvm": "allow"
},
"images": [
{
"filename": "alpine-trex-3-21-3.qcow2",
"version": "2.87",
"md5sum": "54cf267bbc2ab7a1c71dc53bced6e128",
"filesize": 465174528,
"download_url": "https://u.cisco.com/my-learning/my-account"
}
],
"versions": [
{
"name": "2.87",
"images": {
"hda_disk_image": "alpine-trex-3-21-3.qcow2"
}
}
]
}
+31 -5
View File
@@ -5,14 +5,14 @@
"description": "The Adaptive Security Virtual Appliance is a virtualized network security solution based on the market-leading Cisco ASA 5500-X Series firewalls. It supports both traditional and next-generation software-defined network (SDN) and Cisco Application Centric Infrastructure (ACI) environments to provide policy enforcement and threat inspection across heterogeneous multisite environments.",
"vendor_name": "Cisco",
"vendor_url": "http://www.cisco.com/",
"documentation_url": "http://www.cisco.com/c/en/us/support/security/virtual-adaptive-security-appliance-firewall/products-installation-guides-list.html",
"documentation_url": "https://developer.cisco.com/docs/modeling-labs/asav/",
"product_name": "ASAv",
"product_url": "http://www.cisco.com/c/en/us/products/security/virtual-adaptive-security-appliance-firewall/index.html",
"product_url": "https://developer.cisco.com/modeling-labs/",
"registry_version": 4,
"status": "stable",
"maintainer": "GNS3 Team",
"maintainer_email": "developers@gns3.net",
"usage": "There is no default password and enable password. A default configuration is present. ASAv goes through a double-boot before becoming active. This is normal and expected.",
"usage": "There is no default password and enable password. A default configuration is present. ASAv goes through a double-boot before becoming active. This is normal and expected. Switch to the Telnet console type after the first boot.",
"symbol": ":/symbols/asa.svg",
"first_port_name": "Management0/0",
"port_name_format": "Gi0/{0}",
@@ -26,19 +26,33 @@
"kvm": "require"
},
"images": [
{
"filename": "asav9-23-1.qcow2",
"version": "9.23.1 CML",
"md5sum": "30454794b46fe07d1cd6a3ee72b511e1",
"filesize": 400687104,
"download_url": "https://u.cisco.com/my-learning/my-account"
},
{
"filename": "asav9-22-1-1.qcow2",
"version": "9.22.1.1 CML",
"md5sum": "250a924cdc2370208eaac9d1dc8dc9e3",
"filesize": 379518976,
"download_url": "https://u.cisco.com/my-learning/my-account"
},
{
"filename": "asav9-18-2.qcow2",
"version": "9.18.2 CML",
"md5sum": "6f10fe106edfad9163625770a47a6b73",
"filesize": 340262912,
"download_url": "https://learningnetworkstore.cisco.com/cisco-modeling-labs-personal/cisco-modeling-labs-personal/CML-PERSONAL.html"
"download_url": "https://u.cisco.com/my-learning/my-account"
},
{
"filename": "asav9-16-2.qcow2",
"version": "9.16.2 CML",
"md5sum": "1f8db97063a7f738fddc81ac880a906c",
"filesize": 262078976,
"download_url": "https://learningnetworkstore.cisco.com/cisco-modeling-labs-personal/cisco-modeling-labs-personal/CML-PERSONAL.html"
"download_url": "https://u.cisco.com/my-learning/my-account"
},
{
"filename": "asav9-16-2.qcow2",
@@ -126,6 +140,18 @@
}
],
"versions": [
{
"name": "9.23.1 CML",
"images": {
"hda_disk_image": "asav9-23-1.qcow2"
}
},
{
"name": "9.22.1.1 CML",
"images": {
"hda_disk_image": "asav9-22-1-1.qcow2"
}
},
{
"name": "9.18.2 CML",
"images": {
+15 -2
View File
@@ -5,9 +5,9 @@
"description": "The Cisco Catalyst 8000V Edge Software is a virtual, form-factor router deployed on a virtual machine (VM) running on an x86 server hardware.",
"vendor_name": "Cisco",
"vendor_url": "http://www.cisco.com/",
"documentation_url": "https://www.cisco.com/c/en/us/td/docs/routers/C8000V/Configuration/c8000v-installation-configuration-guide.html",
"documentation_url": "https://developer.cisco.com/docs/modeling-labs/cat-8000v/",
"product_name": "c8000v",
"product_url": "https://www.cisco.com/c/en/us/support/routers/catalyst-8000v-edge-software/series.html",
"product_url": "https://developer.cisco.com/modeling-labs/",
"registry_version": 4,
"status": "stable",
"maintainer": "GNS3 Team",
@@ -24,6 +24,13 @@
"kvm": "require"
},
"images": [
{
"filename": "c8000v-universalk9_8G_serial.17.15.01a.qcow2",
"version": "17.15.01a 8G",
"md5sum": "41efa0aedd67f1f57cde1263c79d9ff6",
"filesize": 1846280192,
"download_url": "https://software.cisco.com/download/home/286327102/type/282046477/release/IOSXE-17.15.1a"
},
{
"filename": "c8000v-universalk9_8G_serial.17.09.04a.qcow2",
"version": "17.09.04a 8G",
@@ -68,6 +75,12 @@
}
],
"versions": [
{
"name": "17.15.01a 8G",
"images": {
"hda_disk_image": "c8000v-universalk9_8G_serial.17.15.01a.qcow2"
}
},
{
"name": "17.09.04a 8G",
"images": {
+4 -4
View File
@@ -5,9 +5,9 @@
"description": "Cisco IOS-XE 9000v. This appliance requires 16GB of memory to run! Recommend 2 or more vCPUs for faster boot performance",
"vendor_name": "Cisco",
"vendor_url": "http://www.cisco.com/",
"documentation_url": "https://developer.cisco.com/docs/modeling-labs/2-5/#!cml-release-notes",
"documentation_url": "https://developer.cisco.com/docs/modeling-labs/cat-9000v/",
"product_name": "Cisco CAT IOS-XE 9000v",
"product_url": "http://virl.cisco.com/",
"product_url": "https://developer.cisco.com/modeling-labs/",
"registry_version": 4,
"status": "experimental",
"maintainer": "GNS3 Team",
@@ -31,14 +31,14 @@
"version": "17.12(1)",
"md5sum": "e587e92186f42bdf69d7fa27f34425f7",
"filesize": 2739404800,
"download_url": "https://learningnetworkstore.cisco.com/myaccount"
"download_url": "https://u.cisco.com/my-learning/my-account"
},
{
"filename": "cat9kv-prd-17.10.01prd7.qcow2",
"version": "17.10(1)",
"md5sum": "ffdbace33d31deae33e2a920a96b79ef",
"filesize": 2155806720,
"download_url": "https://learningnetworkstore.cisco.com/myaccount"
"download_url": "https://u.cisco.com/my-learning/my-account"
}
],
"versions": [
+37 -11
View File
@@ -5,9 +5,9 @@
"description": "The Cisco Cloud Services Router 1000V (CSR 1000V) is a router and network services platform in virtual form factor that is intended for deployment in cloud and virtual data centers. It is optimized to serve as a single-tenant or multitenant WAN gateway. Using proven, industry-leading Cisco IOS\u00ae XE Software networking and security features, the CSR 1000V enables enterprises to transparently extend their WANs into external provider-hosted clouds and cloud providers to offer their tenants enterprise-class networking services.",
"vendor_name": "Cisco",
"vendor_url": "http://www.cisco.com/",
"documentation_url": "http://www.cisco.com/c/en/us/support/routers/cloud-services-router-1000v-series/products-installation-and-configuration-guides-list.html",
"documentation_url": "https://developer.cisco.com/docs/modeling-labs/csr-1000v/",
"product_name": "CSR1000v",
"product_url": "http://www.cisco.com/c/en/us/support/routers/cloud-services-router-1000v-series/tsd-products-support-series-home.html",
"product_url": "https://developer.cisco.com/modeling-labs/",
"registry_version": 4,
"status": "stable",
"maintainer": "GNS3 Team",
@@ -17,19 +17,33 @@
"qemu": {
"adapter_type": "vmxnet3",
"adapters": 4,
"ram": 3072,
"ram": 4096,
"hda_disk_interface": "ide",
"arch": "x86_64",
"console_type": "telnet",
"kvm": "require"
},
"images": [
{
"filename": "csr1000v-universalk9.17.03.08a-serial.qcow2",
"version": "17.03.08a",
"md5sum": "6abece87d6db99d9fd6917203e253f91",
"filesize": 1421410304,
"download_url": "https://software.cisco.com/download/home/286323714/type/282046477/release/Amsterdam-17.3.8a"
},
{
"filename": "csr1000v-universalk9.17.03.06-serial.qcow2",
"version": "17.03.06",
"md5sum": "086ab9bef6e66de847af0da3910c60e8",
"filesize": 1422000128,
"download_url": "https://software.cisco.com/download/home/284364978/type/282046477/release/Gibraltar-16.12.3"
"download_url": "https://software.cisco.com/download/home/286323714/type/282046477/release/Amsterdam-17.3.6"
},
{
"filename": "csr1000v-ucmk9.16.12.5-serial.qcow2",
"version": "16.12.05",
"md5sum": "5c0cc217f0f0648407b34b11a1dd5b8e",
"filesize": 844103680,
"download_url": "https://software.cisco.com/download/home/286323714/type/286321980/release/16.12.5"
},
{
"filename": "csr1000v-universalk9.16.12.03-serial.qcow2",
@@ -120,21 +134,21 @@
"version": "16.5.1b",
"md5sum": "ac11d33041b8ff6dc3553e324d02cccb",
"filesize": 1209543680,
"download_url": "https://learningnetworkstore.cisco.com/myaccount"
"download_url": "https://u.cisco.com/my-learning/my-account"
},
{
"filename": "csr1000v-universalk9.03.17.00.S.156-1.S-ext.qcow2",
"version": "3.17",
"md5sum": "06cbfcd11f3557391db64fe2a6015a6e",
"filesize": 1346305024,
"download_url": "https://learningnetworkstore.cisco.com/myaccount"
"download_url": "https://u.cisco.com/my-learning/my-account"
},
{
"filename": "csr1000v-universalk9.16.3.1-build2.qcow2",
"version": "16.3.1-build2",
"md5sum": "a770e96de928265515304c9c9d6b46b9",
"filesize": 1280835584,
"download_url": "https://learningnetworkstore.cisco.com/myaccount"
"download_url": "https://u.cisco.com/my-learning/my-account"
},
{
"filename": "csr1000v-universalk9.16.03.01.qcow2",
@@ -148,31 +162,43 @@
"version": "16.3.2",
"md5sum": "2e5803d23cd52cba5d55fa8306be5f13",
"filesize": 1167720448,
"download_url": "https://learningnetworkstore.cisco.com/myaccount"
"download_url": "https://u.cisco.com/my-learning/my-account"
},
{
"filename": "csr1000v-universalk9.16.4.1.qcow2",
"version": "16.4.1",
"md5sum": "3428e0dcf5132a1b11ab7696d8c61b2e",
"filesize": 1261961216,
"download_url": "https://virl.mediuscorp.com/my-account/"
"download_url": "https://u.cisco.com/my-learning/my-account"
},
{
"filename": "csr1000v-universalk9.16.6.1.qcow2",
"version": "16.6.1-VIRL",
"md5sum": "996eb6dbf54781f6393bd689571a818c",
"filesize": 1316301824,
"download_url": "https://learningnetworkstore.cisco.com/myaccount"
"download_url": "https://u.cisco.com/my-learning/my-account"
}
],
"versions": [
{
"name": "17.03.08a",
"images": {
"hda_disk_image": "csr1000v-universalk9.17.03.08a-serial.qcow2"
}
},
{
"name": "17.03.06",
"images": {
"hda_disk_image": "csr1000v-universalk9.17.03.06-serial.qcow2"
}
},
{
{
"name": "16.12.05",
"images": {
"hda_disk_image": "csr1000v-ucmk9.16.12.5-serial.qcow2"
}
},
{
"name": "16.12.3",
"images": {
"hda_disk_image": "csr1000v-universalk9.16.12.03-serial.qcow2"
+47 -17
View File
@@ -1,12 +1,14 @@
{
"appliance_id": "3bf492b6-5717-4257-9bfd-b34617c6f133",
"tags": ["device_type:cisco_ios_telnet"],
"name": "Cisco IOSv",
"category": "router",
"description": "Cisco Virtual IOS allows user to run IOS on a standard computer.",
"vendor_name": "Cisco",
"vendor_url": "http://www.cisco.com/",
"documentation_url": "https://developer.cisco.com/docs/modeling-labs/iosv/",
"product_name": "IOSv",
"product_url": "http://virl.cisco.com/",
"product_url": "https://developer.cisco.com/modeling-labs/",
"registry_version": 4,
"status": "stable",
"maintainer": "GNS3 Team",
@@ -25,85 +27,113 @@
},
"images": [
{
"filename": "IOSv_startup_config.img",
"version": "1",
"md5sum": "bc605651c4688276f81fd59dcf5cc786",
"filesize": 1048576,
"download_url": "https://sourceforge.net/projects/gns-3/files",
"direct_download_url": "https://sourceforge.net/projects/gns-3/files/Qemu%20Appliances/IOSv_startup_config.img/download"
"filename": "vios-adventerprisek9-m.spa.159-3.m10.qcow2",
"version": "15.9(3)M10",
"md5sum": "960ff630ce3fc030f6155a8e77d64105",
"filesize": 57323520,
"download_url": "https://u.cisco.com/my-learning/my-account"
},
{
"filename": "vios-adventerprisek9-m.spa.159-3.m9.qcow2",
"version": "15.9(3)M9",
"md5sum": "01b707a2e33185d6d33e0255ced45d23",
"filesize": 57323008,
"download_url": "https://u.cisco.com/my-learning/my-account"
},
{
"filename": "vios-adventerprisek9-m.spa.159-3.m8.qcow2",
"version": "15.9(3)M8",
"md5sum": "8d93a185c2fa778178a933f20b02150a",
"filesize": 57319424,
"download_url": "https://learningnetworkstore.cisco.com/myaccount"
"download_url": "https://u.cisco.com/my-learning/my-account"
},
{
"filename": "vios-adventerprisek9-m.spa.159-3.m6.qcow2",
"version": "15.9(3)M6",
"md5sum": "49a6977977263b2774bebc56e4e678ff",
"filesize": 57309696,
"download_url": "https://learningnetworkstore.cisco.com/myaccount"
"download_url": "https://u.cisco.com/my-learning/my-account"
},
{
"filename": "vios-adventerprisek9-m.spa.159-3.m4.qcow2",
"version": "15.9(3)M4",
"md5sum": "355b13ab821e64e2939fd7008d6304d7",
"filesize": 57297920,
"download_url": "https://learningnetworkstore.cisco.com/myaccount"
"download_url": "https://u.cisco.com/my-learning/my-account"
},
{
"filename": "vios-adventerprisek9-m.spa.159-3.m3.qcow2",
"version": "15.9(3)M3",
"md5sum": "12893843af18e4c62f13d07266755653",
"filesize": 57296384,
"download_url": "https://learningnetworkstore.cisco.com/myaccount"
"download_url": "https://u.cisco.com/my-learning/my-account"
},
{
"filename": "vios-adventerprisek9-m.spa.159-3.m2.qcow2",
"version": "15.9(3)M2",
"md5sum": "a19e998bc3086825c751d125af722329",
"filesize": 57308672,
"download_url": "https://learningnetworkstore.cisco.com/myaccount"
"download_url": "https://u.cisco.com/my-learning/my-account"
},
{
"filename": "vios-adventerprisek9-m.spa.158-3.m2.qcow2",
"version": "15.8(3)M2",
"md5sum": "40e3d25b5b0cb13d639fcd2cf18e9965",
"filesize": 57129984,
"download_url": "https://learningnetworkstore.cisco.com/myaccount"
"download_url": "https://u.cisco.com/my-learning/my-account"
},
{
"filename": "vios-adventerprisek9-m.vmdk.SPA.157-3.M3",
"version": "15.7(3)M3",
"md5sum": "37c148ffa14a82f418a6e9c2b049fafe",
"filesize": 134021120,
"download_url": "https://learningnetworkstore.cisco.com/myaccount"
"download_url": "https://u.cisco.com/my-learning/my-account"
},
{
"filename": "vios-adventerprisek9-m.vmdk.SPA.156-2.T",
"version": "15.6(2)T",
"md5sum": "83707e3cc93646da58ee6563a68002b5",
"filesize": 128450560,
"download_url": "https://learningnetworkstore.cisco.com/myaccount"
"download_url": "https://u.cisco.com/my-learning/my-account"
},
{
"filename": "vios-adventerprisek9-m.vmdk.SPA.156-1.T",
"version": "15.6(1)T",
"md5sum": "e7cb1bbd0c59280dd946feefa68fa270",
"filesize": 128122880,
"download_url": "https://learningnetworkstore.cisco.com/myaccount"
"download_url": "https://u.cisco.com/my-learning/my-account"
},
{
"filename": "vios-adventerprisek9-m.vmdk.SPA.155-3.M",
"version": "15.5(3)M",
"md5sum": "79f613ac3b179d5a64520730925130b2",
"filesize": 127926272,
"download_url": "https://learningnetworkstore.cisco.com/myaccount"
"download_url": "https://u.cisco.com/my-learning/my-account"
},
{
"filename": "IOSv_startup_config.img",
"version": "1",
"md5sum": "bc605651c4688276f81fd59dcf5cc786",
"filesize": 1048576,
"download_url": "https://sourceforge.net/projects/gns-3/files",
"direct_download_url": "https://sourceforge.net/projects/gns-3/files/Qemu%20Appliances/IOSv_startup_config.img/download"
}
],
"versions": [
{
"name": "15.9(3)M10",
"images": {
"hda_disk_image": "vios-adventerprisek9-m.spa.159-3.m10.qcow2",
"hdb_disk_image": "IOSv_startup_config.img"
}
},
{
"name": "15.9(3)M9",
"images": {
"hda_disk_image": "vios-adventerprisek9-m.spa.159-3.m9.qcow2",
"hdb_disk_image": "IOSv_startup_config.img"
}
},
{
"name": "15.9(3)M8",
"images": {
+8 -6
View File
@@ -1,12 +1,14 @@
{
"appliance_id": "4368f802-ddec-4863-adbd-a36a6d83cd4c",
"tags": ["device_type:cisco_ios_telnet"],
"name": "Cisco IOSvL2",
"category": "multilayer_switch",
"description": "Cisco Virtual IOS L2 allows user to run a IOS switching image on a standard computer.",
"vendor_name": "Cisco",
"vendor_url": "http://www.cisco.com/",
"documentation_url": "https://developer.cisco.com/docs/modeling-labs/iosvl2/",
"product_name": "IOSvL2",
"product_url": "http://virl.cisco.com/",
"product_url": "https://developer.cisco.com/modeling-labs/",
"registry_version": 4,
"status": "stable",
"maintainer": "GNS3 Team",
@@ -29,35 +31,35 @@
"version": "15.2(20200924:215240)",
"md5sum": "99ecab32de12410c533e6abd4e9710aa",
"filesize": 90409984,
"download_url": "https://learningnetworkstore.cisco.com/myaccount"
"download_url": "https://u.cisco.com/my-learning/my-account"
},
{
"filename": "vios_l2-adventerprisek9-m.ssa.high_iron_20190423.qcow2",
"version": "15.2(6.0.81)E",
"md5sum": "71cacb678f98a106f99e889b97b34686",
"filesize": 44950016,
"download_url": "https://learningnetworkstore.cisco.com/myaccount"
"download_url": "https://u.cisco.com/my-learning/my-account"
},
{
"filename": "vios_l2-adventerprisek9-m.SSA.high_iron_20180619.qcow2",
"version": "15.2.1",
"md5sum": "14b981002e40b660f2d7400401e04c14",
"filesize": 44938752,
"download_url": "https://learningnetworkstore.cisco.com/myaccount"
"download_url": "https://u.cisco.com/my-learning/my-account"
},
{
"filename": "vios_l2-adventerprisek9-m.03.2017.qcow2",
"version": "15.2(20170321:233949)",
"md5sum": "8f14b50083a14688dec2fc791706bb3e",
"filesize": 41157632,
"download_url": "https://learningnetworkstore.cisco.com/myaccount"
"download_url": "https://u.cisco.com/my-learning/my-account"
},
{
"filename": "vios_l2-adventerprisek9-m.vmdk.SSA.152-4.0.55.E",
"version": "15.2(4.0.55)E",
"md5sum": "1a3a21f5697cae64bb930895b986d71e",
"filesize": 96862208,
"download_url": "https://learningnetworkstore.cisco.com/myaccount"
"download_url": "https://u.cisco.com/my-learning/my-account"
}
],
"versions": [
+4 -4
View File
@@ -5,9 +5,9 @@
"description": "IOS XRv supports the control plane features introduced in Cisco IOS XR.",
"vendor_name": "Cisco",
"vendor_url": "http://www.cisco.com/",
"documentation_url": "http://www.cisco.com/c/en/us/td/docs/ios_xr_sw/ios_xrv/release/notes/xrv-rn.html",
"documentation_url": "https://developer.cisco.com/docs/modeling-labs/ios-xrv/",
"product_name": "IOS XRv",
"product_url": "http://virl.cisco.com/",
"product_url": "https://developer.cisco.com/modeling-labs/",
"registry_version": 4,
"status": "stable",
"maintainer": "GNS3 Team",
@@ -30,14 +30,14 @@
"version": "6.1.3",
"md5sum": "1693b5d22a398587dd0fed2877d8dfac",
"filesize": 428588544,
"download_url": "https://learningnetworkstore.cisco.com/myaccount"
"download_url": "https://u.cisco.com/my-learning/my-account"
},
{
"filename": "iosxrv-k9-demo-6.0.1.qcow2",
"version": "6.0.1",
"md5sum": "0831ecf43628eccb752ebb275de9a62a",
"filesize": 908132352,
"download_url": "https://learningnetworkstore.cisco.com/myaccount"
"download_url": "https://u.cisco.com/my-learning/my-account"
}
],
"versions": [
+32 -135
View File
@@ -5,9 +5,9 @@
"description": "IOS XRv 9000 (aka Sunstone) is the 1st VM released running the 64-bit IOS XR operating system as used on the NCS-6xxx platform. This appliance requires 4 vCPUs and 16GB of memory to run!",
"vendor_name": "Cisco",
"vendor_url": "http://www.cisco.com/",
"documentation_url": "http://www.cisco.com/c/en/us/td/docs/ios_xr_sw/ios_xrv/release/notes/xrv-rn.html",
"documentation_url": "https://developer.cisco.com/docs/modeling-labs/ios-xrv-9000/",
"product_name": "IOS XRv 9000",
"product_url": "http://virl.cisco.com/",
"product_url": "https://developer.cisco.com/modeling-labs/",
"registry_version": 4,
"status": "experimental",
"maintainer": "GNS3 Team",
@@ -19,99 +19,56 @@
"adapter_type": "virtio-net-pci",
"adapters": 7,
"ram": 16384,
"cpus": 4,
"hda_disk_interface": "ide",
"arch": "x86_64",
"console_type": "telnet",
"kvm": "require",
"options": "-smp 4 -cpu host"
"options": "-cpu host"
},
"images": [
{
"filename": "xrv9k-fullk9-x-25.1.1.qcow2",
"version": "25.1.1",
"md5sum": "554d795d495badf90b6c75a2a342b409",
"filesize": 2002911232,
"download_url": "https://u.cisco.com/my-learning/my-account"
},
{
"filename": "xrv9k-fullk9-x-24.3.1.qcow2",
"version": "24.3.1",
"md5sum": "bd047c457e29952f265583f299bab845",
"filesize": 1704658432,
"download_url": "https://u.cisco.com/my-learning/my-account"
},
{
"filename": "xrv9k-fullk9-x-7.7.1.qcow2",
"version": "7.7.1",
"md5sum": "682fff40d2ff373d8da3342906553b54",
"filesize": 1643905024,
"download_url": "https://software.cisco.com/download/home/286288939/type/280805694/release/7.1.1"
"download_url": "https://u.cisco.com/my-learning/my-account"
},
{
"filename": "xrv9k-fullk9-x-7.1.1.qcow2",
"version": "7.1.1",
"md5sum": "dcf241e3f8df0151fec2c7bfac9d96ac",
"filesize": 1443758080,
"download_url": "https://software.cisco.com/download/home/286288939/type/280805694/release/7.1.1"
},
{
"filename": "xrv9k-fullk9-x-7.0.1.qcow2",
"version": "7.0.1",
"md5sum": "ca2817767fa546e303c3c536e211d33e",
"filesize": 1446445056,
"download_url": "https://software.cisco.com/download/home/286288939/type/280805694/release/7.0.1"
},
{
"filename": "xrv9k-fullk9-x-6.6.2.qcow2",
"version": "6.6.2",
"md5sum": "fd630be3c449e625073286a3a66021ae",
"filesize": 1452998656,
"download_url": "https://software.cisco.com/download/home/286288939/type/280805694/release/6.6.2"
},
{
"filename": "xrv9k-fullk9-x-6.5.3.qcow2",
"version": "6.5.3",
"md5sum": "71f018e3ea895b663129090fb4f0ff40",
"filesize": 1205075968,
"download_url": "https://software.cisco.com/download/home/286288939/type/280805694/release/6.5.3"
},
{
"filename": "xrv9k-fullk9-x-6.5.2.qcow2",
"version": "6.5.2",
"md5sum": "506d9e23dda7365c99dd82b613859697",
"filesize": 1205010432,
"download_url": "https://software.cisco.com/download/home/286288939/type/280805694/release/6.5.1"
},
{
"filename": "xrv9k-fullk9-x-6.5.1.qcow2",
"version": "6.5.1",
"md5sum": "730868e7cd46de9aa2e950899c7f9498",
"filesize": 1208811520,
"download_url": "https://software.cisco.com/download/home/286288939/type/280805694/release/6.5.1"
},
{
"filename": "xrv9k-fullk9-x-6.4.2.qcow2",
"version": "6.4.2",
"md5sum": "6958763192c7bb59a1b8049d377de1b4",
"filesize": 1311703040,
"download_url": "https://software.cisco.com/download/home/286288939/type/280805694/release/6.4.2"
},
{
"filename": "xrv9k-fullk9-x-6.4.1.qcow2",
"version": "6.4.1",
"md5sum": "9c56b684e307706005a503e289cb9317",
"filesize": 1304887296,
"download_url": "https://software.cisco.com/download/home/286288939/type/280805694/release/6.4.1"
},
{
"filename": "xrv9k-fullk9-x-6.2.25.qcow2",
"version": "6.2.25",
"md5sum": "3f54e62b6f7cedfb2607233e5e465766",
"filesize": 1190723584,
"download_url": "https://learningnetworkstore.cisco.com/myaccount"
},
{
"filename": "xrv9k-fullk9-x.qcow2-6.0.1",
"version": "6.0.1",
"md5sum": "e20d046807075046c35b6ce7d6766a7f",
"filesize": 2109210624,
"download_url": "https://learningnetworkstore.cisco.com/myaccount"
},
{
"filename": "xrv9k-fullk9-x.qcow2-6.0.0",
"version": "6.0.0",
"md5sum": "64c538c34252aaeb4ed1ddb93d6803fd",
"filesize": 2572943360,
"download_url": "https://learningnetworkstore.cisco.com/myaccount"
"download_url": "https://u.cisco.com/my-learning/my-account"
}
],
"versions": [
{
"name": "25.1.1",
"images": {
"hda_disk_image": "xrv9k-fullk9-x-25.1.1.qcow2"
}
},
{
"name": "24.3.1",
"images": {
"hda_disk_image": "xrv9k-fullk9-x-24.3.1.qcow2"
}
},
{
"name": "7.7.1",
"images": {
@@ -123,66 +80,6 @@
"images": {
"hda_disk_image": "xrv9k-fullk9-x-7.1.1.qcow2"
}
},
{
"name": "7.0.1",
"images": {
"hda_disk_image": "xrv9k-fullk9-x-7.0.1.qcow2"
}
},
{
"name": "6.6.2",
"images": {
"hda_disk_image": "xrv9k-fullk9-x-6.6.2.qcow2"
}
},
{
"name": "6.5.3",
"images": {
"hda_disk_image": "xrv9k-fullk9-x-6.5.3.qcow2"
}
},
{
"name": "6.5.2",
"images": {
"hda_disk_image": "xrv9k-fullk9-x-6.5.2.qcow2"
}
},
{
"name": "6.5.1",
"images": {
"hda_disk_image": "xrv9k-fullk9-x-6.5.1.qcow2"
}
},
{
"name": "6.4.2",
"images": {
"hda_disk_image": "xrv9k-fullk9-x-6.4.2.qcow2"
}
},
{
"name": "6.4.1",
"images": {
"hda_disk_image": "xrv9k-fullk9-x-6.4.1.qcow2"
}
},
{
"name": "6.2.25",
"images": {
"hda_disk_image": "xrv9k-fullk9-x-6.2.25.qcow2"
}
},
{
"name": "6.0.1",
"images": {
"hda_disk_image": "xrv9k-fullk9-x.qcow2-6.0.1"
}
},
{
"name": "6.0.0",
"images": {
"hda_disk_image": "xrv9k-fullk9-x.qcow2-6.0.0"
}
}
]
}
+31 -40
View File
@@ -1,11 +1,14 @@
{
"appliance_id": "9593db48-558a-4914-bb78-a20605f39c65",
"tags": ["device_type:cisco_ios_telnet"],
"name": "Cisco IOU L2",
"category": "multilayer_switch",
"description": "Cisco IOS on UNIX Layer 2 image.",
"vendor_name": "Cisco",
"vendor_url": "http://www.cisco.com",
"documentation_url": "https://developer.cisco.com/docs/modeling-labs/iol-l2/",
"product_name": "Cisco IOU L2",
"product_url": "https://developer.cisco.com/modeling-labs/",
"registry_version": 4,
"status": "experimental",
"maintainer": "GNS3 Team",
@@ -13,59 +16,47 @@
"iou": {
"ethernet_adapters": 4,
"serial_adapters": 0,
"nvram": 128,
"ram": 256,
"nvram": 256,
"ram": 1024,
"startup_config": "iou_l2_base_startup-config.txt"
},
"images": [
{
"filename": "x86_64_crb_linux_l2-adventerprisek9-ms.bin",
"filename": "x86_64_crb_linux_l2-adventerprisek9-ms.17.16.1a.iol",
"version": "17.16.1a",
"md5sum": "d55879318e51c5401fb9314d45c67728",
"filesize": 244265240
},
{
"filename": "x86_64_crb_linux_l2-adventerprisek9-ms.iol",
"version": "17.15.1",
"md5sum": "6c587cdfd5056078e70b3f6c26800d66",
"filesize": 243251976
},
{
"filename": "x86_64_crb_linux_l2-adventerprisek9-ms",
"version": "17.12.1",
"md5sum": "2b5055e4cef8fd257416d74a94adb626",
"filesize": 240355720
},
{
"filename": "i86bi-linux-l2-ipbasek9-15.1g.bin",
"version": "15.1g",
"md5sum": "0b8b9e14ca99b68c654e44c4296857ba",
"filesize": 62137336
},
{
"filename": "i86bi-linux-l2-adventerprisek9-15.1a.bin",
"version": "15.1a",
"md5sum": "9549a20a7391fb849da32caa77a0d254",
"filesize": 72726092
},
{
"filename": "i86bi-linux-l2-adventerprisek9-15.2d.bin",
"version": "15.2d",
"md5sum": "f16db44433beb3e8c828db5ddad1de8a",
"filesize": 105036380
}
],
"versions": [
{
"name": "17.16.1a",
"images": {
"image": "x86_64_crb_linux_l2-adventerprisek9-ms.17.16.1a.iol"
}
},
{
"name": "17.15.1",
"images": {
"image": "x86_64_crb_linux_l2-adventerprisek9-ms.iol"
}
},
{
"name": "17.12.1",
"images": {
"image": "x86_64_crb_linux_l2-adventerprisek9-ms.bin"
}
},
{
"name": "15.1g",
"images": {
"image": "i86bi-linux-l2-ipbasek9-15.1g.bin"
}
},
{
"name": "15.1a",
"images": {
"image": "i86bi-linux-l2-adventerprisek9-15.1a.bin"
}
},
{
"name": "15.2d",
"images": {
"image": "i86bi-linux-l2-adventerprisek9-15.2d.bin"
"image": "x86_64_crb_linux_l2-adventerprisek9-ms"
}
}
]
+31 -40
View File
@@ -1,11 +1,14 @@
{
"appliance_id": "87bf6f58-1e5a-4ee2-afe7-715dabffcf18",
"tags": ["device_type:cisco_ios_telnet"],
"name": "Cisco IOU L3",
"category": "router",
"description": "Cisco IOS on UNIX Layer 3 image.",
"vendor_name": "Cisco",
"vendor_url": "http://www.cisco.com",
"documentation_url": "https://developer.cisco.com/docs/modeling-labs/iol/",
"product_name": "Cisco IOU L3",
"product_url": "https://developer.cisco.com/modeling-labs/",
"registry_version": 4,
"status": "experimental",
"maintainer": "GNS3 Team",
@@ -13,59 +16,47 @@
"iou": {
"ethernet_adapters": 2,
"serial_adapters": 2,
"nvram": 128,
"ram": 256,
"nvram": 256,
"ram": 1024,
"startup_config": "iou_l3_base_startup-config.txt"
},
"images": [
{
"filename": "x86_64_crb_linux-adventerprisek9-ms.bin",
"filename": "x86_64_crb_linux-adventerprisek9-ms.17.16.1a.iol",
"version": "17.16.1a",
"md5sum": "39bdf959c3b99a3c81d66451f1cf0404",
"filesize": 293062920
},
{
"filename": "x86_64_crb_linux-adventerprisek9-ms.iol",
"version": "17.15.1",
"md5sum": "5d584f6cfbeaadc87d55f613da1049ed",
"filesize": 292001512
},
{
"filename": "x86_64_crb_linux-adventerprisek9-ms",
"version": "17.12.1",
"md5sum": "4a2fce8de21d1831fbceffd155e41ae7",
"filesize": 288947184
},
{
"filename": "i86bi_LinuxL3-AdvEnterpriseK9-M2_157_3_May_2018.bin",
"version": "15.7(3)M2",
"md5sum": "d6874260c3daeeb96d10fc844ae0b93b",
"filesize": 184759244
},
{
"filename": "i86bi-linux-l3-adventerprisek9-ms.155-2.T.bin",
"version": "155-2T",
"md5sum": "45e99761a95cbd3ee3924ecf0f3d89e5",
"filesize": 172982492
},
{
"filename": "i86bi-linux-l3-adventerprisek9-15.4.1T.bin",
"version": "15.4.1T",
"md5sum": "2eabae17778316c49cbc80e8e81262f9",
"filesize": 152677848
}
],
"versions": [
{
"name": "17.16.1a",
"images": {
"image": "x86_64_crb_linux-adventerprisek9-ms.17.16.1a.iol"
}
},
{
"name": "17.15.1",
"images": {
"image": "x86_64_crb_linux-adventerprisek9-ms.iol"
}
},
{
"name": "17.12.1",
"images": {
"image": "x86_64_crb_linux-adventerprisek9-ms.bin"
}
},
{
"name": "15.7(3)M2",
"images": {
"image": "i86bi_LinuxL3-AdvEnterpriseK9-M2_157_3_May_2018.bin"
}
},
{
"name": "155-2T",
"images": {
"image": "i86bi-linux-l3-adventerprisek9-ms.155-2.T.bin"
}
},
{
"name": "15.4.1T",
"images": {
"image": "i86bi-linux-l3-adventerprisek9-15.4.1T.bin"
"image": "x86_64_crb_linux-adventerprisek9-ms"
}
}
]
+4 -3
View File
@@ -5,8 +5,9 @@
"description": "NXOSv is a reference platform for an implementation of the Cisco Nexus operating system, based on the Nexus 7000-series platforms, running as a full virtual machine on a hypervisor. This includes NXAPI and MPLS LDP support.",
"vendor_name": "Cisco",
"vendor_url": "http://www.cisco.com/",
"documentation_url": "https://developer.cisco.com/docs/modeling-labs/nx-os/",
"product_name": "NX-OSv",
"product_url": "http://virl.cisco.com/",
"product_url": "https://developer.cisco.com/modeling-labs/",
"registry_version": 4,
"status": "stable",
"maintainer": "GNS3 Team",
@@ -29,14 +30,14 @@
"version": "7.3.0",
"md5sum": "b4cd6edf15ab4c6bce53c3f6c1e3a742",
"filesize": 214368256,
"download_url": "https://learningnetworkstore.cisco.com/myaccount"
"download_url": "https://u.cisco.com/my-learning/my-account"
},
{
"filename": "titanium-d1.7.2.0.D1.1.vmdk",
"version": "7.2.0",
"md5sum": "0ee38c7d717840cb4ca822f4870671d0",
"filesize": 361103360,
"download_url": "https://learningnetworkstore.cisco.com/myaccount"
"download_url": "https://u.cisco.com/my-learning/my-account"
}
],
"versions": [
@@ -0,0 +1,69 @@
{
"appliance_id": "4c7fd5da-be86-4168-8484-7071dc9c71fb",
"name": "Cisco NX-OSv 9000 Lite",
"category": "multilayer_switch",
"description": "The NX-OSv 9000 is a virtual platform that is designed to simulate the control plane aspects of a network element running Cisco Nexus 9000 software. The NX-OSv 9000 shares the same software image running on Cisco Nexus 9000 hardware platform although no specific hardware emulation is implemented. When the software runs as a virtual machine, line card (LC) ASIC provisioning or any interaction from the control plane to hardware ASIC is handled by the NX-OSv 9000 software data plane.\nThe NX-OSv 9000 for the Cisco Nexus 9000 Series provides a useful tool to enable the devops model and rapidly test changes to the infrastructure or to infrastructure automation tools. This enables network simulations in large scale for customers to validate configuration changes on a simulated network prior to applying them on a production network. Some users have also expressed interest in using the simulation system for feature test ,verification, and automation tooling development and test simualtion prior to deployment. NX-OSv 9000 can be used as a programmability vehicle to validate software defined networks (SDNs) and Network Function Virtualization (NFV) based solutions.\nThe lite version has a reduced memory footprint, resulting in a much smaller image size than the earlier images for Cisco Nexus 9300v and 9500v.",
"vendor_name": "Cisco",
"vendor_url": "http://www.cisco.com/",
"documentation_url": "https://developer.cisco.com/docs/modeling-labs/nx-os-9000/",
"product_name": "NX-OSv 9000",
"product_url": "https://developer.cisco.com/modeling-labs/",
"registry_version": 4,
"status": "stable",
"availability": "service-contract",
"maintainer": "GNS3 Team",
"maintainer_email": "developers@gns3.net",
"first_port_name": "mgmt0",
"port_name_format": "Ethernet1/{port1}",
"qemu": {
"adapter_type": "e1000",
"adapters": 10,
"ram": 6144,
"cpus": 2,
"hda_disk_interface": "sata",
"arch": "x86_64",
"console_type": "telnet",
"kvm": "require"
},
"images": [
{
"filename": "nexus9500v64-lite.10.5.5.M.qcow2",
"version": "9500v lite 10.5.5.M",
"md5sum": "a9aafd88f36a7f44a5a2ef3322cd9bde",
"filesize": 2617638912,
"download_url": "https://software.cisco.com/download/home/286312239/type/282088129/release/10.5(5)"
},
{
"filename": "nexus9300v64-lite.10.5.5.M.qcow2",
"version": "9300v lite 10.5.5.M",
"md5sum": "78610953005faab9505252baf4c86b78",
"filesize": 2617573376,
"download_url": "https://software.cisco.com/download/home/286312239/type/282088129/release/10.5(5)"
},
{
"filename": "OVMF-edk2-stable202305.fd",
"version": "stable202305",
"md5sum": "6c4cf1519fec4a4b95525d9ae562963a",
"filesize": 4194304,
"download_url": "https://sourceforge.net/projects/gns-3/files/Qemu%20Appliances/",
"direct_download_url": "https://sourceforge.net/projects/gns-3/files/Qemu%20Appliances/OVMF-edk2-stable202305.fd.zip/download",
"compression": "zip"
}
],
"versions": [
{
"name": "9500v lite 10.5.5.M",
"images": {
"bios_image": "OVMF-edk2-stable202305.fd",
"hda_disk_image": "nexus9500v64-lite.10.5.5.M.qcow2"
}
},
{
"name": "9300v lite 10.5.5.M",
"images": {
"bios_image": "OVMF-edk2-stable202305.fd",
"hda_disk_image": "nexus9300v64-lite.10.5.5.M.qcow2"
}
}
]
}
+73 -352
View File
@@ -5,8 +5,9 @@
"description": "The NX-OSv 9000 is a virtual platform that is designed to simulate the control plane aspects of a network element running Cisco Nexus 9000 software. The NX-OSv 9000 shares the same software image running on Cisco Nexus 9000 hardware platform although no specific hardware emulation is implemented. When the software runs as a virtual machine, line card (LC) ASIC provisioning or any interaction from the control plane to hardware ASIC is handled by the NX-OSv 9000 software data plane.\nThe NX-OSv 9000 for the Cisco Nexus 9000 Series provides a useful tool to enable the devops model and rapidly test changes to the infrastructure or to infrastructure automation tools. This enables network simulations in large scale for customers to validate configuration changes on a simulated network prior to applying them on a production network. Some users have also expressed interest in using the simulation system for feature test ,verification, and automation tooling development and test simualtion prior to deployment. NX-OSv 9000 can be used as a programmability vehicle to validate software defined networks (SDNs) and Network Function Virtualization (NFV) based solutions.",
"vendor_name": "Cisco",
"vendor_url": "http://www.cisco.com/",
"documentation_url": "http://www.cisco.com/c/en/us/td/docs/switches/datacenter/nexus9000/sw/7-x/nx-osv/configuration/guide/b_NX-OSv_9000/b_NX-OSv_chapter_01.html",
"documentation_url": "https://developer.cisco.com/docs/modeling-labs/nx-os-9000/",
"product_name": "NX-OSv 9000",
"product_url": "https://developer.cisco.com/modeling-labs/",
"registry_version": 4,
"status": "stable",
"availability": "service-contract",
@@ -26,12 +27,47 @@
"kvm": "require"
},
"images": [
{
"filename": "nexus9500v64.10.5.5.M.qcow2",
"version": "9500v 10.5.5.M",
"md5sum": "c1d34bb3331d958d3219a56b6885150e",
"filesize": 2919170048,
"download_url": "https://software.cisco.com/download/home/286312239/type/282088129/release/10.5(5)"
},
{
"filename": "nexus9300v64.10.5.5.M.qcow2",
"version": "9300v 10.5.5.M",
"md5sum": "f1cc2342b920320654d232b68551ccfd",
"filesize": 2919104512,
"download_url": "https://software.cisco.com/download/home/286312239/type/282088129/release/10.5(5)"
},
{
"filename": "nexus9500v64.10.5.1.F.qcow2",
"version": "9500v 10.5.1.F",
"md5sum": "2fa6fb4dd4c5e49d53896d60fa746e59",
"filesize": 2388459520,
"download_url": "https://software.cisco.com/download/home/286312239/type/282088129/release/10.5(1)"
},
{
"filename": "nexus9300v64.10.5.1.F.qcow2",
"version": "9300v 10.5.1.F",
"md5sum": "2bbc767debbc7c1144eabe176ae67503",
"filesize": 2388393984,
"download_url": "https://software.cisco.com/download/home/286312239/type/282088129/release/10.5(1)"
},
{
"filename": "nexus9500v64.10.3.1.F.qcow2",
"version": "9500v 10.3.1.F",
"md5sum": "41e3c1c0c003b13f1bf774f0d1873e87",
"filesize": 2097510400,
"download_url": "https://software.cisco.com/download/home/286312239/type/282088129/release/10.3(1)"
},
{
"filename": "nexus9300v64.10.3.1.F.qcow2",
"version": "9300v 10.3.1.F",
"md5sum": "a6ffd2501a5791c11cee319943b912da",
"filesize": 2097086464,
"download_url": "https://software.cisco.com/download/home/286312239/type/282088129/release/10.1(1)"
"download_url": "https://software.cisco.com/download/home/286312239/type/282088129/release/10.3(1)"
},
{
"filename": "nexus9500v64.10.1.1.qcow2",
@@ -47,181 +83,6 @@
"filesize": 1990983680,
"download_url": "https://software.cisco.com/download/home/286312239/type/282088129/release/10.1(1)"
},
{
"filename": "nexus9500v.9.3.13.qcow2",
"version": "9500v 9.3.13",
"md5sum": "bacf0f664ee34625c85a9f278b2466a2",
"filesize": 2248409088,
"download_url": "https://software.cisco.com/download/home/286312239/type/282088129/release/9.3(13)"
},
{
"filename": "nexus9300v.9.3.13.qcow2",
"version": "9300v 9.3.13",
"md5sum": "d8ce30cb762df02d77ec27786a2435ad",
"filesize": 2248343552,
"download_url": "https://software.cisco.com/download/home/286312239/type/282088129/release/9.3(13)"
},
{
"filename": "nexus9500v.9.3.12.qcow2",
"version": "9500v 9.3.12",
"md5sum": "452e5cb2a7a25feaa3ba0624a82ff9ca",
"filesize": 1997996032,
"download_url": "https://software.cisco.com/download/home/286312239/type/282088129/release/9.3(12)"
},
{
"filename": "nexus9300v.9.3.12.qcow2",
"version": "9300v 9.3.12",
"md5sum": "7b6b5dad1001e11d6ebb54662616e9f2",
"filesize": 1997930496,
"download_url": "https://software.cisco.com/download/home/286312239/type/282088129/release/9.3(12)"
},
{
"filename": "nexus9500v.9.3.9.qcow2",
"version": "9500v 9.3.9",
"md5sum": "30c25039927f89aebe73ea20d15abd6d",
"filesize": 1980760064,
"download_url": "https://software.cisco.com/download/home/286312239/type/282088129/release/9.3(9)"
},
{
"filename": "nexus9300v.9.3.9.qcow2",
"version": "9300v 9.3.9",
"md5sum": "e807005cb7d2d2957b4af0e59f368b36",
"filesize": 1980563456,
"download_url": "https://software.cisco.com/download/home/286312239/type/282088129/release/9.3(9)"
},
{
"filename": "nexus9300v.9.3.8.qcow2",
"version": "9300v 9.3.8",
"md5sum": "f8bd834f8395c134dc98d895c98441af",
"filesize": 1976434688,
"download_url": "https://software.cisco.com/download/home/286312239/type/282088129/release/9.3(8)"
},
{
"filename": "nexus9500v.9.3.7.qcow2",
"version": "9500v 9.3.7",
"md5sum": "65f669e0dd379a05a8cdbb9d7592a064",
"filesize": 1986068480,
"download_url": "https://software.cisco.com/download/home/286312239/type/282088129/release/9.3(7)"
},
{
"filename": "nexus9500v.9.3.3.qcow2",
"version": "9500v 9.3.3",
"md5sum": "7230c944041fdaa0e1b18cecccbc9a32",
"filesize": 1714159616,
"download_url": "https://software.cisco.com/download/home/286312239/type/282088129/release/9.3(3)"
},
{
"filename": "nexus9300v.9.3.3.qcow2",
"version": "9300v 9.3.3",
"md5sum": "8e9a7c4815907ef47d850623f77042e2",
"filesize": 1714225152,
"download_url": "https://software.cisco.com/download/home/286312239/type/282088129/release/9.3(3)"
},
{
"filename": "nxosv.9.3.1.qcow2",
"version": "9.3.1",
"md5sum": "148fd38cb1ff78df2883f844e172fad9",
"filesize": 1435041792,
"download_url": "https://software.cisco.com/download/home/286312239/type/282088129/release/9.3(1)?i=!pp"
},
{
"filename": "nxosv-final.9.2.3.qcow2",
"version": "9.2.3",
"md5sum": "74bd9a5b4970e868685f753e48979194",
"filesize": 1357643776,
"download_url": "https://software.cisco.com/download/home/286312239/type/282088129/release/9.2%25283%2529"
},
{
"filename": "nxosv-final.9.2.2.qcow2",
"version": "9.2.2",
"md5sum": "2119702c488552fc4d1b4210a04d4f64",
"filesize": 1344077824,
"download_url": "https://software.cisco.com/download/home/286312239/type/282088129/release/9.2%25281%2529"
},
{
"filename": "nxosv-final.9.2.1.qcow2",
"version": "9.2.1",
"md5sum": "1d7fa4654602d7ffbf62544edfe71986",
"filesize": 1330315264,
"download_url": "https://software.cisco.com/download/home/286312239/type/282088129/release/9.2%25281%2529"
},
{
"filename": "nxosv-final.7.0.3.I7.9.qcow2",
"version": "7.0.3.I7.9",
"md5sum": "50678c719f6b822c43dd096dbdf359e8",
"filesize": 1003618304,
"download_url": "https://software.cisco.com/download/home/286312239/type/282088129/release/7.0(3)I7(9)?i=!pp"
},
{
"filename": "nxosv-final.7.0.3.I7.7.qcow2",
"version": "7.0.3.I7.7",
"md5sum": "5daab34b672f9534c9aee59a6c8903b3",
"filesize": 996212736,
"download_url": "https://software.cisco.com/download/home/286312239/type/282088129/release/7.0%25283%2529I7%25287%2529"
},
{
"filename": "nxosv-final.7.0.3.I7.6.qcow2",
"version": "7.0.3.I7.6",
"md5sum": "a122ee954b4c11761abd99291b70544e",
"filesize": 1031995392,
"download_url": "https://software.cisco.com/download/home/286312239/type/282088129/release/7.0%25283%2529I7%25286%2529"
},
{
"filename": "nxosv-final.7.0.3.I7.5.qcow2",
"version": "7.0.3.I7.5",
"md5sum": "68a4008e189c8a35ccb8ee58db9608bb",
"filesize": 1027670016,
"download_url": "https://software.cisco.com/download/home/286312239/type/282088129/release/7.0%25283%2529I7%25285%2529"
},
{
"filename": "nxosv-final.7.0.3.I7.4.qcow2",
"version": "7.0.3.I7.4",
"md5sum": "1e980c95ca47045ae45ded6e07fabfb8",
"filesize": 985792512,
"download_url": "https://software.cisco.com/download/"
},
{
"filename": "nxosv-final.7.0.3.I7.3.qcow2",
"version": "7.0.3.I7.3",
"md5sum": "9d7a20367bf681a239f14097bbce470a",
"filesize": 983629824,
"download_url": "https://software.cisco.com/download/"
},
{
"filename": "nxosv-final.7.0.3.I7.2.qcow2",
"version": "7.0.3.I7.2",
"md5sum": "17295efb13e83b24a439148449bfd5ab",
"filesize": 906231808,
"download_url": "https://software.cisco.com/download/"
},
{
"filename": "nxosv-final.7.0.3.I7.1.qcow2",
"version": "7.0.3.I7.1",
"md5sum": "3c122f27d0c3684c63657207eadf4d06",
"filesize": 903151616,
"download_url": "https://software.cisco.com/download/"
},
{
"filename": "nxosv-final.7.0.3.I6.1.qcow2",
"version": "7.0.3.I6.1",
"md5sum": "18bb991b814a508d1190575f99deed99",
"filesize": 780402688,
"download_url": "https://software.cisco.com/download/"
},
{
"filename": "nxosv-final.7.0.3.I5.2.qcow2",
"version": "7.0.3.I5.2",
"md5sum": "c06aaa02f758a64fd8fee9406756f1da",
"filesize": 777715712,
"download_url": "https://software.cisco.com/download/"
},
{
"filename": "nxosv-final.7.0.3.I5.1.qcow2",
"version": "7.0.3.I5.1",
"md5sum": "201ea658fa4c57452ee4b2aa4f5262a7",
"filesize": 784990208,
"download_url": "https://software.cisco.com/download/"
},
{
"filename": "OVMF-edk2-stable202305.fd",
"version": "stable202305",
@@ -233,6 +94,41 @@
}
],
"versions": [
{
"name": "9500v 10.5.5.M",
"images": {
"bios_image": "OVMF-edk2-stable202305.fd",
"hda_disk_image": "nexus9500v64.10.5.5.M.qcow2"
}
},
{
"name": "9300v 10.5.5.M",
"images": {
"bios_image": "OVMF-edk2-stable202305.fd",
"hda_disk_image": "nexus9300v64.10.5.5.M.qcow2"
}
},
{
"name": "9500v 10.5.1.F",
"images": {
"bios_image": "OVMF-edk2-stable202305.fd",
"hda_disk_image": "nexus9500v64.10.5.1.F.qcow2"
}
},
{
"name": "9300v 10.5.1.F",
"images": {
"bios_image": "OVMF-edk2-stable202305.fd",
"hda_disk_image": "nexus9300v64.10.5.1.F.qcow2"
}
},
{
"name": "9500v 10.3.1.F",
"images": {
"bios_image": "OVMF-edk2-stable202305.fd",
"hda_disk_image": "nexus9500v64.10.3.1.F.qcow2"
}
},
{
"name": "9300v 10.3.1.F",
"images": {
@@ -253,181 +149,6 @@
"bios_image": "OVMF-edk2-stable202305.fd",
"hda_disk_image": "nexus9300v.10.1.1.qcow2"
}
},
{
"name": "9500v 9.3.13",
"images": {
"bios_image": "OVMF-edk2-stable202305.fd",
"hda_disk_image": "nexus9500v.9.3.13.qcow2"
}
},
{
"name": "9300v 9.3.13",
"images": {
"bios_image": "OVMF-edk2-stable202305.fd",
"hda_disk_image": "nexus9300v.9.3.13.qcow2"
}
},
{
"name": "9500v 9.3.12",
"images": {
"bios_image": "OVMF-edk2-stable202305.fd",
"hda_disk_image": "nexus9500v.9.3.12.qcow2"
}
},
{
"name": "9300v 9.3.12",
"images": {
"bios_image": "OVMF-edk2-stable202305.fd",
"hda_disk_image": "nexus9300v.9.3.12.qcow2"
}
},
{
"name": "9500v 9.3.9",
"images": {
"bios_image": "OVMF-edk2-stable202305.fd",
"hda_disk_image": "nexus9500v.9.3.9.qcow2"
}
},
{
"name": "9300v 9.3.9",
"images": {
"bios_image": "OVMF-edk2-stable202305.fd",
"hda_disk_image": "nexus9300v.9.3.9.qcow2"
}
},
{
"name": "9300v 9.3.8",
"images": {
"bios_image": "OVMF-edk2-stable202305.fd",
"hda_disk_image": "nexus9300v.9.3.8.qcow2"
}
},
{
"name": "9500v 9.3.7",
"images": {
"bios_image": "OVMF-edk2-stable202305.fd",
"hda_disk_image": "nexus9500v.9.3.7.qcow2"
}
},
{
"name": "9500v 9.3.3",
"images": {
"bios_image": "OVMF-edk2-stable202305.fd",
"hda_disk_image": "nexus9500v.9.3.3.qcow2"
}
},
{
"name": "9300v 9.3.3",
"images": {
"bios_image": "OVMF-edk2-stable202305.fd",
"hda_disk_image": "nexus9300v.9.3.3.qcow2"
}
},
{
"name": "9.3.1",
"images": {
"bios_image": "OVMF-edk2-stable202305.fd",
"hda_disk_image": "nxosv.9.3.1.qcow2"
}
},
{
"name": "9.2.3",
"images": {
"bios_image": "OVMF-edk2-stable202305.fd",
"hda_disk_image": "nxosv-final.9.2.3.qcow2"
}
},
{
"name": "9.2.2",
"images": {
"bios_image": "OVMF-edk2-stable202305.fd",
"hda_disk_image": "nxosv-final.9.2.2.qcow2"
}
},
{
"name": "9.2.1",
"images": {
"bios_image": "OVMF-edk2-stable202305.fd",
"hda_disk_image": "nxosv-final.9.2.1.qcow2"
}
},
{
"name": "7.0.3.I7.9",
"images": {
"bios_image": "OVMF-edk2-stable202305.fd",
"hda_disk_image": "nxosv-final.7.0.3.I7.9.qcow2"
}
},
{
"name": "7.0.3.I7.7",
"images": {
"bios_image": "OVMF-edk2-stable202305.fd",
"hda_disk_image": "nxosv-final.7.0.3.I7.7.qcow2"
}
},
{
"name": "7.0.3.I7.6",
"images": {
"bios_image": "OVMF-edk2-stable202305.fd",
"hda_disk_image": "nxosv-final.7.0.3.I7.6.qcow2"
}
},
{
"name": "7.0.3.I7.5",
"images": {
"bios_image": "OVMF-edk2-stable202305.fd",
"hda_disk_image": "nxosv-final.7.0.3.I7.5.qcow2"
}
},
{
"name": "7.0.3.I7.4",
"images": {
"bios_image": "OVMF-edk2-stable202305.fd",
"hda_disk_image": "nxosv-final.7.0.3.I7.4.qcow2"
}
},
{
"name": "7.0.3.I7.3",
"images": {
"bios_image": "OVMF-edk2-stable202305.fd",
"hda_disk_image": "nxosv-final.7.0.3.I7.3.qcow2"
}
},
{
"name": "7.0.3.I7.2",
"images": {
"bios_image": "OVMF-edk2-stable202305.fd",
"hda_disk_image": "nxosv-final.7.0.3.I7.2.qcow2"
}
},
{
"name": "7.0.3.I7.1",
"images": {
"bios_image": "OVMF-edk2-stable202305.fd",
"hda_disk_image": "nxosv-final.7.0.3.I7.1.qcow2"
}
},
{
"name": "7.0.3.I6.1",
"images": {
"bios_image": "OVMF-edk2-stable202305.fd",
"hda_disk_image": "nxosv-final.7.0.3.I6.1.qcow2"
}
},
{
"name": "7.0.3.I5.2",
"images": {
"bios_image": "OVMF-edk2-stable202305.fd",
"hda_disk_image": "nxosv-final.7.0.3.I5.2.qcow2"
}
},
{
"name": "7.0.3.I5.1",
"images": {
"bios_image": "OVMF-edk2-stable202305.fd",
"hda_disk_image": "nxosv-final.7.0.3.I5.1.qcow2"
}
}
]
}
+29 -1
View File
@@ -28,7 +28,21 @@
"options": ""
},
"images": [
{
{
"filename": "MFG_CTVM_8_10_196_0.iso",
"version": "8.10.196.0",
"md5sum": "6093aca44dcf45c999f83e62dc9aeea2",
"filesize": 650809344,
"download_url": "https://software.cisco.com/download/release.html?mdfid=284464214&flowid=&softwareid=280926587&release=8.10.196.0"
},
{
"filename": "MFG_CTVM_8_5_182_0.iso",
"version": "8.5.182.0",
"md5sum": "1cf3c57c2b123e739ab4662ea0abbc34",
"filesize": 388579328,
"download_url": "https://software.cisco.com/download/home/284464214/type/280926587/release/8.5.182.0"
},
{
"filename": "MFG_CTVM_8_3_102_0.iso",
"version": "8.3.102.0",
"md5sum": "7f6b7968b5bed04b5ecc119b6ba4e41c",
@@ -73,6 +87,20 @@
}
],
"versions": [
{
"name": "8.10.196.0",
"images": {
"hda_disk_image": "empty8G.qcow2",
"cdrom_image": "MFG_CTVM_8_10_196_0.iso"
}
},
{
"name": "8.5.182.0",
"images": {
"hda_disk_image": "empty8G.qcow2",
"cdrom_image": "MFG_CTVM_8_5_182_0.iso"
}
},
{
"name": "8.3.102.0",
"images": {
+30 -4
View File
@@ -7,7 +7,7 @@
"vendor_url": "https://www.extremenetworks.com",
"documentation_url": "https://www.extremenetworks.com/support/documentation",
"product_name": "EXOS VM",
"registry_version": 4,
"registry_version": 5,
"status": "stable",
"maintainer": "Extreme Networks",
"maintainer_email": "GitHubscripting@extremenetworks.com",
@@ -18,18 +18,32 @@
"qemu": {
"adapter_type": "rtl8139",
"adapters": 13,
"ram": 512,
"ram": 1024,
"hda_disk_interface": "ide",
"arch": "x86_64",
"console_type": "telnet",
"boot_priority": "dc",
"kvm": "allow",
"options": "-cpu core2duo"
"options": "-nographic -cpu host -enable-kvm"
},
"images": [
{
{
"filename": "EXOS-VM_33.6.1.14.qcow2",
"version": "33.6.1.14",
"md5sum": "01ea4bea3f321f91910565bb223a2540",
"filesize": 278647296,
"direct_download_url": "https://akamai-ep.extremenetworks.com/Extreme_P/github-en/Virtual_EXOS/EXOS-VM_33.6.1.14.qcow2"
},
{
"filename": "EXOS-VM_32.7.2.19.qcow2",
"version": "32.7.2.19",
"md5sum": "eba580a2e18d2a9cc972c9ece8917ea8",
"filesize": 236847104,
"direct_download_url": "https://akamai-ep.extremenetworks.com/Extreme_P/github-en/Virtual_EXOS/EXOS-VM_32.7.2.19.qcow2"
},
{
"filename": "EXOS-VM_v32.6.3.126.qcow2",
"version": "32.6.3.126",
"md5sum": "5856b6c427bd605fe1c7adb6ee6b2659",
@@ -41,6 +55,18 @@
"versions": [
{
"name": "33.6.1.14",
"images": {
"hda_disk_image": "EXOS-VM_33.6.1.14.qcow2"
}
},
{
"name": "32.7.2.19",
"images": {
"hda_disk_image": "EXOS-VM_32.7.2.19.qcow2"
}
},
{
"name": "32.6.3.126",
"images": {
@@ -28,6 +28,13 @@
"options": "-nographic"
},
"images": [
{
"filename": "FEGNS3.9.3.0.0.qcow2",
"version": "v9.3.0.0",
"md5sum": "2abfa8d64219aa75522238f87b782726",
"filesize": 490209280,
"direct_download_url": "https://akamai-ep.extremenetworks.com/Extreme_P/github-en/Virtual_VOSS/FEGNS3.9.3.0.0.qcow2"
},
{
"filename": "VOSSGNS3.8.10.1.0.qcow2",
"version": "v8.10.1.0",
@@ -93,6 +100,13 @@
}
],
"versions": [
{
"name": "v9.3.0.0",
"images":
{
"hda_disk_image": "FEGNS3.9.3.0.0.qcow2"
}
},
{
"name": "v8.10.1.0",
"images":
+46 -16
View File
@@ -27,20 +27,36 @@
},
"images": [
{
"filename": "Fedora-Cloud-Base-39-1.5.x86_64.qcow2",
"version": "39-1.5",
"md5sum": "800a10df2d369891ed65900bcacacd47",
"filesize": 544604160,
"download_url": "https://download.fedoraproject.org/pub/fedora/linux/releases/39/Cloud/x86_64/images",
"direct_download_url": "https://download.fedoraproject.org/pub/fedora/linux/releases/39/Cloud/x86_64/images/Fedora-Cloud-Base-39-1.5.x86_64.qcow2"
"filename": "Fedora-Cloud-Base-Generic-44-1.7.x86_64.qcow2",
"version": "44-1.7",
"md5sum": "49784011eb752291bfead24d3be8163f",
"filesize": 583729152,
"download_url": "https://download.fedoraproject.org/pub/fedora/linux/releases/44/Cloud/x86_64/images",
"direct_download_url": "https://fedora.mirrorservice.org/fedora/linux/releases/44/Cloud/x86_64/images/Fedora-Cloud-Base-Generic-44-1.7.x86_64.qcow2"
},
{
"filename": "Fedora-Cloud-Base-38-1.6.x86_64.qcow2",
"version": "38-1.6",
"md5sum": "53ddfe7b28666d5ddc55e93ff06abad2",
"filesize": 497287168,
"download_url": "https://download.fedoraproject.org/pub/fedora/linux/releases/38/Cloud/x86_64/images",
"direct_download_url": "https://download.fedoraproject.org/pub/fedora/linux/releases/38/Cloud/x86_64/images/Fedora-Cloud-Base-38-1.6.x86_64.qcow2"
"filename": "Fedora-Cloud-Base-Generic-43-1.6.x86_64.qcow2",
"version": "43-1.6",
"md5sum": "f2f671db53fae58b79bb2e2259fa3622",
"filesize": 583335936,
"download_url": "https://download.fedoraproject.org/pub/fedora/linux/releases/43/Cloud/x86_64/images",
"direct_download_url": "https://fedora.mirrorservice.org/fedora/linux/releases/43/Cloud/x86_64/images/Fedora-Cloud-Base-Generic-43-1.6.x86_64.qcow2"
},
{
"filename": "Fedora-Cloud-Base-Generic-42-1.1.x86_64.qcow2",
"version": "42-1.1",
"md5sum": "2d660d2adc20b1fe793df5cb66f1d868",
"filesize": 532217856,
"download_url": "https://download.fedoraproject.org/pub/fedora/linux/releases/42/Cloud/x86_64/images",
"direct_download_url": "https://fedora.mirrorservice.org/fedora/linux/releases/42/Cloud/x86_64/images/Fedora-Cloud-Base-Generic-42-1.1.x86_64.qcow2"
},
{
"filename": "Fedora-Cloud-Base-Generic-41-1.4.x86_64.qcow2",
"version": "41-1.4",
"md5sum": "8efc9edc04f38775de72ce067166b2a1",
"filesize": 491716608,
"download_url": "https://download.fedoraproject.org/pub/fedora/linux/releases/41/Cloud/x86_64/images",
"direct_download_url": "https://fedora.mirrorservice.org/fedora/linux/releases/41/Cloud/x86_64/images/Fedora-Cloud-Base-Generic-41-1.4.x86_64.qcow2"
},
{
"filename": "fedora-cloud-init-data.iso",
@@ -53,16 +69,30 @@
],
"versions": [
{
"name": "39-1.5",
"name": "44-1.7",
"images": {
"hda_disk_image": "Fedora-Cloud-Base-39-1.5.x86_64.qcow2",
"hda_disk_image": "Fedora-Cloud-Base-Generic-44-1.7.x86_64.qcow2",
"cdrom_image": "fedora-cloud-init-data.iso"
}
},
{
"name": "38-1.6",
"name": "43-1.6",
"images": {
"hda_disk_image": "Fedora-Cloud-Base-38-1.6.x86_64.qcow2",
"hda_disk_image": "Fedora-Cloud-Base-Generic-43-1.6.x86_64.qcow2",
"cdrom_image": "fedora-cloud-init-data.iso"
}
},
{
"name": "42-1.1",
"images": {
"hda_disk_image": "Fedora-Cloud-Base-Generic-42-1.1.x86_64.qcow2",
"cdrom_image": "fedora-cloud-init-data.iso"
}
},
{
"name": "41-1.4",
"images": {
"hda_disk_image": "Fedora-Cloud-Base-Generic-41-1.4.x86_64.qcow2",
"cdrom_image": "fedora-cloud-init-data.iso"
}
}
+42
View File
@@ -29,6 +29,27 @@
"kvm": "allow"
},
"images": [
{
"filename": "FAZ_VM64_KVM-v7.4.6.M-build2588-FORTINET.out.kvm.qcow2",
"version": "7.4.6",
"md5sum": "fba982436ff430465df6f6f283a2bd71",
"filesize": 511053824,
"download_url": "https://support.fortinet.com/Download/FirmwareImages.aspx"
},
{
"filename": "FAZ_VM64_KVM-v7.4.5.M-build2553-FORTINET.out.kvm.qcow2",
"version": "7.4.5",
"md5sum": "78464ee460fce69c360901ca9ccfe4a0",
"filesize": 510988288,
"download_url": "https://support.fortinet.com/Download/FirmwareImages.aspx"
},
{
"filename": "FAZ_VM64_KVM-v7.4.4.F-build2550-FORTINET.out.kvm.qcow2",
"version": "7.4.4",
"md5sum": "7bec1725b1e39dd66f4daae07492f1b4",
"filesize": 511217664,
"download_url": "https://support.fortinet.com/Download/FirmwareImages.aspx"
},
{
"filename": "FAZ_VM64_KVM-v7.4.3-build2487-FORTINET.out.kvm.qcow2",
"version": "7.4.3",
@@ -277,6 +298,27 @@
}
],
"versions": [
{
"name": "7.4.6",
"images": {
"hda_disk_image": "FAZ_VM64_KVM-v7.4.6.M-build2588-FORTINET.out.kvm.qcow2",
"hdb_disk_image": "empty30G.qcow2"
}
},
{
"name": "7.4.5",
"images": {
"hda_disk_image": "FAZ_VM64_KVM-v7.4.5.M-build2553-FORTINET.out.kvm.qcow2",
"hdb_disk_image": "empty30G.qcow2"
}
},
{
"name": "7.4.4",
"images": {
"hda_disk_image": "FAZ_VM64_KVM-v7.4.4.F-build2550-FORTINET.out.kvm.qcow2",
"hdb_disk_image": "empty30G.qcow2"
}
},
{
"name": "7.4.3",
"images": {
+42
View File
@@ -28,6 +28,27 @@
"kvm": "allow"
},
"images": [
{
"filename": "FGT_VM64_KVM-v7.4.7.M-build2731-FORTINET.out.kvm.qcow2",
"version": "7.4.7",
"md5sum": "2ce4039789e84b3fe85565e0c4110718",
"filesize": 103677952,
"download_url": "https://support.fortinet.com/Download/FirmwareImages.aspx"
},
{
"filename": "FGT_VM64_KVM-v7.4.6.M-build2726-FORTINET.out.kvm.qcow2",
"version": "7.4.6",
"md5sum": "b787c1c5ab365f267d7e4e88b1cdc10b",
"filesize": 103677952,
"download_url": "https://support.fortinet.com/Download/FirmwareImages.aspx"
},
{
"filename": "FGT_VM64_KVM-v7.4.5.M-build2702-FORTINET.out.kvm.qcow2",
"version": "7.4.5",
"md5sum": "8465e74c4ef1751619ebb989838d457c",
"filesize": 102367232,
"download_url": "https://support.fortinet.com/Download/FirmwareImages.aspx"
},
{
"filename": "FGT_VM64_KVM-v7.4.4.F-build2662-FORTINET.out.kvm.qcow2",
"version": "7.4.4",
@@ -388,6 +409,27 @@
}
],
"versions": [
{
"name": "7.4.7",
"images": {
"hda_disk_image": "FGT_VM64_KVM-v7.4.7.M-build2731-FORTINET.out.kvm.qcow2",
"hdb_disk_image": "empty30G.qcow2"
}
},
{
"name": "7.4.6",
"images": {
"hda_disk_image": "FGT_VM64_KVM-v7.4.6.M-build2726-FORTINET.out.kvm.qcow2",
"hdb_disk_image": "empty30G.qcow2"
}
},
{
"name": "7.4.5",
"images": {
"hda_disk_image": "FGT_VM64_KVM-v7.4.5.M-build2702-FORTINET.out.kvm.qcow2",
"hdb_disk_image": "empty30G.qcow2"
}
},
{
"name": "7.4.4",
"images": {
+43 -1
View File
@@ -29,9 +29,30 @@
"kvm": "allow"
},
"images": [
{
"filename": "FMG_VM64_KVM-v7.4.6.M-build2588-FORTINET.out.kvm.qcow2",
"version": "7.4.6",
"md5sum": "7cb219e1070d393f61cf750d818b23b1",
"filesize": 349122560,
"download_url": "https://support.fortinet.com/Download/FirmwareImages.aspx"
},
{
"filename": "FMG_VM64_KVM-v7.4.5.M-build2553-FORTINET.out.kvm.qcow2",
"version": "7.4.5",
"md5sum": "fa59ddce0cb933741f16866472026723",
"filesize": 349769728,
"download_url": "https://support.fortinet.com/Download/FirmwareImages.aspx"
},
{
"filename": "FMG_VM64_KVM-v7.4.4.F-build2550-FORTINET.out.kvm.qcow2",
"version": "7.4.4",
"md5sum": "770727bb30555e6938308bbf95f19555",
"filesize": 349847552,
"download_url": "https://support.fortinet.com/Download/FirmwareImages.aspx"
},
{
"filename": "FMG_VM64_KVM-v7.4.3-build2487-FORTINET.out.kvm.qcow2",
"version": "7.4.23",
"version": "7.4.3",
"md5sum": "b01d9f86aa27c538407d518df1326863",
"filesize": 346107904,
"download_url": "https://support.fortinet.com/Download/FirmwareImages.aspx"
@@ -277,6 +298,27 @@
}
],
"versions": [
{
"name": "7.4.6",
"images": {
"hda_disk_image": "FMG_VM64_KVM-v7.4.6.M-build2588-FORTINET.out.kvm.qcow2",
"hdb_disk_image": "empty30G.qcow2"
}
},
{
"name": "7.4.5",
"images": {
"hda_disk_image": "FMG_VM64_KVM-v7.4.5.M-build2553-FORTINET.out.kvm.qcow2",
"hdb_disk_image": "empty30G.qcow2"
}
},
{
"name": "7.4.4",
"images": {
"hda_disk_image": "FMG_VM64_KVM-v7.4.4.F-build2550-FORTINET.out.kvm.qcow2",
"hdb_disk_image": "empty30G.qcow2"
}
},
{
"name": "7.4.3",
"images": {
+8 -8
View File
@@ -25,19 +25,19 @@
},
"images": [
{
"filename": "rtr.qcow2",
"version": "20.7.1",
"md5sum": "4707415d15d20ced92423d90e52eedcd",
"filesize": 254767616,
"download_url": "http://freerouter.nop.hu/",
"direct_download_url": "http://dl.nop.hu/rtr.qcow2"
"filename": "rtr-x86_64.qcow2",
"version": "25.8.29",
"md5sum": "13d72fdfd772258808a9d4b75fa67083",
"filesize": 73269248,
"download_url": "http://www.freertr.org/",
"direct_download_url": "http://dl.nop.hu/rtr-x86_64.qcow2"
}
],
"versions": [
{
"name": "20.7.1",
"name": "25.8.29",
"images": {
"hda_disk_image": "rtr.qcow2"
"hda_disk_image": "rtr-x86_64.qcow2"
}
}
]
@@ -0,0 +1,60 @@
{
"appliance_id": "4ac0d5bc-714d-4a5a-8af5-8fb452046acd",
"name": "Home Assistant",
"category": "guest",
"description": "Open source home automation that puts local control and privacy first. Powered by a worldwide community of tinkerers and DIY enthusiasts.",
"vendor_name": "Open Home Foundation",
"vendor_url": "https://www.openhomefoundation.org/",
"vendor_logo_url": "https://www.openhomefoundation.org/assets/images/logo/open-home-foundation.svg",
"documentation_url": "https://www.home-assistant.io/installation/alternative",
"product_name": "haos",
"product_url": "https://www.home-assistant.io/",
"registry_version": 8,
"status": "stable",
"availability": "free",
"maintainer": "Neyder Achahuanco Apaza",
"maintainer_email": "gns3@neyder.net",
"usage": "You will be able to reach Home Assistant on homeassistant.local:8123, you might need to access Home Assistant at homeassistant:8123 or http://X.X.X.X:8123 (replace X.X.X.X with your virtual machine\u2019s IP address).\nYou can access trough console with root user without password.",
"symbol": "home-assistant-logomark-color-on-light.svg",
"default_username": "cisco",
"default_password": "admin",
"settings": [
{
"name": "Default template settings",
"default": true,
"template_type": "qemu",
"template_properties":
{
"adapter_type": "virtio-net-pci",
"platform": "x86_64",
"adapters": 1,
"ram": 2048,
"cpus": 2,
"hda_disk_interface": "virtio",
"console_type": "telnet",
"boot_priority": "cd",
"on_close": "shutdown_signal",
"uefi": true
}
}
],
"images": [
{
"filename": "haos_ova-17.1.qcow2",
"version": "17.1",
"md5sum": "e1b950430045859a3ac035cb420df158",
"filesize": 1024393216,
"download_url": "https://www.home-assistant.io/installation/alternative",
"direct_download_url": "https://github.com/home-assistant/operating-system/releases/download/17.1/haos_ova-17.1.qcow2.xz",
"compression": "xz"
}
],
"versions": [
{
"images": {
"hda_disk_image": "haos_ova-17.1.qcow2"
},
"name": "17.1"
}
]
}
@@ -1,5 +1,6 @@
{
"appliance_id": "bd86792e-9870-4b42-8f16-cb2776f1d5d5",
"tags": ["device_type:gns3_huawei_telnet_ce"],
"name": "HuaWei CE12800",
"category": "multilayer_switch",
"description": "CE12800 series switches are high-performance core switches designed for data center networks and high-end campus networks. The switches provide stable, reliable, secure, and high-performance Layer 2/Layer 3 switching services, to help build an elastic, virtualized, agile, and high-quality network.",
+230
View File
@@ -0,0 +1,230 @@
{
"appliance_id": "4d351078-c6f5-444c-ab30-0ef20e3d8c53",
"name": "Infix",
"category": "router",
"description": "Infix OS is a free Linux-based operating system with made-easy management using NETCONF, RESTCONF, or the built-in command line interface (CLI). It is suitable for both end-devices with a single Ethernet port and switches/routers with multiple ports. Immutable by design, extensions are possible using Docker containers.",
"vendor_name": "KernelKit",
"vendor_url": "https://github.com/kernelkit",
"vendor_logo_url": "https://kernelkit.org/assets/img/jack.png",
"product_name": "Infix",
"registry_version": 4,
"documentation_url": "https://kernelkit.org/infix/latest/",
"status": "stable",
"availability": "free",
"maintainer": "KernelKit",
"maintainer_email": "kernelkit@googlegroups.com",
"usage": "Default login, user/pass: admin/admin\n\nType 'cli' (and Enter) followed by 'help' for an overview of commands and relevant configuration files.",
"port_name_format": "eth{0}",
"linked_clone": true,
"symbol": "router_red.svg",
"qemu": {
"adapter_type": "virtio-net-pci",
"adapters": 10,
"ram": 512,
"cpus": 1,
"hda_disk_interface": "virtio",
"arch": "x86_64",
"console_type": "telnet",
"process_priority": "normal",
"kvm": "allow"
},
"images": [
{
"filename": "OVMF-edk2-stable202305.fd",
"version": "stable202305",
"md5sum": "6c4cf1519fec4a4b95525d9ae562963a",
"filesize": 4194304,
"download_url": "https://sourceforge.net/projects/gns-3/files/Qemu%20Appliances/",
"direct_download_url": "https://sourceforge.net/projects/gns-3/files/Qemu%20Appliances/OVMF-edk2-stable202305.fd.zip/download",
"compression": "zip"
},
{
"filename": "infix-x86_64-disk-24.11.1.img",
"filesize": 536870912,
"md5sum": "673a123fe122d1c2f5724baf9965a19d",
"version": "24.11.1",
"download_url": "https://github.com/kernelkit/infix/releases/download/v24.11.1/infix-x86_64-24.11.1.tar.gz",
"compression": "gzip"
},
{
"filename": "infix-x86_64-disk-25.01.0.img",
"filesize": 536870912,
"md5sum": "a814d93b385116b4a35712c445b5f830",
"version": "25.01.0",
"download_url": "https://github.com/kernelkit/infix/releases/download/v25.01.0/infix-x86_64-25.01.0.tar.gz",
"compression": "gzip"
},
{
"filename": "infix-x86_64-disk-25.02.0.img",
"filesize": 536870912,
"md5sum": "8e29474c97df3486eb063a8af5043f50",
"version": "25.02.0",
"download_url": "https://github.com/kernelkit/infix/releases/download/v25.02.0/infix-x86_64-25.02.0.tar.gz",
"compression": "gzip"
},
{
"filename": "infix-x86_64-disk-25.03.0.img",
"filesize": 536870912,
"md5sum": "5e1ed1081cd1673bfed4a9b5b1c58e08",
"version": "25.03.0",
"download_url": "https://github.com/kernelkit/infix/releases/download/v25.03.0/infix-x86_64-25.03.0.tar.gz",
"compression": "gzip"
},
{
"filename": "infix-x86_64-disk-25.04.0.qcow2",
"filesize": 259723776,
"md5sum": "84bd999513325d0007d0e6587abc6140",
"version": "25.04.0",
"direct_download_url": "https://github.com/kernelkit/infix/releases/download/v25.04.0/infix-x86_64-disk-25.04.0.qcow2"
},
{
"filename": "infix-x86_64-disk-25.05.0.qcow2",
"filesize": 259958784,
"md5sum": "a6b1b3a6bccc60bb5214f2b864602fde",
"version": "25.05.0",
"direct_download_url": "https://github.com/kernelkit/infix/releases/download/v25.05.0/infix-x86_64-disk-25.05.0.qcow2"
},
{
"filename": "infix-x86_64-disk-25.08.0.qcow2",
"filesize": 284453888,
"md5sum": "5fbf146d2ac73d1bd8fa1c509d6169b1",
"version": "25.08.0",
"direct_download_url": "https://github.com/kernelkit/infix/releases/download/v25.08.0/infix-x86_64-disk-25.08.0.qcow2"
},
{
"filename": "infix-x86_64-disk-25.09.0.qcow2",
"filesize": 285120000,
"md5sum": "9761968406780a5b28311b8527f8629f",
"version": "25.09.0",
"direct_download_url": "https://github.com/kernelkit/infix/releases/download/v25.09.0/infix-x86_64-disk-25.09.0.qcow2"
},
{
"filename": "infix-x86_64-disk-25.10.0.qcow2",
"filesize": 288818688,
"md5sum": "781d0fce9fbf789f6ea6ff10dc104afb",
"version": "25.10.0",
"direct_download_url": "https://github.com/kernelkit/infix/releases/download/v25.10.0/infix-x86_64-disk-25.10.0.qcow2"
},
{
"filename": "infix-x86_64-disk-25.11.0.qcow2",
"filesize": 288930816,
"md5sum": "e2eb1a4fff9d56815f37c2e82a6279fb",
"version": "25.11.0",
"direct_download_url": "https://github.com/kernelkit/infix/releases/download/v25.11.0/infix-x86_64-disk-25.11.0.qcow2"
},
{
"filename": "infix-x86_64-v26.01.0.qcow2",
"filesize": 307363840,
"md5sum": "bd3b9c56f98ba264c36e4d6f69931546",
"version": "26.01.0",
"direct_download_url": "https://github.com/kernelkit/infix/releases/download/v26.01.0/infix-x86_64-v26.01.0.qcow2"
},
{
"filename": "infix-x86_64-v26.02.1.qcow2",
"filesize": 316407808,
"md5sum": "0c4da508cfcb702c066f47227644b65f",
"version": "26.02.1",
"direct_download_url": "https://github.com/kernelkit/infix/releases/download/v26.02.1/infix-x86_64-v26.02.1.qcow2"
},
{
"filename": "infix-x86_64-v26.03.0.qcow2",
"filesize": 320339968,
"md5sum": "24cd1006734993dab338e5c75f80b875",
"version": "26.03.0",
"direct_download_url": "https://github.com/kernelkit/infix/releases/download/v26.03.0/infix-x86_64-v26.03.0.qcow2"
}
],
"versions": [
{
"name": "26.03.0",
"images": {
"bios_image": "OVMF-edk2-stable202305.fd",
"hda_disk_image": "infix-x86_64-v26.03.0.qcow2"
}
},
{
"name": "26.02.1",
"images": {
"bios_image": "OVMF-edk2-stable202305.fd",
"hda_disk_image": "infix-x86_64-v26.02.1.qcow2"
}
},
{
"name": "26.01.0",
"images": {
"bios_image": "OVMF-edk2-stable202305.fd",
"hda_disk_image": "infix-x86_64-v26.01.0.qcow2"
}
},
{
"name": "25.11.0",
"images": {
"bios_image": "OVMF-edk2-stable202305.fd",
"hda_disk_image": "infix-x86_64-disk-25.11.0.qcow2"
}
},
{
"name": "25.10.0",
"images": {
"bios_image": "OVMF-edk2-stable202305.fd",
"hda_disk_image": "infix-x86_64-disk-25.10.0.qcow2"
}
},
{
"name": "25.09.0",
"images": {
"bios_image": "OVMF-edk2-stable202305.fd",
"hda_disk_image": "infix-x86_64-disk-25.09.0.qcow2"
}
},
{
"name": "25.08.0",
"images": {
"bios_image": "OVMF-edk2-stable202305.fd",
"hda_disk_image": "infix-x86_64-disk-25.08.0.qcow2"
}
},
{
"name": "25.05.0",
"images": {
"bios_image": "OVMF-edk2-stable202305.fd",
"hda_disk_image": "infix-x86_64-disk-25.05.0.qcow2"
}
},
{
"name": "25.04.0",
"images": {
"bios_image": "OVMF-edk2-stable202305.fd",
"hda_disk_image": "infix-x86_64-disk-25.04.0.qcow2"
}
},
{
"name": "25.03.0",
"images": {
"bios_image": "OVMF-edk2-stable202305.fd",
"hda_disk_image": "infix-x86_64-disk-25.03.0.img"
}
},
{
"name": "25.02.0",
"images": {
"bios_image": "OVMF-edk2-stable202305.fd",
"hda_disk_image": "infix-x86_64-disk-25.02.0.img"
}
},
{
"name": "25.01.0",
"images": {
"bios_image": "OVMF-edk2-stable202305.fd",
"hda_disk_image": "infix-x86_64-disk-25.01.0.img"
}
},
{
"name": "24.11.1",
"images": {
"bios_image": "OVMF-edk2-stable202305.fd",
"hda_disk_image": "infix-x86_64-disk-24.11.1.img"
}
}
]
}
@@ -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"
}
]
}
@@ -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"
}
]
}
@@ -0,0 +1,75 @@
{
"appliance_id": "12394e0d-9ac5-4da5-8e91-94a462536b61",
"name": "vJunos-router",
"category": "router",
"description": "vJunos-router",
"vendor_name": "Juniper",
"vendor_url": "https://www.juniper.net",
"documentation_url": "https://www.juniper.net/documentation/product/us/en/vjunos-router/",
"product_name": "vJunos Router",
"registry_version": 6,
"status": "stable",
"availability": "free",
"maintainer": "AAm-kun",
"maintainer_email": "github@sugarpapa.mozmail.com",
"usage": "GNS3 SHOULD be a baremetal installation. Using the GNS3 VM MIGHT result in unwanted issues. Default user is root. No password is needed.",
"symbol": "juniper-vmx.svg",
"first_port_name": "fxp0",
"port_name_format": "ge-0/0/{port0}",
"qemu": {
"adapter_type": "virtio-net-pci",
"adapters": 11,
"ram": 5120,
"cpus": 4,
"hda_disk_interface": "virtio",
"arch": "x86_64",
"console_type": "telnet",
"kvm": "require",
"options": "-serial mon:stdio -nographic -smbios type=1,product=VM-VMX,family=lab -cpu host",
"on_close": "power_off"
},
"images": [
{
"filename": "vJunos-router-24.2R1-S2.qcow2",
"version": "24.2R1-S2",
"md5sum": "dd906b4d19463e22f3e1a297ff1a7464",
"filesize": 3675783168,
"download_url": "https://support.juniper.net/support/downloads/?p=vjunos-router"
},
{
"filename": "vJunos-router-23.4R2-S2.1.qcow2",
"version": "23.4R2-S2.1",
"md5sum": "e25f5acdfc6c076d0023fd8289bcdd89",
"filesize": 3644063744,
"download_url": "https://support.juniper.net/support/downloads/?p=vjunos-router"
},
{
"filename": "vJunos-router-23.2R1.15.qcow2",
"version": "23.2R1.15",
"md5sum": "18670fb67633822697fdd3cf982e7eb1",
"filesize": 3653566464,
"download_url": "https://support.juniper.net/support/downloads/?p=vjunos-router"
}
],
"versions": [
{
"images": {
"hda_disk_image": "vJunos-router-24.2R1-S2.qcow2"
},
"name": "24.2R1-S2"
},
{
"images": {
"hda_disk_image": "vJunos-router-23.4R2-S2.1.qcow2"
},
"name": "23.4R2-S2.1"
},
{
"images": {
"hda_disk_image": "vJunos-router-23.2R1.15.qcow2"
},
"name": "23.2R1.15"
}
]
}
+13 -216
View File
@@ -11,237 +11,34 @@
"status": "stable",
"maintainer": "GNS3 Team",
"maintainer_email": "developers@gns3.net",
"usage": "Default password is toor\nEnable persistence by selecting boot option 'Live USB Persistence'",
"usage": "Default username is kali and the default password is kali",
"port_name_format": "eth{0}",
"qemu": {
"adapter_type": "e1000",
"adapters": 8,
"ram": 1024,
"ram": 2048,
"cpus": 2,
"hda_disk_interface": "ide",
"arch": "x86_64",
"console_type": "vnc",
"boot_priority": "d",
"kvm": "require"
},
"images": [
{
"filename": "kali-linux-2021.1-live-amd64.iso",
"version": "2021.1",
"md5sum": "3a3716fef866e5c29a1c1ccfc94264b5",
"filesize": 3591385088,
"download_url": "http://cdimage.kali.org/kali-2021.1/",
"direct_download_url": "http://cdimage.kali.org/kali-2021.1/kali-linux-2021.1-live-amd64.iso"
},
{
"filename": "kali-linux-2019.3-amd64.iso",
"version": "2019.3",
"md5sum": "9c6fb00558f78ed06992d89f745ef975",
"filesize": 3037736960,
"download_url": "http://old.kali.org/kali-images/kali-2019.3",
"direct_download_url": "http://old.kali.org/kali-images/kali-2019.3/kali-linux-2019.3-amd64.iso"
},
{
"filename": "kali-linux-2019.2-amd64.iso",
"version": "2019.2",
"md5sum": "0f89b6225d7ea9c18682f7cc541c1179",
"filesize": 3353227264,
"download_url": "http://old.kali.org/kali-images/kali-2019.2",
"direct_download_url": "http://old.kali.org/kali-images/kali-2019.2/kali-linux-2019.2-amd64.iso"
},
{
"filename": "kali-linux-mate-2019.2-amd64.iso",
"version": "2019.2 (MATE)",
"md5sum": "fec8dd7009f932c51a74323df965a709",
"filesize": 3313217536,
"download_url": "http://old.kali.org/kali-images/kali-2019.2",
"direct_download_url": "http://old.kali.org/kali-images/kali-2019.2/kali-linux-mate-2019.2-amd64.iso"
},
{
"filename": "kali-linux-2019.1a-amd64.iso",
"version": "2019.1a",
"md5sum": "58c6111ed0be1919ea87267e7e65ab0f",
"filesize": 3483873280,
"download_url": "http://old.kali.org/kali-images/kali-2019.1a",
"direct_download_url": "http://old.kali.org/kali-images/kali-2019.1a/kali-linux-2019.1a-amd64.iso"
},
{
"filename": "kali-linux-2018.4-amd64.iso",
"version": "2018.4",
"md5sum": "1b2d598bb8d2003e6207c119c0ba42fe",
"filesize": 3139436544,
"download_url": "http://old.kali.org/kali-images/kali-2018.4",
"direct_download_url": "http://old.kali.org/kali-images/kali-2018.4/kali-linux-2018.4-amd64.iso"
},
{
"filename": "kali-linux-2018.3a-amd64.iso",
"version": "2018.3a",
"md5sum": "2da675d016bd690c05e180e33aa98b94",
"filesize": 3192651776,
"download_url": "http://old.kali.org/kali-images/kali-2018.3a",
"direct_download_url": "http://old.kali.org/kali-images/kali-2018.3a/kali-linux-2018.3a-amd64.iso"
},
{
"filename": "kali-linux-2018.1-amd64.iso",
"version": "2018.1",
"md5sum": "a3feb90df5b71b3c7f4a02bdddf221d7",
"filesize": 3028500480,
"download_url": "http://old.kali.org/kali-images/kali-2018.1",
"direct_download_url": "http://old.kali.org/kali-images/kali-2018.1/kali-linux-2018.1-amd64.iso"
},
{
"filename": "kali-linux-2017.3-amd64.iso",
"version": "2017.3",
"md5sum": "b465580c897e94675ac1daf031fa66b9",
"filesize": 2886402048,
"download_url": "http://old.kali.org/kali-images/kali-2017.3/",
"direct_download_url": "http://old.kali.org/kali-images/kali-2017.3/kali-linux-2017.3-amd64.iso"
},
{
"filename": "kali-linux-2017.2-amd64.iso",
"version": "2017.2",
"md5sum": "541654f8f818450dc0db866a0a0f6eec",
"filesize": 3020619776,
"download_url": "http://old.kali.org/kali-images/kali-2017.2/",
"direct_download_url": "http://old.kali.org/kali-images/kali-2017.2/kali-linux-2017.2-amd64.iso"
},
{
"filename": "kali-linux-2017.1-amd64.iso",
"version": "2017.1",
"md5sum": "c8e742283929d7a12dbe7c58e398ff08",
"filesize": 2794307584,
"download_url": "http://old.kali.org/kali-images/kali-2017.1/",
"direct_download_url": "http://old.kali.org/kali-images/kali-2017.1/kali-linux-2017.1-amd64.iso"
},
{
"filename": "kali-linux-2016.2-amd64.iso",
"version": "2016.2",
"md5sum": "3d163746bc5148e61ad689d94bc263f9",
"filesize": 3076767744,
"download_url": "http://old.kali.org/kali-images/kali-2016.2/",
"direct_download_url": "http://old.kali.org/kali-images/kali-2016.2/kali-linux-2016.2-amd64.iso"
},
{
"filename": "kali-linux-2016.1-amd64.iso",
"version": "2016.1",
"md5sum": "2e1230dc14036935b3279dfe3e49ad39",
"filesize": 2945482752,
"download_url": "http://old.kali.org/kali-images/kali-2016.1/",
"direct_download_url": "http://old.kali.org/kali-images/kali-2016.1/kali-linux-2016.1-amd64.iso"
},
{
"filename": "kali-linux-2.0-amd64.iso",
"version": "2.0",
"md5sum": "ef192433017c5d99a156eaef51fd389d",
"filesize": 3320512512,
"download_url": "https://www.offensive-security.com/kali-linux-vmware-arm-image-download/",
"direct_download_url": "http://images.kali.org/Kali-Linux-2.0.0-vm-amd64.7z"
},
{
"filename": "kali-linux-persistence-1gb.qcow2",
"version": "1.0",
"md5sum": "14e9c92f3ba5a0bd1128c1ea26a129ea",
"filesize": 34734080,
"download_url": "https://sourceforge.net/projects/gns-3/files/Qemu%20Appliances/",
"direct_download_url": "https://sourceforge.net/projects/gns-3/files/Qemu%20Appliances/kali-linux-persistence-1gb.qcow2/download"
{
"filename": "kali-linux-2025.4-qemu-amd64.qcow2",
"version": "2025.4",
"md5sum": "a4be43351b5deb5b2823cb38a73b2095",
"filesize": 15719268352,
"download_url": "https://cdimage.kali.org/kali-2025.4/",
"direct_download_url": "https://cdimage.kali.org/kali-2025.4/kali-linux-2025.4-qemu-amd64.7z",
"compression": "7z"
}
],
"versions": [
{
"name": "2021.1",
"name": "2025.4",
"images": {
"hda_disk_image": "kali-linux-persistence-1gb.qcow2",
"cdrom_image": "kali-linux-2021.1-live-amd64.iso"
}
},
{
"name": "2019.3",
"images": {
"hda_disk_image": "kali-linux-persistence-1gb.qcow2",
"cdrom_image": "kali-linux-2019.3-amd64.iso"
}
},
{
"name": "2019.2",
"images": {
"hda_disk_image": "kali-linux-persistence-1gb.qcow2",
"cdrom_image": "kali-linux-2019.2-amd64.iso"
}
},
{
"name": "2019.2 (MATE)",
"images": {
"hda_disk_image": "kali-linux-persistence-1gb.qcow2",
"cdrom_image": "kali-linux-mate-2019.2-amd64.iso"
}
},
{
"name": "2019.1a",
"images": {
"hda_disk_image": "kali-linux-persistence-1gb.qcow2",
"cdrom_image": "kali-linux-2019.1a-amd64.iso"
}
},
{
"name": "2018.4",
"images": {
"hda_disk_image": "kali-linux-persistence-1gb.qcow2",
"cdrom_image": "kali-linux-2018.4-amd64.iso"
}
},
{
"name": "2018.3a",
"images": {
"hda_disk_image": "kali-linux-persistence-1gb.qcow2",
"cdrom_image": "kali-linux-2018.3a-amd64.iso"
}
},
{
"name": "2018.1",
"images": {
"hda_disk_image": "kali-linux-persistence-1gb.qcow2",
"cdrom_image": "kali-linux-2018.1-amd64.iso"
}
},
{
"name": "2017.3",
"images": {
"hda_disk_image": "kali-linux-persistence-1gb.qcow2",
"cdrom_image": "kali-linux-2017.3-amd64.iso"
}
},
{
"name": "2017.2",
"images": {
"hda_disk_image": "kali-linux-persistence-1gb.qcow2",
"cdrom_image": "kali-linux-2017.2-amd64.iso"
}
},
{
"name": "2017.1",
"images": {
"hda_disk_image": "kali-linux-persistence-1gb.qcow2",
"cdrom_image": "kali-linux-2017.1-amd64.iso"
}
},
{
"name": "2016.2",
"images": {
"hda_disk_image": "kali-linux-persistence-1gb.qcow2",
"cdrom_image": "kali-linux-2016.2-amd64.iso"
}
},
{
"name": "2016.1",
"images": {
"hda_disk_image": "kali-linux-persistence-1gb.qcow2",
"cdrom_image": "kali-linux-2016.1-amd64.iso"
}
},
{
"name": "2.0",
"images": {
"hda_disk_image": "kali-linux-persistence-1gb.qcow2",
"cdrom_image": "kali-linux-2.0-amd64.iso"
"hda_disk_image": "kali-linux-2025.4-qemu-amd64.qcow2"
}
}
]
+30
View File
@@ -27,6 +27,24 @@
"options": "-nographic"
},
"images": [
{
"filename": "chr-7.22.1.img",
"version": "7.22.1",
"md5sum": "a67290634f489071eae2fd99dcadba86",
"filesize": 134217728,
"download_url": "http://www.mikrotik.com/download",
"direct_download_url": "https://download.mikrotik.com/routeros/7.22.1/chr-7.22.1.img.zip",
"compression": "zip"
},
{
"filename": "chr-7.20.8.img",
"version": "7.20.8",
"md5sum": "a432cf89f405115163952eefd82934e4",
"filesize": 134217728,
"download_url": "http://www.mikrotik.com/download",
"direct_download_url": "https://download.mikrotik.com/routeros/7.20.8/chr-7.20.8.img.zip",
"compression": "zip"
},
{
"filename": "chr-7.16.img",
"version": "7.16",
@@ -74,6 +92,18 @@
}
],
"versions": [
{
"name": "7.22.1",
"images": {
"hda_disk_image": "chr-7.22.1.img"
}
},
{
"name": "7.20.8",
"images": {
"hda_disk_image": "chr-7.20.8.img"
}
},
{
"name": "7.16",
"images": {
@@ -0,0 +1,22 @@
{
"appliance_id": "1174e46d-4a29-4554-a1e8-71ed90682295",
"name": "MikroTik WinBox 2026",
"category": "guest",
"description": "Mikrotik's WinBox router management software for GNS3 2026",
"vendor_name": "MikroTik",
"vendor_url": "https://mikrotik.com",
"documentation_url": "https://mikrotik.com/winbox",
"product_name": "MikroTik WinBox",
"product_url": "https://mikrotik.com/winbox",
"registry_version": 4,
"status": "stable",
"availability": "free",
"maintainer": "h3ck13r",
"maintainer_email": "pisdushko1886@gmail.com",
"usage": "Connect WinBox to a MikroTik CHR port and start them both. Open WinBox console and wait until MikroTik appear in neighbors tab, provide credentials and connect.",
"docker": {
"adapters": 1,
"image": "snatao808/winbox-mikrotik-2026",
"console_type": "vnc"
}
}
+44
View File
@@ -0,0 +1,44 @@
{
"appliance_id": "bb9ff73a-701e-40e8-b68a-6a6efeb04e99",
"name": "NethSecurity",
"category": "firewall",
"description": "NethSecurity is an Unified Threat Management (UTM) solution that provides a comprehensive suite of security features, including firewall, content filtering, deep packet inspection (DPI) using Netifyd, Dedalo hotspot, OpenVPN, and an optional remote controller. It is designed to be easy to install and configure, making it a good choice for both small and medium-sized businesses (SMBs) as well as enterprise organizations.",
"vendor_name": "Nethesis",
"vendor_url": "https://www.nethesis.it/",
"documentation_url": "https://docs.nethsecurity.org/en/latest/",
"product_name": "NethSecurity",
"product_url": "https://nethsecurity.org/",
"registry_version": 4,
"status": "stable",
"maintainer": "GNS3 Team",
"maintainer_email": "developers@gns3.net",
"usage": "Ethernet0 is the LAN link, Ethernet1 the WAN link. The default username is root and the password is Nethesis,1234",
"qemu": {
"adapter_type": "virtio-net-pci",
"adapters": 2,
"ram": 1024,
"hda_disk_interface": "scsi",
"arch": "x86_64",
"console_type": "telnet",
"kvm": "allow"
},
"images": [
{
"filename": "nethsecurity-8-24.10.0-ns.1.5.1-x86-64-generic-squashfs-combined-efi.img",
"version": "8-24.10.0-ns.1.5.1",
"md5sum": "be670218effca1b86dac6b8d95012791",
"filesize": 331644416,
"download_url": "https://nethsecurity.org/download",
"direct_download_url": "https://updates.nethsecurity.nethserver.org/stable/8-24.10.0-ns.1.5.1/targets/x86/64/nethsecurity-8-24.10.0-ns.1.5.1-x86-64-generic-squashfs-combined-efi.img.gz",
"compression": "gzip"
}
],
"versions": [
{
"name": "8-24.10.0-ns.1.5.1",
"images": {
"hda_disk_image": "nethsecurity-8-24.10.0-ns.1.5.1-x86-64-generic-squashfs-combined-efi.img"
}
}
]
}
+52
View File
@@ -0,0 +1,52 @@
{
"appliance_id": "00714342-14b2-4281-aa20-9043ca8dc26e",
"name": "NixOS",
"category": "guest",
"description": "NixOS QEMU Appliance for images created with nixos-generator. Automatically sets hostname based on vmname.",
"vendor_name": "NixOS",
"vendor_url": "https://nixos.org/",
"vendor_logo_url": "https://avatars.githubusercontent.com/u/487568",
"documentation_url": "https://github.com/ob7/gns3-nixos-appliance",
"product_name": "NixOS",
"product_url": "https://github.com/NixOS/nixpkgs",
"registry_version": 4,
"status": "experimental",
"availability": "free",
"maintainer": "ob7dev",
"maintainer_email": "dev@ob7.us",
"usage": "For custom NixOS images, create qcow2 VM with: nixos-generate -f qcow -c ./server.nix Import it into GNS3 as image. VM name is passed into QEMU guest with Advanced Options field entry: -fw_cfg name=opt/vm_hostname,string=%vm-name%",
"symbol": ":/symbols/affinity/circle/gray/template.svg",
"first_port_name": "eth0",
"port_name_format": "eth{0}",
"qemu": {
"adapter_type": "e1000",
"adapters": 4,
"ram": 256,
"cpus": 1,
"hda_disk_interface": "ide",
"arch": "x86_64",
"console_type": "telnet",
"kvm": "allow",
"options": "-fw_cfg name=opt/vm_hostname,string=%vm-name%",
"on_close": "power_off"
},
"images": [
{
"filename": "nixos-24-11.qcow2",
"version": "24.11",
"md5sum": "2459f05136836dd430402d75cba0f205",
"download_url": "https://github.com/nix-community/nixos-generators",
"filesize": 1749483520,
"download_url": "https://f.ob7.us/gns3/",
"direct_download_url": "http://ob7.us/nixos-24-11.qcow2"
}
],
"versions": [
{
"name": "24.11",
"images": {
"hda_disk_image": "nixos-24-11.qcow2"
}
}
]
}
+31 -1
View File
@@ -23,6 +23,24 @@
"kvm": "allow"
},
"images": [
{
"filename": "openwrt-25.12.0-x86-64-generic-ext4-combined.img",
"version": "25.12.0",
"md5sum": "8c0e01307fc47c1f862a5d0c9a51c2c5",
"filesize": 126353408,
"download_url": "https://downloads.openwrt.org/releases/25.12.0/targets/x86/64/",
"direct_download_url": "https://downloads.openwrt.org/releases/25.12.0/targets/x86/64/openwrt-25.12.0-x86-64-generic-ext4-combined.img.gz",
"compression": "gzip"
},
{
"filename": "openwrt-24.10.2-x86-64-generic-ext4-combined.img",
"version": "24.10.2",
"md5sum": "0769916238524161b0a9a639ae261381",
"filesize": 126353408,
"download_url": "https://downloads.openwrt.org/releases/24.10.2/targets/x86/64/",
"direct_download_url": "https://downloads.openwrt.org/releases/24.10.2/targets/x86/64/openwrt-24.10.2-x86-64-generic-ext4-combined.img.gz",
"compression": "gzip"
},
{
"filename": "openwrt-23.05.0-x86-64-generic-ext4-combined.img",
"version": "23.05.0",
@@ -223,7 +241,19 @@
}
],
"versions": [
{
{
"name": "25.12.0",
"images": {
"hda_disk_image": "openwrt-25.12.0-x86-64-generic-ext4-combined.img"
}
},
{
"name": "24.10.2",
"images": {
"hda_disk_image": "openwrt-24.10.2-x86-64-generic-ext4-combined.img"
}
},
{
"name": "23.05.0",
"images": {
"hda_disk_image": "openwrt-23.05.0-x86-64-generic-ext4-combined.img"
+41
View File
@@ -25,6 +25,29 @@
"kvm": "require"
},
"images": [
{
"filename": "OPNsense-26.1-nano-amd64.img",
"version": "26.1",
"md5sum": "3b774e8fb651a5d00aa6fa3e0d1b1ff0",
"filesize": 3221225472,
"download_url": "https://opnsense.c0urier.net/releases/26.1/",
"direct_download_url": "https://opnsense.c0urier.net/releases/26.1/OPNsense-26.1-nano-amd64.img.bz2",
"compression": "bzip2"
},
{
"filename": "OPNsense-25.7-nano-amd64.img",
"version": "25.7",
"md5sum": "07aa8b44ebc57fa9ca0145f777901a59",
"filesize": 3221225472,
"download_url": "https://opnsense.c0urier.net/releases/25.7/"
},
{
"filename": "OPNsense-25.1-nano-amd64.img",
"version": "25.1",
"md5sum": "9c119e4fed7dd7c1c162d8be4088d983",
"filesize": 3221225472,
"download_url": "https://opnsense.c0urier.net/releases/25.1/"
},
{
"filename": "OPNsense-24.7-nano-amd64.img",
"version": "24.7",
@@ -76,6 +99,24 @@
}
],
"versions": [
{
"name": "26.1",
"images": {
"hda_disk_image": "OPNsense-26.1-nano-amd64.img"
}
},
{
"name": "25.7",
"images": {
"hda_disk_image": "OPNsense-25.7-nano-amd64.img"
}
},
{
"name": "25.1",
"images": {
"hda_disk_image": "OPNsense-25.1-nano-amd64.img"
}
},
{
"name": "24.7",
"images": {
+28 -43
View File
@@ -17,7 +17,7 @@
"qemu": {
"adapter_type": "virtio-net-pci",
"adapters": 1,
"ram": 1024,
"ram": 1536,
"hda_disk_interface": "virtio",
"arch": "x86_64",
"console_type": "telnet",
@@ -27,44 +27,36 @@
},
"images": [
{
"filename": "OL9U2_x86_64-kvm-b197.qcow",
"version": "9.2",
"md5sum": "2ff3d0bc8a243ad89c96215f303f1c73",
"filesize": 560791552,
"filename": "OL10U1_x86_64-kvm-b270.qcow2",
"version": "10.1",
"md5sum": "c3ed48965110e0cbbd75734d3c23a2ce",
"filesize": 1044119552,
"download_url": "https://yum.oracle.com/oracle-linux-templates.html",
"direct_download_url": "https://yum.oracle.com/templates/OracleLinux/OL9/u2/x86_64/OL9U2_x86_64-kvm-b197.qcow"
"direct_download_url": "https://yum.oracle.com/templates/OracleLinux/OL10/u1/x86_64/OL10U1_x86_64-kvm-b270.qcow2"
},
{
"filename": "OL9U1_x86_64-kvm-b158.qcow",
"version": "9.1",
"md5sum": "9f32851b96fc38191892197fa11f7435",
"filesize": 539033600,
"filename": "OL9U7_x86_64-kvm-b269.qcow2",
"version": "9.7",
"md5sum": "fe0c555620d2001bb4d4d95a53b43738",
"filesize": 792985600,
"download_url": "https://yum.oracle.com/oracle-linux-templates.html",
"direct_download_url": "https://yum.oracle.com/templates/OracleLinux/OL9/u1/x86_64/OL9U1_x86_64-kvm-b158.qcow"
"direct_download_url": "https://yum.oracle.com/templates/OracleLinux/OL9/u7/x86_64/OL9U7_x86_64-kvm-b269.qcow2"
},
{
"filename": "OL8U8_x86_64-kvm-b198.qcow",
"version": "8.8",
"md5sum": "717622f373d77349cc102a3a325efbd3",
"filesize": 934215680,
"filename": "OL8U10_x86_64-kvm-b271.qcow2",
"version": "8.10",
"md5sum": "f3184e536af1c2aba6b6f499b1a7085a",
"filesize": 1585643520,
"download_url": "https://yum.oracle.com/oracle-linux-templates.html",
"direct_download_url": "https://yum.oracle.com/templates/OracleLinux/OL8/u8/x86_64/OL8U8_x86_64-kvm-b198.qcow"
"direct_download_url": "https://yum.oracle.com/templates/OracleLinux/OL8/u10/x86_64/OL8U10_x86_64-kvm-b271.qcow2"
},
{
"filename": "OL8U7_x86_64-kvm-b148.qcow",
"version": "8.7",
"md5sum": "962cdde7e810888b9914e937222f687f",
"filesize": 913965056,
"download_url": "https://yum.oracle.com/oracle-linux-templates.html",
"direct_download_url": "https://yum.oracle.com/templates/OracleLinux/OL8/u7/x86_64/OL8U7_x86_64-kvm-b148.qcow"
},
{
"filename": "OL7U9_x86_64-kvm-b145.qcow",
"filename": "OL7U9_x86_64-kvm-b257.qcow2",
"version": "7.9",
"md5sum": "e60d4145a69b34026db6121109ca9131",
"filesize": 725221376,
"md5sum": "d3af7cf0b8f44d298a67ce9ebe184494",
"filesize": 998244352,
"download_url": "https://yum.oracle.com/oracle-linux-templates.html",
"direct_download_url": "https://yum.oracle.com/templates/OracleLinux/OL7/u9/x86_64/OL7U9_x86_64-kvm-b145.qcow"
"direct_download_url": "https://yum.oracle.com/templates/OracleLinux/OL7/u9/x86_64/OL7U9_x86_64-kvm-b257.qcow2"
},
{
"filename": "oracle-cloud-init-data.iso",
@@ -76,38 +68,31 @@
}
],
"versions": [
{
"name": "9.2",
{
"name": "10.1",
"images": {
"hda_disk_image": "OL9U2_x86_64-kvm-b197.qcow",
"hda_disk_image": "OL10U1_x86_64-kvm-b270.qcow2",
"cdrom_image": "oracle-cloud-init-data.iso"
}
},
{
"name": "9.1",
"name": "9.7",
"images": {
"hda_disk_image": "OL9U1_x86_64-kvm-b158.qcow",
"hda_disk_image": "OL9U7_x86_64-kvm-b269.qcow2",
"cdrom_image": "oracle-cloud-init-data.iso"
}
},
{
"name": "8.8",
"name": "8.10",
"images": {
"hda_disk_image": "OL8U8_x86_64-kvm-b198.qcow",
"cdrom_image": "oracle-cloud-init-data.iso"
}
},
{
"name": "8.7",
"images": {
"hda_disk_image": "OL8U7_x86_64-kvm-b148.qcow",
"hda_disk_image": "OL8U10_x86_64-kvm-b271.qcow2",
"cdrom_image": "oracle-cloud-init-data.iso"
}
},
{
"name": "7.9",
"images": {
"hda_disk_image": "OL7U9_x86_64-kvm-b145.qcow",
"hda_disk_image": "OL7U9_x86_64-kvm-b257.qcow2",
"cdrom_image": "oracle-cloud-init-data.iso"
}
}
+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": {
+66 -93
View File
@@ -13,11 +13,11 @@
"availability": "service-contract",
"maintainer": "Da-Geek",
"maintainer_email": "dageek@dageeks-geeks.gg",
"usage": "You should download Red Hat Enterprise Linux KVM Guest Image from https://access.redhat.com/downloads/content/479/ver=/rhel---9/9.3/x86_64/product-software attach/customize rhel-cloud-init.iso and start.\nusername: cloud-user\npassword: redhat",
"usage": "You should download Red Hat Enterprise Linux KVM Guest Image from https://access.redhat.com/downloads/content/rhel attach/customize rhel-cloud-init.iso and start.\nusername: cloud-user\npassword: redhat",
"qemu": {
"adapter_type": "virtio-net-pci",
"adapters": 1,
"ram": 1024,
"ram": 1536,
"hda_disk_interface": "virtio",
"arch": "x86_64",
"console_type": "telnet",
@@ -27,32 +27,46 @@
},
"images": [
{
"filename": "rhel-9.3-x86_64-kvm.qcow2",
"version": "9.3",
"md5sum": "409d8d15f5177db2617b0e3e02139b5c",
"filesize": 858193920,
"download_url": "https://access.redhat.com/downloads/content/479/ver=/rhel---9/9.3/x86_64/product-software"
"filename": "rhel-10.1-x86_64-kvm.qcow2",
"version": "10.1",
"md5sum": "b2f35b1ac0600de31cadf30a622a2fef",
"filesize": 1010827264,
"download_url": "https://access.redhat.com/downloads/content/479/ver=/rhel---10/10.1/x86_64/product-software"
},
{
"filename": "rhel-9.2-x86_64-kvm.qcow2",
"version": "9.2",
"md5sum": "f33845298b387dbcfbf162c6b4e3f8c8",
"filesize": 819265536,
"download_url": "https://access.redhat.com/downloads/content/479/ver=/rhel---8/9.2/x86_64/product-software"
"filename": "rhel-10.0-x86_64-kvm.qcow2",
"version": "10.0",
"md5sum": "ea5918fa116ec53f9ef1ce4be69ae2be",
"filesize": 855506944,
"download_url": "https://access.redhat.com/downloads/content/479/ver=/rhel---10/10.0/x86_64/product-software"
},
{
"filename": "rhel-baseos-9.1-x86_64-kvm.qcow2",
"version": "9.1",
"md5sum": "622de743da83bcec1ad2959ecaedb8f4",
"filesize": 753401856,
"download_url": "https://access.redhat.com/downloads/content/479/ver=/rhel---8/9.1/x86_64/product-software"
"filename": "rhel-9.7-x86_64-kvm.qcow2",
"version": "9.7",
"md5sum": "abc2f42cc5daeea6b03d0d2d478a0d1c",
"filesize": 1229979648,
"download_url": "https://access.redhat.com/downloads/content/479/ver=/rhel---9/9.7/x86_64/product-software"
},
{
"filename": "rhel-baseos-9.0-x86_64-kvm.qcow2",
"version": "9.0",
"md5sum": "4a41497d354fe99a4abf55f1ed73edcb",
"filesize": 696582144,
"download_url": "https://access.redhat.com/downloads/content/479/ver=/rhel---8/9.0/x86_64/product-software"
"filename": "rhel-9.6-x86_64-kvm.qcow2",
"version": "9.6",
"md5sum": "056648d716275053ebe77b1d4f68c862",
"filesize": 1060438016,
"download_url": "https://access.redhat.com/downloads/content/479/ver=/rhel---9/9.6/x86_64/product-software"
},
{
"filename": "rhel-9.4-x86_64-kvm.qcow2",
"version": "9.4",
"md5sum": "77a2ca9a4cb0448260e04f0d2ebf9807",
"filesize": 957218816,
"download_url": "https://access.redhat.com/downloads/content/479/ver=/rhel---9/9.4/x86_64/product-software"
},
{
"filename": "rhel-8.10-x86_64-kvm.qcow2",
"version": "8.10",
"md5sum": "5fda99fcab47e3b235c6ccdb6e80d362",
"filesize": 1065091072,
"download_url": "https://access.redhat.com/downloads/content/479/ver=/rhel---8/8.10/x86_64/product-software"
},
{
"filename": "rhel-8.8-x86_64-kvm.qcow2",
@@ -61,13 +75,6 @@
"filesize": 926810112,
"download_url": "https://access.redhat.com/downloads/content/479/ver=/rhel---8/8.8/x86_64/product-software"
},
{
"filename": "rhel-8.7-x86_64-kvm.qcow2",
"version": "8.7",
"md5sum": "ab71a2c4cc276441bf999f531e064507",
"filesize": 858128384,
"download_url": "https://access.redhat.com/downloads/content/479/ver=/rhel---8/8.7/x86_64/product-software"
},
{
"filename": "rhel-8.6-x86_64-kvm.qcow2",
"version": "8.6",
@@ -76,31 +83,10 @@
"download_url": "https://access.redhat.com/downloads/content/479/ver=/rhel---8/8.6/x86_64/product-software"
},
{
"filename": "rhel-8.5-x86_64-kvm.qcow2",
"version": "8.5",
"md5sum": "1efb78dbb2033ba4ac6589a06c95c2d4",
"filesize": 779419648,
"download_url": "https://access.redhat.com/downloads/content/479/ver=/rhel---8/8.5/x86_64/product-software"
},
{
"filename": "rhel-8.4-x86_64-kvm.qcow2",
"version": "8.4",
"md5sum": "db4c3a72857b784dc6e96120351f2894",
"filesize": 727449600,
"download_url": "https://access.redhat.com/downloads/content/479/ver=/rhel---8/8.4/x86_64/product-software"
},
{
"filename": "rhel-8.3-x86_64-kvm.qcow2",
"version": "8.3",
"md5sum": "dd554c059e0910379fff88f677f4a4b3",
"filesize": 1316683776,
"download_url": "https://access.redhat.com/downloads/content/479/ver=/rhel---8/8.3/x86_64/product-software"
},
{
"filename": "rhel-server-7.9-x86_64-kvm.qcow2",
"filename": "rhel-server-7.9-update-12-x86_64-kvm.qcow2",
"version": "7.9",
"md5sum": "8d6669b3e2bb8df15b9b4280936cf950",
"filesize": 827777024,
"md5sum": "f77fc7e3cf31a210a8244e486466ce34",
"filesize": 838036992,
"download_url": "https://access.redhat.com/downloads/content/69/ver=/rhel---7/7.9/x86_64/product-software"
},
{
@@ -112,38 +98,53 @@
},
{
"filename": "rhel-cloud-init.iso",
"version": "1.0",
"md5sum": "421745b0d13615ecd48696f98d8b6352",
"version": "1.1",
"md5sum": "f1f908d36e67f843dd94db1c2e8c8373",
"filesize": 374784,
"download_url": "https://gitlab.com/neyder/rhel-cloud-init/raw/master/rhel-cloud-init.iso"
"download_url": "https://github.com/GNS3/gns3-registry/tree/master/cloud-init/rhel",
"direct_download_url": "https://github.com/GNS3/gns3-registry/raw/master/cloud-init/rhel/rhel-cloud-init.iso"
}
],
"versions": [
{
"name": "9.3",
"name": "10.1",
"images": {
"hda_disk_image": "rhel-9.3-x86_64-kvm.qcow2",
"hda_disk_image": "rhel-10.1-x86_64-kvm.qcow2",
"cdrom_image": "rhel-cloud-init.iso"
}
},
{
"name": "9.2",
"name": "10.0",
"images": {
"hda_disk_image": "rhel-9.2-x86_64-kvm.qcow2",
"hda_disk_image": "rhel-10.0-x86_64-kvm.qcow2",
"cdrom_image": "rhel-cloud-init.iso"
}
},
{
"name": "9.1",
"name": "9.7",
"images": {
"hda_disk_image": "rhel-baseos-9.1-x86_64-kvm.qcow2",
"hda_disk_image": "rhel-9.7-x86_64-kvm.qcow2",
"cdrom_image": "rhel-cloud-init.iso"
}
},
{
"name": "9.0",
"name": "9.6",
"images": {
"hda_disk_image": "rhel-baseos-9.0-x86_64-kvm.qcow2",
"hda_disk_image": "rhel-9.6-x86_64-kvm.qcow2",
"cdrom_image": "rhel-cloud-init.iso"
}
},
{
"name": "9.4",
"images": {
"hda_disk_image": "rhel-9.4-x86_64-kvm.qcow2",
"cdrom_image": "rhel-cloud-init.iso"
}
},
{
"name": "8.10",
"images": {
"hda_disk_image": "rhel-8.10-x86_64-kvm.qcow2",
"cdrom_image": "rhel-cloud-init.iso"
}
},
@@ -154,13 +155,6 @@
"cdrom_image": "rhel-cloud-init.iso"
}
},
{
"name": "8.7",
"images": {
"hda_disk_image": "rhel-8.7-x86_64-kvm.qcow2",
"cdrom_image": "rhel-cloud-init.iso"
}
},
{
"name": "8.6",
"images": {
@@ -168,31 +162,10 @@
"cdrom_image": "rhel-cloud-init.iso"
}
},
{
"name": "8.5",
"images": {
"hda_disk_image": "rhel-8.5-x86_64-kvm.qcow2",
"cdrom_image": "rhel-cloud-init.iso"
}
},
{
"name": "8.4",
"images": {
"hda_disk_image": "rhel-8.4-x86_64-kvm.qcow2",
"cdrom_image": "rhel-cloud-init.iso"
}
},
{
"name": "8.3",
"images": {
"hda_disk_image": "rhel-8.3-x86_64-kvm.qcow2",
"cdrom_image": "rhel-cloud-init.iso"
}
},
{
"name": "7.9",
"images": {
"hda_disk_image": "rhel-server-7.9-x86_64-kvm.qcow2",
"hda_disk_image": "rhel-server-7.9-update-12-x86_64-kvm.qcow2",
"cdrom_image": "rhel-cloud-init.iso"
}
},
+46 -1
View File
@@ -17,7 +17,7 @@
"qemu": {
"adapter_type": "virtio-net-pci",
"adapters": 1,
"ram": 1024,
"ram": 1536,
"hda_disk_interface": "virtio",
"arch": "x86_64",
"console_type": "telnet",
@@ -26,6 +26,30 @@
"options": "-nographic -cpu host"
},
"images": [
{
"filename": "Rocky-10-GenericCloud-Base-10.1-20251116.0.x86_64.qcow2",
"version": "10.1",
"md5sum": "729d7235716bd41a0a15e07d2b44c679",
"filesize": 575406080,
"download_url": "https://download.rockylinux.org/pub/rocky/9/images/x86_64/",
"direct_download_url": "https://download.rockylinux.org/pub/rocky/10/images/x86_64/Rocky-10-GenericCloud-Base-10.1-20251116.0.x86_64.qcow2"
},
{
"filename": "Rocky-9-GenericCloud-Base-9.7-20251123.2.x86_64.qcow2",
"version": "9.7",
"md5sum": "4a0cbfb45b97f09b690044429aaca1c8",
"filesize": 648806400,
"download_url": "https://download.rockylinux.org/pub/rocky/9/images/x86_64/",
"direct_download_url": "https://download.rockylinux.org/pub/rocky/9/images/x86_64/Rocky-9-GenericCloud-Base-9.7-20251123.2.x86_64.qcow2"
},
{
"filename": "Rocky-9-GenericCloud-Base-9.5-20241118.0.x86_64.qcow2",
"version": "9.5",
"md5sum": "880eccf788301bb9f34669faebe09276",
"filesize": 609812480,
"download_url": "https://download.rockylinux.org/pub/rocky/9/images/x86_64/",
"direct_download_url": "https://download.rockylinux.org/pub/rocky/9/images/x86_64/Rocky-9-GenericCloud-Base-9.5-20241118.0.x86_64.qcow2"
},
{
"filename": "Rocky-9-GenericCloud-Base-9.3-20231113.0.x86_64.qcow2",
"version": "9.3",
@@ -68,6 +92,27 @@
}
],
"versions": [
{
"name": "10.1",
"images": {
"hda_disk_image": "Rocky-10-GenericCloud-Base-10.1-20251116.0.x86_64.qcow2",
"cdrom_image": "rocky-cloud-init-data.iso"
}
},
{
"name": "9.7",
"images": {
"hda_disk_image": "Rocky-9-GenericCloud-Base-9.7-20251123.2.x86_64.qcow2",
"cdrom_image": "rocky-cloud-init-data.iso"
}
},
{
"name": "9.5",
"images": {
"hda_disk_image": "Rocky-9-GenericCloud-Base-9.5-20241118.0.x86_64.qcow2",
"cdrom_image": "rocky-cloud-init-data.iso"
}
},
{
"name": "9.3",
"images": {
@@ -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"
}
]
}
+15 -1
View File
@@ -2,7 +2,7 @@
"appliance_id": "ed6b9f98-7de2-4d61-a3ed-ad4c3e323ace",
"name": "Tiny Core Linux",
"category": "guest",
"description": "Core Linux is a smaller variant of Tiny Core without a graphical desktop.\n\nIt provides a complete Linux system using only a few MiB.",
"description": "TinyCore is a Linux system with a graphical desktop using only a few MiB.",
"vendor_name": "Team Tiny Core",
"vendor_url": "http://distro.ibiblio.org/tinycorelinux",
"documentation_url": "http://wiki.tinycorelinux.net/",
@@ -25,6 +25,14 @@
"options": "-vga std -usbdevice tablet"
},
"images": [
{
"filename": "linux-tinycore-17.0.qcow2",
"version": "17.0",
"md5sum": "6434d4da25dd0277cc90b000bb4ac8f1",
"filesize": 35061760,
"download_url": "https://sourceforge.net/projects/gns-3/files/Qemu%20Appliances/",
"direct_download_url": "http://downloads.sourceforge.net/project/gns-3/Qemu%20Appliances/linux-tinycore-17.0.qcow2"
},
{
"filename": "linux-tinycore-11.1.qcow2",
"version": "11.1",
@@ -51,6 +59,12 @@
}
],
"versions": [
{
"name": "17.0",
"images": {
"hda_disk_image": "linux-tinycore-17.0.qcow2"
}
},
{
"name": "11.1",
"images": {
@@ -10,8 +10,8 @@
"product_url": "http://www.cisco.com/",
"registry_version": 4,
"status": "experimental",
"maintainer": "Laurent LEVIER",
"maintainer_email": "laurent.levier@orange.com",
"maintainer": "Christopher Uhrig",
"maintainer_email": "christopher.uhrig@telekom.de",
"usage": "Initial username is admin, password is admin as well.",
"first_port_name": "Management0/0",
"port_name_format": "Ge0/{0}",
@@ -39,6 +39,20 @@
"md5sum": "4aa487101d4cdc390f53a6e8b6f45ca7",
"filesize": 328400896,
"download_url": "http://www.cisco.com/"
},
{
"filename": "viptela-edge-20.9.5.1-genericx86-64.qcow2",
"version": "20.9.5.1",
"md5sum": "41d9e981908fd83695de78d6ca5794bd",
"filesize": 409468928,
"download_url": "https://software.cisco.com/download/home/286320995/type/286321047/release/20.9.5.1"
},
{
"filename": "viptela-edge-20.12.4-genericx86-64.qcow2",
"version": "20.12.4",
"md5sum": "9f1aedada5e632c7bc29a51c004f4486",
"filesize": 411762688,
"download_url": "https://software.cisco.com/download/home/286320995/type/286321047/release/20.12.4"
}
],
"versions": [
@@ -53,6 +67,18 @@
"images": {
"hda_disk_image": "viptela-edge-genericx86-64.qcow2"
}
},
{
"name": "20.9.5.1",
"images": {
"hda_disk_image": "viptela-edge-20.9.5.1-genericx86-64.qcow2"
}
},
{
"name": "20.12.4",
"images": {
"hda_disk_image": "viptela-edge-20.12.4-genericx86-64.qcow2"
}
}
]
}
@@ -24,6 +24,20 @@
"options": "-smp 2,maxcpus=2 -cpu host"
},
"images": [
{
"filename": "viptela-smart-20.12.4-genericx86-64.qcow2",
"version": "20.12.4",
"md5sum": "0e7b6468498a89195ab815260bc4cfb6",
"filesize": 411762688,
"download_url": "https://software.cisco.com/download/home/286320995/type/286321043/release/20.12.4"
},
{
"filename": "viptela-smart-20.9.5.1-genericx86-64.qcow2",
"version": "20.9.5.1",
"md5sum": "08e105778bb68f8f24f323dfd263a91a",
"filesize": 409468928,
"download_url": "https://software.cisco.com/download/home/286320995/type/286321043/release/20.9.5.1"
},
{
"filename": "viptela-smart-19.2.0-genericx86-64.qcow2",
"version": "19.2.0",
@@ -31,7 +45,7 @@
"filesize": 328400896,
"download_url": "http://www.cisco.com/"
},
{
{
"filename": "viptela-smart-genericx86-64-disk1.vmdk",
"version": "18.3.7",
"md5sum": "ab9b06c212319336810a4b336ec3dd96",
@@ -51,6 +65,18 @@
"images": {
"hda_disk_image": "viptela-smart-19.2.0-genericx86-64.qcow2"
}
},
{
"name": "20.9.5.1",
"images": {
"hda_disk_image": "viptela-smart-20.9.5.1-genericx86-64.qcow2"
}
},
{
"name": "20.12.4",
"images": {
"hda_disk_image": "viptela-smart-20.12.4-genericx86-64.qcow2"
}
}
]
}
@@ -10,8 +10,8 @@
"product_url": "http://www.cisco.com/",
"registry_version": 4,
"status": "experimental",
"maintainer": "Laurent LEVIER",
"maintainer_email": "laurent.levier@orange.com",
"maintainer": "Christopher Uhrig",
"maintainer_email": "christopher.uhrig@telekom.de",
"usage": "Initial username is admin, password is admin as well.",
"qemu": {
"adapter_type": "vmxnet3",
@@ -25,14 +25,28 @@
"options": "-cpu host -smp 2,maxcpus=2"
},
"images": [
{
{
"filename": "viptela-vmanage-20.12.4-genericx86-64.qcow2",
"version": "20.12.4",
"md5sum": "4e0d4c379623c495a0bb671a76a12f9f",
"filesize": 4951375872,
"download_url": "https://software.cisco.com/download/home/286320995/type/286321039/release/20.12.4"
},
{
"filename": "viptela-vmanage-20.9.5.2-genericx86-64.qcow2",
"version": "20.9.5.2",
"md5sum": "a8a4ebee0274541200f4fe94a739d454",
"filesize": 3133865984,
"download_url": "https://software.cisco.com/download/home/286320995/type/286321039/release/20.9.5.2"
},
{
"filename": "viptela-vmanage-19.2.0-genericx86-64.qcow2",
"version": "19.2.0",
"md5sum": "27ef126f178c6c929a36ad2cf6ed8db7",
"filesize": 1185349632,
"download_url": "http://www.cisco.com/"
},
{
{
"filename": "viptela-vmanage-genericx86-64-disk1.vmdk",
"version": "18.3.7",
"md5sum": "2290c6467c907d9ca9c65793fe898716",
@@ -55,6 +69,20 @@
"hda_disk_image": "viptela-vmanage-19.2.0-genericx86-64.qcow2",
"hdb_disk_image": "empty30G.qcow2"
}
},
{
"name": "20.12.4",
"images": {
"hda_disk_image": "viptela-vmanage-20.12.4-genericx86-64.qcow2",
"hdb_disk_image": "empty30G.qcow2"
}
},
{
"name": "20.9.5.2",
"images": {
"hda_disk_image": "viptela-vmanage-20.9.5.2-genericx86-64.qcow2",
"hdb_disk_image": "empty30G.qcow2"
}
},
{
"name": "18.3.7",
+102 -16
View File
@@ -9,27 +9,82 @@
"documentation_url": "https://docs.vyos.io/",
"product_name": "VyOS Universal Router",
"product_url": "https://vyos.io/vyos-universal-router",
"registry_version": 4,
"registry_version": 8,
"status": "stable",
"availability": "service-contract",
"maintainer": "VyOS Inc.",
"maintainer_email": "support@vyos.io",
"usage": "\nDefault credentials:\nUser: vyos\nPassword: vyos",
"installation_instructions": "To install the appliance, you must:\n\n1. Have an active VyOS subscription (for details, visit https://vyos.io/).\n2. Download the QEMU/KVM image for your target version from the support portal: https://support.vyos.io/.\n3. Import the downloaded image for installation in the next step.\n\nAlternatively, you can:\n- Build your own image, or\n- Use any compatible qcow2 images (including rolling or stream releases) by selecting \"Create a new version\" and enabling the \"Allow custom files\" feature.",
"usage": "No extra installation steps are required - simply boot the router.\nFor more details, please refer to the documentation: https://docs.vyos.io/",
"default_username": "vyos",
"default_password": "vyos",
"symbol": "vyos.svg",
"port_name_format": "eth{0}",
"qemu": {
"adapter_type": "virtio-net-pci",
"adapters": 10,
"ram": 2048,
"cpus": 4,
"hda_disk_interface": "virtio",
"arch": "x86_64",
"console_type": "telnet",
"boot_priority": "c",
"kvm": "require",
"on_close": "shutdown_signal"
},
"settings": [
{
"name": "default x86_64",
"default": true,
"template_type": "qemu",
"template_properties": {
"adapter_type": "virtio-net-pci",
"adapters": 10,
"port_name_format": "eth{0}",
"ram": 2048,
"cpus": 4,
"hda_disk_interface": "virtio",
"platform": "x86_64",
"console_type": "telnet",
"boot_priority": "c",
"options": "-cpu host",
"uefi": false,
"on_close": "shutdown_signal"
}
},
{
"name": "1.5 x86_64",
"inherit_default_properties": true,
"template_type": "qemu",
"template_properties": {
"ram": 8192,
"cpus": 4
}
}
],
"images": [
{
"filename": "vyos-1.5.0-kvm-amd64.qcow2",
"version": "1.5.0",
"md5sum": "f84587bd6c45b139563a1d1d2fe0b2e8",
"filesize": 618528768,
"download_url": "https://support.vyos.io/"
},
{
"filename": "vyos-1.4.4-kvm-amd64.qcow2",
"version": "1.4.4",
"md5sum": "942dae45d63924b58b65d069890765d4",
"filesize": 518782976,
"download_url": "https://support.vyos.io/"
},
{
"filename": "vyos-1.4.3-kvm-amd64.qcow2",
"version": "1.4.3",
"md5sum": "4eec0ba2ec367bbbdf2d2f212f947746",
"filesize": 515047424,
"download_url": "https://support.vyos.io/"
},
{
"filename": "vyos-1.4.2-kvm-amd64.qcow2",
"version": "1.4.2",
"md5sum": "78c5935e05a7bbd94a639fcee18f5799",
"filesize": 514064384,
"download_url": "https://support.vyos.io/"
},
{
"filename": "vyos-1.4.1-kvm-amd64.qcow2",
"version": "1.4.1",
"md5sum": "5b8ebcd9905719d24405ed093afdd8ba",
"filesize": 513736704,
"download_url": "https://support.vyos.io/"
},
{
"filename": "vyos-1.4.0-kvm-amd64.qcow2",
"version": "1.4.0",
@@ -104,11 +159,42 @@
"filename": "vyos-1.2.5-amd64.qcow2",
"version": "1.2.5",
"md5sum": "110c22309ec480600446fd2fb4f27a0d",
"filesize": 411500544 ,
"filesize": 411500544,
"download_url": "https://support.vyos.io/"
}
],
"versions": [
{
"name": "1.5.0",
"settings": "1.5 x86_64",
"images": {
"hda_disk_image": "vyos-1.5.0-kvm-amd64.qcow2"
}
},
{
"name": "1.4.4",
"images": {
"hda_disk_image": "vyos-1.4.4-kvm-amd64.qcow2"
}
},
{
"name": "1.4.3",
"images": {
"hda_disk_image": "vyos-1.4.3-kvm-amd64.qcow2"
}
},
{
"name": "1.4.2",
"images": {
"hda_disk_image": "vyos-1.4.2-kvm-amd64.qcow2"
}
},
{
"name": "1.4.1",
"images": {
"hda_disk_image": "vyos-1.4.1-kvm-amd64.qcow2"
}
},
{
"name": "1.4.0",
"images": {
+72
View File
@@ -0,0 +1,72 @@
{
"appliance_id": "90afc191-6195-4ff2-905b-5470573a882b",
"name": "Westermo WeOS",
"category": "router",
"description": "Westermo Operating System (WeOS) is a leading-edge industrial network operating system that is being continuously developed whilst being subjected to exhaustive quality testing. It powers the most reliable switches and routers on the market, designed for harsh industrial environments. WeOS has extensive support for network and security protocols that have been made simple to configure and maintain. WeOS along with Westermo’s robust hardware provides the world’s most reliable network solutions.",
"vendor_name": "Westermo",
"vendor_url": "https://www.westermo.com/",
"vendor_logo_url": "https://api-0831ddf0-b06c-4a4e-bcf7-afba78872de1.digizuite.app/DigizuiteCore/CollaborationService/api/share/asset/4C90E538E869D47D2782840A06F726F6D7548D864857388E38218F",
"documentation_url": "https://docs.westermo.com/weos/weos-5/",
"product_name": "WeOS",
"product_url": "https://www.westermo.com/products/software/weos",
"registry_version": 4,
"status": "stable",
"availability": "free",
"maintainer": "Westermo",
"maintainer_email": "info@westermo.com",
"usage": "\nFactory Configuration\n=====================\nAll ports are in VLAN1 untagged. The system will acquire a link-local\nIPv4 address (169.254.0.0/16) and will also request an address using\nDHCP. mDNS is enabled and the device is reachable under these names\n(where XX-XX-XX corresponds to the last three octets in the device's\nMAC address): zero-XX-XX-XX.local, zero.local, and weos.local.\n\nManagement\n==========\nAccessible via console, ssh, and http/https.\n\nUsername: admin\nPassword: admin\n\nUpgrade\n=======\nTo upgrade a device, simply download the new version and replace the\nHDA (Primary Master) image under the HDD tab in the configuration pane\nof the device.\n",
"symbol": ":/symbols/classic/router.svg",
"port_name_format": "eth{0}",
"linked_clone": true,
"qemu": {
"adapter_type": "virtio-net-pci",
"adapters": 8,
"ram": 512,
"cpus": 1,
"hda_disk_interface": "virtio",
"hdb_disk_interface": "virtio",
"arch": "x86_64",
"console_type": "telnet",
"kvm": "allow",
"options": "-nographic --machine pc-i440fx-4.2"
},
"images": [
{
"filename": "Config-zero-1.0.0.disk",
"version": "1.0.0",
"md5sum": "afe7b74683971fec48802997f6470ca5",
"filesize": 17825792,
"direct_download_url": "https://dropzone.westermo.com/file.aspx?id=e6a7676d-85a7-4374-8961-c68aacb74921"
},
{
"filename": "WeOS-zero-5.28.0.disk",
"version": "5.28.0",
"md5sum": "7b4e29761091c12ec2cd482f7c1a0bea",
"filesize": 75497472,
"direct_download_url": "https://dropzone.westermo.com/file.aspx?id=4926adbe-0cd6-4851-b70f-e9d60b3b3f06"
},
{
"filename": "WeOS-zero-5.27.0.disk",
"version": "5.27.0",
"md5sum": "8bd4944b60eaeca391bb5d1dc0defb8b",
"filesize": 78643200,
"direct_download_url": "https://dropzone.westermo.com/file.aspx?id=1a7bf389-a4b1-4dae-b121-6fb3d6781542"
}
],
"versions": [
{
"name": "5.28.0",
"images": {
"hda_disk_image": "WeOS-zero-5.28.0.disk",
"hdb_disk_image": "Config-zero-1.0.0.disk"
}
},
{
"name": "5.27.0",
"images": {
"hda_disk_image": "WeOS-zero-5.27.0.disk",
"hdb_disk_image": "Config-zero-1.0.0.disk"
}
}
]
}
+7 -22
View File
@@ -30,19 +30,11 @@
},
"images": [
{
"filename": "WinDev2308Eval-disk1.vmdk",
"version": "2308",
"md5sum": "6a9b4ed6d7481f7bbf8a054c797b1eee",
"filesize": 24945341952,
"download_url": "https://download.microsoft.com/download/7/1/3/7135f2ab-8528-49fc-9252-8d5d94c697ef/WinDev2308Eval.VMWare.zip",
"compression": "zip"
},
{
"filename": "WinDev2212Eval-disk1.vmdk",
"version": "2212",
"md5sum": "c79f393a067b92e01a513a118d455ac8",
"filesize": 24620493824,
"download_url": "https://aka.ms/windev_VM_vmware",
"filename": "WinDev2407Eval-disk1.vmdk",
"version": "2407",
"md5sum": "66e7233c7922ef128c5b7c957d20bcbe",
"filesize": 25984826368,
"download_url": "https://download.microsoft.com/download/e/e/c/eec4775f-f2e8-4476-98b2-ca51502a6429/WinDev2407Eval.VMWare.zip",
"compression": "zip"
},
{
@@ -57,17 +49,10 @@
],
"versions": [
{
"name": "2308",
"name": "2407",
"images": {
"bios_image": "OVMF-edk2-stable202305.fd",
"hda_disk_image": "WinDev2308Eval-disk1.vmdk"
}
},
{
"name": "2212",
"images": {
"bios_image": "OVMF-edk2-stable202305.fd",
"hda_disk_image": "WinDev2212Eval-disk1.vmdk"
"hda_disk_image": "WinDev2407Eval-disk1.vmdk"
}
}
]
+9 -8
View File
@@ -312,8 +312,10 @@ class BaseNode:
Stop the node process.
"""
await self.stop_wrap_console()
self.status = "stopped"
try:
await self.stop_wrap_console()
finally:
self.status = "stopped"
def suspend(self):
"""
@@ -406,13 +408,11 @@ class BaseNode:
Stops the telnet proxy.
"""
if self._wrapper_telnet_server:
if self._wrap_console_writer:
self._wrap_console_writer.close()
if sys.version_info >= (3, 7, 0):
try:
await self._wrap_console_writer.wait_closed()
except ConnectionResetError:
pass
await self._wrap_console_writer.wait_closed()
self._wrap_console_writer = None
if self._wrapper_telnet_server:
self._wrapper_telnet_server.close()
await self._wrapper_telnet_server.wait_closed()
self._wrapper_telnet_server = None
@@ -662,6 +662,7 @@ class BaseNode:
path = shutil.which(path)
return path
@locking
async def _ubridge_send(self, command):
"""
Sends a command to uBridge hypervisor.
+35 -27
View File
@@ -39,9 +39,9 @@ log = logging.getLogger(__name__)
# Be careful to keep it consistent
DOCKER_MINIMUM_API_VERSION = "1.25"
DOCKER_MINIMUM_VERSION = "1.13"
DOCKER_PREFERRED_API_VERSION = "1.30"
DOCKER_MINIMUM_API_VERSION = "1.40"
DOCKER_MINIMUM_VERSION = "19.03.8"
DOCKER_PREFERRED_API_VERSION = "1.44"
CHUNK_SIZE = 1024 * 8 # 8KB
@@ -79,8 +79,10 @@ class Docker(BaseManager):
stderr=asyncio.subprocess.DEVNULL
)
stdout, _ = await proc.communicate()
if proc.returncode == 1:
if proc.returncode == 1 or "static" in busybox_exec:
# ldd returns 1 if the file is not a dynamic executable
# on Alpine/musl, ldd returns 0 even for static binaries,
# so also trust binaries named busybox-static or busybox.static
log.info(f"Installing busybox from '{busybox_path}' to '{dst_busybox}'")
shutil.copy2(busybox_path, dst_busybox, follow_symlinks=True)
return
@@ -123,22 +125,30 @@ class Docker(BaseManager):
if not self._connected:
try:
self._connected = True
connector = self.connector()
version = await self.query("GET", "version")
self._connector = self.connector()
docker_info = await self.query("GET", "version")
except (aiohttp.ClientOSError, FileNotFoundError):
self._connected = False
raise DockerError("Can't connect to docker daemon")
raise DockerError("Can't connect to Docker daemon")
docker_version = parse_version(version['ApiVersion'])
api_version = parse_version(docker_info['ApiVersion'])
version = docker_info["Version"]
if docker_version < parse_version(DOCKER_MINIMUM_API_VERSION):
raise DockerError(
"Docker version is {}. GNS3 requires a minimum version of {}".format(
version["Version"], DOCKER_MINIMUM_VERSION))
if api_version < parse_version(DOCKER_MINIMUM_API_VERSION):
raise DockerError("Docker version is {}. GNS3 requires a minimum version of {}".format(
version,
DOCKER_MINIMUM_VERSION)
)
preferred_api_version = parse_version(DOCKER_PREFERRED_API_VERSION)
if docker_version >= preferred_api_version:
if api_version >= preferred_api_version:
self._api_version = DOCKER_PREFERRED_API_VERSION
else:
# use the Min API version supported by the daemon
self._api_version = docker_info['MinAPIVersion']
log.warning("Using Docker client with the minimum API version {}".format(self._api_version))
log.info("Connected to Docker daemon version {} using API version {}".format(version, self._api_version))
def connector(self):
@@ -173,11 +183,10 @@ class Docker(BaseManager):
response = await self.http_query(method, path, data=data, params=params)
body = await response.read()
response.close()
if body and len(body):
if response.headers.get('CONTENT-TYPE') == 'application/json':
body = json.loads(body.decode("utf-8"))
else:
body = body.decode("utf-8")
if response.headers.get('CONTENT-TYPE') == 'application/json':
body = json.loads(body.decode("utf-8", errors="ignore"))
else:
body = body.decode("utf-8", errors="ignore")
log.debug("Query Docker %s %s params=%s data=%s Response: %s", method, path, params, data, body)
return body
@@ -187,7 +196,7 @@ class Docker(BaseManager):
:param method: HTTP method
:param path: Endpoint in API
:param data: Dictionnary with the body. Will be transformed to a JSON
:param data: Dictionary with the body. Will be transformed to a JSON
:param params: Parameters added as a query arg
:param timeout: Timeout
:returns: HTTP response
@@ -198,12 +207,11 @@ class Docker(BaseManager):
timeout = 60 * 60 * 24 * 31 # One month timeout
if path == 'version':
url = "http://docker/v1.24/" + path
url = "http://docker/" + path
else:
url = "http://docker/v" + DOCKER_MINIMUM_API_VERSION + "/" + path
await self._check_connection() # version is use by check connection
url = "http://docker/v" + self._api_version + "/" + path
try:
if path != "version": # version is use by check connection
await self._check_connection()
if self._session is None or self._session.closed:
connector = self.connector()
self._session = aiohttp.ClientSession(connector=connector)
@@ -261,21 +269,21 @@ class Docker(BaseManager):
pass
if progress_callback:
progress_callback("Pulling '{}' from docker hub".format(image))
progress_callback("Pulling '{}' from Docker repository".format(image))
try:
response = await self.http_query("POST", "images/create", params={"fromImage": image}, timeout=None)
except DockerError as e:
raise DockerError("Could not pull the '{}' image from Docker Hub, please check your Internet connection (original error: {})".format(image, e))
raise DockerError("Could not pull the '{}' image from Docker repository, please check your Internet connection (original error: {})".format(image, e))
# The pull api will stream status via an HTTP JSON stream
content = ""
while True:
try:
chunk = await response.content.read(CHUNK_SIZE)
except aiohttp.ServerDisconnectedError:
log.error("Disconnected from server while pulling Docker image '{}' from docker hub".format(image))
log.error("Disconnected from server while pulling Docker image '{}' from Docker repository".format(image))
break
except asyncio.TimeoutError:
log.error("Timeout while pulling Docker image '{}' from docker hub".format(image))
log.error("Timeout while pulling Docker image '{}' from Docker repository".format(image))
break
if not chunk:
break
+17 -4
View File
@@ -153,6 +153,14 @@ class DockerVM(BaseNode):
def ethernet_adapters(self):
return self._ethernet_adapters
@property
def docker_name(self):
"""
Container name in Docker
"""
return "GNS3.{}.{}".format(self.name, self._project.id)
@property
def mac_address(self):
"""
@@ -365,7 +373,7 @@ class DockerVM(BaseNode):
try:
image_infos = await self._get_image_information()
except DockerHttp404Error:
log.info("Image '{}' is missing, pulling it from Docker hub...".format(self._image))
log.info("Image '{}' is missing, pulling it from Docker repository...".format(self._image))
await self.pull_image(self._image)
image_infos = await self._get_image_information()
@@ -383,8 +391,8 @@ class DockerVM(BaseNode):
"CapAdd": ["ALL"],
"Privileged": True,
"Binds": self._mount_binds(image_infos),
"UsernsMode": "host",
},
"UsernsMode": "host",
"Volumes": {},
"Env": ["container=docker"], # Systemd compliant: https://github.com/GNS3/gns3-server/issues/573
"Cmd": [],
@@ -451,7 +459,8 @@ class DockerVM(BaseNode):
if extra_hosts:
params["Env"].append("GNS3_EXTRA_HOSTS={}".format(extra_hosts))
result = await self.manager.query("POST", "containers/create", data=params)
# Support name in Doker: [a-zA-Z0-9][a-zA-Z0-9_.-]
result = await self.manager.query("POST", "containers/create?name={}".format(self.docker_name), data=params)
self._cid = result['Id']
log.info("Docker container '{name}' [{id}] created".format(name=self._name, id=self._id))
return True
@@ -522,6 +531,7 @@ class DockerVM(BaseNode):
await self._clean_servers()
await self.manager.query("POST", "containers/{}/start".format(self._cid))
await asyncio.sleep(0.5) # give the Docker container some time to start
self._namespace = await self._get_namespace()
await self._start_ubridge(require_privileged_access=True)
@@ -710,7 +720,10 @@ class DockerVM(BaseNode):
"""
# resize the container TTY.
await self._manager.query("POST", "containers/{}/resize?h={}&w={}".format(self._cid, rows, columns))
try:
await self._manager.query("POST", "containers/{}/resize?h={}&w={}".format(self._cid, rows, columns))
except DockerError as e:
log.warning(f"Could not resize the container TTY: {e}")
async def _start_console(self):
"""
@@ -3,7 +3,12 @@
# script for udhcpc
# Copyright (c) 2008 Natanael Copa <natanael.copa@gmail.com>
UDHCPC="/gns3/etc/udhcpc"
if [ -d /etc/network ]; then
UDHCPC="/etc/network/udhcpc"
else
UDHCPC="/gns3/etc/udhcpc"
fi
UDHCPC_CONF="$UDHCPC/udhcpc.conf"
RESOLV_CONF="/etc/resolv.conf"
+1 -1
View File
@@ -25,7 +25,7 @@ PATH=/gns3/bin:/tmp/gns3/bin:/sbin:$PATH
# bootstrap busybox commands
if [ ! -d /tmp/gns3/bin ]; then
busybox mkdir -p /tmp/gns3/bin
for applet in `busybox --list-full`
for applet in `busybox --list`
do
ln -s /gns3/bin/busybox "/tmp/gns3/bin/$applet"
done
+26 -16
View File
@@ -87,11 +87,11 @@ class IOUVM(BaseNode):
self._serial_adapters = []
self.ethernet_adapters = 2 # one adapter = 4 interfaces
self.serial_adapters = 2 # one adapter = 4 interfaces
self._use_default_iou_values = True # for RAM & NVRAM values
self._nvram = 128 # Kilobytes
self._use_default_iou_values = False # for RAM & NVRAM values
self._nvram = 256 # Kilobytes
self._startup_config = ""
self._private_config = ""
self._ram = 256 # Megabytes
self._ram = 1024 # Megabytes
self._application_id = application_id
self._l1_keepalives = False # used to overcome the always-up Ethernet interfaces (not supported by all IOSes).
@@ -390,14 +390,16 @@ class IOUVM(BaseNode):
raise IOUError("The following shared library dependencies cannot be found for IOU image {}: {}".format(self._path,
", ".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
if self.license_check is False:
return
return False
try:
# we allow license check to be disabled server wide
@@ -407,7 +409,14 @@ class IOUVM(BaseNode):
if server_wide_license_check is False:
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()
try:
@@ -511,15 +520,16 @@ class IOUVM(BaseNode):
except OSError as e:
raise IOUError("Could not rename nvram files: {}".format(e))
iourc_path = self.iourc_path
if not 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))
iourc_path = None
if self._is_iou_license_check_enabled():
iourc_path = self.iourc_path
if not 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()
self._create_netmap_config()
if self.use_default_iou_values:
# 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)
# created a environment variable pointing to the iourc file.
# created an environment variable pointing to the iourc file.
env = os.environ.copy()
if "IOURC" not in os.environ and iourc_path:
env["IOURC"] = iourc_path
@@ -568,7 +578,7 @@ class IOUVM(BaseNode):
callback = functools.partial(self._termination_callback, "IOU")
gns3server.utils.asyncio.monitor_process(self._iou_process, callback)
except FileNotFoundError as e:
raise IOUError("Could not start IOU: {}: 32-bit binary support is probably not installed".format(e))
raise IOUError("Could not start IOU: {}: 32-bit binary support is probably not installed, it is recommended to use a 64-bit image instead".format(e))
except (OSError, subprocess.SubprocessError) as e:
iou_stdout = self.read_iou_stdout()
log.error("Could not start IOU {}: {}\n{}".format(self._path, e, iou_stdout))
+78 -17
View File
@@ -33,6 +33,7 @@ import gns3server
import subprocess
import time
import json
import psutil
from gns3server.utils import parse_version, shlex_quote
from gns3server.utils.asyncio import subprocess_check_output, cancellable_wait_run_in_executor
@@ -224,7 +225,7 @@ class QemuVM(BaseNode):
if qemu_bin == "qemu":
self._platform = "i386"
else:
self._platform = re.sub(r'^qemu-system-(\w+).*$', r'\1', qemu_bin, re.IGNORECASE)
self._platform = re.sub(r'^qemu-system-(\w+).*$', r'\1', qemu_bin, flags=re.IGNORECASE)
if self._platform.split(".")[0] not in QEMU_PLATFORMS:
raise QemuError("Platform {} is unknown".format(self._platform))
log.info('QEMU VM "{name}" [{id}] has set the QEMU path to {qemu_path}'.format(name=self._name,
@@ -1166,6 +1167,21 @@ class QemuVM(BaseNode):
except OSError as e:
raise QemuError("Could not start Telnet QEMU console {}\n".format(e))
def _find_partition_for_path(self, path):
"""
Finds the disk partition for a given path.
"""
path = os.path.abspath(path)
partitions = psutil.disk_partitions()
# find the partition with the longest matching mount point
matching_partition = None
for partition in partitions:
if path.startswith(partition.mountpoint):
if matching_partition is None or len(partition.mountpoint) > len(matching_partition.mountpoint):
matching_partition = partition
return matching_partition
async def _termination_callback(self, returncode):
"""
Called when the process has stopped.
@@ -1178,7 +1194,17 @@ class QemuVM(BaseNode):
await self.stop()
# A return code of 1 seem fine on Windows
if returncode != 0 and (not sys.platform.startswith("win") or returncode != 1):
self.project.emit("log.error", {"message": "QEMU process has stopped, return code: {}\n{}".format(returncode, self.read_stdout())})
qemu_stdout = self.read_stdout()
# additional permissions need to be configured for swtpm in AppArmor if the working dir
# is located on a different partition than the partition for the root directory
if "TPM result for CMD_INIT" in qemu_stdout:
partition = self._find_partition_for_path(self.project.path)
if partition and partition.mountpoint != "/":
qemu_stdout += "\nTPM error: the project directory is not on the same partition as the root directory which can be a problem when using AppArmor.\n" \
"Please try to execute the following commands on the server:\n\n" \
"echo 'owner {}/** rwk,' | sudo tee /etc/apparmor.d/local/usr.bin.swtpm > /dev/null\n" \
"sudo service apparmor restart".format(os.path.dirname(self.project.path))
self.project.emit("log.error", {"message": "QEMU process has stopped, return code: {}\n{}".format(returncode, qemu_stdout)})
async def stop(self):
"""
@@ -1915,11 +1941,6 @@ class QemuVM(BaseNode):
continue
interface = getattr(self, "hd{}_disk_interface".format(drive))
# fail-safe: use "ide" if there is a disk image and no interface type has been explicitly configured
if interface == "none":
interface = "ide"
setattr(self, "hd{}_disk_interface".format(drive), interface)
disk_name = "hd" + drive
if not os.path.isfile(disk_image) or not os.path.exists(disk_image):
if os.path.islink(disk_image):
@@ -2034,19 +2055,42 @@ class QemuVM(BaseNode):
else:
raise QemuError("bios image '{}' is not accessible".format(self._bios_image))
options.extend(["-bios", self._bios_image.replace(",", ",,")])
elif self._uefi:
# get the OVMF firmware from the images directory
ovmf_firmware_path = self.manager.get_abs_image_path("OVMF_CODE.fd")
old_ovmf_vars_path = os.path.join(self.working_dir, "OVMF_VARS.fd")
if os.path.exists(old_ovmf_vars_path):
# the node has its own UEFI variables store already, we must also use the old UEFI firmware
ovmf_firmware_path = self.manager.get_abs_image_path("OVMF_CODE.fd")
else:
system_ovmf_firmware_path = "/usr/share/OVMF/OVMF_CODE_4M.fd"
if os.path.exists(system_ovmf_firmware_path):
ovmf_firmware_path = system_ovmf_firmware_path
else:
# otherwise, get the UEFI firmware from the images directory
ovmf_firmware_path = self.manager.get_abs_image_path("OVMF_CODE_4M.fd")
log.info("Configuring UEFI boot mode using OVMF file: '{}'".format(ovmf_firmware_path))
options.extend(["-drive", "if=pflash,format=raw,readonly,file={}".format(ovmf_firmware_path)])
# try to use the UEFI variables store from the system first
system_ovmf_vars_path = "/usr/share/OVMF/OVMF_VARS_4M.fd"
if os.path.exists(system_ovmf_vars_path):
ovmf_vars_path = system_ovmf_vars_path
else:
# otherwise, get the UEFI variables store from the images directory
ovmf_vars_path = self.manager.get_abs_image_path("OVMF_VARS_4M.fd")
# the node should have its own copy of OVMF_VARS.fd (the UEFI variables store)
ovmf_vars_node_path = os.path.join(self.working_dir, "OVMF_VARS.fd")
if not os.path.exists(ovmf_vars_node_path):
try:
shutil.copyfile(self.manager.get_abs_image_path("OVMF_VARS.fd"), ovmf_vars_node_path)
except OSError as e:
raise QemuError("Cannot copy OVMF_VARS.fd file to the node working directory: {}".format(e))
if os.path.exists(old_ovmf_vars_path):
ovmf_vars_node_path = old_ovmf_vars_path
else:
ovmf_vars_node_path = os.path.join(self.working_dir, "OVMF_VARS_4M.fd")
if not os.path.exists(ovmf_vars_node_path):
try:
shutil.copyfile(ovmf_vars_path, ovmf_vars_node_path)
except OSError as e:
raise QemuError("Cannot copy OVMF_VARS_4M.fd file to the node working directory: {}".format(e))
options.extend(["-drive", "if=pflash,format=raw,file={}".format(ovmf_vars_node_path)])
return options
@@ -2146,14 +2190,31 @@ class QemuVM(BaseNode):
patched_qemu = True
# Each 32 PCI device we need to add a PCI bridge with max 9 bridges
pci_devices = 4 + len(self._ethernet_adapters) # 4 PCI devices are use by default by qemu
# Count PCI devices: 4 default + disks (virtio/sata/nvme/scsi) + network adapters
pci_disk_devices = 0
for drive in ["a", "b", "c", "d"]:
# config disk replaces hdd when enabled
if drive == "d" and self._create_config_disk:
continue
if getattr(self, "_hd{}_disk_image".format(drive)):
interface = getattr(self, "_hd{}_disk_interface".format(drive))
# virtio, sata, nvme, and scsi each consume 1 PCI slot; ide and none don't
if interface not in ("none", "ide"):
pci_disk_devices += 1
# config disk (replaces hdd) also consumes a PCI slot if created
if self._create_config_disk and self.config_disk_image:
interface = self.hdd_disk_interface if self.hdd_disk_interface != "none" else self.hda_disk_interface
if interface not in ("none", "ide"):
pci_disk_devices += 1
pci_devices = 4 + pci_disk_devices + len(self._ethernet_adapters)
pci_bridges = math.floor(pci_devices / 32)
pci_bridges_created = 0
if pci_bridges >= 1:
if self._qemu_version and parse_version(self._qemu_version) < parse_version("2.4.0"):
raise QemuError("Qemu version 2.4 or later is required to run this VM with a large number of network adapters")
pci_device_id = 4 + pci_bridges # Bridge consume PCI ports
pci_device_id = 4 + pci_bridges + pci_disk_devices # Bridges and disks consume PCI ports
for adapter_number, adapter in enumerate(self._ethernet_adapters):
mac = int_to_macaddress(macaddress_to_int(self._mac_address) + adapter_number)
+37 -20
View File
@@ -218,28 +218,45 @@ class VirtualBoxVM(BaseNode):
"""
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")
if machine is not None and machine.get("uuid") != "{" + self.id + "}":
linked_vbox_file = self._linked_vbox_file()
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"):
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")
image.set("uuid", newSnapshot)
try:
tree = ET.parse(linked_vbox_file)
except ET.ParseError:
raise VirtualBoxError("Cannot modify VirtualBox linked node file. "
"File {} is corrupted.".format(linked_vbox_file))
except OSError as e:
raise VirtualBoxError("Cannot modify VirtualBox linked node file '{}': {}".format(linked_vbox_file, e))
machine.set("uuid", "{" + self.id + "}")
tree.write(self._linked_vbox_file())
machine = tree.getroot().find("{http://www.virtualbox.org/}Machine")
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):
"""
@@ -458,7 +475,7 @@ class VirtualBoxVM(BaseNode):
async def save_linked_hdds_info(self):
"""
Save linked cloned hard disks information.
Save linked cloned hard disk information.
:returns: disk table information
"""
@@ -13,8 +13,7 @@ logging console discriminator EXCESS
!
no ip icmp rate-limit unreachable
!
! due to some bugs with IOU, try to change the following line to 'ip cef' if your routing does not work
no ip cef
ip cef
no ip domain lookup
!
!
@@ -12,8 +12,7 @@ no ip icmp rate-limit unreachable
!
!
!
! due to some bugs with IOU, try to change the following line to 'ip cef' if your routing does not work
no ip cef
ip cef
no ip domain lookup
!
!
+15 -6
View File
@@ -29,7 +29,7 @@ except ImportError:
from importlib import resources as importlib_resources
from ..config import Config
from ..utils import parse_version
from ..utils import parse_version, md5sum
from ..utils.images import default_images_directory
from .project import Project
@@ -217,7 +217,7 @@ class Controller:
try:
os.makedirs(os.path.dirname(self._config_file), exist_ok=True)
with open(self._config_file, 'w+') as f:
json.dump(controller_settings, f, indent=4)
json.dump(controller_settings, f, indent=4, sort_keys=True)
except OSError as e:
log.error("Cannot write controller configuration file '{}': {}".format(self._config_file, e))
@@ -289,12 +289,21 @@ class Controller:
except OSError as e:
log.error(str(e))
@staticmethod
def install_resource_files(dst_path, resource_name):
def install_resource_files(dst_path, resource_name, upgrade_resources=True):
"""
Install files from resources to user's file system
"""
def should_copy(src, dst, upgrade_resources):
if not os.path.exists(dst):
return True
if upgrade_resources is False:
return False
# copy the resource if it is different
return md5sum(src) != md5sum(dst)
if hasattr(sys, "frozen") and sys.platform.startswith("win"):
resource_path = os.path.normpath(os.path.join(os.path.dirname(sys.executable), resource_name))
for filename in os.listdir(resource_path):
@@ -303,7 +312,7 @@ class Controller:
else:
for entry in importlib_resources.files('gns3server').joinpath(resource_name).iterdir():
full_path = os.path.join(dst_path, entry.name)
if entry.is_file() and not os.path.exists(full_path):
if entry.is_file() and should_copy(str(entry), full_path, upgrade_resources):
log.debug(f'Installing {resource_name} resource file "{entry.name}" to "{full_path}"')
shutil.copy(str(entry), os.path.join(dst_path, entry.name))
elif entry.is_dir():
@@ -319,7 +328,7 @@ class Controller:
dst_path = self.configs_path()
log.info(f"Installing base configs in '{dst_path}'")
try:
Controller.install_resource_files(dst_path, "configs")
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}")
@@ -332,7 +341,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")
Controller.install_resource_files(dst_path, "disks", upgrade_resources=False)
except OSError as e:
log.error(f"Could not install disk files to {dst_path}: {e}")
+2 -4
View File
@@ -82,7 +82,7 @@ class ApplianceManager:
os.makedirs(appliances_path, exist_ok=True)
return appliances_path
def builtin_appliances_path(self, delete_first=False):
def builtin_appliances_path(self):
"""
Get the built-in appliance storage directory
"""
@@ -91,8 +91,6 @@ class ApplianceManager:
appname = vendor = "GNS3"
resources_path = os.path.expanduser(server_config.get("resources_path", platformdirs.user_data_dir(appname, vendor, roaming=True)))
appliances_dir = os.path.join(resources_path, "appliances")
if delete_first:
shutil.rmtree(appliances_dir, ignore_errors=True)
os.makedirs(appliances_dir, exist_ok=True)
return appliances_dir
@@ -101,7 +99,7 @@ class ApplianceManager:
At startup we copy the built-in appliances files.
"""
dst_path = self.builtin_appliances_path(delete_first=True)
dst_path = self.builtin_appliances_path()
log.info(f"Installing built-in appliances in '{dst_path}'")
from . import Controller
try:
+8 -3
View File
@@ -18,14 +18,19 @@
import ipaddress
import aiohttp
import asyncio
import async_timeout
import socket
import json
import uuid
import sys
import io
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.asyncio import locking
from ..controller.controller_error import ControllerError
@@ -483,8 +488,8 @@ 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 with async_timeout.timeout(delay=timeout):
async def _run_http_query(self, method, path, data=None, timeout=120, raw=False):
async with asynctimeout(delay=timeout):
url = self._getUrl(path)
headers = {}
headers['content-type'] = 'application/json'
+37 -6
View File
@@ -32,7 +32,16 @@ log = logging.getLogger(__name__)
CHUNK_SIZE = 1024 * 8 # 8KB
async def export_project(zstream, project, temporary_dir, include_images=False, include_snapshots=False, keep_compute_ids=False, allow_all_nodes=False, reset_mac_addresses=False):
async def export_project(
zstream,
project,
temporary_dir,
include_images=False,
include_snapshots=False,
keep_compute_ids=False,
allow_all_nodes=False,
reset_mac_addresses=False
):
"""
Export a project to a zip file.
@@ -46,7 +55,7 @@ async def export_project(zstream, project, temporary_dir, include_images=False,
:param include_snapshots: save snapshots to the zip file
:param keep_compute_ids: If false replace all compute IDs y local (standard behavior for .gns3project to make it portable)
:param allow_all_nodes: Allow all nodes type to be included in the zip even if not portable
:param reset_mac_addresses: Reset MAC addresses for each node.
:param reset_mac_addresses: Reset MAC addresses for each node
"""
# To avoid issue with data not saved we disallow the export of a running project
@@ -62,7 +71,16 @@ async def export_project(zstream, project, temporary_dir, include_images=False,
# First we process the .gns3 in order to be sure we don't have an error
for file in os.listdir(project._path):
if file.endswith(".gns3"):
await _patch_project_file(project, os.path.join(project._path, file), zstream, include_images, keep_compute_ids, allow_all_nodes, temporary_dir, reset_mac_addresses)
await _patch_project_file(
project,
os.path.join(project._path, file),
zstream,
include_images,
keep_compute_ids,
allow_all_nodes,
temporary_dir,
reset_mac_addresses
)
# Export the local files
for root, dirs, files in os.walk(project._path, topdown=True, followlinks=False):
@@ -87,6 +105,10 @@ async def export_project(zstream, project, temporary_dir, include_images=False,
# save empty directories
for directory in dirs:
path = os.path.join(root, directory)
if path == temporary_dir:
continue
if include_snapshots is False and path.endswith("snapshots"):
continue
if not os.listdir(path):
zstream.write(path, os.path.relpath(path, project._path))
except FileNotFoundError as e:
@@ -142,7 +164,7 @@ def _is_exportable(path, include_snapshots=False):
"""
# do not export snapshots by default
if include_snapshots is False and path.endswith("snapshots"):
if include_snapshots is False and os.path.dirname(path).endswith("snapshots"):
return False
# do not export directories of snapshots
@@ -167,7 +189,16 @@ def _is_exportable(path, include_snapshots=False):
return True
async def _patch_project_file(project, path, zstream, include_images, keep_compute_ids, allow_all_nodes, temporary_dir, reset_mac_addresses):
async def _patch_project_file(
project,
path,
zstream,
include_images,
keep_compute_ids,
allow_all_nodes,
temporary_dir,
reset_mac_addresses
):
"""
Patch a project file (.gns3) to export a project.
The .gns3 file is renamed to project.gns3
@@ -240,7 +271,7 @@ async def _patch_project_file(project, path, zstream, include_images, keep_compu
for compute_id, image_type, image in remote_images:
await _export_remote_images(project, compute_id, image_type, image, zstream, temporary_dir)
zstream.writestr("project.gns3", json.dumps(topology).encode())
zstream.writestr("project.gns3", json.dumps(topology, indent=4, sort_keys=True).encode())
return images
@@ -247,6 +247,7 @@ class VirtualBoxGNS3VM(BaseGNS3VM):
return True
return False
async def list(self):
"""
List all VirtualBox VMs
@@ -267,8 +268,8 @@ class VirtualBoxGNS3VM(BaseGNS3VM):
# get a NAT interface number
nat_interface_number = await self._look_for_interface("nat")
if nat_interface_number < 0:
raise GNS3VMError('VM "{}" must have a NAT interface configured in order to start'.format(self.vmname))
if nat_interface_number < 0 and await self._look_for_interface("natnetwork") < 0:
raise GNS3VMError('VM "{}" must have a NAT or NAT Network interface configured in order to start'.format(self.vmname))
if sys.platform.startswith("darwin") and parse_version(self._system_properties["API version"]) >= parse_version("7_0"):
# VirtualBox 7.0+ on macOS requires a host-only network interface
@@ -337,39 +338,68 @@ class VirtualBoxGNS3VM(BaseGNS3VM):
elif vm_state == "paused":
args = [self._vmname, "resume"]
await self._execute("controlvm", args)
ip_address = "127.0.0.1"
try:
# get a random port on localhost
with socket.socket() as s:
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind((ip_address, 0))
api_port = s.getsockname()[1]
except OSError as e:
raise GNS3VMError("Error while getting random port: {}".format(e))
if await self._check_vbox_port_forwarding():
# delete the GNS3VM NAT port forwarding rule if it exists
log.info("Removing GNS3VM NAT port forwarding rule from interface {}".format(nat_interface_number))
await self._execute("controlvm", [self._vmname, "natpf{}".format(nat_interface_number), "delete", "GNS3VM"])
log.info("Retrieving IP address from GNS3 VM...")
ip = await self._get_ip_from_guest_property()
if ip:
self.ip_address = ip
else:
# if we can't get the IP address from the guest property, we try to get it from the GNS3 server (a NAT interface is required)
if nat_interface_number < 0:
raise GNS3VMError("Could not find guest IP address for {}".format(self.vmname))
log.warning("Could not find IP address from guest property, trying to get it from GNS3 server")
ip_address = "127.0.0.1"
try:
# get a random port on localhost
with socket.socket() as s:
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind((ip_address, 0))
api_port = s.getsockname()[1]
except OSError as e:
raise GNS3VMError("Error while getting random port: {}".format(e))
# add a GNS3VM NAT port forwarding rule to redirect 127.0.0.1 with random port to the port in the VM
log.info("Adding GNS3VM NAT port forwarding rule with port {} to interface {}".format(api_port, nat_interface_number))
await self._execute("controlvm", [self._vmname, "natpf{}".format(nat_interface_number),
"GNS3VM,tcp,{},{},,{}".format(ip_address, api_port, self.port)])
if await self._check_vbox_port_forwarding():
# delete the GNS3VM NAT port forwarding rule if it exists
log.info("Removing GNS3VM NAT port forwarding rule from interface {}".format(nat_interface_number))
await self._execute("controlvm", [self._vmname, "natpf{}".format(nat_interface_number), "delete", "GNS3VM"])
self.ip_address = await self._get_ip(interface_number, api_port)
log.info("GNS3 VM has been started with IP {}".format(self.ip_address))
# add a GNS3VM NAT port forwarding rule to redirect 127.0.0.1 with random port to the port in the VM
log.info("Adding GNS3VM NAT port forwarding rule with port {} to interface {}".format(api_port, nat_interface_number))
await self._execute("controlvm", [self._vmname, "natpf{}".format(nat_interface_number),
"GNS3VM,tcp,{},{},,{}".format(ip_address, api_port, self.port)])
self.ip_address = await self._get_ip_from_server(interface_number, api_port)
log.info("GNS3 VM has been started with IP '{}'".format(self.ip_address))
self.running = True
async def _get_ip(self, hostonly_interface_number, api_port):
async def _get_ip_from_guest_property(self):
"""
Get the IP from VirtualBox.
Get the IP from VirtualBox by retrieving the guest property (Guest Additions must be installed).
"""
remaining_try = 180 # try for 3 minutes
while remaining_try > 0:
result = await self._execute("guestproperty", ["get", self._vmname, "/VirtualBox/GuestInfo/Net/0/V4/IP"])
for info in result.splitlines():
if ':' in info:
name, value = info.split(':', 1)
if name == "Value":
return value.strip()
remaining_try -= 1
await asyncio.sleep(1)
return None
async def _get_ip_from_server(self, hostonly_interface_number, api_port):
"""
Get the IP from VirtualBox by sending a request to the GNS3 server.
Due to VirtualBox limitation the only way is to send request each
second to a GNS3 endpoint in order to get the list of the interfaces and
their IP and after that match it with VirtualBox host only.
"""
remaining_try = 300
remaining_try = 180 # try for 3 minutes
while remaining_try > 0:
async with aiohttp.ClientSession() as session:
try:
+67 -40
View File
@@ -39,8 +39,18 @@ Handle the import of project from a .gns3project
"""
async def import_project(controller, project_id, stream, location=None, name=None, keep_compute_ids=False,
auto_start=False, auto_open=False, auto_close=True):
async def import_project(
controller,
project_id,
stream,
location=None,
name=None,
reset_mac_addresses=False,
keep_compute_ids=False,
auto_start=False,
auto_open=False,
auto_close=True,
):
"""
Import a project contain in a zip file
@@ -51,7 +61,9 @@ async def import_project(controller, project_id, stream, location=None, name=Non
:param stream: A io.BytesIO of the zipfile
:param location: Directory for the project if None put in the default directory
:param name: Wanted project name, generate one from the .gns3 if None
:param reset_mac_addresses: Reset MAC addresses for each node
:param keep_compute_ids: keep compute IDs unchanged
:param project_name: Original project name when restoring a snapshot
:returns: Project
"""
@@ -72,12 +84,14 @@ async def import_project(controller, project_id, stream, location=None, name=Non
# We import the project on top of an existing project (snapshots)
if topology["project_id"] == project_id:
project_name = topology["name"]
restoring_snapshot = True
else:
# If the project name is already used we generate a new one
if name:
project_name = controller.get_free_project_name(name)
else:
project_name = controller.get_free_project_name(topology["name"])
restoring_snapshot = False
except (ValueError, KeyError):
raise aiohttp.web.HTTPConflict(text="Cannot import project, the project.gns3 file is corrupted")
@@ -105,27 +119,11 @@ async def import_project(controller, project_id, stream, location=None, name=Non
topology["auto_open"] = auto_open
topology["auto_close"] = auto_close
# Generate a new node id
node_old_to_new = {}
for node in topology["topology"]["nodes"]:
if "node_id" in node:
node_old_to_new[node["node_id"]] = str(uuid.uuid4())
_move_node_file(path, node["node_id"], node_old_to_new[node["node_id"]])
node["node_id"] = node_old_to_new[node["node_id"]]
else:
node["node_id"] = str(uuid.uuid4())
if not restoring_snapshot:
# Do not re-generate IDs if we are restoring a snapshot because they should be the same in a project
regenerate_topology_ids(topology, path, reset_mac_addresses=reset_mac_addresses)
# Update link to use new id
for link in topology["topology"]["links"]:
link["link_id"] = str(uuid.uuid4())
for node in link["nodes"]:
node["node_id"] = node_old_to_new[node["node_id"]]
# Generate new drawings id
for drawing in topology["topology"]["drawings"]:
drawing["drawing_id"] = str(uuid.uuid4())
# Modify the compute id of the node depending of compute capacity
# Modify the compute id of the node depending on compute capacity
if not keep_compute_ids:
# For some VM type we move them to the GNS3 VM if possible
# unless it's a linux host without GNS3 VM
@@ -135,14 +133,6 @@ async def import_project(controller, project_id, stream, location=None, name=Non
node["compute_id"] = "vm"
else:
# Round-robin through available compute resources.
# computes = []
# for compute_id in controller.computes:
# compute = controller.get_compute(compute_id)
# # only use the local compute or any connected compute
# if compute_id == "local" or compute.connected:
# computes.append(compute_id)
# else:
# log.warning(compute.name, "is not connected!")
compute_nodes = itertools.cycle(controller.computes)
for node in topology["topology"]["nodes"]:
node["compute_id"] = next(compute_nodes)
@@ -162,7 +152,7 @@ async def import_project(controller, project_id, stream, location=None, name=Non
# We change the project_id to avoid erasing the project
topology["project_id"] = project_id
with open(dot_gns3_path, "w+") as f:
json.dump(topology, f, indent=4)
json.dump(topology, f, indent=4, sort_keys=True)
os.remove(os.path.join(path, "project.gns3"))
images_path = os.path.join(path, "images")
@@ -170,8 +160,8 @@ async def import_project(controller, project_id, stream, location=None, name=Non
await _import_images(controller, images_path)
snapshots_path = os.path.join(path, "snapshots")
if os.path.exists(snapshots_path):
await _import_snapshots(snapshots_path, project_name, project_id)
if not restoring_snapshot and os.path.exists(snapshots_path):
await update_snapshots(snapshots_path, path, project_name, project_id, reset_mac_addresses=reset_mac_addresses)
project = await controller.load_project(dot_gns3_path, load=False)
return project
@@ -195,6 +185,41 @@ def _create_symbolic_links(zip_file, path):
except OSError as e:
raise aiohttp.web.HTTPConflict(text=f"Cannot create symbolic link: {e}")
def regenerate_topology_ids(topology, new_project_path, reset_mac_addresses=False):
"""
Regenerate IDs in the topology and move the files of the nodes to match the new IDs.
This is necessary because IDs must be unique across projects.
:param topology: topology content
:param new_project_path: new project path
:param reset_mac_addresses: reset MAC addresses
"""
# Generate new node IDs
node_old_to_new = {}
for node in topology["topology"]["nodes"]:
new_node_id = str(uuid.uuid4())
if "node_id" in node:
node_old_to_new[node["node_id"]] = new_node_id
_move_node_file(new_project_path, node["node_id"], new_node_id)
node["node_id"] = new_node_id
if reset_mac_addresses:
if "properties" in node:
for prop, value in node["properties"].items():
# reset the MAC address
if prop in ("mac_addr", "mac_address"):
node["properties"][prop] = None
# Generate new link IDs
for link in topology["topology"]["links"]:
link["link_id"] = str(uuid.uuid4())
for node in link["nodes"]:
node["node_id"] = node_old_to_new[node["node_id"]]
# Generate new drawings IDs
for drawing in topology["topology"]["drawings"]:
drawing["drawing_id"] = str(uuid.uuid4())
def _move_node_file(path, old_id, new_id):
"""
Move a file from a node when changing its id
@@ -261,16 +286,17 @@ async def _import_images(controller, images_path):
await wait_run_in_executor(shutil.move, path, dst)
async def _import_snapshots(snapshots_path, project_name, project_id):
async def update_snapshots(snapshots_dir, project_path, project_name, project_id, reset_mac_addresses=True):
"""
Import the snapshots and update their project name and ID to be the same as the main project.
Load the snapshots and update their project name and project ID to be the same as the main project.
Regenerate all the node, link and drawing IDs
"""
for snapshot in os.listdir(snapshots_path):
if not snapshot.endswith(".gns3project"):
for snapshot in os.listdir(snapshots_dir):
if not (snapshot.endswith(".gns3snapshot") or snapshot.endswith(".gns3project")):
continue
snapshot_path = os.path.join(snapshots_path, snapshot)
with tempfile.TemporaryDirectory(dir=snapshots_path) as tmpdir:
snapshot_path = os.path.join(snapshots_dir, snapshot)
with tempfile.TemporaryDirectory(dir=snapshots_dir) as tmpdir:
# extract everything to a temporary directory
try:
@@ -288,9 +314,9 @@ async def _import_snapshots(snapshots_path, project_name, project_id):
topology_file_path = os.path.join(tmpdir, "project.gns3")
with open(topology_file_path, encoding="utf-8") as f:
topology = json.load(f)
topology["name"] = project_name
topology["project_id"] = project_id
regenerate_topology_ids(topology, tmpdir, reset_mac_addresses)
with open(topology_file_path, "w+", encoding="utf-8") as f:
json.dump(topology, f, indent=4, sort_keys=True)
except OSError as e:
@@ -308,5 +334,6 @@ async def _import_snapshots(snapshots_path, project_name, project_id):
async with aiofiles.open(snapshot_path, 'wb+') as f:
async for chunk in zstream:
await f.write(chunk)
log.info("Project '{}': updated and repacked snapshot file '{}'".format(project_name, snapshot))
except OSError as e:
raise aiohttp.web.HTTPConflict(text="Cannot update snapshot '{}': the snapshot cannot be recreated: {}".format(os.path.basename(snapshot), e))
+2 -1
View File
@@ -91,7 +91,7 @@ class Node:
self._first_port_name = None
self._console_auto_start = False
# This properties will be recompute
# This properties will be recomputed
ignore_properties = ("width", "height", "hover_symbol")
self.properties = kwargs.pop('properties', {})
@@ -382,6 +382,7 @@ class Node:
await self.parse_node_response(response.json)
return True
trial += 1
return False
async def update(self, **kwargs):
"""
+2 -2
View File
@@ -84,9 +84,9 @@ class Port:
# If port name format has changed we use the port name as the short name (1.X behavior)
if self._short_name:
return self._short_name
elif '/' in self._name:
elif self._name and '/' in self._name:
return self._name.replace(self.long_name_type(), self.short_name_type())
elif self._name.startswith("{}{}".format(self.long_name_type(), self._interface_number)):
elif self._name and self._name.startswith("{}{}".format(self.long_name_type(), self._interface_number)):
return self.short_name_type() + "{}".format(self._interface_number)
return self._name
+145 -92
View File
@@ -15,7 +15,6 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
import sys
import re
import os
import json
@@ -46,7 +45,7 @@ from ..utils.asyncio import locking
from ..utils.asyncio import aiozipstream
from ..utils.asyncio import wait_run_in_executor
from .export_project import export_project
from .import_project import import_project, _move_node_file
from .import_project import import_project, update_snapshots, regenerate_topology_ids
import logging
log = logging.getLogger(__name__)
@@ -96,6 +95,7 @@ class Project:
self._show_interface_labels = show_interface_labels
self._variables = variables
self._supplier = supplier
self._snapshots_config_file = "snapshots.conf"
self._loading = False
self._closing = False
@@ -189,19 +189,7 @@ class Project:
self._drawings = {}
self._snapshots = {}
self._computes = []
# List the available snapshots
snapshot_dir = os.path.join(self.path, "snapshots")
if os.path.exists(snapshot_dir):
for snap in os.listdir(snapshot_dir):
if snap.endswith(".gns3project"):
try:
snapshot = Snapshot(self, filename=snap)
except ValueError:
log.error("Invalid snapshot file: {}".format(snap))
continue
self._snapshots[snapshot.id] = snapshot
self._load_snapshot_config()
# Create the project on demand on the compute node
self._project_created_on_compute = set()
@@ -588,7 +576,7 @@ class Project:
if node_type == "iou":
async with self._iou_id_lock:
# wait for a IOU node to be completely created before adding a new one
# wait for an IOU node to be completely created before adding a new one
# this is important otherwise we allocate the same application ID (used
# to generate MAC addresses) when creating multiple IOU node at the same time
if "properties" in kwargs.keys():
@@ -782,6 +770,60 @@ class Project:
except KeyError:
raise aiohttp.web.HTTPNotFound(text="Snapshot ID {} doesn't exist".format(snapshot_id))
def _load_snapshot_config(self):
snapshot_dir = os.path.join(self.path, "snapshots")
self._snapshot_conf_path = os.path.join(snapshot_dir, self._snapshots_config_file)
self._snapshot_conf = []
if os.path.isfile(self._snapshot_conf_path):
try:
with open(self._snapshot_conf_path, encoding="utf-8") as f:
self._snapshot_conf = json.load(f)
except (OSError, UnicodeDecodeError, ValueError):
log.exception("Could not read snapshot config %s", self._snapshot_conf_path)
raise aiohttp.web.HTTPConflict(text="Could not read snapshot configuration file")
# Load all legacy snapshots (.gns3project files) to create an initial snapshot config if it doesn't exist
if os.path.exists(snapshot_dir) and not self._snapshot_conf:
for snap in os.listdir(snapshot_dir):
if snap.endswith(".gns3project"):
try:
snapshot = Snapshot(self, filename=snap)
except ValueError:
log.error("Invalid snapshot file: {}".format(snap))
continue
self._snapshots[snapshot.id] = snapshot
else:
# Create the Snapshot instances from the snapshot config file
for snapshot_entry in self._snapshot_conf:
try:
path = os.path.join(snapshot_dir, snapshot_entry["filename"])
if not os.path.isfile(path):
log.warning("Snapshot file '{}' does not exist".format(path))
continue
snapshot_entry.pop("project_id")
snapshot = Snapshot(self, **snapshot_entry)
self._snapshots[snapshot.id] = snapshot
except KeyError:
log.error("Invalid entry in snapshot config file: {}".format(snapshot_entry))
continue
self._save_snapshot_config()
def _save_snapshot_config(self):
if not self._snapshots:
return
self._snapshot_conf = []
for snapshot in self._snapshots.values():
self._snapshot_conf.append(snapshot.__json__())
try:
with open(self._snapshot_conf_path, 'w+') as f:
json.dump(self._snapshot_conf, f, indent=4)
except OSError as e:
log.error("Cannot write snapshot config '{}': {}".format(self._snapshot_conf_path, e))
@open_required
async def snapshot(self, name):
"""
@@ -795,12 +837,14 @@ class Project:
snapshot = Snapshot(self, name=name)
await snapshot.create()
self._snapshots[snapshot.id] = snapshot
self._save_snapshot_config()
return snapshot
@open_required
async def delete_snapshot(self, snapshot_id):
snapshot = self.get_snapshot(snapshot_id)
del self._snapshots[snapshot.id]
self._save_snapshot_config()
os.remove(snapshot.path)
@locking
@@ -891,7 +935,7 @@ class Project:
def _get_default_project_directory(cls):
"""
Return the default location for the project directory
depending of the operating system
depending on the operating system
"""
server_config = Config.instance().get_section_config("Server")
@@ -912,7 +956,7 @@ class Project:
Load topology elements
"""
if self._closing is True:
if self._closing:
raise aiohttp.web.HTTPConflict(text="Project is closing, please try again in a few seconds...")
if self._status == "opened":
@@ -1083,7 +1127,14 @@ class Project:
with tempfile.TemporaryDirectory(dir=working_dir) as tmpdir:
# Do not compress the exported project when duplicating
with aiozipstream.ZipFile(compression=zipfile.ZIP_STORED) as zstream:
await export_project(zstream, self, tmpdir, keep_compute_ids=True, allow_all_nodes=True, reset_mac_addresses=reset_mac_addresses)
await export_project(
zstream,
self,
tmpdir,
keep_compute_ids=True,
include_snapshots=True,
allow_all_nodes=True
)
# export the project to a temporary location
project_path = os.path.join(tmpdir, "project.gns3p")
@@ -1092,11 +1143,20 @@ class Project:
async for chunk in zstream:
await f.write(chunk)
# import the temporary project
new_project_id = str(uuid.uuid4())
# import the duplicated project
with open(project_path, "rb") as f:
project = await import_project(self._controller, str(uuid.uuid4()), f, location=location, name=name, keep_compute_ids=True)
project = await import_project(
self._controller,
new_project_id,
f,
location=location,
name=name,
reset_mac_addresses=reset_mac_addresses,
keep_compute_ids=True
)
log.info("Project '{}' duplicated in {:.4f} seconds".format(project.name, time.time() - begin))
log.info("Project '{}': duplicated in {:.4f} seconds".format(project.name, time.time() - begin))
except (ValueError, OSError, UnicodeEncodeError) as e:
raise aiohttp.web.HTTPConflict(text="Cannot duplicate project: {}".format(str(e)))
@@ -1105,6 +1165,62 @@ class Project:
return project
async def _fast_duplication(self, name=None, location=None, reset_mac_addresses=True):
"""
Fast duplication of a project.
Copy the project files directly rather than in an import-export fashion.
:param name: Name of the new project. A new one will be generated in case of conflicts
:param location: Parent directory of the new project
:param reset_mac_addresses: Reset MAC addresses for the duplicated project
"""
# remote replication is not supported with remote computes
for compute in self.computes:
if compute.id != "local":
log.warning("Fast duplication is not supported with remote compute: '{}'".format(compute.id))
return None
# work dir
p_work = pathlib.Path(location or self.path).parent.absolute()
t0 = time.time()
new_project_id = str(uuid.uuid4())
if location:
new_project_path = p_work.joinpath(location)
else:
new_project_path = p_work.joinpath(new_project_id)
# copy dir
await wait_run_in_executor(shutil.copytree, self.path, new_project_path.as_posix(), symlinks=True, ignore_dangling_symlinks=True)
log.info("Project content copied from '{}' to '{}' in {}s".format(self.path, new_project_path, time.time() - t0))
topology = json.loads(new_project_path.joinpath('{}.gns3'.format(self.name)).read_bytes())
project_name = name or topology["name"]
# If the project name is already used we generate a new one
project_name = self.controller.get_free_project_name(project_name)
topology["name"] = project_name
# To avoid unexpected behavior (project start without manual operations just after import)
topology["auto_start"] = False
topology["auto_open"] = False
topology["auto_close"] = False
# regenerate IDs for the duplicated project
regenerate_topology_ids(topology, new_project_path, reset_mac_addresses)
# dump the updated .gns3 project file
dot_gns3_path = new_project_path.joinpath('{}.gns3'.format(project_name))
topology["project_id"] = new_project_id
with open(dot_gns3_path, "w+") as f:
json.dump(topology, f, indent=4, sort_keys=True)
# update the snapshots with new IDs
snapshots_dir = os.path.join(new_project_path, "snapshots")
if os.path.isdir(snapshots_dir):
await update_snapshots(snapshots_dir, new_project_path, project_name, new_project_id)
os.remove(new_project_path.joinpath('{}.gns3'.format(self.name)))
project = await self.controller.load_project(dot_gns3_path, load=False)
log.info("Project '{}': fast duplicated in {:.4f} seconds".format(project.name, time.time() - t0))
return project
def is_running(self):
"""
If a node is started or paused return True
@@ -1203,11 +1319,13 @@ class Project:
data['z'] = z
data['locked'] = False # duplicated node must not be locked
new_node_uuid = str(uuid.uuid4())
new_node = await self.add_node(node.compute,
node.name,
new_node_uuid,
node_type=node_type,
**data)
new_node = await self.add_node(
node.compute,
node.name,
new_node_uuid,
node_type=node_type,
**data
)
try:
await node.post("/duplicate", timeout=None, data={
"destination_node_id": new_node_uuid
@@ -1255,69 +1373,4 @@ class Project:
def __repr__(self):
return "<gns3server.controller.Project {} {}>".format(self._name, self._id)
async def _fast_duplication(self, name=None, location=None, reset_mac_addresses=True):
"""
Fast duplication of a project.
Copy the project files directly rather than in an import-export fashion.
:param name: Name of the new project. A new one will be generated in case of conflicts
:param location: Parent directory of the new project
:param reset_mac_addresses: Reset MAC addresses for the new project
"""
# remote replication is not supported with remote computes
for compute in self.computes:
if compute.id != "local":
log.warning("Fast duplication is not supported with remote compute: '{}'".format(compute.id))
return None
# work dir
p_work = pathlib.Path(location or self.path).parent.absolute()
t0 = time.time()
new_project_id = str(uuid.uuid4())
new_project_path = p_work.joinpath(new_project_id)
# copy dir
await wait_run_in_executor(shutil.copytree, self.path, new_project_path.as_posix(), symlinks=True, ignore_dangling_symlinks=True)
log.info("Project content copied from '{}' to '{}' in {}s".format(self.path, new_project_path, time.time() - t0))
topology = json.loads(new_project_path.joinpath('{}.gns3'.format(self.name)).read_bytes())
project_name = name or topology["name"]
# If the project name is already used we generate a new one
project_name = self.controller.get_free_project_name(project_name)
topology["name"] = project_name
# To avoid unexpected behavior (project start without manual operations just after import)
topology["auto_start"] = False
topology["auto_open"] = False
topology["auto_close"] = False
# change node ID
node_old_to_new = {}
for node in topology["topology"]["nodes"]:
new_node_id = str(uuid.uuid4())
if "node_id" in node:
node_old_to_new[node["node_id"]] = new_node_id
_move_node_file(new_project_path, node["node_id"], new_node_id)
node["node_id"] = new_node_id
if reset_mac_addresses:
if "properties" in node:
for prop, value in node["properties"].items():
# reset the MAC address
if prop in ("mac_addr", "mac_address"):
node["properties"][prop] = None
# change link ID
for link in topology["topology"]["links"]:
link["link_id"] = str(uuid.uuid4())
for node in link["nodes"]:
node["node_id"] = node_old_to_new[node["node_id"]]
# Generate new drawings id
for drawing in topology["topology"]["drawings"]:
drawing["drawing_id"] = str(uuid.uuid4())
# And we dump the updated.gns3
dot_gns3_path = new_project_path.joinpath('{}.gns3'.format(project_name))
topology["project_id"] = new_project_id
with open(dot_gns3_path, "w+") as f:
json.dump(topology, f, indent=4)
os.remove(new_project_path.joinpath('{}.gns3'.format(self.name)))
project = await self.controller.load_project(dot_gns3_path, load=False)
log.info("Project '{}' fast duplicated in {:.4f} seconds".format(project.name, time.time() - t0))
return project
+44 -13
View File
@@ -35,30 +35,47 @@ import logging
log = logging.getLogger(__name__)
# The string use to extract the date from the filename
FILENAME_TIME_FORMAT = "%d%m%y_%H%M%S"
# Used to extract the date and time from the filename
FILENAME_DATETIME_FORMAT = "%d%m%y_%H%M%S"
# Used to create a description of the snapshot with a human-readable date and time
DESCRIPTION_DATETIME_FORMAT = "%Y-%m-%d at %H:%M:%S"
class Snapshot:
"""
A snapshot object
"""
def __init__(self, project, name=None, filename=None):
def __init__(self, project, snapshot_id=None, name=None, filename=None, created_at=None, description=None):
assert filename or name, "You need to pass a name or a filename"
self._id = str(uuid.uuid4()) # We don't need to keep id between project loading because they are use only as key for operation like delete, update.. but have no impact on disk
if snapshot_id:
self._id = snapshot_id
else:
self._id = str(uuid.uuid4())
self._project = project
if name:
self._name = name
self._created_at = datetime.now(timezone.utc).timestamp()
filename = self._name + "_" + datetime.fromtimestamp(self._created_at, tz=timezone.utc).replace(tzinfo=None).strftime(FILENAME_TIME_FORMAT) + ".gns3project"
if created_at:
self._created_at = created_at
else:
self._created_at = int(datetime.now(timezone.utc).timestamp())
if not filename:
filename = self._name + ".gns3snapshot"
else:
self._name = filename.rsplit("_", 2)[0]
datestring = filename.replace(self._name + "_", "").split(".")[0]
self._created_at = datetime.strptime(datestring, FILENAME_TIME_FORMAT).replace(tzinfo=timezone.utc).timestamp()
self._created_at = int(datetime.strptime(datestring, FILENAME_DATETIME_FORMAT).replace(tzinfo=timezone.utc).timestamp())
if not description:
date = datetime.fromtimestamp(self._created_at, tz=timezone.utc).replace(tzinfo=None).strftime(DESCRIPTION_DATETIME_FORMAT)
description = "Snapshot '{}' taken on {}".format(self._name, date)
self._description = description
self._filename = filename
self._path = os.path.join(project.path, "snapshots", filename)
@property
@@ -69,13 +86,17 @@ class Snapshot:
def name(self):
return self._name
@property
def description(self):
return self._description
@property
def path(self):
return self._path
@property
def created_at(self):
return int(self._created_at)
return self._created_at
async def create(self):
"""
@@ -114,14 +135,22 @@ class Snapshot:
await self._project.close(ignore_notification=True)
try:
begin = time.time()
# delete the current project files
project_files_path = os.path.join(self._project.path, "project-files")
if os.path.exists(project_files_path):
await wait_run_in_executor(shutil.rmtree, project_files_path)
await wait_run_in_executor(shutil.rmtree, project_files_path, ignore_errors=True)
with open(self._path, "rb") as f:
project = await import_project(self._project.controller, self._project.id, f, location=self._project.path,
auto_start=self._project.auto_start, auto_open=self._project.auto_open,
auto_close=self._project.auto_close)
project = await import_project(
self._project.controller,
self._project.id,
f,
location=self._project.path,
auto_start=self._project.auto_start,
auto_open=self._project.auto_open,
auto_close=self._project.auto_close
)
log.info("Snapshot '{}' restored in {:.4f} seconds".format(self.name, time.time() - begin))
except (OSError, PermissionError) as e:
raise aiohttp.web.HTTPConflict(text=str(e))
await project.open()
@@ -132,6 +161,8 @@ class Snapshot:
return {
"snapshot_id": self._id,
"name": self._name,
"created_at": int(self._created_at),
"created_at": self._created_at,
"description": self._description,
"filename": self._filename,
"project_id": self._project.id
}
+1 -1
View File
@@ -57,7 +57,7 @@ class CrashReport:
Report crash to a third party service
"""
DSN = "https://decb06a5d7bda07bef342a41c5c9d6e1@o19455.ingest.us.sentry.io/38482"
DSN = "https://646d66c1f0b65d59af9c4577a68f3f87@o19455.ingest.us.sentry.io/38482"
_instance = None
def __init__(self):
Binary file not shown.
Binary file not shown.
+3 -3
View File
@@ -235,9 +235,9 @@ def run():
return
log.info("HTTP authentication is enabled with username '{}'".format(user))
# we only support Python 3 version >= 3.8
if sys.version_info < (3, 8, 0):
raise SystemExit("Python 3.8 or higher is required")
# we only support Python 3 version >= 3.9
if sys.version_info < (3, 9, 0):
raise SystemExit("Python 3.9 or higher is required")
user_log.info("Running with Python {major}.{minor}.{micro} and has PID {pid}".format(major=sys.version_info[0], minor=sys.version_info[1],
micro=sys.version_info[2], pid=os.getpid()))
+3 -3
View File
@@ -43,17 +43,17 @@ IOU_TEMPLATE_PROPERTIES = {
"ram": {
"description": "RAM in MB",
"type": "integer",
"default": 256
"default": 1024
},
"nvram": {
"description": "NVRAM in KB",
"type": "integer",
"default": 128
"default": 256
},
"use_default_iou_values": {
"description": "Use default IOU values",
"type": "boolean",
"default": True
"default": False
},
"startup_config": {
"description": "Startup-config of IOU",
+16 -2
View File
@@ -25,6 +25,10 @@ SNAPSHOT_CREATE_SCHEMA = {
"description": "Snapshot name",
"minLength": 1
},
"description": {
"description": "Snapshot description",
"minLength": 1
},
},
"additionalProperties": False,
"required": ["name"]
@@ -50,7 +54,17 @@ SNAPSHOT_OBJECT_SCHEMA = {
"pattern": "^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$"
},
"name": {
"description": "Project name",
"description": "Snapshot name",
"type": "string",
"minLength": 1
},
"filename": {
"description": "Snapshot filename",
"type": "string",
"minLength": 1
},
"description": {
"description": "Snapshot description",
"type": "string",
"minLength": 1
},
@@ -60,5 +74,5 @@ SNAPSHOT_OBJECT_SCHEMA = {
}
},
"additionalProperties": False,
"required": ["snapshot_id", "name", "created_at", "project_id"]
"required": ["snapshot_id", "name", "filename", "created_at", "description", "project_id"]
}
+1 -1
View File
@@ -27,7 +27,7 @@ BASE_TEMPLATE_PROPERTIES = {
},
"template_type": {
"description": "Type of node",
"enum": ["cloud", "ethernet_hub", "ethernet_switch", "docker", "dynamips", "vpcs", "traceng",
"enum": ["cloud", "nat", "ethernet_hub", "ethernet_switch", "docker", "dynamips", "vpcs", "traceng",
"virtualbox", "vmware", "iou", "qemu"]
},
"name": {
@@ -1 +1 @@
"use strict";(self.webpackChunkgns3_web_ui=self.webpackChunkgns3_web_ui||[]).push([[26],{91026:function(W,g,a){a.r(g),a.d(g,{TopologySummaryComponent:function(){return U}});var t=a(38999),_=a(96852),h=a(14200),f=a(36889),v=a(3941),y=a(15132),p=a(40098),x=a(39095),c=a(88802),S=a(73044),d=a(59412),T=a(93386);function C(i,e){if(1&i){var o=t.EpF();t.TgZ(0,"div",2),t.NdJ("mousemove",function(r){return t.CHM(o),t.oxw().dragWidget(r)},!1,t.evT)("mouseup",function(){return t.CHM(o),t.oxw().toggleDragging(!1)},!1,t.evT),t.qZA()}}function b(i,e){1&i&&(t.O4$(),t.TgZ(0,"svg",28),t._UZ(1,"rect",29),t.qZA())}function E(i,e){1&i&&(t.O4$(),t.TgZ(0,"svg",28),t._UZ(1,"rect",30),t.qZA())}function Z(i,e){1&i&&(t.O4$(),t.TgZ(0,"svg",28),t._UZ(1,"rect",31),t.qZA())}function O(i,e){if(1&i&&(t.TgZ(0,"div"),t._uU(1),t.qZA()),2&i){var o=t.oxw().$implicit;t.xp6(1),t.lnq(" ",o.console_type,"://",o.console_host,":",o.console," ")}}function P(i,e){1&i&&(t.TgZ(0,"div"),t._uU(1," none "),t.qZA())}function M(i,e){if(1&i&&(t.TgZ(0,"div",25),t.TgZ(1,"div"),t.YNc(2,b,2,0,"svg",26),t.YNc(3,E,2,0,"svg",26),t.YNc(4,Z,2,0,"svg",26),t._uU(5),t.qZA(),t.YNc(6,O,2,3,"div",27),t.YNc(7,P,2,0,"div",27),t.qZA()),2&i){var o=e.$implicit;t.xp6(2),t.Q6J("ngIf","started"===o.status),t.xp6(1),t.Q6J("ngIf","suspended"===o.status),t.xp6(1),t.Q6J("ngIf","stopped"===o.status),t.xp6(1),t.hij(" ",o.name," "),t.xp6(1),t.Q6J("ngIf",null!=o.console&&null!=o.console&&"none"!=o.console_type),t.xp6(1),t.Q6J("ngIf",null==o.console||"none"===o.console_type)}}function w(i,e){1&i&&(t.O4$(),t.TgZ(0,"svg",28),t._UZ(1,"rect",29),t.qZA())}function A(i,e){1&i&&(t.O4$(),t.TgZ(0,"svg",28),t._UZ(1,"rect",31),t.qZA())}function F(i,e){if(1&i&&(t.TgZ(0,"div",25),t.TgZ(1,"div"),t.YNc(2,w,2,0,"svg",26),t.YNc(3,A,2,0,"svg",26),t._uU(4),t.qZA(),t.TgZ(5,"div"),t._uU(6),t.qZA(),t.TgZ(7,"div"),t._uU(8),t.qZA(),t.qZA()),2&i){var o=e.$implicit,s=t.oxw(2);t.xp6(2),t.Q6J("ngIf",o.connected),t.xp6(1),t.Q6J("ngIf",!o.connected),t.xp6(1),t.hij(" ",o.name," "),t.xp6(2),t.hij(" ",o.host," "),t.xp6(2),t.hij(" ",s.server.location," ")}}var I=function(i){return{lightTheme:i}},D=function(){return{right:!0,left:!0,bottom:!0,top:!0}};function N(i,e){if(1&i){var o=t.EpF();t.TgZ(0,"div",3),t.NdJ("mousedown",function(){return t.CHM(o),t.oxw().toggleDragging(!0)})("resizeStart",function(){return t.CHM(o),t.oxw().toggleDragging(!1)})("resizeEnd",function(n){return t.CHM(o),t.oxw().onResizeEnd(n)}),t.TgZ(1,"div",4),t.TgZ(2,"mat-tab-group"),t.TgZ(3,"mat-tab",5),t.NdJ("click",function(){return t.CHM(o),t.oxw().toggleTopologyVisibility(!0)}),t.TgZ(4,"div",6),t.TgZ(5,"div",7),t.TgZ(6,"mat-select",8),t.TgZ(7,"mat-optgroup",9),t.TgZ(8,"mat-option",10),t.NdJ("onSelectionChange",function(){return t.CHM(o),t.oxw().applyStatusFilter("started")}),t._uU(9,"started"),t.qZA(),t.TgZ(10,"mat-option",11),t.NdJ("onSelectionChange",function(){return t.CHM(o),t.oxw().applyStatusFilter("suspended")}),t._uU(11,"suspended"),t.qZA(),t.TgZ(12,"mat-option",12),t.NdJ("onSelectionChange",function(){return t.CHM(o),t.oxw().applyStatusFilter("stopped")}),t._uU(13,"stopped"),t.qZA(),t.qZA(),t.TgZ(14,"mat-optgroup",13),t.TgZ(15,"mat-option",14),t.NdJ("onSelectionChange",function(){return t.CHM(o),t.oxw().applyCaptureFilter("capture")}),t._uU(16,"active capture(s)"),t.qZA(),t.TgZ(17,"mat-option",15),t.NdJ("onSelectionChange",function(){return t.CHM(o),t.oxw().applyCaptureFilter("packet")}),t._uU(18,"active packet captures"),t.qZA(),t.qZA(),t.qZA(),t.qZA(),t.TgZ(19,"div",16),t.TgZ(20,"mat-select",17),t.NdJ("selectionChange",function(){return t.CHM(o),t.oxw().setSortingOrder()})("valueChange",function(n){return t.CHM(o),t.oxw().sortingOrder=n}),t.TgZ(21,"mat-option",18),t._uU(22,"sort by name ascending"),t.qZA(),t.TgZ(23,"mat-option",19),t._uU(24,"sort by name descending"),t.qZA(),t.qZA(),t.qZA(),t._UZ(25,"mat-divider",20),t.TgZ(26,"div",21),t.YNc(27,M,8,6,"div",22),t.qZA(),t.qZA(),t.qZA(),t.TgZ(28,"mat-tab",23),t.NdJ("click",function(){return t.CHM(o),t.oxw().toggleTopologyVisibility(!1)}),t.TgZ(29,"div",6),t.TgZ(30,"div",24),t.YNc(31,F,9,5,"div",22),t.qZA(),t.qZA(),t.qZA(),t.qZA(),t.qZA(),t.qZA()}if(2&i){var s=t.oxw();t.Q6J("ngStyle",s.style)("ngClass",t.VKq(9,I,s.isLightThemeEnabled))("validateResize",s.validate)("resizeEdges",t.DdM(11,D))("enableGhostResize",!0),t.xp6(20),t.Q6J("value",s.sortingOrder),t.xp6(6),t.Q6J("ngStyle",s.styleInside),t.xp6(1),t.Q6J("ngForOf",s.filteredNodes),t.xp6(4),t.Q6J("ngForOf",s.computes)}}var U=function(){function i(e,o,s,r,n){this.nodesDataSource=e,this.projectService=o,this.computeService=s,this.linksDataSource=r,this.themeService=n,this.closeTopologySummary=new t.vpe,this.style={},this.styleInside={height:"280px"},this.subscriptions=[],this.nodes=[],this.filteredNodes=[],this.sortingOrder="asc",this.startedStatusFilterEnabled=!1,this.suspendedStatusFilterEnabled=!1,this.stoppedStatusFilterEnabled=!1,this.captureFilterEnabled=!1,this.packetFilterEnabled=!1,this.computes=[],this.isTopologyVisible=!0,this.isDraggLine truncated
"use strict";(self.webpackChunkgns3_web_ui=self.webpackChunkgns3_web_ui||[]).push([[26],{91026:function(W,g,a){a.r(g),a.d(g,{TopologySummaryComponent:function(){return U}});var t=a(38999),_=a(96852),h=a(14200),f=a(36889),v=a(3941),y=a(15132),p=a(40098),x=a(39095),c=a(88802),S=a(73044),d=a(59412),T=a(93386);function C(i,e){if(1&i){var o=t.EpF();t.TgZ(0,"div",2),t.NdJ("mousemove",function(r){return t.CHM(o),t.oxw().dragWidget(r)},!1,t.evT)("mouseup",function(){return t.CHM(o),t.oxw().toggleDragging(!1)},!1,t.evT),t.qZA()}}function b(i,e){1&i&&(t.O4$(),t.TgZ(0,"svg",28),t._UZ(1,"rect",29),t.qZA())}function E(i,e){1&i&&(t.O4$(),t.TgZ(0,"svg",28),t._UZ(1,"rect",30),t.qZA())}function Z(i,e){1&i&&(t.O4$(),t.TgZ(0,"svg",28),t._UZ(1,"rect",31),t.qZA())}function O(i,e){if(1&i&&(t.TgZ(0,"div"),t._uU(1),t.qZA()),2&i){var o=t.oxw().$implicit;t.xp6(1),t.lnq(" ",o.console_type,"://",o.console_host,":",o.console," ")}}function P(i,e){1&i&&(t.TgZ(0,"div"),t._uU(1," none "),t.qZA())}function M(i,e){if(1&i&&(t.TgZ(0,"div",25),t.TgZ(1,"div"),t.YNc(2,b,2,0,"svg",26),t.YNc(3,E,2,0,"svg",26),t.YNc(4,Z,2,0,"svg",26),t._uU(5),t.qZA(),t.YNc(6,O,2,3,"div",27),t.YNc(7,P,2,0,"div",27),t.qZA()),2&i){var o=e.$implicit;t.xp6(2),t.Q6J("ngIf","started"===o.status),t.xp6(1),t.Q6J("ngIf","suspended"===o.status),t.xp6(1),t.Q6J("ngIf","stopped"===o.status),t.xp6(1),t.hij(" ",o.name," "),t.xp6(1),t.Q6J("ngIf",null!=o.console&&null!=o.console&&"none"!=o.console_type),t.xp6(1),t.Q6J("ngIf",null==o.console||"none"===o.console_type)}}function w(i,e){1&i&&(t.O4$(),t.TgZ(0,"svg",28),t._UZ(1,"rect",29),t.qZA())}function A(i,e){1&i&&(t.O4$(),t.TgZ(0,"svg",28),t._UZ(1,"rect",31),t.qZA())}function F(i,e){if(1&i&&(t.TgZ(0,"div",25),t.TgZ(1,"div"),t.YNc(2,w,2,0,"svg",26),t.YNc(3,A,2,0,"svg",26),t._uU(4),t.qZA(),t.TgZ(5,"div"),t._uU(6),t.qZA(),t.TgZ(7,"div"),t._uU(8),t.qZA(),t.qZA()),2&i){var o=e.$implicit,s=t.oxw(2);t.xp6(2),t.Q6J("ngIf",o.connected),t.xp6(1),t.Q6J("ngIf",!o.connected),t.xp6(1),t.hij(" ",o.name," "),t.xp6(2),t.hij(" ",o.host," "),t.xp6(2),t.hij(" ",s.server.location," ")}}var I=function(i){return{lightTheme:i}},D=function(){return{right:!0,left:!0,bottom:!0,top:!0}};function N(i,e){if(1&i){var o=t.EpF();t.TgZ(0,"div",3),t.NdJ("mousedown",function(){return t.CHM(o),t.oxw().toggleDragging(!0)})("resizeStart",function(){return t.CHM(o),t.oxw().toggleDragging(!1)})("resizeEnd",function(n){return t.CHM(o),t.oxw().onResizeEnd(n)}),t.TgZ(1,"div",4),t.TgZ(2,"mat-tab-group"),t.TgZ(3,"mat-tab",5),t.NdJ("click",function(){return t.CHM(o),t.oxw().toggleTopologyVisibility(!0)}),t.TgZ(4,"div",6),t.TgZ(5,"div",7),t.TgZ(6,"mat-select",8),t.TgZ(7,"mat-optgroup",9),t.TgZ(8,"mat-option",10),t.NdJ("onSelectionChange",function(){return t.CHM(o),t.oxw().applyStatusFilter("started")}),t._uU(9,"started"),t.qZA(),t.TgZ(10,"mat-option",11),t.NdJ("onSelectionChange",function(){return t.CHM(o),t.oxw().applyStatusFilter("suspended")}),t._uU(11,"suspended"),t.qZA(),t.TgZ(12,"mat-option",12),t.NdJ("onSelectionChange",function(){return t.CHM(o),t.oxw().applyStatusFilter("stopped")}),t._uU(13,"stopped"),t.qZA(),t.qZA(),t.TgZ(14,"mat-optgroup",13),t.TgZ(15,"mat-option",14),t.NdJ("onSelectionChange",function(){return t.CHM(o),t.oxw().applyCaptureFilter("capture")}),t._uU(16,"active capture(s)"),t.qZA(),t.TgZ(17,"mat-option",15),t.NdJ("onSelectionChange",function(){return t.CHM(o),t.oxw().applyCaptureFilter("packet")}),t._uU(18,"active packet captures"),t.qZA(),t.qZA(),t.qZA(),t.qZA(),t.TgZ(19,"div",16),t.TgZ(20,"mat-select",17),t.NdJ("selectionChange",function(){return t.CHM(o),t.oxw().setSortingOrder()})("valueChange",function(n){return t.CHM(o),t.oxw().sortingOrder=n}),t.TgZ(21,"mat-option",18),t._uU(22,"sort by name ascending"),t.qZA(),t.TgZ(23,"mat-option",19),t._uU(24,"sort by name descending"),t.qZA(),t.qZA(),t.qZA(),t._UZ(25,"mat-divider",20),t.TgZ(26,"div",21),t.YNc(27,M,8,6,"div",22),t.qZA(),t.qZA(),t.qZA(),t.TgZ(28,"mat-tab",23),t.NdJ("click",function(){return t.CHM(o),t.oxw().toggleTopologyVisibility(!1)}),t.TgZ(29,"div",6),t.TgZ(30,"div",24),t.YNc(31,F,9,5,"div",22),t.qZA(),t.qZA(),t.qZA(),t.qZA(),t.qZA(),t.qZA()}if(2&i){var s=t.oxw();t.Q6J("ngStyle",s.style)("ngClass",t.VKq(9,I,s.isLightThemeEnabled))("validateResize",s.validate)("resizeEdges",t.DdM(11,D))("enableGhostResize",!0),t.xp6(20),t.Q6J("value",s.sortingOrder),t.xp6(6),t.Q6J("ngStyle",s.styleInside),t.xp6(1),t.Q6J("ngForOf",s.filteredNodes),t.xp6(4),t.Q6J("ngForOf",s.computes)}}var U=function(){function i(e,o,s,r,n){this.nodesDataSource=e,this.projectService=o,this.computeService=s,this.linksDataSource=r,this.themeService=n,this.closeTopologySummary=new t.vpe,this.style={},this.styleInside={height:"280px"},this.subscriptions=[],this.nodes=[],this.filteredNodes=[],this.sortingOrder="asc",this.startedStatusFilterEnabled=!1,this.suspendedStatusFilterEnabled=!1,this.stoppedStatusFilterEnabled=!1,this.captureFilterEnabled=!1,this.packetFilterEnabled=!1,this.computes=[],this.isTopologyVisible=!0,this.isDraggLine truncated
Loaded 100 of 137 files, more files were not shown because too many files have changed in this diff. Show more