Compare commits

...

233 Commits

Author SHA1 Message Date
Jeremy Grossmann
a3e85b7041
Merge pull request #2853 from hjicks/master
add support basic support for OpenBSD.
2026-08-18 18:01:15 +02:00
chara
80da7da515 add support basic support for OpenBSD.
there remains some work on ubridge, but this seems to work so far.
2026-08-13 22:24:58 +03:30
Jeremy Grossmann
d2f73cae28
Merge pull request #2842 from GNS3/release/v2.2.61
Release v2.2.61
2026-07-30 19:15:25 +02:00
grossmj
da2942c139
Release v2.2.61 2026-07-30 12:53:08 +02:00
grossmj
5485eef3ad
Sync appliances 2026-07-29 18:52:23 +02:00
Jeremy Grossmann
ccf4b3f9db
Merge pull request #2840 from GNS3/fix-unvalidated-symlink
Fix unvalidated symlink creation in import_project
2026-07-29 18:51:21 +02:00
grossmj
b797981a65
test: add tests for unvalidated symlink creation in import_project 2026-07-29 18:48:31 +02:00
grossmj
a225622a6e
fix(import): unvalidated symlink creation in import_project 2026-07-29 18:10:52 +02:00
Jeremy Grossmann
3f19ede8d2
Merge pull request #2839 from GNS3/bugfix/2838
Fix addition of QEMU RNG device in 2.2.60 causes interface names to change
2026-07-29 18:00:16 +02:00
Jeremy Grossmann
668169d1cc
Merge branch '2.2' into bugfix/2838 2026-07-29 17:55:53 +02:00
grossmj
66b39f0616
Merge remote-tracking branch 'origin/master' into 2.2 2026-07-29 17:54:18 +02:00
Jeremy Grossmann
7efef28d4f
Merge branch '2.2' into bugfix/2838 2026-07-29 17:50:01 +02:00
grossmj
d9140d2f8c
fix(qemu): move the bios options after the network ones 2026-07-29 17:47:03 +02:00
grossmj
e2657febf0
fix(qemu): fix addition of QEMU RNG device causes interface names to change 2026-07-29 17:23:28 +02:00
Jeremy Grossmann
d161f1997d
Merge pull request #2837 from my-code-is-grey/ghcr_lowercase
fix: lowercase GHCR image name in docker-build workflow
2026-07-28 17:28:41 +02:00
my-code-is-grey
37490f2c74 bugfix: docker workflow needs lowercase name 2026-07-27 22:27:48 -04:00
Jeremy Grossmann
9b1d7d44bf
Merge pull request #2836 from iskanred/bugfix/2835
fix(qemu): remove trailing space from RNG object argument
2026-07-27 20:42:29 +02:00
Iskander Nafikov
9562c9d828 fix(qemu): remove trailing space from RNG object argument 2026-07-28 00:27:55 +08:00
Jeremy Grossmann
6c2a980afc
Merge pull request #2833 from Sanjays2402/fix/delete-project-does-not-start-nodes
Do not start nodes when deleting a project
2026-07-26 09:23:12 +02:00
Sanjay Santhanam
00ac2c19bd Do not start nodes when deleting a project
Project.delete() calls open() to rebuild the internal data structures
needed for cleanup. open() schedules start_all() when the project has
auto_start enabled, so deleting an auto-start project actually launched
every node process, allocating ports and consuming resources, only for
close() to kill them moments later.

open() now takes an auto_start argument (default True, so normal opens
are unchanged) and delete() passes auto_start=False.

Fixes #2784
2026-07-25 20:00:43 -07:00
Jeremy Grossmann
6742d09a70
Merge pull request #2831 from Sanjays2402/fix/docker-stop-state-check
fix: correct always-true state check in DockerVM.stop()
2026-07-25 19:59:28 +02:00
Sanjay Santhanam
41e8777609 fix: correct always-true state check in DockerVM.stop()
The condition 'state != "stopped" or state != "exited"' is a tautology,
so the state check was a no-op and a stop request was sent even for a
container that had already exited.

_get_container_state() never returns "stopped" (only "running",
"paused" or "exited"), so the intended negation of the condition used in
_fix_permissions() requires 'and', not 'or' (De Morgan's law).

Added a regression test asserting no stop query is issued for an
already-exited container.
2026-07-25 10:30:16 -07:00
Jeremy Grossmann
20868aa233
Merge pull request #2830 from rafael-33/master
docs: add structured bug-report template
2026-07-24 22:55:36 +02:00
rafael-33
27c6535ad0
add bug report issue template 2026-07-24 22:51:44 +02:00
grossmj
c75e1ba0be
Development on 2.2.61.dev1 2026-07-15 20:45:33 +02:00
Jeremy Grossmann
c1e845cb22
Merge pull request #2819 from GNS3/release/v2.2.60
Release v2.2.60
2026-07-15 20:44:04 +02:00
grossmj
803cc17410
Release v2.2.60 2026-07-15 18:36:26 +02:00
grossmj
f088c55cfe
Sync appliances 2026-07-15 18:32:12 +02:00
Jeremy Grossmann
8a8864c90b
Merge pull request #2814 from GNS3/bugfix/2783
fix(import): project import does not move images symlinks into place
2026-07-15 09:53:15 +02:00
grossmj
1986bce538
Only set IOU images to be executable when importing images 2026-07-15 09:43:34 +02:00
grossmj
c528d2cd95
fix(import): project import does not move images symlinks into place 2026-07-13 18:19:52 +02:00
Jeremy Grossmann
7529ee4168
Merge pull request #2813 from GNS3/uefi-improvements
UEFI improvements for Qemu VMs
2026-07-13 12:05:07 +02:00
grossmj
61c7f4469d
Search for system UEFI that is compatible with Python < 3.12 2026-07-13 11:34:29 +02:00
grossmj
896b4fc56a
UEFI improvements for Qemu VMs
* Add OVMF firmware directory configuration
* Automatically add a Random Number Generator (RNG) device when using uefi option is enabled
2026-07-13 11:08:17 +02:00
grossmj
a58fa8602b
remove wrongly merged code 2026-07-13 10:05:01 +02:00
YueGuobin
d8f8b6ec70
fix(docker): handle container name conflict automatically
When a Docker container with the same name already exists (e.g., from a
   previous crashed GNS3 session), Docker returns a 409 Conflict error
   when trying to create a new container with that name. This causes the
   project open operation to fail.

   This fix adds automatic cleanup of stale containers when encountering
   a name conflict:
   - Added DockerHttp409Error exception class
   - Updated http_query to detect 409 status codes
   - Modified create() to remove conflicting containers and retry

   Fixes the issue where opening a project fails with:
   "Docker has returned an error: 409 Conflict. The container name
   '/GNS3.xxx' is already in use by container 'xxx'"
2026-07-13 09:57:55 +02:00
Jeremy Grossmann
b256d5a5f6
Merge pull request #2812 from GNS3/bugfix/2788
fix: gns3-server crashes on startup if "Open this project in the background" is active but there is a problem with that project
2026-07-12 13:50:11 +02:00
grossmj
ea09cc2724
fix: gns3-server crashes on startup if "Open this project in the background" is active but there is a problem with that project 2026-07-12 13:46:12 +02:00
grossmj
e3e0a511b6
Handle HTTPNotFound exception when retrieving compute status 2026-07-12 11:08:13 +02:00
grossmj
0ecaab4da0
Replace ControllerForbiddenError with aiohttp.web.HTTPForbidden for project deletion error handling 2026-07-12 11:05:15 +02:00
YueGuobin
40644f33e6
Fix: Check compute connectivity before open() during project deletion
Previously the disconnected compute check ran after open(), which would
block for 120s trying to connect to unreachable remote computes before
rejecting the deletion. Now reads the topology file directly to extract
compute IDs and checks connectivity before calling open(), enabling
immediate rejection of deletions involving offline computes.

Also removes the redundant post-open() check since the early check
covers both opened and closed project states.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-07-12 10:57:56 +02:00
grossmj
809d4cc609
Merge branch 'master' into 2.2
# Conflicts:
#	.github/workflows/docker-build.yml
2026-07-08 10:30:53 +02:00
Jeremy Grossmann
89e4e836c9
Merge pull request #2806 from my-code-is-grey/2798-dockerhub
#2798 - DockerHub adjustments
2026-07-08 05:17:04 +02:00
my-code-is-grey
69ddcf553f .dockerignore ignore .dockerignore 2026-07-07 22:37:24 -04:00
my-code-is-grey
1e1ec5aae8 typo made me reconsider and move out to env 2026-07-07 21:58:49 -04:00
my-code-is-grey
e30e6435ca defaulted DOCKERHUB_ORG repository variable 2026-07-07 21:48:13 -04:00
my-code-is-grey
77700f361c 2798 2026-07-07 01:30:58 -04:00
Jeremy Grossmann
ad4aa1d49b
Merge pull request #2803 from GNS3/update-ga-workflows
Update GitHub Actions workflows
2026-07-06 18:10:17 +02:00
grossmj
8499ed3d65
Update GitHub Actions workflows 2026-07-06 18:05:28 +02:00
Jeremy Grossmann
db605120fa
Merge pull request #2741 from Volo6uev/issue-2735/api-base-config
api endpoint implemented
2026-05-31 19:10:55 +02:00
Volobue
9106ac4522 api endpoint implemented 2026-05-18 21:49:01 +03:00
Jeremy Grossmann
713dbb7f45
Merge pull request #2718 from GNS3/2.2
Release v2.2.59
2026-05-08 22:03:17 +08:00
grossmj
c3d23d7cae
Development on 2.2.60.dev1 2026-05-08 20:03:31 +08:00
grossmj
a1edf74fcf
Merge branch 'master' into 2.2 2026-05-08 19:49:53 +08:00
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
Jeremy Grossmann
d59709071a
Merge pull request #2668 from GNS3/release/v2.2.58.1
Release v2.2.58.1
2026-04-12 21:18:23 +08: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 Grossmann
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
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
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
145 changed files with 4079 additions and 3089 deletions

57
.dockerignore Normal file
View File

@ -0,0 +1,57 @@
# Version control
.git
.gitignore
.gitattributes
# CI / GitHub / Docker
.github
.whitesource
.dockerignore
# Editor / IDE
.idea
.vscode
.settings
.project
.pydevproject
.mr.developer.cfg
# Claude
.claude
# Python build artifacts
__pycache__
*.py[cod]
*.so
*.egg
*.egg-info
build/
dist/
eggs/
parts/
var/
sdist/
develop-eggs/
.installed.cfg
lib/
lib64/
.ropeproject
# Test & coverage
tests/
pytest.ini
.coveragerc
.coverage
.coverage*
.tox
.cache
.pytest_cache
nosetests.xml
# Virtualenv
env/
venv/
.venv/
# Editor backup files
*~

40
.github/ISSUE_TEMPLATE/bug_report.yml vendored Normal file
View File

@ -0,0 +1,40 @@
name: Bug report
description: Report a bug so we can fix it.
title: "[Bug]: "
labels: ["bug"]
body:
- type: textarea
id: what-happened
attributes:
label: What happened?
description: A clear description of the bug.
validations:
required: true
- type: textarea
id: reproduce
attributes:
label: Steps to reproduce
description: How can we reproduce this? Numbered steps if possible.
validations:
required: true
- type: textarea
id: expected
attributes:
label: Expected behavior
description: What did you expect to happen instead?
- type: input
id: version
attributes:
label: Version / commit
description: Which version or commit hash are you on?
- type: textarea
id: environment
attributes:
label: Environment
description: OS, runtime version, anything else that might be relevant.
- type: textarea
id: logs
attributes:
label: Relevant logs
description: Paste any relevant log output. This is automatically rendered as code.
render: shell

View File

@ -10,7 +10,7 @@ jobs:
name: Add issue to project name: Add issue to project
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/add-to-project@v1.0.1 - uses: actions/add-to-project@v2
with: with:
project-url: https://github.com/orgs/GNS3/projects/3 project-url: https://github.com/orgs/GNS3/projects/3
github-token: ${{ secrets.ADD_NEW_ISSUES_TO_PROJECT }} github-token: ${{ secrets.ADD_NEW_ISSUES_TO_PROJECT }}

View File

@ -56,11 +56,11 @@ jobs:
# your codebase is analyzed, see https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/codeql-code-scanning-for-compiled-languages # your codebase is analyzed, see https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/codeql-code-scanning-for-compiled-languages
steps: steps:
- name: Checkout repository - name: Checkout repository
uses: actions/checkout@v4 uses: actions/checkout@v7
# Initializes the CodeQL tools for scanning. # Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL - name: Initialize CodeQL
uses: github/codeql-action/init@v3 uses: github/codeql-action/init@v4
with: with:
languages: ${{ matrix.language }} languages: ${{ matrix.language }}
build-mode: ${{ matrix.build-mode }} build-mode: ${{ matrix.build-mode }}
@ -88,6 +88,6 @@ jobs:
exit 1 exit 1
- name: Perform CodeQL Analysis - name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v3 uses: github/codeql-action/analyze@v4
with: with:
category: "/language:${{matrix.language}}" category: "/language:${{matrix.language}}"

68
.github/workflows/docker-build.yml vendored Normal file
View File

@ -0,0 +1,68 @@
name: Build and Push Docker Image
on:
workflow_dispatch:
push:
tags:
- v2.*
- v3.*
jobs:
build:
runs-on: ubuntu-latest
env:
DOCKERHUB_ORG: ${{ vars.DOCKERHUB_ORG || 'gns3' }}
steps:
- name: Checkout code
uses: actions/checkout@v7
- name: Check for stable release
id: ver
run: |
TAG="${GITHUB_REF_NAME#v}"
echo "tag=$TAG" >> $GITHUB_OUTPUT
if echo "$TAG" | grep -qE '^[0-9]+\.[0-9]+\.[0-9]+$'; then
echo "stable=true" >> $GITHUB_OUTPUT
else
echo "stable=false" >> $GITHUB_OUTPUT
fi
- name: Set lowercase image name vars
if: steps.ver.outputs.stable == 'true'
id: names
run: |
echo "owner=$(echo '${{ github.repository_owner }}' | tr '[:upper:]' '[:lower:]')" >> "$GITHUB_OUTPUT"
echo "repo=$(echo '${{ github.event.repository.name }}' | tr '[:upper:]' '[:lower:]')" >> "$GITHUB_OUTPUT"
- name: Set up Docker Buildx
if: steps.ver.outputs.stable == 'true'
uses: docker/setup-buildx-action@v3
- name: Login to GitHub Container Registry
if: steps.ver.outputs.stable == 'true'
uses: docker/login-action@v4
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Login to Docker Hub
if: steps.ver.outputs.stable == 'true'
uses: docker/login-action@v4
with:
registry: docker.io
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Build and push
if: steps.ver.outputs.stable == 'true'
uses: docker/build-push-action@v6
with:
context: .
push: true
tags: |
${{ env.DOCKERHUB_ORG }}/${{ github.event.repository.name }}:${{ steps.ver.outputs.tag }}
${{ env.DOCKERHUB_ORG }}/${{ github.event.repository.name }}:latest
ghcr.io/${{ steps.names.outputs.owner }}/${{ steps.names.outputs.repo }}:${{ steps.ver.outputs.tag }}
ghcr.io/${{ steps.names.outputs.owner }}/${{ steps.names.outputs.repo }}:latest

View File

@ -12,11 +12,11 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v7
with: with:
fetch-depth: 0 fetch-depth: 0
ref: "gh-pages" ref: "gh-pages"
- uses: actions/setup-python@v5 - uses: actions/setup-python@v6
with: with:
python-version: 3.8 python-version: 3.8
- name: Merge changes from 3.0 branch - name: Merge changes from 3.0 branch

View File

@ -18,16 +18,12 @@ jobs:
strategy: strategy:
matrix: matrix:
os: ["ubuntu-latest"] os: ["ubuntu-latest"]
python-version: ["3.8", "3.9", "3.10", "3.11", "3.12", "3.13"] python-version: ["3.9", "3.10", "3.11", "3.12", "3.13", "3.14"]
#include:
# only test with Python 3.10 on Windows
# - os: windows-latest
# python-version: "3.10"
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v7
- name: Set up Python ${{ matrix.python-version }} - name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v5 uses: actions/setup-python@v6
with: with:
python-version: ${{ matrix.python-version }} python-version: ${{ matrix.python-version }}
- name: Install dependencies - name: Install dependencies

100
CHANGELOG
View File

@ -1,9 +1,107 @@
# Change Log # Change Log
## 2.2.61 30/07/2026
* Sync appliances
* fix(import): unvalidated symlink creation in import_project
* fix(qemu): fix addition of QEMU RNG device causes interface names to change
* fix(qemu): remove trailing space from RNG object argument
* fix: do not start nodes when deleting a project
* fix: correct always-true state check in DockerVM.stop()
## 2.2.60 15/07/2026
* Sync appliances
* Only set IOU images to be executable when importing images
* fix(import): project import does not move images symlinks into place
* Search for system UEFI that is compatible with Python < 3.12
* Add OVMF firmware directory configuration
* Automatically add a Random Number Generator (RNG) device when using uefi option is enabled
* fix(docker): handle container name conflict automatically
* fix: gns3-server crashes on startup if "Open this project in the background" is active but there is a problem with that project
* Handle HTTPNotFound exception when retrieving compute status
* Fix: Check compute connectivity before open() during project deletion
* API endpoints to manage base configuration files for templates
## 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 ## 2.2.52 02/12/2024
* Bundle web-ui v2.2.52 * Bundle web-ui v2.2.52
* Sync appliances
* Remove restrictions based on file extension when listing images and fix ELF header checks * Remove restrictions based on file extension when listing images and fix ELF header checks
* Fix use project name instead of ID for fast duplication when running local server. Fixes #2446 * Fix use project name instead of ID for fast duplication when running local server. Fixes #2446
* Overwrite user resources when the originals have changed. * Overwrite user resources when the originals have changed.

View File

@ -1,29 +1,32 @@
# Dockerfile for GNS3 server development # Dockerfile for GNS3 server development
FROM ubuntu:18.04 FROM ubuntu:24.04
ENV DEBIAN_FRONTEND noninteractive ENV DEBIAN_FRONTEND=noninteractive
# Set the locale # Set the locale
ENV LANG en_US.UTF-8 ENV LANG=en_US.UTF-8
ENV LANGUAGE en_US:en ENV LANGUAGE=en_US:en
ENV LC_ALL en_US.UTF-8 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 apt-get update && apt-get install -y software-properties-common
RUN add-apt-repository ppa:gns3/ppa RUN add-apt-repository ppa:gns3/ppa
RUN apt-get update && apt-get install -y \ RUN apt-get update && apt-get install -y \
locales \ locales \
python3-pip \ python3-pip \
python3-dev \ python3-dev \
qemu-system-x86 \ qemu-system-x86 \
qemu-kvm \ qemu-kvm \
libvirt-bin \ libvirt-daemon-system libvirt-clients \
x11vnc x11vnc
RUN locale-gen en_US.UTF-8 RUN locale-gen en_US.UTF-8
# Install uninstall to install dependencies # Install uninstall to install dependencies
RUN apt-get install -y vpcs ubridge RUN apt-get install -y vpcs ubridge dynamips
ADD . /server ADD . /server
WORKDIR /server WORKDIR /server
@ -32,4 +35,4 @@ RUN pip3 install --no-cache-dir -r /server/requirements.txt
EXPOSE 3080 EXPOSE 3080
CMD python3 -m gns3server CMD [ "python3", "-m", "gns3server", "--port", "3080" ]

View File

@ -112,6 +112,12 @@ For development, you can run the GNS3 server in a container
bash scripts/docker_dev_server.sh bash scripts/docker_dev_server.sh
``` ```
#### use Docker Compose
``` {.bash}
docker compose up -d
```
### Run as daemon (Unix only) ### Run as daemon (Unix only)
You will find init sample scripts for various systems inside the init 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 Security issues
--------------- ---------------
Please contact us using contact form available here: 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
<http://docs.gns3.com/1ON9JBXSeR7Nt2-Qum2o3ZX0GU86BZwlmNSUgvmqNWGY/index.html>

7
compose.yaml Normal file
View File

@ -0,0 +1,7 @@
services:
gen3-server:
build:
context: .
dockerfile: Dockerfile
ports:
- "8001:3080"

View File

@ -103,6 +103,8 @@ enable_hardware_acceleration = True
require_hardware_acceleration = False require_hardware_acceleration = False
; Allow unsafe additional command line options ; Allow unsafe additional command line options
allow_unsafe_options = False allow_unsafe_options = False
; Path to the OVMF firmware directory
ovmf_firmware_dir = "/usr/share/OVMF"
[VMware] [VMware]
; First vmnet interface of the range that can be managed by the GNS3 server ; First vmnet interface of the range that can be managed by the GNS3 server

View File

@ -1,6 +1,6 @@
-rrequirements.txt -rrequirements.txt
pytest==8.3.3 pytest==8.4.2 # version 8.4.2 is the last one supporting Python 3.9
flake8==7.1.0 flake8==7.3.0
pytest-timeout==2.3.1 pytest-timeout==2.4.0
pytest-aiohttp==1.0.5 pytest-aiohttp==1.1.0

View File

@ -0,0 +1,17 @@
curl -i -X 'http://localhost:3080/v2/templates/19021f99-e36f-394d-b4a1-8aaa902ab9cc/base-config/vpcs_base_config.txt'
GET /v2/templates/19021f99-e36f-394d-b4a1-8aaa902ab9cc/base-config/vpcs_base_config.txt HTTP/1.1
HTTP/1.1 200 OK
Connection: close
X-Route: /v2/templates/{template_id}/base-config/{filename}
Server: Python/3.14 GNS3/2.2.60.dev1+713dbb7f
Content-Type: application/json
Content-Length: 144
Date: Mon, 18 May 2026 18:34:10 GMT
{
"content": "# test config\n\ndhcp\n",
"filename": "vpcs_base_config.txt",
"template_id": "19021f99-e36f-394d-b4a1-8aaa902ab9cc"
}

View File

@ -0,0 +1,44 @@
curl -i -X 'http://localhost:3080/v2/templates/base-configs'
GET /v2/templates/base-configs HTTP/1.1
HTTP/1.1 200 OK
Connection: close
X-Route: /v2/templates/base-configs
Server: Python/3.14 GNS3/2.2.60.dev1+713dbb7f
Content-Type: application/json
Content-Length: 576
Date: Mon, 18 May 2026 18:28:53 GMT
[
{
"filename": "config1.txt"
},
{
"filename": "config2.txt"
},
{
"filename": "ios_base_startup-config.txt"
},
{
"filename": "ios_etherswitch_startup-config.txt"
},
{
"filename": "iou_l2_base_startup-config.txt"
},
{
"filename": "iou_l3_base_startup-config.txt"
},
{
"filename": "test_config.txt"
},
{
"filename": "update_test.txt"
},
{
"filename": "vpcs_base_config.txt"
},
{
"filename": "vpcs_base_config2.txt"
}
]

View File

@ -0,0 +1,17 @@
curl -i -X 'http://localhost:3080/v2/templates/19021f99-e36f-394d-b4a1-8aaa902ab9cc/base-config/vpcs_base_config.txt'
PUT /v2/templates/19021f99-e36f-394d-b4a1-8aaa902ab9cc/base-config/vpcs_base_config.txt HTTP/1.1
HTTP/1.1 200 OK
Connection: close
X-Route: /v2/templates/{template_id}/base-config/{filename}
Server: Python/3.14 GNS3/2.2.60.dev1+713dbb7f
Content-Type: application/json
Content-Length: 144
Date: Mon, 18 May 2026 18:37:57 GMT
{
"content": "# test config\n\ndhcp\n",
"filename": "vpcs_base_config.txt",
"template_id": "19021f99-e36f-394d-b4a1-8aaa902ab9cc"
}

View File

@ -0,0 +1,38 @@
GET /v2/templates/base-configs
------------------------------------------------------------------------------------------------------------------------------------------
.. contents::
GET /v2/templates/base-configs
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
List all available base configuration files
Response status codes
**********************
- **200**: List of base configuration files returned
Output
*******
.. raw:: html
<table>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
<tr>
<td>filename</td>
<td>string</td>
<td>Name of the base configuration file</td>
</tr>
</table>
Sample session
***************
.. literalinclude:: ../../../examples/controller_get_templatesbaseconfigs.txt

View File

@ -0,0 +1,90 @@
/v2/templates/{template_id}/base-config/{filename}
------------------------------------------------------------------------------------------------------------------------------------------
.. contents::
GET /v2/templates/**{template_id}**/base-configs/**{filename}**
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
List all available base configuration files
Response status codes
**********************
- **200**: List of base configuration files returned
Output
*******
.. raw:: html
<table>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
<tr>
<td>filename</td>
<td>string</td>
<td>Name of the base configuration file</td>
</tr>
</table>
Sample session
***************
.. literalinclude:: ../../../examples/controller_get_templateidbaseconfig.txt
PUT /v2/templates/**{template_id}**/base-config/**{filename}**
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Update base configuration file content
Response status codes
**********************
- **200**: File updated
- **404**: File not found
Input
*******
.. raw:: html
<table>
<tr>
<th>Name</th>
<th>Mandatory</th>
<th>Type</th>
<th>Description</th>
</tr>
<tr><td>content</td><td>&#10004;</td><td>string</td><td>New file content</td></tr>
</table>
Output
*******
.. raw:: html
<table>
<tr>
<th>Name</th>
<th>Mandatory</th>
<th>Type</th>
<th>Description</th>
</tr>
<tr><td>template_id</td><td>&#10004;</td><td>string</td><td>Template UUID</td></tr>
<tr><td>filename</td><td>&#10004;</td><td>string</td><td>Base configuration filename</td></tr>
<tr><td>content</td><td>&#10004;</td><td>string</td><td>Updated file content</td></tr>
</table>
Sample session
***************
.. literalinclude:: ../../../examples/controller_put_templateidbaseconfig.txt

View File

@ -25,6 +25,38 @@
"options": "-cpu host -nographic" "options": "-cpu host -nographic"
}, },
"images": [ "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", "filename": "AlmaLinux-9-GenericCloud-9.2-20230513.x86_64.qcow2",
"version": "9.2", "version": "9.2",
@ -33,6 +65,14 @@
"download_url": "https://vault.almalinux.org/9.2/cloud/x86_64/images/", "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" "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", "filename": "AlmaLinux-8-GenericCloud-8.8-20230524.x86_64.qcow2",
"version": "8.8", "version": "8.8",
@ -59,6 +99,34 @@
} }
], ],
"versions": [ "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", "name": "9.2",
"images": { "images": {
@ -66,6 +134,13 @@
"cdrom_image": "almalinux-cloud-init-data.iso" "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", "name": "8.8",
"images": { "images": {

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"
}
}
]
}

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"
}
}

View File

@ -2,14 +2,14 @@
"appliance_id": "c90f3ff3-4ed2-4437-9afb-21232fa92015", "appliance_id": "c90f3ff3-4ed2-4437-9afb-21232fa92015",
"name": "Arista vEOS", "name": "Arista vEOS",
"category": "multilayer_switch", "category": "multilayer_switch",
"description": "Arista EOS\u00ae is the core of Arista cloud networking solutions for next-generation data centers and cloud networks. Cloud architectures built with Arista EOS scale to tens of thousands of compute and storage nodes with management and provisioning capabilities that work at scale. Through its programmability, EOS enables a set of software applications that deliver workflow automation, high availability, unprecedented network visibility and analytics and rapid integration with a wide range of third-party applications for virtualization, management, automation and orchestration services.\n\nArista Extensible Operating System (EOS) is a fully programmable and highly modular, Linux-based network operation system, using familiar industry standard CLI and runs a single binary software image across the Arista switching family. Architected for resiliency and programmability, EOS has a unique multi-process state sharing architecture that separates state information and packet forwarding from protocol processing and application logic.", "description": "Arista EOS is the core of Arista cloud networking solutions for next-generation data centers and cloud networks. Cloud architectures built with Arista EOS scale to tens of thousands of compute and storage nodes with management and provisioning capabilities that work at scale. Through its programmability, EOS enables a set of software applications that deliver workflow automation, high availability, unprecedented network visibility and analytics and rapid integration with a wide range of third-party applications for virtualization, management, automation and orchestration services.\n\nArista Extensible Operating System (EOS) is a fully programmable and highly modular, Linux-based network operation system, using familiar industry standard CLI and runs a single binary software image across the Arista switching family. Architected for resiliency and programmability, EOS has a unique multi-process state sharing architecture that separates state information and packet forwarding from protocol processing and application logic.",
"vendor_name": "Arista", "vendor_name": "Arista",
"vendor_url": "http://www.arista.com/", "vendor_url": "http://www.arista.com/",
"documentation_url": "https://www.arista.com/assets/data/docs/Manuals/EOS-4.17.2F-Manual.pdf", "documentation_url": "https://www.arista.com/assets/data/docs/Manuals/EOS-4.17.2F-Manual.pdf",
"product_name": "vEOS", "product_name": "vEOS",
"product_url": "https://eos.arista.com/", "product_url": "https://eos.arista.com/",
"registry_version": 4, "registry_version": 4,
"status": "experimental", "status": "stable",
"maintainer": "GNS3 Team", "maintainer": "GNS3 Team",
"maintainer_email": "developers@gns3.net", "maintainer_email": "developers@gns3.net",
"usage": "The login is admin, with no password by default", "usage": "The login is admin, with no password by default",
@ -29,87 +29,31 @@
}, },
"images": [ "images": [
{ {
"filename": "vEOS64-lab-4.32.0F.vmdk", "filename": "vEOS64-lab-4.35.3F.qcow2",
"version": "4.32.0F", "version": "4.35.3F",
"md5sum": "851771260bb18ad3e90fa6956f0c6161", "md5sum": "00d11e33dc4288f509441a4ab6319ca0",
"filesize": 591724544, "filesize": 638910464,
"download_url": "https://www.arista.com/en/support/software-download" "download_url": "https://www.arista.com/en/support/software-download"
}, },
{ {
"filename": "vEOS64-lab-4.31.3M.vmdk", "filename": "vEOS64-lab-4.33.2F.qcow2",
"version": "4.31.3M", "version": "4.33.2F",
"md5sum": "7df107da137f4a4e752014d4f0e94cd3", "md5sum": "fbe629a8342cd0b3b19566b9d7ef4f4f",
"filesize": 577961984, "filesize": 610992128,
"download_url": "https://www.arista.com/en/support/software-download" "download_url": "https://www.arista.com/en/support/software-download"
}, },
{ {
"filename": "vEOS64-lab-4.30.6M.vmdk", "filename": "vEOS64-lab-4.32.4.1M.qcow2",
"version": "4.30.6M", "version": "4.32.4.1M",
"md5sum": "19721aace820b9ebf6d7ae6524803cf5", "md5sum": "cd369b5ccfd87ccd83a34538681ba35f",
"filesize": 553123840, "filesize": 605159424,
"download_url": "https://www.arista.com/en/support/software-download" "download_url": "https://www.arista.com/en/support/software-download"
}, },
{ {
"filename": "vEOS64-lab-4.29.8M.vmdk", "filename": "vEOS64-lab-4.31.6M.qcow2",
"version": "4.29.8M", "version": "4.31.6M",
"md5sum": "131888f74cd63a93894521d40eb4d0b6", "md5sum": "02fbd929de9416e1096cd2454507d6ce",
"filesize": 548405248, "filesize": 590479360,
"download_url": "https://www.arista.com/en/support/software-download"
},
{
"filename": "vEOS64-lab-4.28.11M.vmdk",
"version": "4.28.11M",
"md5sum": "6cac0e7b04a74ee0dc358327a00accfd",
"filesize": 513343488,
"download_url": "https://www.arista.com/en/support/software-download"
},
{
"filename": "vEOS64-lab-4.27.12M.vmdk",
"version": "4.27.12M",
"md5sum": "34c4f785c7fc054cda8754dd13c0d7c7",
"filesize": 496697344,
"download_url": "https://www.arista.com/en/support/software-download"
},
{
"filename": "vEOS-lab-4.32.0F.vmdk",
"version": "4.32.0F",
"md5sum": "584b901a1249717504050e48f74fb8dd",
"filesize": 591396864,
"download_url": "https://www.arista.com/en/support/software-download"
},
{
"filename": "vEOS-lab-4.31.3M.vmdk",
"version": "4.31.3M",
"md5sum": "a2e130697cdf8547006eebebde6eefca",
"filesize": 590086144,
"download_url": "https://www.arista.com/en/support/software-download"
},
{
"filename": "vEOS-lab-4.30.6M.vmdk",
"version": "4.30.6M",
"md5sum": "a4467648bcfa7b19640af8a4ad3153c6",
"filesize": 565968896,
"download_url": "https://www.arista.com/en/support/software-download"
},
{
"filename": "vEOS-lab-4.29.8M.vmdk",
"version": "4.29.8M",
"md5sum": "1952f6114a4376212c525db9ec8efd5f",
"filesize": 558039040,
"download_url": "https://www.arista.com/en/support/software-download"
},
{
"filename": "vEOS-lab-4.28.11M.vmdk",
"version": "4.28.11M",
"md5sum": "5502df24dfc231c45afb33d6018c16d0",
"filesize": 521338880,
"download_url": "https://www.arista.com/en/support/software-download"
},
{
"filename": "vEOS-lab-4.27.12M.vmdk",
"version": "4.27.12M",
"md5sum": "e08a97e7c1977993f947fedeb4c6ddd5",
"filesize": 504299520,
"download_url": "https://www.arista.com/en/support/software-download" "download_url": "https://www.arista.com/en/support/software-download"
}, },
{ {
@ -118,459 +62,35 @@
"md5sum": "8d7e754efebca1930a93a2587ff7606c", "md5sum": "8d7e754efebca1930a93a2587ff7606c",
"filesize": 6291456, "filesize": 6291456,
"download_url": "https://www.arista.com/en/support/software-download" "download_url": "https://www.arista.com/en/support/software-download"
},
{
"filename": "vEOS-lab-4.26.2F.vmdk",
"version": "4.26.2F",
"md5sum": "de8ce9750fddb63bd3f71bccfcd7651e",
"filesize": 475332608,
"download_url": "https://www.arista.com/en/support/software-download"
},
{
"filename": "vEOS-lab-4.25.3M.vmdk",
"version": "4.25.3M",
"md5sum": "2f196969036b4d283e86f15118d59c26",
"filesize": 451543040,
"download_url": "https://www.arista.com/en/support/software-download"
},
{
"filename": "vEOS-lab-4.24.3M.vmdk",
"version": "4.24.3M",
"md5sum": "0a28e44c7ce4a8965f24a4a463a89b7d",
"filesize": 455213056,
"download_url": "https://www.arista.com/en/support/software-download"
},
{
"filename": "vEOS-lab-4.24.2.1F.vmdk",
"version": "4.24.2.1F",
"md5sum": "6bab8b59ce5230e243e56f4127448fc8",
"filesize": 455213056,
"download_url": "https://www.arista.com/en/support/software-download"
},
{
"filename": "vEOS-lab-4.23.4.2M.vmdk",
"version": "4.23.4.2M",
"md5sum": "d21cbef4e39f1e783b13a926cb54a242",
"filesize": 454295552,
"download_url": "https://www.arista.com/en/support/software-download"
},
{
"filename": "vEOS-lab-4.23.0.1F.vmdk",
"version": "4.23.0.1F",
"md5sum": "08d52154aa11a834aef9f42bbf29f977",
"filesize": 439484416,
"download_url": "https://www.arista.com/en/support/software-download"
},
{
"filename": "vEOS-lab-4.22.2.1F.vmdk",
"version": "4.22.2.1F",
"md5sum": "2a425bf8efe569a2bdf0e328f240cd16",
"filesize": 426377216,
"download_url": "https://www.arista.com/en/support/software-download"
},
{
"filename": "vEOS-lab-4.22.0F.vmdk",
"version": "4.22.0F",
"md5sum": "cfcc75c2b8176cfd819afcfd6799b74c",
"filesize": 414121984,
"download_url": "https://www.arista.com/en/support/software-download"
},
{
"filename": "vEOS-lab-4.21.1.1F.vmdk",
"version": "4.21.1F",
"md5sum": "02bfb7e53781fd44ff02357f201586d9",
"filesize": 358809600,
"download_url": "https://www.arista.com/en/support/software-download"
},
{
"filename": "vEOS-lab-4.20.10M-combined.vmdk",
"version": "4.20.10M-combined",
"md5sum": "d1f2d650f93dbf24e04fdd2c9d62bd62",
"filesize": 334626816,
"download_url": "https://www.arista.com/en/support/software-download"
},
{
"filename": "vEOS-lab-4.20.1F.vmdk",
"version": "4.20.1F",
"md5sum": "aadb6f3dbff28317f68cb4c4502d0db8",
"filesize": 662044672,
"download_url": "https://www.arista.com/en/support/software-download"
},
{
"filename": "vEOS-lab-4.19.10M-combined.vmdk",
"version": "4.19.10M-combined",
"md5sum": "103daa45c33be4584cbe6adc60de46a3",
"filesize": 324141056,
"download_url": "https://www.arista.com/en/support/software-download"
},
{
"filename": "vEOS-lab-4.19.10M.vmdk",
"version": "4.19.10M",
"md5sum": "665ed14389411ae5f16ba0a2ff84240a",
"filesize": 637337600,
"download_url": "https://www.arista.com/en/support/software-download"
},
{
"filename": "vEOS-lab-4.18.10M-combined.vmdk",
"version": "4.18.10M-combined",
"md5sum": "e33e0ef5b8cecc84c5bb57569b36b9c6",
"filesize": 317652992,
"download_url": "https://www.arista.com/en/support/software-download"
},
{
"filename": "vEOS-lab-4.18.10M.vmdk",
"version": "4.18.10M",
"md5sum": "1d87e9ace37fe3706dbf3e49c8d4d231",
"filesize": 624427008,
"download_url": "https://www.arista.com/en/support/software-download"
},
{
"filename": "vEOS-lab-4.18.5M.vmdk",
"version": "4.18.5M",
"md5sum": "b1ee6268dbaf2b2276fd7a5286c7ce2b",
"filesize": 623116288,
"download_url": "https://www.arista.com/en/support/software-download"
},
{
"filename": "vEOS-lab-4.18.1F.vmdk",
"version": "4.18.1F",
"md5sum": "9648c63185f3b793b47528a858ca4364",
"filesize": 620625920,
"download_url": "https://www.arista.com/en/support/software-download"
},
{
"filename": "vEOS-lab-4.17.8M.vmdk",
"version": "4.17.8M",
"md5sum": "afc79a06f930ea2cc0ae3e03cbfd3f23",
"filesize": 608829440,
"download_url": "https://www.arista.com/en/support/software-download"
},
{
"filename": "vEOS-lab-4.17.2F.vmdk",
"version": "4.17.2F",
"md5sum": "3b4845edfa77cf9aaeb9c0a005d3e277",
"filesize": 609615872,
"download_url": "https://www.arista.com/en/support/software-download"
},
{
"filename": "vEOS-lab-4.16.13M.vmdk",
"version": "4.16.13M",
"md5sum": "4d0facf90140fc3aab031f0f8f88a32f",
"filesize": 521404416,
"download_url": "https://www.arista.com/en/support/software-download"
},
{
"filename": "vEOS-lab-4.16.6M.vmdk",
"version": "4.16.6M",
"md5sum": "b3f7b7cee17f2e66bb38b453a4939fef",
"filesize": 519962624,
"download_url": "https://www.arista.com/en/support/software-download"
},
{
"filename": "vEOS-lab-4.15.10M.vmdk",
"version": "4.15.10M",
"md5sum": "98e08281a9c48ddf6f3c5d62a124a20f",
"filesize": 517079040,
"download_url": "https://www.arista.com/en/support/software-download"
},
{
"filename": "vEOS-lab-4.15.5M.vmdk",
"version": "4.15.5M",
"md5sum": "cd74bb69c7ee905ac3d33c4d109f3ab7",
"filesize": 516030464,
"download_url": "https://www.arista.com/en/support/software-download"
},
{
"filename": "vEOS-lab-4.14.14M.vmdk",
"version": "4.14.14M",
"md5sum": "d81ba0522f4d7838d96f7985e41cdc47",
"filesize": 422641664,
"download_url": "https://www.arista.com/en/support/software-download"
},
{
"filename": "vEOS-lab-4.13.16M.vmdk",
"version": "4.13.16M",
"md5sum": "5763b2c043830c341c8b1009f4ea9a49",
"filesize": 404684800,
"download_url": "https://www.arista.com/en/support/software-download"
},
{
"filename": "vEOS-lab-4.13.8M.vmdk",
"version": "4.13.8M",
"md5sum": "a47145b9e6e7a24171c0850f8755535e",
"filesize": 409010176,
"download_url": "https://www.arista.com/en/support/software-download"
},
{
"filename": "Aboot-veos-serial-8.0.0.iso",
"version": "8.0.0",
"md5sum": "488ad1c435d18c69bb8d69c7806457c9",
"filesize": 5242880,
"download_url": "https://www.arista.com/en/support/software-download"
} }
], ],
"versions": [ "versions": [
{ {
"name": "4.32.0F", "name": "4.35.3F",
"images": { "images": {
"hda_disk_image": "Aboot-veos-serial-8.0.2.iso", "hda_disk_image": "Aboot-veos-serial-8.0.2.iso",
"hdb_disk_image": "vEOS64-lab-4.32.0F.vmdk" "hdb_disk_image": "vEOS64-lab-4.35.3F.qcow2"
} }
}, },
{ {
"name": "4.31.3M", "name": "4.33.2F",
"images": { "images": {
"hda_disk_image": "Aboot-veos-serial-8.0.2.iso", "hda_disk_image": "Aboot-veos-serial-8.0.2.iso",
"hdb_disk_image": "vEOS64-lab-4.31.3M.vmdk" "hdb_disk_image": "vEOS64-lab-4.33.2F.qcow2"
} }
}, },
{ {
"name": "4.30.6M", "name": "4.32.4.1M",
"images": { "images": {
"hda_disk_image": "Aboot-veos-serial-8.0.2.iso", "hda_disk_image": "Aboot-veos-serial-8.0.2.iso",
"hdb_disk_image": "vEOS64-lab-4.30.6M.vmdk" "hdb_disk_image": "vEOS64-lab-4.32.4.1M.qcow2"
} }
}, },
{ {
"name": "4.29.8M", "name": "4.31.6M",
"images": { "images": {
"hda_disk_image": "Aboot-veos-serial-8.0.2.iso", "hda_disk_image": "Aboot-veos-serial-8.0.2.iso",
"hdb_disk_image": "vEOS64-lab-4.29.8M.vmdk" "hdb_disk_image": "vEOS64-lab-4.31.6M.qcow2"
}
},
{
"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"
} }
} }
] ]

View File

@ -0,0 +1,59 @@
{
"appliance_id": "b3b90fde-143a-4129-8031-ccbba73c5e02",
"name": "armbian",
"category": "guest",
"description": "A highly optimized base operating system specialized for single board computers (SBCs) and its extensive build framework.",
"vendor_name": "The Armbian team",
"vendor_url": "https://armbian.com/",
"documentation_url": "https://docs.armbian.com/",
"product_name": "Armbian UEFI x86",
"product_url": "https://armbian.com/boards/uefi-x86",
"registry_version": 4,
"status": "stable",
"maintainer": "GNS3 Team",
"maintainer_email": "developers@gns3.net",
"usage": "By first login you create root password and new sudo user.\n\nBoot disk from UEFI shell, type: FS0:EFI\\BOOT\\BOOTX64 and press <Enter>",
"port_name_format": "Ethernet{0}",
"qemu": {
"adapter_type": "virtio-net-pci",
"adapters": 2,
"ram": 256,
"hda_disk_interface": "virtio",
"arch": "x86_64",
"console_type": "spice+agent",
"uefi": false,
"boot_priority": "c",
"kvm": "require",
"options": "-nographic"
},
"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": "Armbian_26.5.1_Uefi-x86_trixie_cloud_6.18.32_minimal.img.qcow2",
"version": "Armbian 26.5.1 Minimal (CLI)",
"md5sum": "7f4c915668718d6135406de5a6c4fc30",
"filesize": 877920512,
"download_url": "https://armbian.com/boards/uefi-x86",
"direct_download_url": "https://armbian.atomonetworks.com/dl/uefi-x86/archive/Armbian_26.5.1_Uefi-x86_trixie_cloud_6.18.32_minimal.img.qcow2.xz",
"compression": "xz"
}
],
"versions": [
{
"name": "Armbian 26.5.1 Minimal (CLI)",
"images": {
"bios_image": "OVMF-edk2-stable202305.fd",
"hda_disk_image": "Armbian_26.5.1_Uefi-x86_trixie_cloud_6.18.32_minimal.img.qcow2"
}
}
]
}

View File

@ -32,6 +32,27 @@
"process_priority": "normal" "process_priority": "normal"
}, },
"images": [ "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", "filename": "arubaoscx-disk-image-genericx86-p4-20240129204649.vmdk",
"version": "10.13.1000", "version": "10.13.1000",
@ -139,6 +160,24 @@
} }
], ],
"versions": [ "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", "name": "10.13.1000",
"images": { "images": {

View File

@ -0,0 +1,42 @@
{
"appliance_id": "4aa78f74-c769-43e0-9ef1-5dd2cf1909c6",
"name": "Asterfusion AsterNOS-VPP",
"category": "router",
"description": "AsterNOS-VPP leverages SONiCs robust routing features and management capability with VPPs 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"
}
}
]
}

View File

@ -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 Asterfusions 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"
}
}
]
}

View File

@ -6,14 +6,14 @@
"vendor_name": "Asterfusion", "vendor_name": "Asterfusion",
"vendor_url": "https://cloudswit.ch/", "vendor_url": "https://cloudswit.ch/",
"vendor_logo_url": "https://raw.githubusercontent.com/GNS3/gns3-registry/master/vendor-logos/asterfusion.png", "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_name": "vAsterNOS",
"product_url": "https://cloudswit.ch/product/sonic-enterprise-distribution", "product_url": "https://cloudswit.ch/product/sonic-enterprise-distribution",
"registry_version": 4, "registry_version": 4,
"status": "experimental", "status": "experimental",
"maintainer": "Asterfusion", "maintainer": "Asterfusion",
"maintainer_email": "bd@cloudswit.ch", "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", "symbol": "asterfusion-vAsterNOS.svg",
"first_port_name": "eth0", "first_port_name": "eth0",
"port_name_format": "Ethernet{0}", "port_name_format": "Ethernet{0}",
@ -30,18 +30,18 @@
}, },
"images": [ "images": [
{ {
"filename": "vAsterNOS-V3.1.img", "filename": "AsterNOS_V3.1_R0408P01-VS.img.gz",
"version": "V3.1", "version": "V3.1",
"md5sum": "c323c9c3f60e1a93eca2acdc5034b85c", "md5sum": "5c182306af67be2c79a5642551412e48",
"filesize": 2724659200, "filesize": 1425945924,
"download_url": "https://drive.cloudswitch.io/external/8ae2e3932ad8bb2ec30dd25be415d288ff3e4a949c557c6bd48ac6e6265bcfc1" "download_url": "http://pub.asternos.com/AsterNOS_V3.1_R0408P01-VS.img.gz"
} }
], ],
"versions": [ "versions": [
{ {
"name": "V3.1", "name": "V3.1",
"images": { "images": {
"hda_disk_image": "vAsterNOS-V3.1.img" "hda_disk_image": "AsterNOS_V3.1_R0408P01-VS.img.gz"
} }
} }
] ]

View File

@ -1,41 +1,56 @@
{ {
"appliance_id": "088df570-f637-46f5-8a68-85acde538e5e", "appliance_id": "8fecbf89-5cd1-4aea-b735-5f36cf0efbb7",
"name": "BIRD", "name": "BIRD",
"category": "router", "category": "router",
"description": "The BIRD project aims to develop a fully functional dynamic IP routing daemon primarily targeted on (but not limited to) Linux, FreeBSD and other UNIX-like systems and distributed under the GNU General Public License.", "description": "The BIRD project aims to develop a fully functional dynamic IP routing daemon primarily targeted on (but not limited to) Linux, FreeBSD and other UNIX-like systems and distributed under the GNU General Public License.",
"vendor_name": "CZ.NIC Labs", "vendor_name": "CZ.NIC Labs",
"vendor_url": "http://bird.network.cz/", "vendor_url": "https://bird.network.cz",
"documentation_url": "http://bird.network.cz/?get_doc&f=bird.html", "documentation_url": "https://bird.network.cz/?get_doc&f=bird.html&v=20",
"product_name": "BIRD internet routing daemon", "product_name": "BIRD internet routing daemon",
"registry_version": 4, "registry_version": 4,
"status": "stable", "status": "stable",
"maintainer": "GNS3 Team", "maintainer": "Bernhard Ehlers",
"maintainer_email": "developers@gns3.net", "maintainer_email": "dev-ehlers@mailbox.org",
"usage": "\n*** BIRD v1 is end-of-life ***\nPlease use the BIRD2 appliance.\n\nConfigure interfaces in /opt/bootlocal.sh, BIRD configuration is done in /usr/local/etc/bird", "usage": "Username:\tgns3\nPassword:\tgns3\nTo become root, use \"sudo -s\".\n\nNetwork configuration:\nsudo nano /etc/network/interfaces\nsudo systemctl restart networking\n\nBIRD:\nRestart: sudo systemctl restart bird\nReconfigure: birdc configure",
"port_name_format": "eth{0}",
"qemu": { "qemu": {
"adapter_type": "e1000", "adapter_type": "virtio-net-pci",
"adapters": 4, "adapters": 4,
"ram": 128, "ram": 512,
"hda_disk_interface": "ide", "hda_disk_interface": "scsi",
"arch": "x86_64", "arch": "x86_64",
"console_type": "telnet", "console_type": "telnet",
"kvm": "allow" "kvm": "allow"
}, },
"images": [ "images": [
{ {
"filename": "bird-tinycore64-1.5.0.img", "filename": "bird2-debian-2.14.qcow2",
"version": "1.5.0", "version": "2.14",
"md5sum": "08d50ba2b1b262e2e03e4babf90abf69", "md5sum": "029cf1756201ee79497c169502b08b88",
"filesize": 22413312, "filesize": 303717376,
"download_url": "https://sourceforge.net/projects/gns-3/files/Qemu%20Appliances/", "download_url": "https://sourceforge.net/projects/gns-3/files/Qemu%20Appliances/",
"direct_download_url": "http://downloads.sourceforge.net/project/gns-3/Qemu%20Appliances/bird-tinycore64-1.5.0.img" "direct_download_url": "https://downloads.sourceforge.net/project/gns-3/Qemu%20Appliances/bird2-debian-2.14.qcow2"
},
{
"filename": "bird2-debian-2.0.12.qcow2",
"version": "2.0.12",
"md5sum": "435218a2e90cba921cc7fde1d64a9419",
"filesize": 287965184,
"download_url": "https://sourceforge.net/projects/gns-3/files/Qemu%20Appliances/",
"direct_download_url": "https://downloads.sourceforge.net/project/gns-3/Qemu%20Appliances/bird2-debian-2.0.12.qcow2"
} }
], ],
"versions": [ "versions": [
{ {
"name": "1.5.0", "name": "2.14",
"images": { "images": {
"hda_disk_image": "bird-tinycore64-1.5.0.img" "hda_disk_image": "bird2-debian-2.14.qcow2"
}
},
{
"name": "2.0.12",
"images": {
"hda_disk_image": "bird2-debian-2.0.12.qcow2"
} }
} }
] ]

View File

@ -1,57 +0,0 @@
{
"appliance_id": "8fecbf89-5cd1-4aea-b735-5f36cf0efbb7",
"name": "BIRD2",
"category": "router",
"description": "The BIRD project aims to develop a fully functional dynamic IP routing daemon primarily targeted on (but not limited to) Linux, FreeBSD and other UNIX-like systems and distributed under the GNU General Public License.",
"vendor_name": "CZ.NIC Labs",
"vendor_url": "https://bird.network.cz",
"documentation_url": "https://bird.network.cz/?get_doc&f=bird.html&v=20",
"product_name": "BIRD internet routing daemon",
"registry_version": 4,
"status": "stable",
"maintainer": "Bernhard Ehlers",
"maintainer_email": "dev-ehlers@mailbox.org",
"usage": "Username:\tgns3\nPassword:\tgns3\nTo become root, use \"sudo -s\".\n\nNetwork configuration:\nsudo nano /etc/network/interfaces\nsudo systemctl restart networking\n\nBIRD:\nRestart: sudo systemctl restart bird\nReconfigure: birdc configure",
"port_name_format": "eth{0}",
"qemu": {
"adapter_type": "virtio-net-pci",
"adapters": 4,
"ram": 512,
"hda_disk_interface": "scsi",
"arch": "x86_64",
"console_type": "telnet",
"kvm": "allow"
},
"images": [
{
"filename": "bird2-debian-2.14.qcow2",
"version": "2.14",
"md5sum": "029cf1756201ee79497c169502b08b88",
"filesize": 303717376,
"download_url": "https://sourceforge.net/projects/gns-3/files/Qemu%20Appliances/",
"direct_download_url": "https://downloads.sourceforge.net/project/gns-3/Qemu%20Appliances/bird2-debian-2.14.qcow2"
},
{
"filename": "bird2-debian-2.0.12.qcow2",
"version": "2.0.12",
"md5sum": "435218a2e90cba921cc7fde1d64a9419",
"filesize": 287965184,
"download_url": "https://sourceforge.net/projects/gns-3/files/Qemu%20Appliances/",
"direct_download_url": "https://downloads.sourceforge.net/project/gns-3/Qemu%20Appliances/bird2-debian-2.0.12.qcow2"
}
],
"versions": [
{
"name": "2.14",
"images": {
"hda_disk_image": "bird2-debian-2.14.qcow2"
}
},
{
"name": "2.0.12",
"images": {
"hda_disk_image": "bird2-debian-2.0.12.qcow2"
}
}
]
}

View File

@ -27,44 +27,28 @@
}, },
"images": [ "images": [
{ {
"filename": "CentOS-Stream-GenericCloud-9-20230704.1.x86_64.qcow2", "filename": "CentOS-Stream-GenericCloud-10-20260504.0.x86_64.qcow2",
"version": "Stream-9 (20230704.1)", "version": "Stream-10 (20260504.0)",
"md5sum": "e04511e019325a97837edd9eafe02b48", "md5sum": "932b0bcc7e5c7404f91432979dc95314",
"filesize": 1087868416, "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", "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", "filename": "CentOS-Stream-GenericCloud-8-20240603.0.x86_64.qcow2",
"version": "Stream-8 (20230710.0)", "version": "Stream-8 (20240603.0)",
"md5sum": "83e02ce98c29753c86fb7be7d802aa75", "md5sum": "77f3c9650785b8e977209796e09ee33e",
"filesize": 1676164096, "filesize": 2003698688,
"download_url": "https://cloud.centos.org/centos/8-stream/x86_64/images", "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" "direct_download_url": "https://cloud.centos.org/centos/8-stream/x86_64/images/CentOS-Stream-GenericCloud-8-20240603.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"
}, },
{ {
"filename": "centos-cloud-init-data.iso", "filename": "centos-cloud-init-data.iso",
@ -77,37 +61,23 @@
], ],
"versions": [ "versions": [
{ {
"name": "Stream-9 (20230704.1)", "name": "Stream-10 (20260504.0)",
"images": { "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" "cdrom_image": "centos-cloud-init-data.iso"
} }
}, },
{ {
"name": "Stream-8 (20230710.0)", "name": "Stream-9 (20260504.0)",
"images": { "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" "cdrom_image": "centos-cloud-init-data.iso"
} }
}, },
{ {
"name": "8.4 (2105)", "name": "Stream-8 (20240603.0)",
"images": { "images": {
"hda_disk_image": "CentOS-8-GenericCloud-8.4.2105-20210603.0.x86_64.qcow2", "hda_disk_image": "CentOS-Stream-GenericCloud-8-20240603.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",
"cdrom_image": "centos-cloud-init-data.iso" "cdrom_image": "centos-cloud-init-data.iso"
} }
} }

View File

@ -1,5 +1,6 @@
{ {
"appliance_id": "cc2b1802-3520-4963-8ff7-c19b1f6418c5", "appliance_id": "cc2b1802-3520-4963-8ff7-c19b1f6418c5",
"tags": ["device_type:cisco_ios_telnet"],
"name": "Cisco 1700", "name": "Cisco 1700",
"category": "router", "category": "router",
"description": "Cisco 1700 Router", "description": "Cisco 1700 Router",

View File

@ -1,5 +1,6 @@
{ {
"appliance_id": "ed474fea-cd3b-4e2e-be84-a855a133060a", "appliance_id": "ed474fea-cd3b-4e2e-be84-a855a133060a",
"tags": ["device_type:cisco_ios_telnet"],
"name": "Cisco 2600", "name": "Cisco 2600",
"category": "router", "category": "router",
"description": "Cisco 2600 Router", "description": "Cisco 2600 Router",

View File

@ -1,5 +1,6 @@
{ {
"appliance_id": "ed0f079e-a506-4cb4-b46c-714a80bbe2d3", "appliance_id": "ed0f079e-a506-4cb4-b46c-714a80bbe2d3",
"tags": ["device_type:cisco_ios_telnet"],
"name": "Cisco 2691", "name": "Cisco 2691",
"category": "router", "category": "router",
"description": "Cisco 2691 Router", "description": "Cisco 2691 Router",

View File

@ -1,5 +1,6 @@
{ {
"appliance_id": "7ada6336-7280-4306-9f32-6b1e242ae989", "appliance_id": "7ada6336-7280-4306-9f32-6b1e242ae989",
"tags": ["device_type:cisco_ios_telnet"],
"name": "Cisco 3620", "name": "Cisco 3620",
"category": "router", "category": "router",
"description": "Cisco 3620 Router", "description": "Cisco 3620 Router",

View File

@ -1,5 +1,6 @@
{ {
"appliance_id": "ef119e49-19fe-4239-9c6b-16ea12f6ec01", "appliance_id": "ef119e49-19fe-4239-9c6b-16ea12f6ec01",
"tags": ["device_type:cisco_ios_telnet"],
"name": "Cisco 3640", "name": "Cisco 3640",
"category": "router", "category": "router",
"description": "Cisco 3640 Router", "description": "Cisco 3640 Router",

View File

@ -1,5 +1,6 @@
{ {
"appliance_id": "ac460a9c-9274-4ccf-a056-af50b699925f", "appliance_id": "ac460a9c-9274-4ccf-a056-af50b699925f",
"tags": ["device_type:cisco_ios_telnet"],
"name": "Cisco 3660", "name": "Cisco 3660",
"category": "router", "category": "router",
"description": "Cisco 3660 Router", "description": "Cisco 3660 Router",

View File

@ -1,5 +1,6 @@
{ {
"appliance_id": "5b9c5293-a5a7-47a3-9df4-6cf658f2f378", "appliance_id": "5b9c5293-a5a7-47a3-9df4-6cf658f2f378",
"tags": ["device_type:cisco_ios_telnet"],
"name": "Cisco 3725", "name": "Cisco 3725",
"category": "router", "category": "router",
"description": "Cisco 3725 Router", "description": "Cisco 3725 Router",

View File

@ -1,5 +1,6 @@
{ {
"appliance_id": "18737edb-e43f-4fb0-8a0f-88982cff58b1", "appliance_id": "18737edb-e43f-4fb0-8a0f-88982cff58b1",
"tags": ["device_type:cisco_ios_telnet"],
"name": "Cisco 3745", "name": "Cisco 3745",
"category": "router", "category": "router",
"description": "Cisco 3745 Multiservice Access Router", "description": "Cisco 3745 Multiservice Access Router",

View File

@ -1,5 +1,6 @@
{ {
"appliance_id": "38aa3135-f169-4131-9b64-73605787b5ef", "appliance_id": "38aa3135-f169-4131-9b64-73605787b5ef",
"tags": ["device_type:cisco_ios_telnet"],
"name": "Cisco 7200", "name": "Cisco 7200",
"category": "router", "category": "router",
"description": "Cisco 7200 Router", "description": "Cisco 7200 Router",
@ -50,6 +51,12 @@
"version": "124-25G", "version": "124-25G",
"md5sum": "9c7cc9b3f3b3571411a7f62faaa2c036", "md5sum": "9c7cc9b3f3b3571411a7f62faaa2c036",
"filesize": 71528984 "filesize": 71528984
},
{
"filename": "c7200-itpk9-mz.124-15.SW.image",
"version": "124-15.SW",
"md5sum": "3334a0facdbd26164e83d3c201fff5b5",
"filesize": 46423952
} }
], ],
"versions": [ "versions": [
@ -87,6 +94,13 @@
"images": { "images": {
"image": "c7200-a3jk9s-mz.124-25g.image" "image": "c7200-a3jk9s-mz.124-25g.image"
} }
},
{
"name": "124-15.SW",
"idlepc": "0x60b2bc68",
"images": {
"image": "c7200-itpk9-mz.124-15.SW.image"
}
} }
] ]
} }

View File

@ -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"
}
}
]
}

View File

@ -5,9 +5,9 @@
"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.", "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_name": "Cisco",
"vendor_url": "http://www.cisco.com/", "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_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, "registry_version": 4,
"status": "stable", "status": "stable",
"maintainer": "GNS3 Team", "maintainer": "GNS3 Team",
@ -26,26 +26,33 @@
"kvm": "require" "kvm": "require"
}, },
"images": [ "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", "filename": "asav9-22-1-1.qcow2",
"version": "9.22.1.1 CML", "version": "9.22.1.1 CML",
"md5sum": "250a924cdc2370208eaac9d1dc8dc9e3", "md5sum": "250a924cdc2370208eaac9d1dc8dc9e3",
"filesize": 379518976, "filesize": 379518976,
"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-18-2.qcow2", "filename": "asav9-18-2.qcow2",
"version": "9.18.2 CML", "version": "9.18.2 CML",
"md5sum": "6f10fe106edfad9163625770a47a6b73", "md5sum": "6f10fe106edfad9163625770a47a6b73",
"filesize": 340262912, "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", "filename": "asav9-16-2.qcow2",
"version": "9.16.2 CML", "version": "9.16.2 CML",
"md5sum": "1f8db97063a7f738fddc81ac880a906c", "md5sum": "1f8db97063a7f738fddc81ac880a906c",
"filesize": 262078976, "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", "filename": "asav9-16-2.qcow2",
@ -133,6 +140,12 @@
} }
], ],
"versions": [ "versions": [
{
"name": "9.23.1 CML",
"images": {
"hda_disk_image": "asav9-23-1.qcow2"
}
},
{ {
"name": "9.22.1.1 CML", "name": "9.22.1.1 CML",
"images": { "images": {

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.", "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_name": "Cisco",
"vendor_url": "http://www.cisco.com/", "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_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, "registry_version": 4,
"status": "stable", "status": "stable",
"maintainer": "GNS3 Team", "maintainer": "GNS3 Team",
@ -24,6 +24,13 @@
"kvm": "require" "kvm": "require"
}, },
"images": [ "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", "filename": "c8000v-universalk9_8G_serial.17.09.04a.qcow2",
"version": "17.09.04a 8G", "version": "17.09.04a 8G",
@ -68,6 +75,12 @@
} }
], ],
"versions": [ "versions": [
{
"name": "17.15.01a 8G",
"images": {
"hda_disk_image": "c8000v-universalk9_8G_serial.17.15.01a.qcow2"
}
},
{ {
"name": "17.09.04a 8G", "name": "17.09.04a 8G",
"images": { "images": {

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", "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_name": "Cisco",
"vendor_url": "http://www.cisco.com/", "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_name": "Cisco CAT IOS-XE 9000v",
"product_url": "http://virl.cisco.com/", "product_url": "https://developer.cisco.com/modeling-labs/",
"registry_version": 4, "registry_version": 4,
"status": "experimental", "status": "experimental",
"maintainer": "GNS3 Team", "maintainer": "GNS3 Team",
@ -31,14 +31,14 @@
"version": "17.12(1)", "version": "17.12(1)",
"md5sum": "e587e92186f42bdf69d7fa27f34425f7", "md5sum": "e587e92186f42bdf69d7fa27f34425f7",
"filesize": 2739404800, "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", "filename": "cat9kv-prd-17.10.01prd7.qcow2",
"version": "17.10(1)", "version": "17.10(1)",
"md5sum": "ffdbace33d31deae33e2a920a96b79ef", "md5sum": "ffdbace33d31deae33e2a920a96b79ef",
"filesize": 2155806720, "filesize": 2155806720,
"download_url": "https://learningnetworkstore.cisco.com/myaccount" "download_url": "https://u.cisco.com/my-learning/my-account"
} }
], ],
"versions": [ "versions": [

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.", "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_name": "Cisco",
"vendor_url": "http://www.cisco.com/", "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_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, "registry_version": 4,
"status": "stable", "status": "stable",
"maintainer": "GNS3 Team", "maintainer": "GNS3 Team",
@ -17,7 +17,7 @@
"qemu": { "qemu": {
"adapter_type": "vmxnet3", "adapter_type": "vmxnet3",
"adapters": 4, "adapters": 4,
"ram": 3072, "ram": 4096,
"hda_disk_interface": "ide", "hda_disk_interface": "ide",
"arch": "x86_64", "arch": "x86_64",
"console_type": "telnet", "console_type": "telnet",
@ -134,21 +134,21 @@
"version": "16.5.1b", "version": "16.5.1b",
"md5sum": "ac11d33041b8ff6dc3553e324d02cccb", "md5sum": "ac11d33041b8ff6dc3553e324d02cccb",
"filesize": 1209543680, "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", "filename": "csr1000v-universalk9.03.17.00.S.156-1.S-ext.qcow2",
"version": "3.17", "version": "3.17",
"md5sum": "06cbfcd11f3557391db64fe2a6015a6e", "md5sum": "06cbfcd11f3557391db64fe2a6015a6e",
"filesize": 1346305024, "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", "filename": "csr1000v-universalk9.16.3.1-build2.qcow2",
"version": "16.3.1-build2", "version": "16.3.1-build2",
"md5sum": "a770e96de928265515304c9c9d6b46b9", "md5sum": "a770e96de928265515304c9c9d6b46b9",
"filesize": 1280835584, "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", "filename": "csr1000v-universalk9.16.03.01.qcow2",
@ -162,21 +162,21 @@
"version": "16.3.2", "version": "16.3.2",
"md5sum": "2e5803d23cd52cba5d55fa8306be5f13", "md5sum": "2e5803d23cd52cba5d55fa8306be5f13",
"filesize": 1167720448, "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", "filename": "csr1000v-universalk9.16.4.1.qcow2",
"version": "16.4.1", "version": "16.4.1",
"md5sum": "3428e0dcf5132a1b11ab7696d8c61b2e", "md5sum": "3428e0dcf5132a1b11ab7696d8c61b2e",
"filesize": 1261961216, "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", "filename": "csr1000v-universalk9.16.6.1.qcow2",
"version": "16.6.1-VIRL", "version": "16.6.1-VIRL",
"md5sum": "996eb6dbf54781f6393bd689571a818c", "md5sum": "996eb6dbf54781f6393bd689571a818c",
"filesize": 1316301824, "filesize": 1316301824,
"download_url": "https://learningnetworkstore.cisco.com/myaccount" "download_url": "https://u.cisco.com/my-learning/my-account"
} }
], ],
"versions": [ "versions": [

View File

@ -1,12 +1,14 @@
{ {
"appliance_id": "3bf492b6-5717-4257-9bfd-b34617c6f133", "appliance_id": "3bf492b6-5717-4257-9bfd-b34617c6f133",
"tags": ["device_type:cisco_ios_telnet"],
"name": "Cisco IOSv", "name": "Cisco IOSv",
"category": "router", "category": "router",
"description": "Cisco Virtual IOS allows user to run IOS on a standard computer.", "description": "Cisco Virtual IOS allows user to run IOS on a standard computer.",
"vendor_name": "Cisco", "vendor_name": "Cisco",
"vendor_url": "http://www.cisco.com/", "vendor_url": "http://www.cisco.com/",
"documentation_url": "https://developer.cisco.com/docs/modeling-labs/iosv/",
"product_name": "IOSv", "product_name": "IOSv",
"product_url": "http://virl.cisco.com/", "product_url": "https://developer.cisco.com/modeling-labs/",
"registry_version": 4, "registry_version": 4,
"status": "stable", "status": "stable",
"maintainer": "GNS3 Team", "maintainer": "GNS3 Team",
@ -25,85 +27,113 @@
}, },
"images": [ "images": [
{ {
"filename": "IOSv_startup_config.img", "filename": "vios-adventerprisek9-m.spa.159-3.m10.qcow2",
"version": "1", "version": "15.9(3)M10",
"md5sum": "bc605651c4688276f81fd59dcf5cc786", "md5sum": "960ff630ce3fc030f6155a8e77d64105",
"filesize": 1048576, "filesize": 57323520,
"download_url": "https://sourceforge.net/projects/gns-3/files", "download_url": "https://u.cisco.com/my-learning/my-account"
"direct_download_url": "https://sourceforge.net/projects/gns-3/files/Qemu%20Appliances/IOSv_startup_config.img/download" },
{
"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", "filename": "vios-adventerprisek9-m.spa.159-3.m8.qcow2",
"version": "15.9(3)M8", "version": "15.9(3)M8",
"md5sum": "8d93a185c2fa778178a933f20b02150a", "md5sum": "8d93a185c2fa778178a933f20b02150a",
"filesize": 57319424, "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", "filename": "vios-adventerprisek9-m.spa.159-3.m6.qcow2",
"version": "15.9(3)M6", "version": "15.9(3)M6",
"md5sum": "49a6977977263b2774bebc56e4e678ff", "md5sum": "49a6977977263b2774bebc56e4e678ff",
"filesize": 57309696, "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", "filename": "vios-adventerprisek9-m.spa.159-3.m4.qcow2",
"version": "15.9(3)M4", "version": "15.9(3)M4",
"md5sum": "355b13ab821e64e2939fd7008d6304d7", "md5sum": "355b13ab821e64e2939fd7008d6304d7",
"filesize": 57297920, "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", "filename": "vios-adventerprisek9-m.spa.159-3.m3.qcow2",
"version": "15.9(3)M3", "version": "15.9(3)M3",
"md5sum": "12893843af18e4c62f13d07266755653", "md5sum": "12893843af18e4c62f13d07266755653",
"filesize": 57296384, "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", "filename": "vios-adventerprisek9-m.spa.159-3.m2.qcow2",
"version": "15.9(3)M2", "version": "15.9(3)M2",
"md5sum": "a19e998bc3086825c751d125af722329", "md5sum": "a19e998bc3086825c751d125af722329",
"filesize": 57308672, "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", "filename": "vios-adventerprisek9-m.spa.158-3.m2.qcow2",
"version": "15.8(3)M2", "version": "15.8(3)M2",
"md5sum": "40e3d25b5b0cb13d639fcd2cf18e9965", "md5sum": "40e3d25b5b0cb13d639fcd2cf18e9965",
"filesize": 57129984, "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", "filename": "vios-adventerprisek9-m.vmdk.SPA.157-3.M3",
"version": "15.7(3)M3", "version": "15.7(3)M3",
"md5sum": "37c148ffa14a82f418a6e9c2b049fafe", "md5sum": "37c148ffa14a82f418a6e9c2b049fafe",
"filesize": 134021120, "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", "filename": "vios-adventerprisek9-m.vmdk.SPA.156-2.T",
"version": "15.6(2)T", "version": "15.6(2)T",
"md5sum": "83707e3cc93646da58ee6563a68002b5", "md5sum": "83707e3cc93646da58ee6563a68002b5",
"filesize": 128450560, "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", "filename": "vios-adventerprisek9-m.vmdk.SPA.156-1.T",
"version": "15.6(1)T", "version": "15.6(1)T",
"md5sum": "e7cb1bbd0c59280dd946feefa68fa270", "md5sum": "e7cb1bbd0c59280dd946feefa68fa270",
"filesize": 128122880, "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", "filename": "vios-adventerprisek9-m.vmdk.SPA.155-3.M",
"version": "15.5(3)M", "version": "15.5(3)M",
"md5sum": "79f613ac3b179d5a64520730925130b2", "md5sum": "79f613ac3b179d5a64520730925130b2",
"filesize": 127926272, "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": [ "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", "name": "15.9(3)M8",
"images": { "images": {

View File

@ -1,12 +1,14 @@
{ {
"appliance_id": "4368f802-ddec-4863-adbd-a36a6d83cd4c", "appliance_id": "4368f802-ddec-4863-adbd-a36a6d83cd4c",
"tags": ["device_type:cisco_ios_telnet"],
"name": "Cisco IOSvL2", "name": "Cisco IOSvL2",
"category": "multilayer_switch", "category": "multilayer_switch",
"description": "Cisco Virtual IOS L2 allows user to run a IOS switching image on a standard computer.", "description": "Cisco Virtual IOS L2 allows user to run a IOS switching image on a standard computer.",
"vendor_name": "Cisco", "vendor_name": "Cisco",
"vendor_url": "http://www.cisco.com/", "vendor_url": "http://www.cisco.com/",
"documentation_url": "https://developer.cisco.com/docs/modeling-labs/iosvl2/",
"product_name": "IOSvL2", "product_name": "IOSvL2",
"product_url": "http://virl.cisco.com/", "product_url": "https://developer.cisco.com/modeling-labs/",
"registry_version": 4, "registry_version": 4,
"status": "stable", "status": "stable",
"maintainer": "GNS3 Team", "maintainer": "GNS3 Team",
@ -29,35 +31,35 @@
"version": "15.2(20200924:215240)", "version": "15.2(20200924:215240)",
"md5sum": "99ecab32de12410c533e6abd4e9710aa", "md5sum": "99ecab32de12410c533e6abd4e9710aa",
"filesize": 90409984, "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", "filename": "vios_l2-adventerprisek9-m.ssa.high_iron_20190423.qcow2",
"version": "15.2(6.0.81)E", "version": "15.2(6.0.81)E",
"md5sum": "71cacb678f98a106f99e889b97b34686", "md5sum": "71cacb678f98a106f99e889b97b34686",
"filesize": 44950016, "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", "filename": "vios_l2-adventerprisek9-m.SSA.high_iron_20180619.qcow2",
"version": "15.2.1", "version": "15.2.1",
"md5sum": "14b981002e40b660f2d7400401e04c14", "md5sum": "14b981002e40b660f2d7400401e04c14",
"filesize": 44938752, "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", "filename": "vios_l2-adventerprisek9-m.03.2017.qcow2",
"version": "15.2(20170321:233949)", "version": "15.2(20170321:233949)",
"md5sum": "8f14b50083a14688dec2fc791706bb3e", "md5sum": "8f14b50083a14688dec2fc791706bb3e",
"filesize": 41157632, "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", "filename": "vios_l2-adventerprisek9-m.vmdk.SSA.152-4.0.55.E",
"version": "15.2(4.0.55)E", "version": "15.2(4.0.55)E",
"md5sum": "1a3a21f5697cae64bb930895b986d71e", "md5sum": "1a3a21f5697cae64bb930895b986d71e",
"filesize": 96862208, "filesize": 96862208,
"download_url": "https://learningnetworkstore.cisco.com/myaccount" "download_url": "https://u.cisco.com/my-learning/my-account"
} }
], ],
"versions": [ "versions": [

View File

@ -5,9 +5,9 @@
"description": "IOS XRv supports the control plane features introduced in Cisco IOS XR.", "description": "IOS XRv supports the control plane features introduced in Cisco IOS XR.",
"vendor_name": "Cisco", "vendor_name": "Cisco",
"vendor_url": "http://www.cisco.com/", "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_name": "IOS XRv",
"product_url": "http://virl.cisco.com/", "product_url": "https://developer.cisco.com/modeling-labs/",
"registry_version": 4, "registry_version": 4,
"status": "stable", "status": "stable",
"maintainer": "GNS3 Team", "maintainer": "GNS3 Team",
@ -30,14 +30,14 @@
"version": "6.1.3", "version": "6.1.3",
"md5sum": "1693b5d22a398587dd0fed2877d8dfac", "md5sum": "1693b5d22a398587dd0fed2877d8dfac",
"filesize": 428588544, "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", "filename": "iosxrv-k9-demo-6.0.1.qcow2",
"version": "6.0.1", "version": "6.0.1",
"md5sum": "0831ecf43628eccb752ebb275de9a62a", "md5sum": "0831ecf43628eccb752ebb275de9a62a",
"filesize": 908132352, "filesize": 908132352,
"download_url": "https://learningnetworkstore.cisco.com/myaccount" "download_url": "https://u.cisco.com/my-learning/my-account"
} }
], ],
"versions": [ "versions": [

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!", "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_name": "Cisco",
"vendor_url": "http://www.cisco.com/", "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_name": "IOS XRv 9000",
"product_url": "http://virl.cisco.com/", "product_url": "https://developer.cisco.com/modeling-labs/",
"registry_version": 4, "registry_version": 4,
"status": "experimental", "status": "experimental",
"maintainer": "GNS3 Team", "maintainer": "GNS3 Team",
@ -19,99 +19,56 @@
"adapter_type": "virtio-net-pci", "adapter_type": "virtio-net-pci",
"adapters": 7, "adapters": 7,
"ram": 16384, "ram": 16384,
"cpus": 4,
"hda_disk_interface": "ide", "hda_disk_interface": "ide",
"arch": "x86_64", "arch": "x86_64",
"console_type": "telnet", "console_type": "telnet",
"kvm": "require", "kvm": "require",
"options": "-smp 4 -cpu host" "options": "-cpu host"
}, },
"images": [ "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", "filename": "xrv9k-fullk9-x-7.7.1.qcow2",
"version": "7.7.1", "version": "7.7.1",
"md5sum": "682fff40d2ff373d8da3342906553b54", "md5sum": "682fff40d2ff373d8da3342906553b54",
"filesize": 1643905024, "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", "filename": "xrv9k-fullk9-x-7.1.1.qcow2",
"version": "7.1.1", "version": "7.1.1",
"md5sum": "dcf241e3f8df0151fec2c7bfac9d96ac", "md5sum": "dcf241e3f8df0151fec2c7bfac9d96ac",
"filesize": 1443758080, "filesize": 1443758080,
"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.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"
} }
], ],
"versions": [ "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", "name": "7.7.1",
"images": { "images": {
@ -123,66 +80,6 @@
"images": { "images": {
"hda_disk_image": "xrv9k-fullk9-x-7.1.1.qcow2" "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"
}
} }
] ]
} }

View File

@ -1,11 +1,14 @@
{ {
"appliance_id": "9593db48-558a-4914-bb78-a20605f39c65", "appliance_id": "9593db48-558a-4914-bb78-a20605f39c65",
"tags": ["device_type:cisco_ios_telnet"],
"name": "Cisco IOU L2", "name": "Cisco IOU L2",
"category": "multilayer_switch", "category": "multilayer_switch",
"description": "Cisco IOS on UNIX Layer 2 image.", "description": "Cisco IOS on UNIX Layer 2 image.",
"vendor_name": "Cisco", "vendor_name": "Cisco",
"vendor_url": "http://www.cisco.com", "vendor_url": "http://www.cisco.com",
"documentation_url": "https://developer.cisco.com/docs/modeling-labs/iol-l2/",
"product_name": "Cisco IOU L2", "product_name": "Cisco IOU L2",
"product_url": "https://developer.cisco.com/modeling-labs/",
"registry_version": 4, "registry_version": 4,
"status": "experimental", "status": "experimental",
"maintainer": "GNS3 Team", "maintainer": "GNS3 Team",
@ -13,11 +16,17 @@
"iou": { "iou": {
"ethernet_adapters": 4, "ethernet_adapters": 4,
"serial_adapters": 0, "serial_adapters": 0,
"nvram": 512, "nvram": 256,
"ram": 512, "ram": 1024,
"startup_config": "iou_l2_base_startup-config.txt" "startup_config": "iou_l2_base_startup-config.txt"
}, },
"images": [ "images": [
{
"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", "filename": "x86_64_crb_linux_l2-adventerprisek9-ms.iol",
"version": "17.15.1", "version": "17.15.1",
@ -25,31 +34,19 @@
"filesize": 243251976 "filesize": 243251976
}, },
{ {
"filename": "x86_64_crb_linux_l2-adventerprisek9-ms.bin", "filename": "x86_64_crb_linux_l2-adventerprisek9-ms",
"version": "17.12.1", "version": "17.12.1",
"md5sum": "2b5055e4cef8fd257416d74a94adb626", "md5sum": "2b5055e4cef8fd257416d74a94adb626",
"filesize": 240355720 "filesize": 240355720
},
{
"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": [ "versions": [
{
"name": "17.16.1a",
"images": {
"image": "x86_64_crb_linux_l2-adventerprisek9-ms.17.16.1a.iol"
}
},
{ {
"name": "17.15.1", "name": "17.15.1",
"images": { "images": {
@ -59,25 +56,7 @@
{ {
"name": "17.12.1", "name": "17.12.1",
"images": { "images": {
"image": "x86_64_crb_linux_l2-adventerprisek9-ms.bin" "image": "x86_64_crb_linux_l2-adventerprisek9-ms"
}
},
{
"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"
} }
} }
] ]

View File

@ -1,11 +1,14 @@
{ {
"appliance_id": "87bf6f58-1e5a-4ee2-afe7-715dabffcf18", "appliance_id": "87bf6f58-1e5a-4ee2-afe7-715dabffcf18",
"tags": ["device_type:cisco_ios_telnet"],
"name": "Cisco IOU L3", "name": "Cisco IOU L3",
"category": "router", "category": "router",
"description": "Cisco IOS on UNIX Layer 3 image.", "description": "Cisco IOS on UNIX Layer 3 image.",
"vendor_name": "Cisco", "vendor_name": "Cisco",
"vendor_url": "http://www.cisco.com", "vendor_url": "http://www.cisco.com",
"documentation_url": "https://developer.cisco.com/docs/modeling-labs/iol/",
"product_name": "Cisco IOU L3", "product_name": "Cisco IOU L3",
"product_url": "https://developer.cisco.com/modeling-labs/",
"registry_version": 4, "registry_version": 4,
"status": "experimental", "status": "experimental",
"maintainer": "GNS3 Team", "maintainer": "GNS3 Team",
@ -13,11 +16,17 @@
"iou": { "iou": {
"ethernet_adapters": 2, "ethernet_adapters": 2,
"serial_adapters": 2, "serial_adapters": 2,
"nvram": 512, "nvram": 256,
"ram": 512, "ram": 1024,
"startup_config": "iou_l3_base_startup-config.txt" "startup_config": "iou_l3_base_startup-config.txt"
}, },
"images": [ "images": [
{
"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", "filename": "x86_64_crb_linux-adventerprisek9-ms.iol",
"version": "17.15.1", "version": "17.15.1",
@ -25,31 +34,19 @@
"filesize": 292001512 "filesize": 292001512
}, },
{ {
"filename": "x86_64_crb_linux-adventerprisek9-ms.bin", "filename": "x86_64_crb_linux-adventerprisek9-ms",
"version": "17.12.1", "version": "17.12.1",
"md5sum": "4a2fce8de21d1831fbceffd155e41ae7", "md5sum": "4a2fce8de21d1831fbceffd155e41ae7",
"filesize": 288947184 "filesize": 288947184
},
{
"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": [ "versions": [
{
"name": "17.16.1a",
"images": {
"image": "x86_64_crb_linux-adventerprisek9-ms.17.16.1a.iol"
}
},
{ {
"name": "17.15.1", "name": "17.15.1",
"images": { "images": {
@ -59,25 +56,7 @@
{ {
"name": "17.12.1", "name": "17.12.1",
"images": { "images": {
"image": "x86_64_crb_linux-adventerprisek9-ms.bin" "image": "x86_64_crb_linux-adventerprisek9-ms"
}
},
{
"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"
} }
} }
] ]

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.", "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_name": "Cisco",
"vendor_url": "http://www.cisco.com/", "vendor_url": "http://www.cisco.com/",
"documentation_url": "https://developer.cisco.com/docs/modeling-labs/nx-os/",
"product_name": "NX-OSv", "product_name": "NX-OSv",
"product_url": "http://virl.cisco.com/", "product_url": "https://developer.cisco.com/modeling-labs/",
"registry_version": 4, "registry_version": 4,
"status": "stable", "status": "stable",
"maintainer": "GNS3 Team", "maintainer": "GNS3 Team",
@ -29,14 +30,14 @@
"version": "7.3.0", "version": "7.3.0",
"md5sum": "b4cd6edf15ab4c6bce53c3f6c1e3a742", "md5sum": "b4cd6edf15ab4c6bce53c3f6c1e3a742",
"filesize": 214368256, "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", "filename": "titanium-d1.7.2.0.D1.1.vmdk",
"version": "7.2.0", "version": "7.2.0",
"md5sum": "0ee38c7d717840cb4ca822f4870671d0", "md5sum": "0ee38c7d717840cb4ca822f4870671d0",
"filesize": 361103360, "filesize": 361103360,
"download_url": "https://learningnetworkstore.cisco.com/myaccount" "download_url": "https://u.cisco.com/my-learning/my-account"
} }
], ],
"versions": [ "versions": [

View File

@ -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"
}
}
]
}

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.", "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_name": "Cisco",
"vendor_url": "http://www.cisco.com/", "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_name": "NX-OSv 9000",
"product_url": "https://developer.cisco.com/modeling-labs/",
"registry_version": 4, "registry_version": 4,
"status": "stable", "status": "stable",
"availability": "service-contract", "availability": "service-contract",
@ -26,12 +27,47 @@
"kvm": "require" "kvm": "require"
}, },
"images": [ "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", "filename": "nexus9300v64.10.3.1.F.qcow2",
"version": "9300v 10.3.1.F", "version": "9300v 10.3.1.F",
"md5sum": "a6ffd2501a5791c11cee319943b912da", "md5sum": "a6ffd2501a5791c11cee319943b912da",
"filesize": 2097086464, "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", "filename": "nexus9500v64.10.1.1.qcow2",
@ -47,181 +83,6 @@
"filesize": 1990983680, "filesize": 1990983680,
"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.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", "filename": "OVMF-edk2-stable202305.fd",
"version": "stable202305", "version": "stable202305",
@ -233,6 +94,41 @@
} }
], ],
"versions": [ "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", "name": "9300v 10.3.1.F",
"images": { "images": {
@ -253,181 +149,6 @@
"bios_image": "OVMF-edk2-stable202305.fd", "bios_image": "OVMF-edk2-stable202305.fd",
"hda_disk_image": "nexus9300v.10.1.1.qcow2" "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"
}
} }
] ]
} }

View File

@ -7,7 +7,7 @@
"vendor_url": "https://www.extremenetworks.com", "vendor_url": "https://www.extremenetworks.com",
"documentation_url": "https://www.extremenetworks.com/support/documentation", "documentation_url": "https://www.extremenetworks.com/support/documentation",
"product_name": "EXOS VM", "product_name": "EXOS VM",
"registry_version": 4, "registry_version": 5,
"status": "stable", "status": "stable",
"maintainer": "Extreme Networks", "maintainer": "Extreme Networks",
"maintainer_email": "GitHubscripting@extremenetworks.com", "maintainer_email": "GitHubscripting@extremenetworks.com",
@ -18,18 +18,32 @@
"qemu": { "qemu": {
"adapter_type": "rtl8139", "adapter_type": "rtl8139",
"adapters": 13, "adapters": 13,
"ram": 512, "ram": 1024,
"hda_disk_interface": "ide", "hda_disk_interface": "ide",
"arch": "x86_64", "arch": "x86_64",
"console_type": "telnet", "console_type": "telnet",
"boot_priority": "dc", "boot_priority": "dc",
"kvm": "allow", "kvm": "allow",
"options": "-cpu core2duo" "options": "-nographic -cpu host -enable-kvm"
}, },
"images": [ "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", "filename": "EXOS-VM_v32.6.3.126.qcow2",
"version": "32.6.3.126", "version": "32.6.3.126",
"md5sum": "5856b6c427bd605fe1c7adb6ee6b2659", "md5sum": "5856b6c427bd605fe1c7adb6ee6b2659",
@ -41,6 +55,18 @@
"versions": [ "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", "name": "32.6.3.126",
"images": { "images": {

View File

@ -28,6 +28,13 @@
"options": "-nographic" "options": "-nographic"
}, },
"images": [ "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", "filename": "VOSSGNS3.8.10.1.0.qcow2",
"version": "v8.10.1.0", "version": "v8.10.1.0",
@ -93,6 +100,13 @@
} }
], ],
"versions": [ "versions": [
{
"name": "v9.3.0.0",
"images":
{
"hda_disk_image": "FEGNS3.9.3.0.0.qcow2"
}
},
{ {
"name": "v8.10.1.0", "name": "v8.10.1.0",
"images": "images":

View File

@ -27,20 +27,36 @@
}, },
"images": [ "images": [
{ {
"filename": "Fedora-Cloud-Base-39-1.5.x86_64.qcow2", "filename": "Fedora-Cloud-Base-Generic-44-1.7.x86_64.qcow2",
"version": "39-1.5", "version": "44-1.7",
"md5sum": "800a10df2d369891ed65900bcacacd47", "md5sum": "49784011eb752291bfead24d3be8163f",
"filesize": 544604160, "filesize": 583729152,
"download_url": "https://download.fedoraproject.org/pub/fedora/linux/releases/39/Cloud/x86_64/images", "download_url": "https://download.fedoraproject.org/pub/fedora/linux/releases/44/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" "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", "filename": "Fedora-Cloud-Base-Generic-43-1.6.x86_64.qcow2",
"version": "38-1.6", "version": "43-1.6",
"md5sum": "53ddfe7b28666d5ddc55e93ff06abad2", "md5sum": "f2f671db53fae58b79bb2e2259fa3622",
"filesize": 497287168, "filesize": 583335936,
"download_url": "https://download.fedoraproject.org/pub/fedora/linux/releases/38/Cloud/x86_64/images", "download_url": "https://download.fedoraproject.org/pub/fedora/linux/releases/43/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" "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", "filename": "fedora-cloud-init-data.iso",
@ -53,16 +69,30 @@
], ],
"versions": [ "versions": [
{ {
"name": "39-1.5", "name": "44-1.7",
"images": { "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" "cdrom_image": "fedora-cloud-init-data.iso"
} }
}, },
{ {
"name": "38-1.6", "name": "43-1.6",
"images": { "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" "cdrom_image": "fedora-cloud-init-data.iso"
} }
} }

View File

@ -29,6 +29,27 @@
"kvm": "allow" "kvm": "allow"
}, },
"images": [ "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", "filename": "FAZ_VM64_KVM-v7.4.3-build2487-FORTINET.out.kvm.qcow2",
"version": "7.4.3", "version": "7.4.3",
@ -277,6 +298,27 @@
} }
], ],
"versions": [ "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", "name": "7.4.3",
"images": { "images": {

View File

@ -28,6 +28,27 @@
"kvm": "allow" "kvm": "allow"
}, },
"images": [ "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", "filename": "FGT_VM64_KVM-v7.4.4.F-build2662-FORTINET.out.kvm.qcow2",
"version": "7.4.4", "version": "7.4.4",
@ -388,6 +409,27 @@
} }
], ],
"versions": [ "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", "name": "7.4.4",
"images": { "images": {

View File

@ -30,489 +30,55 @@
}, },
"images": [ "images": [
{ {
"filename": "FMG_VM64_KVM-v7.4.3-build2487-FORTINET.out.kvm.qcow2", "filename": "FMG_VM64_KVM-v7.4.6.M-build2588-FORTINET.out.kvm.qcow2",
"version": "7.4.23", "version": "7.4.6",
"md5sum": "b01d9f86aa27c538407d518df1326863", "md5sum": "7cb219e1070d393f61cf750d818b23b1",
"filesize": 346107904, "filesize": 349122560,
"download_url": "https://support.fortinet.com/Download/FirmwareImages.aspx" "download_url": "https://support.fortinet.com/Download/FirmwareImages.aspx"
}, },
{ {
"filename": "FMG_VM64_KVM-v7.4.2-build2397-FORTINET.out.kvm.qcow2", "filename": "FMG_VM64_KVM-v7.4.5.M-build2553-FORTINET.out.kvm.qcow2",
"version": "7.4.2", "version": "7.4.5",
"md5sum": "36371fbf06210ded57c00b2ff290f2c5", "md5sum": "fa59ddce0cb933741f16866472026723",
"filesize": 322514944, "filesize": 349769728,
"download_url": "https://support.fortinet.com/Download/FirmwareImages.aspx" "download_url": "https://support.fortinet.com/Download/FirmwareImages.aspx"
}, },
{ {
"filename": "FMG_VM64_KVM-v7.4.1-build2308-FORTINET.out.kvm.qcow2", "filename": "FMG_VM64_KVM-v7.4.4.F-build2550-FORTINET.out.kvm.qcow2",
"version": "7.4.1", "version": "7.4.4",
"md5sum": "e542cc8f2d8f46e9c32b783bf31bef39", "md5sum": "770727bb30555e6938308bbf95f19555",
"filesize": 309387264, "filesize": 349847552,
"download_url": "https://support.fortinet.com/Download/FirmwareImages.aspx" "download_url": "https://support.fortinet.com/Download/FirmwareImages.aspx"
}, },
{ {
"filename": "FMG_VM64_KVM-v7.2.5-build1574-FORTINET.out.kvm.qcow2", "filename": "empty500G.qcow2",
"version": "7.2.5",
"md5sum": "754326845096afd909ec45d98f8d5a83",
"filesize": 278401024,
"download_url": "https://support.fortinet.com/Download/FirmwareImages.aspx"
},
{
"filename": "FMG_VM64_KVM-v7.2.4-build1460-FORTINET.out.kvm.qcow2",
"version": "7.2.4",
"md5sum": "98fa9830d9ecb5911a703d03b80026b6",
"filesize": 261992448,
"download_url": "https://support.fortinet.com/Download/FirmwareImages.aspx"
},
{
"filename": "FMG_VM64_KVM-v7.2.2-build1334-FORTINET.out.kvm.qcow2",
"version": "7.2.2",
"md5sum": "2ff1298257321cd485d2cad91d6ce510",
"filesize": 246083584,
"download_url": "https://support.fortinet.com/Download/FirmwareImages.aspx"
},
{
"filename": "FMG_VM64_KVM-v7.2.1-build1215-FORTINET.out.kvm.qcow2",
"version": "7.2.1",
"md5sum": "1a3eeff1204fa8f4243773f7521e12b5",
"filesize": 242814976,
"download_url": "https://support.fortinet.com/Download/FirmwareImages.aspx"
},
{
"filename": "FMG_VM64_KVM-v7.0.12-build0623-FORTINET.out.kvm.qcow2",
"version": "7.0.12",
"md5sum": "5b6f6a2b8bc00e56337aa7023a9025cf",
"filesize": 249520128,
"download_url": "https://support.fortinet.com/Download/FirmwareImages.aspx"
},
{
"filename": "FMG_VM64_KVM-v7.0.11-build0595-FORTINET.out.kvm.qcow2",
"version": "7.0.11",
"md5sum": "7b166222136e26190159f37cccbaab6e",
"filesize": 249360384,
"download_url": "https://support.fortinet.com/Download/FirmwareImages.aspx"
},
{
"filename": "FMG_VM64_KVM-v7.0.9-build0489-FORTINET.out.kvm.qcow2",
"version": "7.0.9",
"md5sum": "dbeb6a79b6e421000573dbbbdb50b8b5",
"filesize": 247955456,
"download_url": "https://support.fortinet.com/Download/FirmwareImages.aspx"
},
{
"filename": "FMG_VM64_KVM-v7.0.6-build0372-FORTINET.out.kvm.qcow2",
"version": "7.0.6",
"md5sum": "dfa4df9e976ed87e73cb9601a8a70323",
"filesize": 239190016,
"download_url": "https://support.fortinet.com/Download/FirmwareImages.aspx"
},
{
"filename": "FMG_VM64_KVM-v7.0.5-build0365-FORTINET.out.kvm.qcow2",
"version": "7.0.5",
"md5sum": "e8b9c992784cea766b52a427a5fe0279",
"filesize": 237535232,
"download_url": "https://support.fortinet.com/Download/FirmwareImages.aspx"
},
{
"filename": "FMG_VM64_KVM-v6.4.14-build2660-FORTINET.out.kvm.qcow2",
"version": "6.4.14",
"md5sum": "0fe56e363b166c07b710bde795e36049",
"filesize": 219430912,
"download_url": "https://support.fortinet.com/Download/FirmwareImages.aspx"
},
{
"filename": "FMG_VM64_KVM-v6.4.12-build2610-FORTINET.out.kvm.qcow2",
"version": "6.4.12",
"md5sum": "36c0dc531d921e5f1e1e09b030f7c813",
"filesize": 219455488,
"download_url": "https://support.fortinet.com/Download/FirmwareImages.aspx"
},
{
"filename": "FMG_VM64_KVM-v6-build2288-FORTINET.out.kvm.qcow2",
"version": "6.4.5",
"md5sum": "bd2791984b03f55a6825297e83c6576a",
"filesize": 117014528,
"download_url": "https://support.fortinet.com/Download/FirmwareImages.aspx"
},
{
"filename": "FMG_VM64_KVM-v6-build2253-FORTINET.out.kvm.qcow2",
"version": "6.4.4",
"md5sum": "3554a47fde2dc91d17eec16fd0dc10a3",
"filesize": 116621312,
"download_url": "https://support.fortinet.com/Download/FirmwareImages.aspx"
},
{
"filename": "FMG_VM64_KVM-v6-build1183-FORTINET.out.kvm.qcow2",
"version": "6.2.2",
"md5sum": "f5051a8fe49d916bb554b9bae32a1eb4",
"filesize": 139145216,
"download_url": "https://support.fortinet.com/Download/FirmwareImages.aspx"
},
{
"filename": "FMG_VM64_KVM-v6-build1050-FORTINET.out.kvm.qcow2",
"version": "6.2.0",
"md5sum": "c19d2527f91ad1bbafbde5bf08487867",
"filesize": 126894080,
"download_url": "https://support.fortinet.com/Download/FirmwareImages.aspx"
},
{
"filename": "FMG_VM64_KVM-v6-build0349-FORTINET.out.kvm.qcow2",
"version": "6.0.6",
"md5sum": "d03f024c948ba6e2bb9e66c11ca8f34c",
"filesize": 112553984,
"download_url": "https://support.fortinet.com/Download/FirmwareImages.aspx"
},
{
"filename": "FMG_VM64_KVM-v6-build0255-FORTINET.out.kvm.qcow2",
"version": "6.0.3",
"md5sum": "5f34d52d9289b0be2a4c04943446ea39",
"filesize": 115703808,
"download_url": "https://support.fortinet.com/Download/FirmwareImages.aspx"
},
{
"filename": "FMG_VM64_KVM-v6-build0205-FORTINET.out.kvm.qcow2",
"version": "6.0.2",
"md5sum": "8f748649c537d9b5466b24c5b4e62017",
"filesize": 116981760,
"download_url": "https://support.fortinet.com/Download/FirmwareImages.aspx"
},
{
"filename": "FMG_VM64_KVM-v6-build0092-FORTINET.out.kvm.qcow2",
"version": "6.0.0",
"md5sum": "73bfe1bc70124521a524d857646b9c2e",
"filesize": 119066624,
"download_url": "https://support.fortinet.com/Download/FirmwareImages.aspx"
},
{
"filename": "FMG_VM64_KVM-v5-build1631-FORTINET.out.kvm.qcow2",
"version": "5.6.2",
"md5sum": "c81cc247e8eb03249b475fe0e847653e",
"filesize": 106946560,
"download_url": "https://support.fortinet.com/Download/FirmwareImages.aspx"
},
{
"filename": "FMG_VM64_KVM-v5-build1619-FORTINET.out.kvm.qcow2",
"version": "5.6.1",
"md5sum": "8cc553842564d232af295d6a0c784c1f",
"filesize": 106831872,
"download_url": "https://support.fortinet.com/Download/FirmwareImages.aspx"
},
{
"filename": "FMG_VM64_KVM-v5-build1557-FORTINET.out.kvm.qcow2",
"version": "5.6.0",
"md5sum": "f8bd600796f894f4ca1ea2d6b4066d3d",
"filesize": 108363776,
"download_url": "https://support.fortinet.com/Download/FirmwareImages.aspx"
},
{
"filename": "FMG_VM64_KVM-v5-build1225-FORTINET.out.kvm.qcow2",
"version": "5.4.4",
"md5sum": "53bc6e320fe7bde5d2b636bde95a910c",
"filesize": 89911296,
"download_url": "https://support.fortinet.com/Download/FirmwareImages.aspx"
},
{
"filename": "FMG_VM64_KVM-v5-build1187-FORTINET.out.kvm.qcow2",
"version": "5.4.3",
"md5sum": "53602c776d215d98e32163a10804fc49",
"filesize": 87425024,
"download_url": "https://support.fortinet.com/Download/FirmwareImages.aspx"
},
{
"filename": "FMG_VM64_KVM-v5-build1151-FORTINET.out.kvm.qcow2",
"version": "5.4.2",
"md5sum": "8e131ad40009c740f3efdee6dc3a0ac3",
"filesize": 86437888,
"download_url": "https://support.fortinet.com/Download/FirmwareImages.aspx"
},
{
"filename": "FMG_VM64_KVM-v5-build1082-FORTINET.out.kvm.qcow2",
"version": "5.4.1",
"md5sum": "fc1815410f3f0536e2e3a9c1c5c07f41",
"filesize": 83124224,
"download_url": "https://support.fortinet.com/Download/FirmwareImages.aspx"
},
{
"filename": "FMG_VM64_KVM-v5-build1019-FORTINET.out.kvm.qcow2",
"version": "5.4.0",
"md5sum": "1cfb22671cb372d8bf3e47b9c3c55ded",
"filesize": 77541376,
"download_url": "https://support.fortinet.com/Download/FirmwareImages.aspx"
},
{
"filename": "FMG_VM64_KVM-v5-build0786-FORTINET.out.kvm.qcow2",
"version": "5.2.10",
"md5sum": "377fe38bf07bc2435608e5b65f780f07",
"filesize": 64962560,
"download_url": "https://support.fortinet.com/Download/FirmwareImages.aspx"
},
{
"filename": "FMG_VM64_KVM-v5-build0780-FORTINET.out.kvm.qcow2",
"version": "5.2.9",
"md5sum": "04268e779d3d5e6c928c6fd638423c52",
"filesize": 65007616,
"download_url": "https://support.fortinet.com/Download/FirmwareImages.aspx"
},
{
"filename": "FMG_VM64_KVM-v5-build0777-FORTINET.out.kvm.qcow2",
"version": "5.2.8",
"md5sum": "6dbf148ace9bf309ad383757afd75fad",
"filesize": 65011712,
"download_url": "https://support.fortinet.com/Download/FirmwareImages.aspx"
},
{
"filename": "FMG_VM64_KVM-v5-build0757-FORTINET.out.kvm.qcow2",
"version": "5.2.7",
"md5sum": "d37dbaa49d7522324681eeba19f7699b",
"filesize": 65056768,
"download_url": "https://support.fortinet.com/Download/FirmwareImages.aspx"
},
{
"filename": "empty30G.qcow2",
"version": "1.0", "version": "1.0",
"md5sum": "3411a599e822f2ac6be560a26405821a", "md5sum": "658c825441b9b3080ba00f9eec002eaa",
"filesize": 197120, "filesize": 204608,
"download_url": "https://sourceforge.net/projects/gns-3/files/Empty%20Qemu%20disk/", "download_url": "https://sourceforge.net/projects/gns-3/files/Empty%20Qemu%20disk/",
"direct_download_url": "https://sourceforge.net/projects/gns-3/files/Empty%20Qemu%20disk/empty30G.qcow2/download" "direct_download_url": "https://sourceforge.net/projects/gns-3/files/Empty%20Qemu%20disk/empty500G.qcow2/download"
} }
], ],
"versions": [ "versions": [
{ {
"name": "7.4.3", "name": "7.4.6",
"images": { "images": {
"hda_disk_image": "FMG_VM64_KVM-v7.4.3-build2487-FORTINET.out.kvm.qcow2", "hda_disk_image": "FMG_VM64_KVM-v7.4.6.M-build2588-FORTINET.out.kvm.qcow2",
"hdb_disk_image": "empty30G.qcow2" "hdb_disk_image": "empty500G.qcow2"
} }
}, },
{ {
"name": "7.4.2", "name": "7.4.5",
"images": { "images": {
"hda_disk_image": "FMG_VM64_KVM-v7.4.2-build2397-FORTINET.out.kvm.qcow2", "hda_disk_image": "FMG_VM64_KVM-v7.4.5.M-build2553-FORTINET.out.kvm.qcow2",
"hdb_disk_image": "empty30G.qcow2" "hdb_disk_image": "empty500G.qcow2"
} }
}, },
{ {
"name": "7.4.1", "name": "7.4.4",
"images": { "images": {
"hda_disk_image": "FMG_VM64_KVM-v7.4.1-build2308-FORTINET.out.kvm.qcow2", "hda_disk_image": "FMG_VM64_KVM-v7.4.4.F-build2550-FORTINET.out.kvm.qcow2",
"hdb_disk_image": "empty30G.qcow2" "hdb_disk_image": "empty500G.qcow2"
}
},
{
"name": "7.2.5",
"images": {
"hda_disk_image": "FMG_VM64_KVM-v7.2.5-build1574-FORTINET.out.kvm.qcow2",
"hdb_disk_image": "empty30G.qcow2"
}
},
{
"name": "7.2.4",
"images": {
"hda_disk_image": "FMG_VM64_KVM-v7.2.4-build1460-FORTINET.out.kvm.qcow2",
"hdb_disk_image": "empty30G.qcow2"
}
},
{
"name": "7.2.2",
"images": {
"hda_disk_image": "FMG_VM64_KVM-v7.2.2-build1334-FORTINET.out.kvm.qcow2",
"hdb_disk_image": "empty30G.qcow2"
}
},
{
"name": "7.2.1",
"images": {
"hda_disk_image": "FMG_VM64_KVM-v7.2.1-build1215-FORTINET.out.kvm.qcow2",
"hdb_disk_image": "empty30G.qcow2"
}
},
{
"name": "7.0.12",
"images": {
"hda_disk_image": "FMG_VM64_KVM-v7.0.12-build0623-FORTINET.out.kvm.qcow2",
"hdb_disk_image": "empty30G.qcow2"
}
},
{
"name": "7.0.11",
"images": {
"hda_disk_image": "FMG_VM64_KVM-v7.0.11-build0595-FORTINET.out.kvm.qcow2",
"hdb_disk_image": "empty30G.qcow2"
}
},
{
"name": "7.0.9",
"images": {
"hda_disk_image": "FMG_VM64_KVM-v7.0.9-build0489-FORTINET.out.kvm.qcow2",
"hdb_disk_image": "empty30G.qcow2"
}
},
{
"name": "7.0.6",
"images": {
"hda_disk_image": "FMG_VM64_KVM-v7.0.6-build0372-FORTINET.out.kvm.qcow2",
"hdb_disk_image": "empty30G.qcow2"
}
},
{
"name": "7.0.5",
"images": {
"hda_disk_image": "FMG_VM64_KVM-v7.0.5-build0365-FORTINET.out.kvm.qcow2",
"hdb_disk_image": "empty30G.qcow2"
}
},
{
"name": "6.4.14",
"images": {
"hda_disk_image": "FMG_VM64_KVM-v6.4.14-build2660-FORTINET.out.kvm.qcow2",
"hdb_disk_image": "empty30G.qcow2"
}
},
{
"name": "6.4.12",
"images": {
"hda_disk_image": "FMG_VM64_KVM-v6.4.12-build2610-FORTINET.out.kvm.qcow2",
"hdb_disk_image": "empty30G.qcow2"
}
},
{
"name": "6.4.5",
"images": {
"hda_disk_image": "FMG_VM64_KVM-v6-build2288-FORTINET.out.kvm.qcow2",
"hdb_disk_image": "empty30G.qcow2"
}
},
{
"name": "6.4.4",
"images": {
"hda_disk_image": "FMG_VM64_KVM-v6-build2253-FORTINET.out.kvm.qcow2",
"hdb_disk_image": "empty30G.qcow2"
}
},
{
"name": "6.2.2",
"images": {
"hda_disk_image": "FMG_VM64_KVM-v6-build1183-FORTINET.out.kvm.qcow2",
"hdb_disk_image": "empty30G.qcow2"
}
},
{
"name": "6.2.0",
"images": {
"hda_disk_image": "FMG_VM64_KVM-v6-build1050-FORTINET.out.kvm.qcow2",
"hdb_disk_image": "empty30G.qcow2"
}
},
{
"name": "6.0.6",
"images": {
"hda_disk_image": "FMG_VM64_KVM-v6-build0349-FORTINET.out.kvm.qcow2",
"hdb_disk_image": "empty30G.qcow2"
}
},
{
"name": "6.0.3",
"images": {
"hda_disk_image": "FMG_VM64_KVM-v6-build0255-FORTINET.out.kvm.qcow2",
"hdb_disk_image": "empty30G.qcow2"
}
},
{
"name": "6.0.2",
"images": {
"hda_disk_image": "FMG_VM64_KVM-v6-build0205-FORTINET.out.kvm.qcow2",
"hdb_disk_image": "empty30G.qcow2"
}
},
{
"name": "6.0.0",
"images": {
"hda_disk_image": "FMG_VM64_KVM-v6-build0092-FORTINET.out.kvm.qcow2",
"hdb_disk_image": "empty30G.qcow2"
}
},
{
"name": "5.6.2",
"images": {
"hda_disk_image": "FMG_VM64_KVM-v5-build1631-FORTINET.out.kvm.qcow2",
"hdb_disk_image": "empty30G.qcow2"
}
},
{
"name": "5.6.1",
"images": {
"hda_disk_image": "FMG_VM64_KVM-v5-build1619-FORTINET.out.kvm.qcow2",
"hdb_disk_image": "empty30G.qcow2"
}
},
{
"name": "5.6.0",
"images": {
"hda_disk_image": "FMG_VM64_KVM-v5-build1557-FORTINET.out.kvm.qcow2",
"hdb_disk_image": "empty30G.qcow2"
}
},
{
"name": "5.4.4",
"images": {
"hda_disk_image": "FMG_VM64_KVM-v5-build1225-FORTINET.out.kvm.qcow2",
"hdb_disk_image": "empty30G.qcow2"
}
},
{
"name": "5.4.3",
"images": {
"hda_disk_image": "FMG_VM64_KVM-v5-build1187-FORTINET.out.kvm.qcow2",
"hdb_disk_image": "empty30G.qcow2"
}
},
{
"name": "5.4.2",
"images": {
"hda_disk_image": "FMG_VM64_KVM-v5-build1151-FORTINET.out.kvm.qcow2",
"hdb_disk_image": "empty30G.qcow2"
}
},
{
"name": "5.4.1",
"images": {
"hda_disk_image": "FMG_VM64_KVM-v5-build1082-FORTINET.out.kvm.qcow2",
"hdb_disk_image": "empty30G.qcow2"
}
},
{
"name": "5.4.0",
"images": {
"hda_disk_image": "FMG_VM64_KVM-v5-build1019-FORTINET.out.kvm.qcow2",
"hdb_disk_image": "empty30G.qcow2"
}
},
{
"name": "5.2.10",
"images": {
"hda_disk_image": "FMG_VM64_KVM-v5-build0786-FORTINET.out.kvm.qcow2",
"hdb_disk_image": "empty30G.qcow2"
}
},
{
"name": "5.2.9",
"images": {
"hda_disk_image": "FMG_VM64_KVM-v5-build0780-FORTINET.out.kvm.qcow2",
"hdb_disk_image": "empty30G.qcow2"
}
},
{
"name": "5.2.8",
"images": {
"hda_disk_image": "FMG_VM64_KVM-v5-build0777-FORTINET.out.kvm.qcow2",
"hdb_disk_image": "empty30G.qcow2"
}
},
{
"name": "5.2.7",
"images": {
"hda_disk_image": "FMG_VM64_KVM-v5-build0757-FORTINET.out.kvm.qcow2",
"hdb_disk_image": "empty30G.qcow2"
} }
} }
] ]

View File

@ -25,19 +25,19 @@
}, },
"images": [ "images": [
{ {
"filename": "rtr.qcow2", "filename": "rtr-x86_64.qcow2",
"version": "20.7.1", "version": "25.8.29",
"md5sum": "4707415d15d20ced92423d90e52eedcd", "md5sum": "13d72fdfd772258808a9d4b75fa67083",
"filesize": 254767616, "filesize": 73269248,
"download_url": "http://freerouter.nop.hu/", "download_url": "http://www.freertr.org/",
"direct_download_url": "http://dl.nop.hu/rtr.qcow2" "direct_download_url": "http://dl.nop.hu/rtr-x86_64.qcow2"
} }
], ],
"versions": [ "versions": [
{ {
"name": "20.7.1", "name": "25.8.29",
"images": { "images": {
"hda_disk_image": "rtr.qcow2" "hda_disk_image": "rtr-x86_64.qcow2"
} }
} }
] ]

View File

@ -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"
}
]
}

View File

@ -1,5 +1,6 @@
{ {
"appliance_id": "bd86792e-9870-4b42-8f16-cb2776f1d5d5", "appliance_id": "bd86792e-9870-4b42-8f16-cb2776f1d5d5",
"tags": ["device_type:gns3_huawei_telnet_ce"],
"name": "HuaWei CE12800", "name": "HuaWei CE12800",
"category": "multilayer_switch", "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.", "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.",

View File

@ -0,0 +1,258 @@
{
"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"
},
{
"filename": "infix-x86_64-v26.05.0.qcow2",
"filesize": 330039296,
"md5sum": "60f7c36c389c33ab108acc021f41ccd5",
"version": "26.05.0",
"direct_download_url": "https://github.com/kernelkit/infix/releases/download/v26.05.0/infix-x86_64-v26.05.0.qcow2"
},
{
"filename": "infix-x86_64-v26.06.0.qcow2",
"filesize": 363593728,
"md5sum": "79ca8bd8534bbaa1af0ab874a49d6f4c",
"version": "26.06.0",
"direct_download_url": "https://github.com/kernelkit/infix/releases/download/v26.06.0/infix-x86_64-v26.06.0.qcow2"
}
],
"versions": [
{
"name": "26.06.0",
"images": {
"bios_image": "OVMF-edk2-stable202305.fd",
"hda_disk_image": "infix-x86_64-v26.06.0.qcow2"
}
},
{
"name": "26.05.0",
"images": {
"bios_image": "OVMF-edk2-stable202305.fd",
"hda_disk_image": "infix-x86_64-v26.05.0.qcow2"
}
},
{
"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"
}
}
]
}

View File

@ -0,0 +1,50 @@
{
"appliance_id": "92dbd0e9-144e-4c59-a4a8-97b6a1661818",
"name": "Innovaphone App-Platform",
"category": "guest",
"description": "In addition to telephony, apps for Video Telephony, Chat, Conferencing, Application Sharing and many other functions have become indispensable UCC tools in the area of business communication. Based on the myApps platform and its various components, innovaphone provides a collaborative work and communication platform for enhanced corporate communications \u2013 regardless of the location and the device being used. The innovaphone platform myApps consists of many independent components that work well individually, yet unfold their remarkable performance when combined.",
"vendor_name": "Innovaphone",
"vendor_url": "https://www.innovaphone.com",
"vendor_logo_url": "https://www.innovaphone.com/content/downloads/innovaphone-myapps-logo-short-without-background-screen.png",
"documentation_url": "https://wiki.innovaphone.com/index.php?title=Reference14r2:Concept_App_Platform",
"product_name": "App-Platform",
"product_url": "https://www.innovaphone.com/en/products/myapps/myapps-platform.html",
"registry_version": 4,
"status": "experimental",
"availability": "free-to-try",
"maintainer": "Thomas Marchsteiner",
"maintainer_email": "thomas.marchsteiner@acp.at",
"usage": "Default users console:root/iplinux , ssh:admin/ipapps , Webinterface:pwd \nAfter first boot wait for automatic reboot.\nA static ip can be set via the setip utility. \nLoading another keymap can be done via the loadkeys command. \nThe app-platform-disk1.vmdk file is contained within an ova file. \nIt can be extraced with the tar utility, 7Zip or any other tool which can handle tar files.",
"symbol": "innovaphone-ap-icon.jpg",
"first_port_name": "eth0",
"qemu": {
"adapter_type": "vmxnet3",
"adapters": 1,
"ram": 512,
"cpus": 1,
"hda_disk_interface": "scsi",
"arch": "x86_64",
"console_type": "vnc",
"boot_priority": "d",
"kvm": "allow",
"on_close": "power_off",
"process_priority": "normal"
},
"images": [
{
"filename": "app-platform-disk1_120010.vmdk",
"version": "12.0010",
"md5sum": "d5a5a77f682c2c988b0810935d79a787",
"filesize": 129474560,
"download_url": "https://store.innovaphone.com/"
}
],
"versions": [
{
"images": {
"hda_disk_image": "app-platform-disk1_120010.vmdk"
},
"name": "12.0010"
}
]
}

View File

@ -0,0 +1,78 @@
{
"appliance_id": "ddf8f7a4-60c0-4c9d-849c-ffc3c9d1d082",
"name": "Innovaphone IPVA",
"category": "guest",
"description": "The innovaphone PBX is a professional IP telephone system. The IPVA is a software-only solution. It appears as and performs as an innovaphone 'hard-box' excluding DSP-, ISDN-/AB-resources.",
"vendor_name": "Innovaphone",
"vendor_url": "https://www.innovaphone.com/",
"vendor_logo_url": "https://www.innovaphone.com/content/downloads/innovaphone-myapps-logo-short-without-background-screen.png",
"documentation_url": "https://wiki.innovaphone.com/index.php?title=Reference15r1:Concept_Innovaphone_Virtual_Appliance_(IPVA)",
"product_name": "IPVA",
"product_url": "https://www.innovaphone.com/en/products/innovaphone-pbx.html",
"registry_version": 4,
"status": "experimental",
"availability": "free-to-try",
"maintainer": "Thomas Marchsteiner",
"maintainer_email": "thomas.marchsteiner@acp.at",
"usage": "Default user admin/ipva \nDefault network configuration: DHCP client on eth0 with fallback to static address 192.168.0.1/24 after timeout. Static address 192.168.1.1/24 on eth1\n The ova in the zip file contains the disk images to run this appliance. Disableing the dhcp client and setting a static IP is possible with the following commands:\n> config change IP0 ETH0 /addr 192.168.0.1 /mask 255.255.255.0 \n> config change DHCP0 /mode off \n> config write \n> config activate \n> reset",
"symbol": "innovaphone-pbx-green.png",
"first_port_name": "eth0",
"port_name_format": "eth{port1}",
"qemu": {
"adapter_type": "vmxnet3",
"adapters": 2,
"ram": 256,
"cpus": 1,
"hda_disk_interface": "ide",
"hdb_disk_interface": "ide",
"hdc_disk_interface": "ide",
"hdd_disk_interface": "ide",
"arch": "x86_64",
"console_type": "vnc",
"boot_priority": "d",
"kvm": "allow",
"on_close": "power_off",
"process_priority": "normal"
},
"images": [
{
"filename": "ipva-qemu-disk1-14r2.vmdk",
"version": "14r2",
"md5sum": "aaa1c3885eee30ca6ffa3827619e8643",
"filesize": 6269952,
"download_url": "https://store.innovaphone.com/"
},
{
"filename": "ipva-qemu-disk2-14r2.vmdk",
"version": "14r2",
"md5sum": "008a8fc6b0b1e5f11a3e7fd6f22ba349",
"filesize": 72192,
"download_url": "https://store.innovaphone.com/"
},
{
"filename": "ipva-qemu-disk3-14r2.vmdk",
"version": "14r2",
"md5sum": "20516731c480e2112b3fb4a4d7f514f2",
"filesize": 68096,
"download_url": "https://store.innovaphone.com/"
},
{
"filename": "ipva-qemu-disk4-14r2.vmdk",
"version": "14r2",
"md5sum": "15d7d79ef8c28bd29b2eceac8405f964",
"filesize": 68096,
"download_url": "https://store.innovaphone.com/"
}
],
"versions": [
{
"images": {
"hda_disk_image": "ipva-qemu-disk1-14r2.vmdk",
"hdb_disk_image": "ipva-qemu-disk2-14r2.vmdk",
"hdc_disk_image": "ipva-qemu-disk3-14r2.vmdk",
"hdd_disk_image": "ipva-qemu-disk4-14r2.vmdk"
},
"name": "14r2"
}
]
}

View File

@ -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"
}
]
}

View File

@ -11,237 +11,34 @@
"status": "stable", "status": "stable",
"maintainer": "GNS3 Team", "maintainer": "GNS3 Team",
"maintainer_email": "developers@gns3.net", "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}", "port_name_format": "eth{0}",
"qemu": { "qemu": {
"adapter_type": "e1000", "adapter_type": "e1000",
"adapters": 8, "adapters": 8,
"ram": 1024, "ram": 2048,
"cpus": 2,
"hda_disk_interface": "ide", "hda_disk_interface": "ide",
"arch": "x86_64", "arch": "x86_64",
"console_type": "vnc", "console_type": "vnc",
"boot_priority": "d",
"kvm": "require" "kvm": "require"
}, },
"images": [ "images": [
{ {
"filename": "kali-linux-2021.1-live-amd64.iso", "filename": "kali-linux-2025.4-qemu-amd64.qcow2",
"version": "2021.1", "version": "2025.4",
"md5sum": "3a3716fef866e5c29a1c1ccfc94264b5", "md5sum": "a4be43351b5deb5b2823cb38a73b2095",
"filesize": 3591385088, "filesize": 15719268352,
"download_url": "http://cdimage.kali.org/kali-2021.1/", "download_url": "https://cdimage.kali.org/kali-2025.4/",
"direct_download_url": "http://cdimage.kali.org/kali-2021.1/kali-linux-2021.1-live-amd64.iso" "direct_download_url": "https://cdimage.kali.org/kali-2025.4/kali-linux-2025.4-qemu-amd64.7z",
}, "compression": "7z"
{
"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"
} }
], ],
"versions": [ "versions": [
{ {
"name": "2021.1", "name": "2025.4",
"images": { "images": {
"hda_disk_image": "kali-linux-persistence-1gb.qcow2", "hda_disk_image": "kali-linux-2025.4-qemu-amd64.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"
} }
} }
] ]

View File

@ -27,6 +27,24 @@
"options": "-nographic" "options": "-nographic"
}, },
"images": [ "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", "filename": "chr-7.16.img",
"version": "7.16", "version": "7.16",
@ -74,6 +92,18 @@
} }
], ],
"versions": [ "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", "name": "7.16",
"images": { "images": {

View File

@ -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"
}
}

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"
}
}
]
}

View File

@ -23,6 +23,24 @@
"kvm": "allow" "kvm": "allow"
}, },
"images": [ "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", "filename": "openwrt-23.05.0-x86-64-generic-ext4-combined.img",
"version": "23.05.0", "version": "23.05.0",
@ -223,7 +241,19 @@
} }
], ],
"versions": [ "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", "name": "23.05.0",
"images": { "images": {
"hda_disk_image": "openwrt-23.05.0-x86-64-generic-ext4-combined.img" "hda_disk_image": "openwrt-23.05.0-x86-64-generic-ext4-combined.img"

View File

@ -25,6 +25,29 @@
"kvm": "require" "kvm": "require"
}, },
"images": [ "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", "filename": "OPNsense-24.7-nano-amd64.img",
"version": "24.7", "version": "24.7",
@ -76,6 +99,24 @@
} }
], ],
"versions": [ "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", "name": "24.7",
"images": { "images": {

View File

@ -17,7 +17,7 @@
"qemu": { "qemu": {
"adapter_type": "virtio-net-pci", "adapter_type": "virtio-net-pci",
"adapters": 1, "adapters": 1,
"ram": 1024, "ram": 1536,
"hda_disk_interface": "virtio", "hda_disk_interface": "virtio",
"arch": "x86_64", "arch": "x86_64",
"console_type": "telnet", "console_type": "telnet",
@ -27,44 +27,36 @@
}, },
"images": [ "images": [
{ {
"filename": "OL9U2_x86_64-kvm-b197.qcow", "filename": "OL10U1_x86_64-kvm-b270.qcow2",
"version": "9.2", "version": "10.1",
"md5sum": "2ff3d0bc8a243ad89c96215f303f1c73", "md5sum": "c3ed48965110e0cbbd75734d3c23a2ce",
"filesize": 560791552, "filesize": 1044119552,
"download_url": "https://yum.oracle.com/oracle-linux-templates.html", "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", "filename": "OL9U7_x86_64-kvm-b269.qcow2",
"version": "9.1", "version": "9.7",
"md5sum": "9f32851b96fc38191892197fa11f7435", "md5sum": "fe0c555620d2001bb4d4d95a53b43738",
"filesize": 539033600, "filesize": 792985600,
"download_url": "https://yum.oracle.com/oracle-linux-templates.html", "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", "filename": "OL8U10_x86_64-kvm-b271.qcow2",
"version": "8.8", "version": "8.10",
"md5sum": "717622f373d77349cc102a3a325efbd3", "md5sum": "f3184e536af1c2aba6b6f499b1a7085a",
"filesize": 934215680, "filesize": 1585643520,
"download_url": "https://yum.oracle.com/oracle-linux-templates.html", "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", "filename": "OL7U9_x86_64-kvm-b257.qcow2",
"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",
"version": "7.9", "version": "7.9",
"md5sum": "e60d4145a69b34026db6121109ca9131", "md5sum": "d3af7cf0b8f44d298a67ce9ebe184494",
"filesize": 725221376, "filesize": 998244352,
"download_url": "https://yum.oracle.com/oracle-linux-templates.html", "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", "filename": "oracle-cloud-init-data.iso",
@ -76,38 +68,31 @@
} }
], ],
"versions": [ "versions": [
{ {
"name": "9.2", "name": "10.1",
"images": { "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" "cdrom_image": "oracle-cloud-init-data.iso"
} }
}, },
{ {
"name": "9.1", "name": "9.7",
"images": { "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" "cdrom_image": "oracle-cloud-init-data.iso"
} }
}, },
{ {
"name": "8.8", "name": "8.10",
"images": { "images": {
"hda_disk_image": "OL8U8_x86_64-kvm-b198.qcow", "hda_disk_image": "OL8U10_x86_64-kvm-b271.qcow2",
"cdrom_image": "oracle-cloud-init-data.iso"
}
},
{
"name": "8.7",
"images": {
"hda_disk_image": "OL8U7_x86_64-kvm-b148.qcow",
"cdrom_image": "oracle-cloud-init-data.iso" "cdrom_image": "oracle-cloud-init-data.iso"
} }
}, },
{ {
"name": "7.9", "name": "7.9",
"images": { "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" "cdrom_image": "oracle-cloud-init-data.iso"
} }
} }

View File

@ -24,6 +24,13 @@
"process_priority": "normal" "process_priority": "normal"
}, },
"images": [ "images": [
{
"filename": "pfSense-CE-2.7.2-RELEASE-amd64.iso",
"version": "2.7.2",
"md5sum": "50c3e723d68ec74d038041a34fa846f8",
"filesize": 874672128,
"download_url": "https://www.pfsense.org/download/mirror.php?section=downloads"
},
{ {
"filename": "pfSense-CE-2.7.0-RELEASE-amd64.iso", "filename": "pfSense-CE-2.7.0-RELEASE-amd64.iso",
"version": "2.7.0", "version": "2.7.0",
@ -76,6 +83,13 @@
} }
], ],
"versions": [ "versions": [
{
"name": "2.7.2",
"images": {
"hda_disk_image": "empty100G.qcow2",
"cdrom_image": "pfSense-CE-2.7.2-RELEASE-amd64.iso"
}
},
{ {
"name": "2.7.0", "name": "2.7.0",
"images": { "images": {

View File

@ -13,11 +13,11 @@
"availability": "service-contract", "availability": "service-contract",
"maintainer": "Da-Geek", "maintainer": "Da-Geek",
"maintainer_email": "dageek@dageeks-geeks.gg", "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": { "qemu": {
"adapter_type": "virtio-net-pci", "adapter_type": "virtio-net-pci",
"adapters": 1, "adapters": 1,
"ram": 1024, "ram": 1536,
"hda_disk_interface": "virtio", "hda_disk_interface": "virtio",
"arch": "x86_64", "arch": "x86_64",
"console_type": "telnet", "console_type": "telnet",
@ -27,32 +27,46 @@
}, },
"images": [ "images": [
{ {
"filename": "rhel-9.3-x86_64-kvm.qcow2", "filename": "rhel-10.1-x86_64-kvm.qcow2",
"version": "9.3", "version": "10.1",
"md5sum": "409d8d15f5177db2617b0e3e02139b5c", "md5sum": "b2f35b1ac0600de31cadf30a622a2fef",
"filesize": 858193920, "filesize": 1010827264,
"download_url": "https://access.redhat.com/downloads/content/479/ver=/rhel---9/9.3/x86_64/product-software" "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", "filename": "rhel-10.0-x86_64-kvm.qcow2",
"version": "9.2", "version": "10.0",
"md5sum": "f33845298b387dbcfbf162c6b4e3f8c8", "md5sum": "ea5918fa116ec53f9ef1ce4be69ae2be",
"filesize": 819265536, "filesize": 855506944,
"download_url": "https://access.redhat.com/downloads/content/479/ver=/rhel---8/9.2/x86_64/product-software" "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", "filename": "rhel-9.7-x86_64-kvm.qcow2",
"version": "9.1", "version": "9.7",
"md5sum": "622de743da83bcec1ad2959ecaedb8f4", "md5sum": "abc2f42cc5daeea6b03d0d2d478a0d1c",
"filesize": 753401856, "filesize": 1229979648,
"download_url": "https://access.redhat.com/downloads/content/479/ver=/rhel---8/9.1/x86_64/product-software" "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", "filename": "rhel-9.6-x86_64-kvm.qcow2",
"version": "9.0", "version": "9.6",
"md5sum": "4a41497d354fe99a4abf55f1ed73edcb", "md5sum": "056648d716275053ebe77b1d4f68c862",
"filesize": 696582144, "filesize": 1060438016,
"download_url": "https://access.redhat.com/downloads/content/479/ver=/rhel---8/9.0/x86_64/product-software" "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", "filename": "rhel-8.8-x86_64-kvm.qcow2",
@ -61,13 +75,6 @@
"filesize": 926810112, "filesize": 926810112,
"download_url": "https://access.redhat.com/downloads/content/479/ver=/rhel---8/8.8/x86_64/product-software" "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", "filename": "rhel-8.6-x86_64-kvm.qcow2",
"version": "8.6", "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" "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", "filename": "rhel-server-7.9-update-12-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",
"version": "7.9", "version": "7.9",
"md5sum": "8d6669b3e2bb8df15b9b4280936cf950", "md5sum": "f77fc7e3cf31a210a8244e486466ce34",
"filesize": 827777024, "filesize": 838036992,
"download_url": "https://access.redhat.com/downloads/content/69/ver=/rhel---7/7.9/x86_64/product-software" "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", "filename": "rhel-cloud-init.iso",
"version": "1.0", "version": "1.1",
"md5sum": "421745b0d13615ecd48696f98d8b6352", "md5sum": "f1f908d36e67f843dd94db1c2e8c8373",
"filesize": 374784, "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": [ "versions": [
{ {
"name": "9.3", "name": "10.1",
"images": { "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" "cdrom_image": "rhel-cloud-init.iso"
} }
}, },
{ {
"name": "9.2", "name": "10.0",
"images": { "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" "cdrom_image": "rhel-cloud-init.iso"
} }
}, },
{ {
"name": "9.1", "name": "9.7",
"images": { "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" "cdrom_image": "rhel-cloud-init.iso"
} }
}, },
{ {
"name": "9.0", "name": "9.6",
"images": { "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" "cdrom_image": "rhel-cloud-init.iso"
} }
}, },
@ -154,13 +155,6 @@
"cdrom_image": "rhel-cloud-init.iso" "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", "name": "8.6",
"images": { "images": {
@ -168,31 +162,10 @@
"cdrom_image": "rhel-cloud-init.iso" "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", "name": "7.9",
"images": { "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" "cdrom_image": "rhel-cloud-init.iso"
} }
}, },

View File

@ -17,7 +17,7 @@
"qemu": { "qemu": {
"adapter_type": "virtio-net-pci", "adapter_type": "virtio-net-pci",
"adapters": 1, "adapters": 1,
"ram": 1024, "ram": 1536,
"hda_disk_interface": "virtio", "hda_disk_interface": "virtio",
"arch": "x86_64", "arch": "x86_64",
"console_type": "telnet", "console_type": "telnet",
@ -26,6 +26,30 @@
"options": "-nographic -cpu host" "options": "-nographic -cpu host"
}, },
"images": [ "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", "filename": "Rocky-9-GenericCloud-Base-9.3-20231113.0.x86_64.qcow2",
"version": "9.3", "version": "9.3",
@ -68,6 +92,27 @@
} }
], ],
"versions": [ "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", "name": "9.3",
"images": { "images": {

View File

@ -0,0 +1,50 @@
{
"appliance_id": "60801097-332e-4f40-a63e-8ad62047c01f",
"name": "Stormshield EVA",
"category": "firewall",
"description": "Stormshield EVA (Elastic Virtual Appliance) is a french virtual firewall designed to protect network infrastructures. It offers advanced features such as filtering, intrusion prevention (IPS), VPN management (IPSec/SSL), and access control.",
"vendor_name": "Stormshield",
"vendor_url": "https://www.stormshield.com/",
"vendor_logo_url": "https://www.stormshield.com/wp-content/uploads/stormshield-logo.png",
"documentation_url": "https://www.stormshield.com/fr/ressourcescenter/network-security-elastic-virtual-appliances/",
"product_name": "Stormshield EVA",
"product_url": "https://www.stormshield.com/fr/produits-et-services/produits/protection-des-reseaux/nos-produits/appliances-virtuelles/",
"registry_version": 4,
"status": "stable",
"availability": "service-contract",
"maintainer": "Samy SCANNA",
"maintainer_email": "samy.scanna@outlook.com",
"usage": "After the first boot, the appliance automatically runs the configuration script to set up the password, and network interfaces.",
"symbol": "stormshield.png",
"port_name_format": "port{port1}",
"qemu": {
"adapter_type": "vmxnet3",
"adapters": 8,
"ram": 2048,
"cpus": 1,
"hda_disk_interface": "scsi",
"arch": "x86_64",
"console_type": "telnet",
"kvm": "allow",
"options": "-serial stdio",
"on_close": "shutdown_signal",
"process_priority": "normal"
},
"images": [
{
"filename": "utm-SNS-EVA-4.3.33-kvm.qcow2",
"version": "4.3.33",
"md5sum": "21d94d0e20f2e270f06c5853fd750d5b",
"filesize": 284360704,
"download_url": "https://mystormshield.eu/product/download/"
}
],
"versions": [
{
"images": {
"hda_disk_image": "utm-SNS-EVA-4.3.33-kvm.qcow2"
},
"name": "4.3.33"
}
]
}

View File

@ -2,7 +2,7 @@
"appliance_id": "ed6b9f98-7de2-4d61-a3ed-ad4c3e323ace", "appliance_id": "ed6b9f98-7de2-4d61-a3ed-ad4c3e323ace",
"name": "Tiny Core Linux", "name": "Tiny Core Linux",
"category": "guest", "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_name": "Team Tiny Core",
"vendor_url": "http://distro.ibiblio.org/tinycorelinux", "vendor_url": "http://distro.ibiblio.org/tinycorelinux",
"documentation_url": "http://wiki.tinycorelinux.net/", "documentation_url": "http://wiki.tinycorelinux.net/",
@ -25,6 +25,14 @@
"options": "-vga std -usbdevice tablet" "options": "-vga std -usbdevice tablet"
}, },
"images": [ "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", "filename": "linux-tinycore-11.1.qcow2",
"version": "11.1", "version": "11.1",
@ -51,6 +59,12 @@
} }
], ],
"versions": [ "versions": [
{
"name": "17.0",
"images": {
"hda_disk_image": "linux-tinycore-17.0.qcow2"
}
},
{ {
"name": "11.1", "name": "11.1",
"images": { "images": {

View File

@ -14,7 +14,7 @@
"symbol": "linux_guest.svg", "symbol": "linux_guest.svg",
"docker": { "docker": {
"adapters": 1, "adapters": 1,
"image": "gns3/ubuntu:noble", "image": "gns3/ubuntu:resolute",
"console_type": "telnet" "console_type": "telnet"
} }
} }

View File

@ -9,27 +9,82 @@
"documentation_url": "https://docs.vyos.io/", "documentation_url": "https://docs.vyos.io/",
"product_name": "VyOS Universal Router", "product_name": "VyOS Universal Router",
"product_url": "https://vyos.io/vyos-universal-router", "product_url": "https://vyos.io/vyos-universal-router",
"registry_version": 4, "registry_version": 8,
"status": "stable", "status": "stable",
"availability": "service-contract", "availability": "service-contract",
"maintainer": "VyOS Inc.", "maintainer": "VyOS Inc.",
"maintainer_email": "support@vyos.io", "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", "symbol": "vyos.svg",
"port_name_format": "eth{0}", "settings": [
"qemu": { {
"adapter_type": "virtio-net-pci", "name": "default x86_64",
"adapters": 10, "default": true,
"ram": 2048, "template_type": "qemu",
"cpus": 4, "template_properties": {
"hda_disk_interface": "virtio", "adapter_type": "virtio-net-pci",
"arch": "x86_64", "adapters": 10,
"console_type": "telnet", "port_name_format": "eth{0}",
"boot_priority": "c", "ram": 2048,
"kvm": "require", "cpus": 4,
"on_close": "shutdown_signal" "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": [ "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", "filename": "vyos-1.4.0-kvm-amd64.qcow2",
"version": "1.4.0", "version": "1.4.0",
@ -104,11 +159,42 @@
"filename": "vyos-1.2.5-amd64.qcow2", "filename": "vyos-1.2.5-amd64.qcow2",
"version": "1.2.5", "version": "1.2.5",
"md5sum": "110c22309ec480600446fd2fb4f27a0d", "md5sum": "110c22309ec480600446fd2fb4f27a0d",
"filesize": 411500544 , "filesize": 411500544,
"download_url": "https://support.vyos.io/" "download_url": "https://support.vyos.io/"
} }
], ],
"versions": [ "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", "name": "1.4.0",
"images": { "images": {

View File

@ -0,0 +1,86 @@
{
"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 Westermos robust hardware provides the worlds 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.29.0.disk",
"version": "5.29.0",
"filesize": 81788928,
"md5sum": "f464de7b2b424f4a8ad7c650108fee3d",
"direct_download_url": "https://dropzone.westermo.com/file.aspx?id=52655074-0fab-4119-ba01-b68200a733ab"
},
{
"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.29.0",
"images": {
"hda_disk_image": "WeOS-zero-5.29.0.disk",
"hdb_disk_image": "Config-zero-1.0.0.disk"
}
},
{
"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"
}
}
]
}

View File

@ -30,19 +30,11 @@
}, },
"images": [ "images": [
{ {
"filename": "WinDev2308Eval-disk1.vmdk", "filename": "WinDev2407Eval-disk1.vmdk",
"version": "2308", "version": "2407",
"md5sum": "6a9b4ed6d7481f7bbf8a054c797b1eee", "md5sum": "66e7233c7922ef128c5b7c957d20bcbe",
"filesize": 24945341952, "filesize": 25984826368,
"download_url": "https://download.microsoft.com/download/7/1/3/7135f2ab-8528-49fc-9252-8d5d94c697ef/WinDev2308Eval.VMWare.zip", "download_url": "https://download.microsoft.com/download/e/e/c/eec4775f-f2e8-4476-98b2-ca51502a6429/WinDev2407Eval.VMWare.zip",
"compression": "zip"
},
{
"filename": "WinDev2212Eval-disk1.vmdk",
"version": "2212",
"md5sum": "c79f393a067b92e01a513a118d455ac8",
"filesize": 24620493824,
"download_url": "https://aka.ms/windev_VM_vmware",
"compression": "zip" "compression": "zip"
}, },
{ {
@ -57,17 +49,10 @@
], ],
"versions": [ "versions": [
{ {
"name": "2308", "name": "2407",
"images": { "images": {
"bios_image": "OVMF-edk2-stable202305.fd", "bios_image": "OVMF-edk2-stable202305.fd",
"hda_disk_image": "WinDev2308Eval-disk1.vmdk" "hda_disk_image": "WinDev2407Eval-disk1.vmdk"
}
},
{
"name": "2212",
"images": {
"bios_image": "OVMF-edk2-stable202305.fd",
"hda_disk_image": "WinDev2212Eval-disk1.vmdk"
} }
} }
] ]

View File

@ -312,8 +312,10 @@ class BaseNode:
Stop the node process. Stop the node process.
""" """
await self.stop_wrap_console() try:
self.status = "stopped" await self.stop_wrap_console()
finally:
self.status = "stopped"
def suspend(self): def suspend(self):
""" """

View File

@ -311,7 +311,7 @@ class Cloud(BaseNode):
if not port_info["interface"] in network_interfaces: if not port_info["interface"] in network_interfaces:
raise NodeError("Interface '{}' could not be found on this system, please update '{}'".format(port_info["interface"], self.name)) raise NodeError("Interface '{}' could not be found on this system, please update '{}'".format(port_info["interface"], self.name))
if sys.platform.startswith("linux"): if sys.platform.startswith("linux") or sys.platform.startswith("openbsd"):
await self._add_linux_ethernet(port_info, bridge_name) await self._add_linux_ethernet(port_info, bridge_name)
elif sys.platform.startswith("darwin"): elif sys.platform.startswith("darwin"):
await self._add_osx_ethernet(port_info, bridge_name) await self._add_osx_ethernet(port_info, bridge_name)

View File

@ -33,15 +33,15 @@ from gns3server.config import Config
from gns3server.utils.asyncio import locking from gns3server.utils.asyncio import locking
from gns3server.compute.base_manager import BaseManager from gns3server.compute.base_manager import BaseManager
from gns3server.compute.docker.docker_vm import DockerVM from gns3server.compute.docker.docker_vm import DockerVM
from gns3server.compute.docker.docker_error import DockerError, DockerHttp304Error, DockerHttp404Error from gns3server.compute.docker.docker_error import DockerError, DockerHttp304Error, DockerHttp404Error, DockerHttp409Error
log = logging.getLogger(__name__) log = logging.getLogger(__name__)
# Be careful to keep it consistent # Be careful to keep it consistent
DOCKER_MINIMUM_API_VERSION = "1.25" DOCKER_MINIMUM_API_VERSION = "1.40"
DOCKER_MINIMUM_VERSION = "1.13" DOCKER_MINIMUM_VERSION = "19.03.8"
DOCKER_PREFERRED_API_VERSION = "1.30" DOCKER_PREFERRED_API_VERSION = "1.44"
CHUNK_SIZE = 1024 * 8 # 8KB CHUNK_SIZE = 1024 * 8 # 8KB
@ -79,8 +79,10 @@ class Docker(BaseManager):
stderr=asyncio.subprocess.DEVNULL stderr=asyncio.subprocess.DEVNULL
) )
stdout, _ = await proc.communicate() 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 # 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}'") log.info(f"Installing busybox from '{busybox_path}' to '{dst_busybox}'")
shutil.copy2(busybox_path, dst_busybox, follow_symlinks=True) shutil.copy2(busybox_path, dst_busybox, follow_symlinks=True)
return return
@ -123,22 +125,30 @@ class Docker(BaseManager):
if not self._connected: if not self._connected:
try: try:
self._connected = True self._connected = True
connector = self.connector() self._connector = self.connector()
version = await self.query("GET", "version") docker_info = await self.query("GET", "version")
except (aiohttp.ClientOSError, FileNotFoundError): except (aiohttp.ClientOSError, FileNotFoundError):
self._connected = False 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): if api_version < parse_version(DOCKER_MINIMUM_API_VERSION):
raise DockerError( raise DockerError("Docker version is {}. GNS3 requires a minimum version of {}".format(
"Docker version is {}. GNS3 requires a minimum version of {}".format( version,
version["Version"], DOCKER_MINIMUM_VERSION)) DOCKER_MINIMUM_VERSION)
)
preferred_api_version = parse_version(DOCKER_PREFERRED_API_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 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): def connector(self):
@ -173,11 +183,10 @@ class Docker(BaseManager):
response = await self.http_query(method, path, data=data, params=params) response = await self.http_query(method, path, data=data, params=params)
body = await response.read() body = await response.read()
response.close() response.close()
if body and len(body): if response.headers.get('CONTENT-TYPE') == 'application/json':
if response.headers.get('CONTENT-TYPE') == 'application/json': body = json.loads(body.decode("utf-8", errors="ignore"))
body = json.loads(body.decode("utf-8")) else:
else: body = body.decode("utf-8", errors="ignore")
body = body.decode("utf-8")
log.debug("Query Docker %s %s params=%s data=%s Response: %s", method, path, params, data, body) log.debug("Query Docker %s %s params=%s data=%s Response: %s", method, path, params, data, body)
return body return body
@ -187,7 +196,7 @@ class Docker(BaseManager):
:param method: HTTP method :param method: HTTP method
:param path: Endpoint in API :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 params: Parameters added as a query arg
:param timeout: Timeout :param timeout: Timeout
:returns: HTTP response :returns: HTTP response
@ -198,12 +207,11 @@ class Docker(BaseManager):
timeout = 60 * 60 * 24 * 31 # One month timeout timeout = 60 * 60 * 24 * 31 # One month timeout
if path == 'version': if path == 'version':
url = "http://docker/v1.24/" + path url = "http://docker/" + path
else: 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: try:
if path != "version": # version is use by check connection
await self._check_connection()
if self._session is None or self._session.closed: if self._session is None or self._session.closed:
connector = self.connector() connector = self.connector()
self._session = aiohttp.ClientSession(connector=connector) self._session = aiohttp.ClientSession(connector=connector)
@ -228,6 +236,8 @@ class Docker(BaseManager):
raise DockerHttp304Error("Docker has returned an error: {} {}".format(response.status, body)) raise DockerHttp304Error("Docker has returned an error: {} {}".format(response.status, body))
elif response.status == 404: elif response.status == 404:
raise DockerHttp404Error("Docker has returned an error: {} {}".format(response.status, body)) raise DockerHttp404Error("Docker has returned an error: {} {}".format(response.status, body))
elif response.status == 409:
raise DockerHttp409Error("Docker has returned an error: {} {}".format(response.status, body))
else: else:
raise DockerError("Docker has returned an error: {} {}".format(response.status, body)) raise DockerError("Docker has returned an error: {} {}".format(response.status, body))
return response return response
@ -261,21 +271,21 @@ class Docker(BaseManager):
pass pass
if progress_callback: if progress_callback:
progress_callback("Pulling '{}' from docker hub".format(image)) progress_callback("Pulling '{}' from Docker repository".format(image))
try: try:
response = await self.http_query("POST", "images/create", params={"fromImage": image}, timeout=None) response = await self.http_query("POST", "images/create", params={"fromImage": image}, timeout=None)
except DockerError as e: 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 # The pull api will stream status via an HTTP JSON stream
content = "" content = ""
while True: while True:
try: try:
chunk = await response.content.read(CHUNK_SIZE) chunk = await response.content.read(CHUNK_SIZE)
except aiohttp.ServerDisconnectedError: 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 break
except asyncio.TimeoutError: 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 break
if not chunk: if not chunk:
break break

View File

@ -32,3 +32,7 @@ class DockerHttp304Error(DockerError):
class DockerHttp404Error(DockerError): class DockerHttp404Error(DockerError):
pass pass
class DockerHttp409Error(DockerError):
pass

View File

@ -43,7 +43,8 @@ from ..nios.nio_udp import NIOUDP
from .docker_error import ( from .docker_error import (
DockerError, DockerError,
DockerHttp304Error, DockerHttp304Error,
DockerHttp404Error DockerHttp404Error,
DockerHttp409Error
) )
import logging import logging
@ -153,6 +154,14 @@ class DockerVM(BaseNode):
def ethernet_adapters(self): def ethernet_adapters(self):
return self._ethernet_adapters return self._ethernet_adapters
@property
def docker_name(self):
"""
Container name in Docker
"""
return "GNS3.{}.{}".format(self.name, self._project.id)
@property @property
def mac_address(self): def mac_address(self):
""" """
@ -365,7 +374,7 @@ class DockerVM(BaseNode):
try: try:
image_infos = await self._get_image_information() image_infos = await self._get_image_information()
except DockerHttp404Error: 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) await self.pull_image(self._image)
image_infos = await self._get_image_information() image_infos = await self._get_image_information()
@ -451,9 +460,31 @@ class DockerVM(BaseNode):
if extra_hosts: if extra_hosts:
params["Env"].append("GNS3_EXTRA_HOSTS={}".format(extra_hosts)) params["Env"].append("GNS3_EXTRA_HOSTS={}".format(extra_hosts))
result = await self.manager.query("POST", "containers/create", data=params) try:
self._cid = result['Id'] # Supported names in Docker: [a-zA-Z0-9][a-zA-Z0-9_.-]
log.info("Docker container '{name}' [{id}] created".format(name=self._name, id=self._id)) result = await self.manager.query("POST", f"containers/create?name={self.docker_name}", data=params)
except DockerHttp409Error:
# Container name already exists. This can happen when the server crashes
# and leaves containers behind. Try to remove the conflicting container.
log.warning(f"Container name '{self.docker_name}' is already in use, attempting to clean up the stale container...")
try:
# Try to get and remove the conflicting container
try:
container_info = await self.manager.query("GET", f"containers/{self.docker_name}/json")
container_id = container_info["Id"]
# Force remove the container
await self.manager.query("DELETE", f"containers/{container_id}", params={"force": 1, "v": 1})
log.info(f"Removed stale container '{self.docker_name}' ({container_id})")
except DockerHttp404Error:
# Container doesn't exist anymore, race condition - just continue
pass
# Retry creating the container
result = await self.manager.query("POST", f"containers/create?name={self.docker_name}", data=params)
except DockerError as e:
log.error(f"Failed to clean up conflicting container '{self.docker_name}': {e}")
raise
self._cid = result["Id"]
log.info(f"Docker container '{self._name}' [{self._id}] created")
return True return True
def _format_env(self, variables, env): def _format_env(self, variables, env):
@ -522,6 +553,7 @@ class DockerVM(BaseNode):
await self._clean_servers() await self._clean_servers()
await self.manager.query("POST", "containers/{}/start".format(self._cid)) 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() self._namespace = await self._get_namespace()
await self._start_ubridge(require_privileged_access=True) await self._start_ubridge(require_privileged_access=True)
@ -837,7 +869,7 @@ class DockerVM(BaseNode):
await self._fix_permissions() await self._fix_permissions()
state = await self._get_container_state() state = await self._get_container_state()
if state != "stopped" or state != "exited": if state != "stopped" and state != "exited":
# t=5 number of seconds to wait before killing the container # t=5 number of seconds to wait before killing the container
try: try:
await self.manager.query("POST", "containers/{}/stop".format(self._cid), params={"t": 5}) await self.manager.query("POST", "containers/{}/stop".format(self._cid), params={"t": 5})

View File

@ -3,7 +3,12 @@
# script for udhcpc # script for udhcpc
# Copyright (c) 2008 Natanael Copa <natanael.copa@gmail.com> # 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" UDHCPC_CONF="$UDHCPC/udhcpc.conf"
RESOLV_CONF="/etc/resolv.conf" RESOLV_CONF="/etc/resolv.conf"

View File

@ -87,11 +87,11 @@ class IOUVM(BaseNode):
self._serial_adapters = [] self._serial_adapters = []
self.ethernet_adapters = 2 # one adapter = 4 interfaces self.ethernet_adapters = 2 # one adapter = 4 interfaces
self.serial_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._use_default_iou_values = False # for RAM & NVRAM values
self._nvram = 128 # Kilobytes self._nvram = 256 # Kilobytes
self._startup_config = "" self._startup_config = ""
self._private_config = "" self._private_config = ""
self._ram = 256 # Megabytes self._ram = 1024 # Megabytes
self._application_id = application_id self._application_id = application_id
self._l1_keepalives = False # used to overcome the always-up Ethernet interfaces (not supported by all IOSes). 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, raise IOUError("The following shared library dependencies cannot be found for IOU image {}: {}".format(self._path,
", ".join(missing_libs))) ", ".join(missing_libs)))
async def _check_iou_licence(self): def _is_iou_license_check_enabled(self):
""" """
Checks for a valid IOU key in the iourc file (paranoid mode). Returns if IOU license check is enabled.
:return: boolean
""" """
# license check is sent by the controller # license check is sent by the controller
if self.license_check is False: if self.license_check is False:
return return False
try: try:
# we allow license check to be disabled server wide # we allow license check to be disabled server wide
@ -407,7 +409,14 @@ class IOUVM(BaseNode):
if server_wide_license_check is False: if server_wide_license_check is False:
log.warning("License check is explicitly disabled on this server") log.warning("License check is explicitly disabled on this server")
return return False
return True
async def _check_iou_license(self):
"""
Checks for a valid IOU key in the iourc file (paranoid mode).
"""
config = configparser.ConfigParser() config = configparser.ConfigParser()
try: try:
@ -511,15 +520,16 @@ class IOUVM(BaseNode):
except OSError as e: except OSError as e:
raise IOUError("Could not rename nvram files: {}".format(e)) raise IOUError("Could not rename nvram files: {}".format(e))
iourc_path = self.iourc_path iourc_path = None
if not iourc_path: if self._is_iou_license_check_enabled():
raise IOUError("Could not find an iourc file (IOU license), please configure an IOU license") iourc_path = self.iourc_path
if not os.path.isfile(iourc_path): if not iourc_path:
raise IOUError("The iourc path '{}' is not a regular file".format(iourc_path)) raise IOUError("Could not find an iourc file (IOU license), please configure an IOU license")
if not os.path.isfile(iourc_path):
raise IOUError("The iourc path '{}' is not a regular file".format(iourc_path))
await self._check_iou_license()
await self._check_iou_licence()
await self._start_ubridge() await self._start_ubridge()
self._create_netmap_config() self._create_netmap_config()
if self.use_default_iou_values: if self.use_default_iou_values:
# make sure we have the default nvram amount to correctly push the configs # make sure we have the default nvram amount to correctly push the configs
@ -531,7 +541,7 @@ class IOUVM(BaseNode):
self._nvram_watcher = FileWatcher(self._nvram_file(), self._nvram_changed, delay=2) self._nvram_watcher = FileWatcher(self._nvram_file(), self._nvram_changed, delay=2)
# created a environment variable pointing to the iourc file. # created an environment variable pointing to the iourc file.
env = os.environ.copy() env = os.environ.copy()
if "IOURC" not in os.environ and iourc_path: if "IOURC" not in os.environ and iourc_path:
env["IOURC"] = iourc_path env["IOURC"] = iourc_path
@ -568,7 +578,7 @@ class IOUVM(BaseNode):
callback = functools.partial(self._termination_callback, "IOU") callback = functools.partial(self._termination_callback, "IOU")
gns3server.utils.asyncio.monitor_process(self._iou_process, callback) gns3server.utils.asyncio.monitor_process(self._iou_process, callback)
except FileNotFoundError as e: 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: except (OSError, subprocess.SubprocessError) as e:
iou_stdout = self.read_iou_stdout() iou_stdout = self.read_iou_stdout()
log.error("Could not start IOU {}: {}\n{}".format(self._path, e, iou_stdout)) log.error("Could not start IOU {}: {}\n{}".format(self._path, e, iou_stdout))

View File

@ -33,7 +33,9 @@ import gns3server
import subprocess import subprocess
import time import time
import json import json
import psutil
from pathlib import Path
from gns3server.utils import parse_version, shlex_quote from gns3server.utils import parse_version, shlex_quote
from gns3server.utils.asyncio import subprocess_check_output, cancellable_wait_run_in_executor from gns3server.utils.asyncio import subprocess_check_output, cancellable_wait_run_in_executor
from .qemu_error import QemuError from .qemu_error import QemuError
@ -224,7 +226,7 @@ class QemuVM(BaseNode):
if qemu_bin == "qemu": if qemu_bin == "qemu":
self._platform = "i386" self._platform = "i386"
else: 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: if self._platform.split(".")[0] not in QEMU_PLATFORMS:
raise QemuError("Platform {} is unknown".format(self._platform)) 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, log.info('QEMU VM "{name}" [{id}] has set the QEMU path to {qemu_path}'.format(name=self._name,
@ -1166,6 +1168,21 @@ class QemuVM(BaseNode):
except OSError as e: except OSError as e:
raise QemuError("Could not start Telnet QEMU console {}\n".format(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): async def _termination_callback(self, returncode):
""" """
Called when the process has stopped. Called when the process has stopped.
@ -1178,7 +1195,17 @@ class QemuVM(BaseNode):
await self.stop() await self.stop()
# A return code of 1 seem fine on Windows # A return code of 1 seem fine on Windows
if returncode != 0 and (not sys.platform.startswith("win") or returncode != 1): 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): async def stop(self):
""" """
@ -2029,20 +2056,59 @@ class QemuVM(BaseNode):
else: else:
raise QemuError("bios image '{}' is not accessible".format(self._bios_image)) raise QemuError("bios image '{}' is not accessible".format(self._bios_image))
options.extend(["-bios", self._bios_image.replace(",", ",,")]) options.extend(["-bios", self._bios_image.replace(",", ",,")])
elif self._uefi: elif self._uefi:
# get the OVMF firmware from the images directory ovmf_firmware_dir = self._manager.config.get_section_config("Qemu").get("ovmf_firmware_dir", "/usr/share/OVMF")
ovmf_firmware_path = self.manager.get_abs_image_path("OVMF_CODE.fd") system_ovmf_firmware_dir = Path(ovmf_firmware_dir)
log.info("Using OVMF firmware directory: {}".format(system_ovmf_firmware_dir))
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:
# Use a manual case-insensitive search instead
try:
system_ovmf_firmware_path = next((f for f in system_ovmf_firmware_dir.glob("*.fd")
if f.name.lower() == "ovmf_code_4m.fd"), None)
except (FileNotFoundError, StopIteration):
system_ovmf_firmware_path = None
if system_ovmf_firmware_path:
ovmf_firmware_path = str(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)) 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)]) options.extend(["-drive", "if=pflash,format=raw,readonly,file={}".format(ovmf_firmware_path)])
# try to use the UEFI variables store from the system first
try:
system_ovmf_vars_path = next((f for f in system_ovmf_firmware_dir.glob("*.fd")
if f.name.lower() == "ovmf_vars_4m.fd"), None)
except (FileNotFoundError, StopIteration):
system_ovmf_vars_path = None
if system_ovmf_vars_path:
ovmf_vars_path = str(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) # 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 os.path.exists(old_ovmf_vars_path):
if not os.path.exists(ovmf_vars_node_path): ovmf_vars_node_path = old_ovmf_vars_path
try: else:
shutil.copyfile(self.manager.get_abs_image_path("OVMF_VARS.fd"), ovmf_vars_node_path) ovmf_vars_node_path = os.path.join(self.working_dir, "OVMF_VARS_4M.fd")
except OSError as e: if not os.path.exists(ovmf_vars_node_path):
raise QemuError("Cannot copy OVMF_VARS.fd file to the node working directory: {}".format(e)) 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)]) options.extend(["-drive", "if=pflash,format=raw,file={}".format(ovmf_vars_node_path)])
# edk2 firmware requires a Random Number Generator (RNG) device in order to turn network adapters on
options.extend(["-object", "rng-random,filename=/dev/urandom,id=rng0"])
options.extend(["-device", "virtio-rng-pci,rng=rng0"])
return options return options
def _linux_boot_options(self): def _linux_boot_options(self):
@ -2141,14 +2207,31 @@ class QemuVM(BaseNode):
patched_qemu = True patched_qemu = True
# Each 32 PCI device we need to add a PCI bridge with max 9 bridges # 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 = math.floor(pci_devices / 32)
pci_bridges_created = 0 pci_bridges_created = 0
if pci_bridges >= 1: if pci_bridges >= 1:
if self._qemu_version and parse_version(self._qemu_version) < parse_version("2.4.0"): 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") 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): for adapter_number, adapter in enumerate(self._ethernet_adapters):
mac = int_to_macaddress(macaddress_to_int(self._mac_address) + adapter_number) mac = int_to_macaddress(macaddress_to_int(self._mac_address) + adapter_number)
@ -2397,7 +2480,6 @@ class QemuVM(BaseNode):
elif sys.platform.startswith("win") or sys.platform.startswith("darwin"): elif sys.platform.startswith("win") or sys.platform.startswith("darwin"):
command.extend(["-enable-hax"]) command.extend(["-enable-hax"])
command.extend(["-boot", "order={}".format(self._boot_priority)]) command.extend(["-boot", "order={}".format(self._boot_priority)])
command.extend(self._bios_option())
command.extend(self._cdrom_option()) command.extend(self._cdrom_option())
command.extend((await self._disk_options())) command.extend((await self._disk_options()))
command.extend(self._linux_boot_options()) command.extend(self._linux_boot_options())
@ -2415,6 +2497,8 @@ class QemuVM(BaseNode):
raise QemuError("Console type {} is unknown".format(self._console_type)) raise QemuError("Console type {} is unknown".format(self._console_type))
command.extend(self._monitor_options()) command.extend(self._monitor_options())
command.extend((await self._network_options())) command.extend((await self._network_options()))
# bios options must be last to have predictable NIC numbering, see https://github.com/GNS3/gns3-server/issues/2838
command.extend(self._bios_option())
if self.on_close != "save_vm_state": if self.on_close != "save_vm_state":
await self._clear_save_vm_stated() await self._clear_save_vm_stated()
else: else:

View File

@ -218,28 +218,45 @@ class VirtualBoxVM(BaseNode):
""" """
Fix the VM uuid in the case of linked clone Fix the VM uuid in the case of linked clone
""" """
if os.path.exists(self._linked_vbox_file()):
try:
tree = ET.parse(self._linked_vbox_file())
except ET.ParseError:
raise VirtualBoxError("Cannot modify VirtualBox linked nodes file. "
"File {} is corrupted.".format(self._linked_vbox_file()))
except OSError as e:
raise VirtualBoxError("Cannot modify VirtualBox linked nodes file '{}': {}".format(self._linked_vbox_file(), e))
machine = tree.getroot().find("{http://www.virtualbox.org/}Machine") linked_vbox_file = self._linked_vbox_file()
if machine is not None and machine.get("uuid") != "{" + self.id + "}": if not os.path.exists(linked_vbox_file):
raise VirtualBoxError("Cannot find VirtualBox linked node file: {}".format(linked_vbox_file))
for image in tree.getroot().findall("{http://www.virtualbox.org/}Image"): try:
currentSnapshot = machine.get("currentSnapshot") tree = ET.parse(linked_vbox_file)
if currentSnapshot: except ET.ParseError:
newSnapshot = re.sub(r"\{.*\}", "{" + str(uuid.uuid4()) + "}", currentSnapshot) raise VirtualBoxError("Cannot modify VirtualBox linked node file. "
shutil.move(os.path.join(self.working_dir, self._vmname, "Snapshots", currentSnapshot) + ".vdi", "File {} is corrupted.".format(linked_vbox_file))
os.path.join(self.working_dir, self._vmname, "Snapshots", newSnapshot) + ".vdi") except OSError as e:
image.set("uuid", newSnapshot) raise VirtualBoxError("Cannot modify VirtualBox linked node file '{}': {}".format(linked_vbox_file, e))
machine.set("uuid", "{" + self.id + "}") machine = tree.getroot().find("{http://www.virtualbox.org/}Machine")
tree.write(self._linked_vbox_file()) if machine is not None and machine.get("uuid") != "{" + self.id + "}":
for image in tree.getroot().findall("{http://www.virtualbox.org/}Image"):
currentSnapshot = machine.get("currentSnapshot")
if currentSnapshot:
newSnapshot = re.sub(r"\{.*\}", "{" + str(uuid.uuid4()) + "}", currentSnapshot)
shutil.move(
os.path.join(self.working_dir, self._vmname, "Snapshots", currentSnapshot) + ".vdi",
os.path.join(self.working_dir, self._vmname, "Snapshots", newSnapshot) + ".vdi"
)
log.info("VirtualBox VM '{name}' [{id}] snapshot file moved from '{current}' to '{new}'".format(
name=self.name,
id=self.id,
current=currentSnapshot,
new=newSnapshot,
))
image.set("uuid", newSnapshot)
log.info("VirtualBox VM '{name}' [{id}] '{vbox_file}' has been patched".format(
name=self.name,
id=self.id,
vbox_file=linked_vbox_file,
))
machine.set("uuid", "{" + self.id + "}")
tree.write(linked_vbox_file)
async def check_hw_virtualization(self): async def check_hw_virtualization(self):
""" """
@ -458,7 +475,7 @@ class VirtualBoxVM(BaseNode):
async def save_linked_hdds_info(self): async def save_linked_hdds_info(self):
""" """
Save linked cloned hard disks information. Save linked cloned hard disk information.
:returns: disk table information :returns: disk table information
""" """

View File

@ -13,8 +13,7 @@ logging console discriminator EXCESS
! !
no ip icmp rate-limit unreachable 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 ip cef
no ip cef
no ip domain lookup no ip domain lookup
! !
! !

View File

@ -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 ip cef
no ip cef
no ip domain lookup no ip domain lookup
! !
! !

View File

@ -217,7 +217,7 @@ class Controller:
try: try:
os.makedirs(os.path.dirname(self._config_file), exist_ok=True) os.makedirs(os.path.dirname(self._config_file), exist_ok=True)
with open(self._config_file, 'w+') as f: 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: except OSError as e:
log.error("Cannot write controller configuration file '{}': {}".format(self._config_file, e)) log.error("Cannot write controller configuration file '{}': {}".format(self._config_file, e))
@ -562,7 +562,15 @@ class Controller:
for project in self._projects.values(): for project in self._projects.values():
if project.auto_open: if project.auto_open:
await project.open() try:
await project.open()
except aiohttp.web.HTTPClientError as e:
details = e.text or e.reason or str(e)
log.warning(
"Failed to auto-open project '%s': %s",
project.name,
details,
)
def get_free_project_name(self, base_name): def get_free_project_name(self, base_name):
""" """

View File

@ -18,14 +18,19 @@
import ipaddress import ipaddress
import aiohttp import aiohttp
import asyncio import asyncio
import async_timeout
import socket import socket
import json import json
import uuid import uuid
import sys import sys
import io import io
from operator import itemgetter from operator import itemgetter
if sys.version_info >= (3, 11):
from asyncio import timeout as asynctimeout
else:
from async_timeout import timeout as asynctimeout
from ..utils import parse_version from ..utils import parse_version
from ..utils.asyncio import locking from ..utils.asyncio import locking
from ..controller.controller_error import ControllerError from ..controller.controller_error import ControllerError
@ -483,8 +488,8 @@ class Compute:
""" Returns URL for specific path at Compute""" """ Returns URL for specific path at Compute"""
return self._getUrl(path) return self._getUrl(path)
async def _run_http_query(self, method, path, data=None, timeout=20, raw=False): async def _run_http_query(self, method, path, data=None, timeout=120, raw=False):
async with async_timeout.timeout(delay=timeout): async with asynctimeout(delay=timeout):
url = self._getUrl(path) url = self._getUrl(path)
headers = {} headers = {}
headers['content-type'] = 'application/json' headers['content-type'] = 'application/json'

View File

@ -32,7 +32,16 @@ log = logging.getLogger(__name__)
CHUNK_SIZE = 1024 * 8 # 8KB 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. 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 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 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 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 # 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 # First we process the .gns3 in order to be sure we don't have an error
for file in os.listdir(project._path): for file in os.listdir(project._path):
if file.endswith(".gns3"): 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 # Export the local files
for root, dirs, files in os.walk(project._path, topdown=True, followlinks=False): 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 # save empty directories
for directory in dirs: for directory in dirs:
path = os.path.join(root, directory) 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): if not os.listdir(path):
zstream.write(path, os.path.relpath(path, project._path)) zstream.write(path, os.path.relpath(path, project._path))
except FileNotFoundError as e: except FileNotFoundError as e:
@ -142,7 +164,7 @@ def _is_exportable(path, include_snapshots=False):
""" """
# do not export snapshots by default # 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 return False
# do not export directories of snapshots # do not export directories of snapshots
@ -167,7 +189,16 @@ def _is_exportable(path, include_snapshots=False):
return True 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. Patch a project file (.gns3) to export a project.
The .gns3 file is renamed to project.gns3 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: for compute_id, image_type, image in remote_images:
await _export_remote_images(project, compute_id, image_type, image, zstream, temporary_dir) 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 return images

View File

@ -247,6 +247,7 @@ class VirtualBoxGNS3VM(BaseGNS3VM):
return True return True
return False return False
async def list(self): async def list(self):
""" """
List all VirtualBox VMs List all VirtualBox VMs
@ -267,8 +268,8 @@ class VirtualBoxGNS3VM(BaseGNS3VM):
# get a NAT interface number # get a NAT interface number
nat_interface_number = await self._look_for_interface("nat") nat_interface_number = await self._look_for_interface("nat")
if nat_interface_number < 0: if nat_interface_number < 0 and await self._look_for_interface("natnetwork") < 0:
raise GNS3VMError('VM "{}" must have a NAT interface configured in order to start'.format(self.vmname)) 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"): 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 # VirtualBox 7.0+ on macOS requires a host-only network interface
@ -337,39 +338,68 @@ class VirtualBoxGNS3VM(BaseGNS3VM):
elif vm_state == "paused": elif vm_state == "paused":
args = [self._vmname, "resume"] args = [self._vmname, "resume"]
await self._execute("controlvm", args) 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(): log.info("Retrieving IP address from GNS3 VM...")
# delete the GNS3VM NAT port forwarding rule if it exists ip = await self._get_ip_from_guest_property()
log.info("Removing GNS3VM NAT port forwarding rule from interface {}".format(nat_interface_number)) if ip:
await self._execute("controlvm", [self._vmname, "natpf{}".format(nat_interface_number), "delete", "GNS3VM"]) 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 if await self._check_vbox_port_forwarding():
log.info("Adding GNS3VM NAT port forwarding rule with port {} to interface {}".format(api_port, nat_interface_number)) # delete the GNS3VM NAT port forwarding rule if it exists
await self._execute("controlvm", [self._vmname, "natpf{}".format(nat_interface_number), log.info("Removing GNS3VM NAT port forwarding rule from interface {}".format(nat_interface_number))
"GNS3VM,tcp,{},{},,{}".format(ip_address, api_port, self.port)]) await self._execute("controlvm", [self._vmname, "natpf{}".format(nat_interface_number), "delete", "GNS3VM"])
self.ip_address = await self._get_ip(interface_number, api_port) # add a GNS3VM NAT port forwarding rule to redirect 127.0.0.1 with random port to the port in the VM
log.info("GNS3 VM has been started with IP {}".format(self.ip_address)) 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 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 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 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. 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: while remaining_try > 0:
async with aiohttp.ClientSession() as session: async with aiohttp.ClientSession() as session:
try: try:

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, async def import_project(
auto_start=False, auto_open=False, auto_close=True): 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 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 stream: A io.BytesIO of the zipfile
:param location: Directory for the project if None put in the default directory :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 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 keep_compute_ids: keep compute IDs unchanged
:param project_name: Original project name when restoring a snapshot
:returns: Project :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) # We import the project on top of an existing project (snapshots)
if topology["project_id"] == project_id: if topology["project_id"] == project_id:
project_name = topology["name"] project_name = topology["name"]
restoring_snapshot = True
else: else:
# If the project name is already used we generate a new one # If the project name is already used we generate a new one
if name: if name:
project_name = controller.get_free_project_name(name) project_name = controller.get_free_project_name(name)
else: else:
project_name = controller.get_free_project_name(topology["name"]) project_name = controller.get_free_project_name(topology["name"])
restoring_snapshot = False
except (ValueError, KeyError): except (ValueError, KeyError):
raise aiohttp.web.HTTPConflict(text="Cannot import project, the project.gns3 file is corrupted") 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_open"] = auto_open
topology["auto_close"] = auto_close topology["auto_close"] = auto_close
# Generate a new node id if not restoring_snapshot:
node_old_to_new = {} # Do not re-generate IDs if we are restoring a snapshot because they should be the same in a project
for node in topology["topology"]["nodes"]: regenerate_topology_ids(topology, path, reset_mac_addresses=reset_mac_addresses)
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())
# Update link to use new id # Modify the compute id of the node depending on compute capacity
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
if not keep_compute_ids: if not keep_compute_ids:
# For some VM type we move them to the GNS3 VM if possible # For some VM type we move them to the GNS3 VM if possible
# unless it's a linux host without GNS3 VM # 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" node["compute_id"] = "vm"
else: else:
# Round-robin through available compute resources. # 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) compute_nodes = itertools.cycle(controller.computes)
for node in topology["topology"]["nodes"]: for node in topology["topology"]["nodes"]:
node["compute_id"] = next(compute_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 # We change the project_id to avoid erasing the project
topology["project_id"] = project_id topology["project_id"] = project_id
with open(dot_gns3_path, "w+") as f: 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")) os.remove(os.path.join(path, "project.gns3"))
images_path = os.path.join(path, "images") images_path = os.path.join(path, "images")
@ -170,30 +160,93 @@ async def import_project(controller, project_id, stream, location=None, name=Non
await _import_images(controller, images_path) await _import_images(controller, images_path)
snapshots_path = os.path.join(path, "snapshots") snapshots_path = os.path.join(path, "snapshots")
if os.path.exists(snapshots_path): if not restoring_snapshot and os.path.exists(snapshots_path):
await _import_snapshots(snapshots_path, project_name, project_id) 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) project = await controller.load_project(dot_gns3_path, load=False)
return project return project
def _create_symbolic_links(zip_file, path): def _create_symbolic_links(zip_file, path):
""" """
Manually create symbolic links (if any) because ZipFile does not support it. Manually create symbolic links (if any) because ZipFile does not support it.
Refuse any target that escapes `path`.
:param zip_file: ZipFile instance :param zip_file: ZipFile instance
:param path: project location :param path: project location
""" """
path_root = os.path.realpath(path) + os.sep
for zip_info in zip_file.infolist(): for zip_info in zip_file.infolist():
if stat.S_ISLNK(zip_info.external_attr >> 16): if not stat.S_ISLNK(zip_info.external_attr >> 16):
symlink_target = zip_file.read(zip_info.filename).decode() continue
symlink_path = os.path.join(path, zip_info.filename) symlink_target = zip_file.read(zip_info.filename).decode()
try: symlink_path = os.path.join(path, zip_info.filename)
# remove the regular file and replace it by a symbolic link
os.remove(symlink_path) # 1. Reject absolute targets outright.
os.symlink(symlink_target, symlink_path) if os.path.isabs(symlink_target):
except OSError as e: raise aiohttp.web.HTTPConflict(
raise aiohttp.web.HTTPConflict(text=f"Cannot create symbolic link: {e}") text=f"Symlink {zip_info.filename!r} has absolute target {symlink_target!r}, refusing"
)
# 2. Reject paths where the entry name itself escapes (defence in depth;
# extractall normally would already have caught this).
member_abs = os.path.realpath(symlink_path)
if not (member_abs + os.sep).startswith(path_root) and member_abs + os.sep != path_root:
raise aiohttp.web.HTTPConflict(
text=f"Symlink entry {zip_info.filename!r} escapes project dir, refusing"
)
# 3. Resolve the symlink target relative to the entry's own parent
# directory and verify the resolved real path stays inside `path`.
link_dir = os.path.realpath(os.path.dirname(symlink_path))
resolved_target = os.path.realpath(os.path.join(link_dir, symlink_target))
if not (resolved_target + os.sep).startswith(path_root) and resolved_target + os.sep != path_root:
raise aiohttp.web.HTTPConflict(
text=f"Symlink {zip_info.filename!r} -> {symlink_target!r} escapes project dir, refusing"
)
try:
os.remove(symlink_path)
os.symlink(symlink_target, symlink_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): def _move_node_file(path, old_id, new_id):
""" """
@ -246,7 +299,7 @@ async def _upload_file(compute, project_id, file_path, path):
async def _import_images(controller, images_path): async def _import_images(controller, images_path):
""" """
Copy images to the images directory or delete them if they already exists. Copy images to the images directory or delete them if they already exist.
""" """
image_dir = controller.images_path() image_dir = controller.images_path()
@ -254,23 +307,31 @@ async def _import_images(controller, images_path):
for (dirpath, dirnames, filenames) in os.walk(root, followlinks=False): for (dirpath, dirnames, filenames) in os.walk(root, followlinks=False):
for filename in filenames: for filename in filenames:
path = os.path.join(dirpath, filename) path = os.path.join(dirpath, filename)
if os.path.islink(path):
continue
dst = os.path.join(image_dir, os.path.relpath(path, root)) dst = os.path.join(image_dir, os.path.relpath(path, root))
os.makedirs(os.path.dirname(dst), exist_ok=True) os.makedirs(os.path.dirname(dst), exist_ok=True)
await wait_run_in_executor(shutil.move, path, dst) if not os.path.exists(dst):
await wait_run_in_executor(shutil.move, path, dst)
try:
with open(dst, "rb") as f:
# read the first 7 bytes of the file.
elf_header_start = f.read(7)
# IOU images must start with the ELF magic number, be 32-bit or 64-bit, little endian and have an ELF version of 1
if elf_header_start == b'\x7fELF\x01\x01\x01' or elf_header_start == b'\x7fELF\x02\x01\x01':
os.chmod(dst, stat.S_IWRITE | stat.S_IREAD | stat.S_IEXEC)
except OSError as e:
continue
async def update_snapshots(snapshots_dir, project_path, project_name, project_id, reset_mac_addresses=True):
async def _import_snapshots(snapshots_path, project_name, project_id):
""" """
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): for snapshot in os.listdir(snapshots_dir):
if not snapshot.endswith(".gns3project"): if not (snapshot.endswith(".gns3snapshot") or snapshot.endswith(".gns3project")):
continue continue
snapshot_path = os.path.join(snapshots_path, snapshot) snapshot_path = os.path.join(snapshots_dir, snapshot)
with tempfile.TemporaryDirectory(dir=snapshots_path) as tmpdir: with tempfile.TemporaryDirectory(dir=snapshots_dir) as tmpdir:
# extract everything to a temporary directory # extract everything to a temporary directory
try: try:
@ -288,9 +349,9 @@ async def _import_snapshots(snapshots_path, project_name, project_id):
topology_file_path = os.path.join(tmpdir, "project.gns3") topology_file_path = os.path.join(tmpdir, "project.gns3")
with open(topology_file_path, encoding="utf-8") as f: with open(topology_file_path, encoding="utf-8") as f:
topology = json.load(f) topology = json.load(f)
topology["name"] = project_name topology["name"] = project_name
topology["project_id"] = project_id topology["project_id"] = project_id
regenerate_topology_ids(topology, tmpdir, reset_mac_addresses)
with open(topology_file_path, "w+", encoding="utf-8") as f: with open(topology_file_path, "w+", encoding="utf-8") as f:
json.dump(topology, f, indent=4, sort_keys=True) json.dump(topology, f, indent=4, sort_keys=True)
except OSError as e: except OSError as e:
@ -308,5 +369,6 @@ async def _import_snapshots(snapshots_path, project_name, project_id):
async with aiofiles.open(snapshot_path, 'wb+') as f: async with aiofiles.open(snapshot_path, 'wb+') as f:
async for chunk in zstream: async for chunk in zstream:
await f.write(chunk) await f.write(chunk)
log.info("Project '{}': updated and repacked snapshot file '{}'".format(project_name, snapshot))
except OSError as e: except OSError as e:
raise aiohttp.web.HTTPConflict(text="Cannot update snapshot '{}': the snapshot cannot be recreated: {}".format(os.path.basename(snapshot), e)) raise aiohttp.web.HTTPConflict(text="Cannot update snapshot '{}': the snapshot cannot be recreated: {}".format(os.path.basename(snapshot), e))

View File

@ -91,7 +91,7 @@ class Node:
self._first_port_name = None self._first_port_name = None
self._console_auto_start = False self._console_auto_start = False
# This properties will be recompute # This properties will be recomputed
ignore_properties = ("width", "height", "hover_symbol") ignore_properties = ("width", "height", "hover_symbol")
self.properties = kwargs.pop('properties', {}) self.properties = kwargs.pop('properties', {})
@ -382,6 +382,7 @@ class Node:
await self.parse_node_response(response.json) await self.parse_node_response(response.json)
return True return True
trial += 1 trial += 1
return False
async def update(self, **kwargs): async def update(self, **kwargs):
""" """

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 port name format has changed we use the port name as the short name (1.X behavior)
if self._short_name: if self._short_name:
return 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()) 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.short_name_type() + "{}".format(self._interface_number)
return self._name return self._name

Some files were not shown because too many files have changed in this diff Show More